@easydata/crud 1.4.10 → 1.4.12

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://easydataCRUD/webpack/universalModuleDefinition","webpack://easydataCRUD/webpack/bootstrap","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/browser_utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/data_type.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_method.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_request.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_client.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/data_column.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/liquid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/data_row.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/public_api.js","webpack://easydataCRUD/./src/filter/text_data_filter.ts","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/ui-utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/dom_elem_builder.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/mask.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/drag_manager.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_options.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/dialogs/dialog_service.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/calendar.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/date_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_calendar.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_date_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/dialogs/default_dialog_service.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/i18n/text_resources.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/public_api.js","webpack://easydataCRUD/./src/utils/utils.ts","webpack://easydataCRUD/./src/validators/validator.ts","webpack://easydataCRUD/./src/validators/datetime_validator.ts","webpack://easydataCRUD/./src/form/entity_edit_form.ts","webpack://easydataCRUD/./src/widgets/text_filter_widget.ts","webpack://easydataCRUD/./src/form/entity_form_builder.ts","webpack://easydataCRUD/./src/widgets/progress_bar.ts","webpack://easydataCRUD/./src/main/easy_data_server_loader.ts","webpack://easydataCRUD/./src/main/data_context.ts","webpack://easydataCRUD/./src/validators/type_validator.ts","webpack://easydataCRUD/./src/validators/required_validator.ts","webpack://easydataCRUD/./src/views/entity_data_view.ts","webpack://easydataCRUD/./src/views/root_data_view.ts","webpack://easydataCRUD/./src/views/easy_data_view_dispatcher.ts","webpack://easydataCRUD/./src/i18n/text_resources.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","browserUtils","_isFirefox","_isIE","IsIE","ua","navigator","userAgent","indexOf","IsEdge","eval","IsFirefox","toLowerCase","_detectedIsMobileMode","_isMobileMode","undefined","detectIsMobileMode","oldValue","isMobileMode","matchMedia","matches","newValue","mobileModeChangeHandler","setIsMobileMode","onMobileModeChanged","callback","getMobileCssClass","addEventListener","DataType","EntityAttrKind","HttpMethod","EditorTag","HttpRequest","xhr","descriptor","this","method","url","headers","queryParams","data","setHeader","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","headerMap","_i","arr_1","getAllResponseHeaders","trim","split","length","parts","header","shift","join","open","_this","UNSENT","keys","encodeURI","map","param","setRequestHeader","abort","repeatString","str","times","result","combinePath","path1","path2","charAt","i18n","currentLocale","englishUSLocaleSettings","shortDateFormat","longDateFormat","editDateFormat","shortTimeFormat","editTimeFormat","longTimeFormat","shortMonthNames","longMonthNames","shortWeekDayNames","longWeekDayNames","decimalSeparator","currency","defaultLocale","localeId","englishName","displayName","texts","ButtonOK","ButtonCancel","Yes","No","True","False","settings","allLocales","mappers","mapInfo","info","mappers_1","mapper","getCurrentLocale","setCurrentLocale","newLocale","assignDeep","getLocaleSettings","updateLocaleSettings","settingsToUpdate","updateLocaleInfo","localeData","localeInfoToUpdate","loadBrowserLocaleSettings","now","dateStr","timeStr","dateFormat","timeFormat","lang","language","Date","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","second","replace","buildShortDateTimeFormat","dataType","format","localeSettings","Time","buildLongDateTimeFormat","addMapper","push","getLocales","locale","sort","a","b","setLocale","console","warn","getText","args","arguments","textsObj","resText","argLength","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","error","updateDefaultTexts","addLocale","localeInfo","resetLocales","dateTimeToStr","dateTime","DateTime","numberToStr","number","type","toUpperCase","cachedSequenceFormats","values_2","filter","v","values_1","Number","parseInt","forEach","index","values","formatWithSequence","slice","toLocaleString","digits","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","ch","reverse","convertWithMask","Math","trunc","booleanToStr","bool","utils","getAllDataTypes","item","getDateDataTypes","getStringDataTypes","String","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","Array","isArray","createArrayFrom","set","getPrototypeOf","collection","collection_1","assign","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","id","arrLength","idx","findItemIndexById","indexOfArrayItem","arr","len","moveArrayItem","index1","index2","splice","removeArrayItem","insertArrayItem","fillArray","start","end","relativeStart","k","max","min","relativeEnd","final","shiftToFitWindow","absLeft","width","body","document","getElementsByTagName","winWidth","innerWidth","documentElement","clientWidth","absRight","isObject","val","isNumericType","dtype","isIntType","isNumeric","isNaN","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","obj","propName","symbols","squeeze","maxlen","step","nextIndex","replaceAtString","substr","getRandomInt","floor","random","safeParseInt","res","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randValue","maxSymbolIndex","targetBase","buffer","rest","intToNum36","getTime","strToDateTime","normalizedValue","formatItems","dateItems","monthIndex","dayIndex","yearIndex","hourIndex","minutesIndex","secondsIndex","today","getFullYear","getMonth","getDate","getDaysInMonth","_a","strToTime","timeItems","DT_FORMAT_RGEX","date","getHours","getMinutes","getSeconds","hour12","isPm","yyyy","MMMM","MMM","MM","M","dd","HH","H","hh","h","tt","mm","ss","match","$1","extendStatics","ColumnAlignment","HttpActionResult","request","promise","getPromise","getRequest","then","onfulfilled","onrejected","catch","finally","onfinally","__extends","setPrototypeOf","__proto__","__","constructor","__assign","apply","HttpResponseError","_super","status","message","Error","HttpClient","defaultHeaders","customPayload","_responseBody","configurable","options","send","Get","post","Post","put","Put","delete","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","Promise","resolve","reject","responseType","onerror","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","MetaEntity","parent","isEditable","caption","description","attributes","subEntities","loadFromData","model","dto","captionPlural","namePlur","ied","ents","newEntity","createEntity","attrs","newAttr","createEntityAttr","scan","processAttribute","processEntity","opts","stop","internalProcessEntity","entity","attrCount","attr","subEntityCount","getFirstPrimaryAttr","getPrimaryAttrs","isPrimaryKey","MetaEntityAttr","size","isForeignKey","isNullable","showOnView","showOnCreate","showOnEdit","showInLookup","lookupAttr","expr","kind","Data","cptn","ipk","ifk","lattr","lookupEntity","lent","dataAttr","dattr","lookupDataAttr","ldattr","isDataType","defVal","nul","ivis","sov","soc","soe","sil","displayFormat","dfmt","udata","userData","edtr","defaultEditor","getEditorById","createValueEditor","ValueEditor","tag","resType","defValue","defval","rtype","accept","multiline","subType","getValueText","text","_b","_c","substring","MetaData","mainEntity","rootEntity","displayFormats","Map","getMainEntity","loadFromJSON","stringJson","version","vers","editors","newEditor","entroot","dtypeStr","formats","getDisplayFormats","getDisplayFormatsForType","getDefaultFormat","f","isdef","setData","isEmpty","getId","getName","getRootEntity","editorId","editor","getAttributeById","attrId","getEntityAttrById","checkAttrProperty","attribute","listByEntityWithFilter","filterFunc","ent","entIdx","newEnt","items","isEntity","attrIdx","listByEntity","resultEntities","resultAttributes","newOpts","includeRootData","sortCheck","sortEntities","attrPlacement","concat","clear","addDefaultValueEditors","addOrUpdateValueEditor","ve","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","AggregationSettings","colStore","aggregates","groups","useGrandTotals","useRecordCount","_caseSensitiveGroups","COUNT_FIELD_NAME","updateCompareProc","compareValues","strictCompare","caseInsensitiveCompare","addGroup","cols","columns","getColumnIds","from","to","validateColumns","hasColumnsInUse","addAggregateColumn","colIndexOrId","funcId","colId","validateAggregate","addGrandTotals","addCounts","getGroups","grp","getInternalGroups","lastGroup","getAggregates","hasAggregates","hasGroups","hasGrandTotals","hasRecordCount","drop","caseSensitiveGroups","aggr","needAggrCalculation","saveToData","ugt","urc","csg","buildGroupKey","group","row","caseInsensitive","keyVal","getValue","value1","value2","liquid","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","add","colOrDesc","col","updateDateColumnIdx","getItems","count","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","toArray","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","cachedRows","total","loader","needTotal","isInMemory","chunkSize","elasticChunks","inMemory","_columns","onUpdate","colDesc","rows","rowData","createRow","addRow","getRows","params","fromIndex","pageSize","page","offset","limit","endIndex","loadChunk","table","getCachedRows","getCachedCount","fireUpdated","getRow","getTotal","setTotal","dataOrRow","dateIdx","column","mapDate","rowOrValues","newRow","dateIdx_1","cachedTotal","totalIsKnown","EasyGuid","newGuid","EventEmitter","silentMode","events","subscribe","eventType","event","getEventRecByType","eventCallback","eventCallbacks","unsubscribe","callbackId","fire","postpone","force","eventRec","eqevent_1","emitAllFunc","setTimeout","enterSilentMode","exitSilentMode","isSilent","event_1","renderLiquidTemplate","template","vars","liquidVarRegexp","x","NaN","ceil","sourceTable","sourceId","isLookup","filterValue","justServerSide","applyCore","class","filters","lookup","filteredTable","applyInMemoryFilter","words","w","suitableColumns","hasEnterance","normalized","word","getElementAbsolutePos","element","y","position","box","defaultBoundingClientRect","top","right","bottom","left","height","getBoundingClientRect","docElem","scollPos","pageYOffset","scrollTop","pageXOffset","scrollLeft","getScrollPos","clientTop","clientLeft","round","__spreadArrays","il","j","jl","DomElementBuilder","createElement","parentElement","appendChild","addChild","childBuilder","builder","domel","addChildElement","attrValue","setAttribute","focus","title","dataId","dataValue","removeAttribute","show","removeStyle","hide","toHide","setStyle","visible","isVisible","offsetWidth","offsetHeight","getClientRects","addClass","className","classNames","fullList","classList","removeClass","remove","toggleClass","toggle","on","listener","eventTypes","off","removeEventListener","styleId","styleValue","setProperty","removeProperty","innerText","html","innerHTML","oldElem","tagName","replaceWith","addText","textEl","createTextNode","addHtml","toDOM","appendTo","DomTextAreaElementBuilder","DomInputElementBuilder","valueAsDate","valueAsNumber","maskPattern","input","inputHandler","e","mskd","startSelection","selectionStart","el","test","selectionEnd","keyCode","preventDefault","selection","onlyLodash","createEvent","initEvent","dispatchEvent","char","fromCharCode","charCode","mskd_1","selectionStart_1","selection_1","event_2","DomSelectElementBuilder","addOption","option","selected","HTMLDivElement","HTMLSpanElement","HTMLAnchorElement","HTMLButtonElement","HTMLImageElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","DropEffect","touchEventIsDefined","TouchEvent","AutoResizeColumns","EqDragEvent","dragImage","sourceEvent","dropEffect","Allow","pageX","pageY","MouseEvent","touches","Position","ev","eqDragManager","DragManager","delta","draggableItem","finishedSuccessfully","mouseDownPosition","containerDescriptors","containerDescriptorIndex","None","classPrefix","DRAG_DISABLED_ATTR","registerDraggableItem","ondragstart","detectDragging","hasAttribute","stopPropagation","cursorPosition","abs","startDragging","mouseMoveEventListener","mouseMoveDragListener","beforeDragStart","cloneNode","renderer","updateCusror","updateImageClass","scope","updateDragItemPosition","onDragStart","mouseDownListener","mouseUpListener","endDraggind","dropContDesc","container","scopes","onDrop","onDragLeave","onDragEnd","removeChild","registerDropContainer","removeDropContainer","descriptorOrSlot","descs","descs_1","detectDragEnterEvent","dragEnterEvent","detectDragLeaveEvent","dragLeaveEvent","event_3","onDragOver","setCursorStyle","Forbid","cursor","children","pos","event_4","onDragEnter","event_5","containerPos","CellRendererType","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","EasyGrid","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","calculator","paging","enabled","pageSizeItems","autoResize","Always","stringColumns","numberColumns","boolColumns","dateColumns","otherColumns","showPlusButton","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","mergeOptions","processColumnWidthsOptions","eventEmitter","setSlot","init","colWidthOptions","pagingOptions","knownTypes","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onPlusButtonClick","onColumnChanged","onColumnDeleted","onColumnMoved","onPageChanged","onActiveRowChanged","activeRowIndex","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","sum","current","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderHeaderButtons","containerWidth","colBuilder","colDiv","attrLabel","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","rowsToRender","groups_1","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onViewportKeydown","aggrSettings","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","getAggregateData","aggrCols_1","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","firstChild","cellDiv","rowCount","querySelectorAll","ensureRowVisibility","rowOrIndex","getDataRow","rowRect","viewportRect","rowTop","rowBottom","viewportHeight","windowHeight","innerHeight","footerPaginateDiv","renderPageNavigator","pageInfoBlock","renderPageInfoBlock","pageInfoDiv","fistPageRecordNum","lastPageRecordNum","totalStr","getLocalIndexByGlobal","getGlobalIndexByLocal","indexGlobal","rowBuilder","rowIndex","colindex","cellElement","valueCell","setPage","paginateDiv","prefix_1","buttonClickHandler_1","getAttribute","renderPageCell","pageIndex","content","disabled","extreme","active","li","a_1","newA","ul","cell","pageCount","zeroBasedIndex","firstPageIndex","lastPageIndex","allowPageSizeChange","pageSizes","selectSize","sel_1","selOptions","selSet","Set","labelDiv","handler","handlerId","plusButtonTitle","colElems","rowElem","display","landingPos","newLandingIndex","cols_1","colPos","insertBefore","updateActiveRow","activeRow","getActiveRow","visibility","sumWidth","headerCells","headerIdx","_loop_1","this_1","cellValues","maxWidth","whiteSpace","maxOption","minOption","Calendar","yearRange","setDate","currentDate","dateChanged","onDateChanged","DateTimePicker","calendar","timePicker","setDateTime","currentDateTime","setTime","getDateTime","showCalendar","createCalendar","showDateTimeInput","timePickerIsUsed","showTimePicker","oneClickDateSelection","dateTimeChanged","createTimePicker","onTimeChanged","time","setHours","setMinutes","anchor","beforeShow","onApply","cancel","onCancel","onDateTimeChanged","DefaultCalendar","daysOfWeek","months","calendarBody","isManualInputChanging","selectedMonth","selectedYear","rerenderMonth","renderManualDateInput","headerTextElem","renderCalendarButtons","getInputDateFormat","newDate","manualInputElem","jump","updateDisplayedDateValue","prev","selectMonthElem","selectYearElem","next","rerenderSelectYear","exec","minusYear","plusYear","op","firstDay","getDay","daysInMonth","setFullYear","setMonth","dayOfWeek","cellsDrawnInLastRow","cellsToDraw","TimePicker","currentTime","timeChanged","DefaultTimePicker","updateDisplayedTime","hoursInput","minutesInput","timeText","slidersBuilder","timeToDraw","DefaultDateTimePicker","sb","zIndex","renderButtons","globalMouseDownHandler","srcElement","contains","nowButton","submitButton","calendarSlot","timePickerSlot","anchorPos","parentPos","DefaultDialogService","openConfirm","closable","submitable","cancelable","onSubmit","openPrompt","submitOnEnter","arrangeParents","beforeOpen","processInput","dialog","onDestroy","dlg","untrack","track","createSet","DefaultDialogSet","openDialogs","openProgress","getAllDialogs","closeAllDialogs","close","DefaultDialog","submitHandler","token","cancelHandler","keydownHandler","isActiveDialog","dialogId","windowElement","headerElement","alertElement","bodyElement","alignClass","footerAlignment","footerElement","bb","submitButtonText","recaptchaSiteKey","grecaptcha","ready","execute","action","cancelButtonText","getRootElement","getSubmitButtonElement","getCancelButtonElement","windowDiv","querySelector","clearAlert","onInput","onShow","submit","disableButtons","button","enableButtons","showAlert","reason","alert","windowDivs","turnOn","DefaultProgressDialog","contentElement","progressElement","determinated","updateContent","updateProgress","progress","in01","num","dialogService","currentDialog","currentIndex","getCurrent","openNext","openPrev","dlgOptions","GridPageInfo","GridItemsPerPage","ButtonApply","ButtonNow","LblTotal","internalDateFormat","internalTimeFormat","getEditDateTimeFormat","setLocation","path","state","history","pushState","Event","validate","successed","editFormat","messages","Validator","context","validators","getHtml","setHtmlInt","errorsDiv","clearErrors","isValid","getMetaData","validateValue","markInputValid","filePromises","inputs","lastIndexOf","checked","fileToBase64","files","mapValue","all","file","readAsDataURL","onload","useValidator","useValidators","validator","internalFormat","valid","instantMode","instantTimeout","stringDefRenderer","highlightCellRenderer","numDefRenderer","horizClass","isEdgeOrIE","filterInput","inputKeydownHandler","inputKeyupHandler","clearButtonClickHander","searchButtonClickHandler","applyFilter","applyFilterTimeout","clearTimeout","checkChange","defaultRenderer","highlightText","HTMLElement","normalizedContent","indexInMas","lowerWord","highlightSpan","backgroundColor","item1","item2","addDelta","div","isIE","reset","form","setupLookupField","readOnly","inputEl","resolveInputType","lookupTable","chunkParams","getDataLoader","widgetSlot","ds","gridSlot","selectedSlot","selectedValue","updateSelectedValue","fetchRecord","lookupGrid","dataFilter","createFilter","setupDateTimeField","hidden","applySumbit","setSeconds","pickerOptions","setMilliseconds","dtp","setupListField","setupFileField","setupTextField","setupTextArea","addFormField","Lookup","isEditForm","resolveEditor","required","sumbitCallback","build","fb","formHtml","getActiveEntity","resolveEndpoint","startProcess","getHttpClient","resultSet","totalRecords","meta","hasNext","endProcess","endpoints","endpointVarsRegex","http","metaDataId","dataLoader","dataTableOptions","setDefaultEndpoints","endpoint","activeEntity","setActiveSource","entityId","loadMetaData","sourceError","fetchDataset","createRecord","updateRecord","deleteRecord","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","isInteger","basePath","showFilterBox","showBackToEntities","defaultValidators","location","pathname","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBarDiv","filterWidget","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","processed","metaData","renderEntitySelector","entities","decodeURIComponent","onSetLocation","setActiveView","attach","normalizeBasePath","setContainer","progressBarSlot","bar","ProgressBar","trimSlashes","fullPath","toLocaleLowerCase","getActiveSourceId","idIndex","run","detach","RequiredError","NumberError","IntNumberError","DateTimeError","LookupSelectedItem","LookupDlgCaption","NavigationBtnTitle","CalendarBtnTitle","TimerBtnTitle","AddBtnTitle","AddRecordBtnTitle","EditBtn","DeleteBtn","SelectLink","AddDlgCaption","EditDlgCaption","DeleteDlgCaption","DeleteDlgMessage","EntityMenuDesc","BackToEntities","SearchBtn","SearchInputPlaceholder","RootViewTitle","ModelIsEmpty"],"mappings":"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","file":"easydata.crud.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easydataCRUD\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easydataCRUD\"] = factory();\n\telse\n\t\troot[\"easydataCRUD\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","export var browserUtils;\r\n(function (browserUtils) {\r\n var _isFirefox = null;\r\n var _isIE = null;\r\n function IsIE() {\r\n // return eval('/*@cc_on!@*/false || !!document.documentMode');\r\n if (_isIE === null) {\r\n var ua = navigator.userAgent;\r\n /* MSIE used to detect old browsers and Trident used to newer ones*/\r\n _isIE = ua.indexOf(\"MSIE \") > -1 || ua.indexOf(\"Trident/\") > -1;\r\n }\r\n return _isIE;\r\n }\r\n browserUtils.IsIE = IsIE;\r\n function IsEdge() {\r\n return !IsIE() && eval('!!window.StyleMedia');\r\n }\r\n browserUtils.IsEdge = IsEdge;\r\n function IsFirefox() {\r\n if (_isFirefox === null) {\r\n var ua = navigator.userAgent;\r\n _isFirefox = ua.toLowerCase().indexOf('firefox') > -1;\r\n }\r\n return _isFirefox;\r\n }\r\n browserUtils.IsFirefox = IsFirefox;\r\n var _detectedIsMobileMode = false;\r\n var _isMobileMode = undefined;\r\n var detectIsMobileMode = function () {\r\n var oldValue = isMobileMode();\r\n _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches\r\n || window.matchMedia('only screen and (max-height: 420px)').matches;\r\n var newValue = isMobileMode();\r\n if (newValue !== oldValue && mobileModeChangeHandler) {\r\n mobileModeChangeHandler(newValue);\r\n }\r\n };\r\n detectIsMobileMode();\r\n window.addEventListener('resize', function () { return detectIsMobileMode(); });\r\n function isMobileMode() {\r\n if (_isMobileMode !== undefined) {\r\n return _isMobileMode;\r\n }\r\n else {\r\n return _detectedIsMobileMode;\r\n }\r\n }\r\n browserUtils.isMobileMode = isMobileMode;\r\n function setIsMobileMode(value) {\r\n var oldValue = isMobileMode();\r\n _isMobileMode = value;\r\n var newValue = isMobileMode();\r\n if (newValue !== oldValue && mobileModeChangeHandler) {\r\n mobileModeChangeHandler(newValue);\r\n }\r\n }\r\n browserUtils.setIsMobileMode = setIsMobileMode;\r\n var mobileModeChangeHandler;\r\n function onMobileModeChanged(callback) {\r\n mobileModeChangeHandler = callback;\r\n }\r\n browserUtils.onMobileModeChanged = onMobileModeChanged;\r\n function getMobileCssClass() {\r\n return isMobileMode() ? 'k-mobile' : null;\r\n }\r\n browserUtils.getMobileCssClass = getMobileCssClass;\r\n})(browserUtils || (browserUtils = {}));\r\n//# sourceMappingURL=browser_utils.js.map","/** Represents the common types of the data. */\r\nexport var DataType;\r\n(function (DataType) {\r\n /** Unknown type value*/\r\n DataType[DataType[\"Unknown\"] = 0] = \"Unknown\";\r\n /** String value*/\r\n DataType[DataType[\"String\"] = 1] = \"String\";\r\n /** 8-bit integer value */\r\n DataType[DataType[\"Byte\"] = 2] = \"Byte\";\r\n /** 16-bit integer value */\r\n DataType[DataType[\"Word\"] = 3] = \"Word\";\r\n /** 32-bit integer value */\r\n DataType[DataType[\"Int32\"] = 4] = \"Int32\";\r\n /** 64-bit integer value */\r\n DataType[DataType[\"Int64\"] = 5] = \"Int64\";\r\n /** Boolean value */\r\n DataType[DataType[\"Bool\"] = 6] = \"Bool\";\r\n /** Floating-point numeric value */\r\n DataType[DataType[\"Float\"] = 7] = \"Float\";\r\n /** Money value */\r\n DataType[DataType[\"Currency\"] = 8] = \"Currency\";\r\n /** Binary-coded decimal value */\r\n DataType[DataType[\"BCD\"] = 9] = \"BCD\";\r\n /** Date value */\r\n DataType[DataType[\"Date\"] = 10] = \"Date\";\r\n /** Time value */\r\n DataType[DataType[\"Time\"] = 11] = \"Time\";\r\n /** Date and time value */\r\n DataType[DataType[\"DateTime\"] = 12] = \"DateTime\";\r\n /** Autoincrement 32-bit integer value */\r\n DataType[DataType[\"Autoinc\"] = 13] = \"Autoinc\";\r\n /** MEMO value (text with unlimited length) */\r\n DataType[DataType[\"Memo\"] = 14] = \"Memo\";\r\n /** BLOB value (any data with unlimited length) */\r\n DataType[DataType[\"Blob\"] = 15] = \"Blob\";\r\n /** Fixed character value */\r\n DataType[DataType[\"FixedChar\"] = 16] = \"FixedChar\";\r\n /** The unique identifier */\r\n DataType[DataType[\"Guid\"] = 17] = \"Guid\";\r\n /*-------- Spatial data types ----------*/\r\n /** Any geometry data */\r\n DataType[DataType[\"Geometry\"] = 18] = \"Geometry\";\r\n /** Any data that represents some geography objects</summary> */\r\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\r\n})(DataType || (DataType = {}));\r\n//# sourceMappingURL=data_type.js.map","export var EntityAttrKind;\r\n(function (EntityAttrKind) {\r\n EntityAttrKind[EntityAttrKind[\"Data\"] = 0] = \"Data\";\r\n EntityAttrKind[EntityAttrKind[\"Virtual\"] = 1] = \"Virtual\";\r\n EntityAttrKind[EntityAttrKind[\"Lookup\"] = 2] = \"Lookup\";\r\n})(EntityAttrKind || (EntityAttrKind = {}));\r\n//# sourceMappingURL=entity_attr_kind.js.map","export var EditorTag = {\r\n /** Unknown tag value */\r\n Unknown: \"Unknown\",\r\n /** Edit tag value */\r\n Edit: \"EDIT\",\r\n /** DateTime tag value */\r\n DateTime: \"DATETIME\",\r\n /** List tag value */\r\n List: \"LIST\",\r\n /** CustomList tag value */\r\n CustomList: \"CUSTOMLIST\",\r\n /** File tag value */\r\n File: \"FILE\"\r\n};\r\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\r\n(function (HttpMethod) {\r\n HttpMethod[\"Trace\"] = \"TRACE\";\r\n HttpMethod[\"Options\"] = \"OPTIONS\";\r\n HttpMethod[\"Get\"] = \"GET\";\r\n HttpMethod[\"Put\"] = \"PUT\";\r\n HttpMethod[\"Post\"] = \"POST\";\r\n HttpMethod[\"Delete\"] = \"DELETE\";\r\n})(HttpMethod || (HttpMethod = {}));\r\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\r\n function HttpRequest(xhr, descriptor) {\r\n this.xhr = xhr;\r\n this.method = descriptor.method;\r\n this.url = descriptor.url;\r\n this.headers = descriptor.headers;\r\n this.queryParams = descriptor.queryParams;\r\n this.data = descriptor.data;\r\n }\r\n HttpRequest.prototype.setHeader = function (name, value) {\r\n this.headers[name] = value;\r\n };\r\n HttpRequest.prototype.setQueryParam = function (name, value) {\r\n this.queryParams[name] = value;\r\n };\r\n HttpRequest.prototype.getXMLHttpRequest = function () {\r\n return this.xhr;\r\n };\r\n HttpRequest.prototype.getResponseHeaders = function () {\r\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\r\n var headers = this.xhr.getAllResponseHeaders();\r\n var arr = headers.trim().split(/[\\r\\n]+/);\r\n // Create a map of header names to values\r\n var headerMap = {};\r\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\r\n var line = arr_1[_i];\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n headerMap[header] = value;\r\n }\r\n return headerMap;\r\n }\r\n return {};\r\n };\r\n HttpRequest.prototype.open = function () {\r\n var _this = this;\r\n if (this.xhr.readyState !== this.xhr.UNSENT)\r\n return;\r\n var url = this.url;\r\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\r\n url += encodeURI('?' + Object.keys(this.queryParams)\r\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\r\n .join('&'));\r\n }\r\n this.xhr.open(this.method, url, true);\r\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n for (var header in this.headers) {\r\n this.xhr.setRequestHeader(header, this.headers[header]);\r\n }\r\n };\r\n HttpRequest.prototype.abort = function () {\r\n this.xhr.abort();\r\n };\r\n return HttpRequest;\r\n}());\r\nexport { HttpRequest };\r\n//# sourceMappingURL=http_request.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Contains internatialization functionality.\r\n */\r\nexport var i18n;\r\n(function (i18n) {\r\n var englishUSLocaleSettings = {\r\n shortDateFormat: 'MM/dd/yyyy',\r\n longDateFormat: 'dd MMM, yyyy',\r\n editDateFormat: 'MM/dd/yyyy',\r\n shortTimeFormat: 'HH:mm',\r\n editTimeFormat: 'HH:mm',\r\n longTimeFormat: 'HH:mm:ss',\r\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'],\r\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n decimalSeparator: '.',\r\n currency: 'USD'\r\n };\r\n var defaultLocale = {\r\n localeId: 'en-US',\r\n englishName: 'English',\r\n displayName: 'English',\r\n texts: {\r\n ButtonOK: 'OK',\r\n ButtonCancel: 'Cancel',\r\n Yes: 'Yes',\r\n No: 'No',\r\n True: 'True',\r\n False: 'False'\r\n },\r\n settings: englishUSLocaleSettings\r\n };\r\n var allLocales = {\r\n 'en-US': defaultLocale\r\n };\r\n var currentLocale;\r\n var mappers = [];\r\n function mapInfo(info) {\r\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\r\n var mapper = mappers_1[_i];\r\n mapper(info);\r\n }\r\n }\r\n function addMapper(mapper) {\r\n mappers.push(mapper);\r\n }\r\n i18n.addMapper = addMapper;\r\n /**\r\n * Gets added locales with their names.\r\n * @returns The locales.\r\n */\r\n function getLocales() {\r\n var result = [];\r\n for (var locale in allLocales) {\r\n result.push({\r\n locale: locale,\r\n englishName: allLocales[locale].englishName,\r\n displayName: allLocales[locale].displayName\r\n });\r\n }\r\n return result.sort(function (a, b) {\r\n if (a.englishName > b.englishName) {\r\n return 1;\r\n }\r\n else if (a.englishName === b.englishName) {\r\n return 0;\r\n }\r\n return -1;\r\n });\r\n }\r\n i18n.getLocales = getLocales;\r\n /**\r\n * Gets the current locale ID.\r\n * @returns The locale.\r\n */\r\n function getCurrentLocale() {\r\n return currentLocale.localeId;\r\n }\r\n i18n.getCurrentLocale = getCurrentLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @deprecated Use setCurrentLocale instead\r\n * @param l The locale.\r\n */\r\n function setLocale(l) {\r\n console.warn('This method is deprecated. Use setCurrentLocale instead');\r\n setCurrentLocale(l);\r\n }\r\n i18n.setLocale = setLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @param localeId The locale.\r\n */\r\n function setCurrentLocale(localeId) {\r\n var newLocale = allLocales[localeId];\r\n if (newLocale) {\r\n utils.assignDeep(currentLocale, newLocale);\r\n }\r\n else {\r\n currentLocale.englishName = localeId;\r\n currentLocale.displayName = localeId;\r\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\r\n }\r\n currentLocale.localeId = localeId;\r\n }\r\n i18n.setCurrentLocale = setCurrentLocale;\r\n /**\r\n * Returns localized text by the key defined in parameter.\r\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\r\n *\r\n ```\r\n const text = i18n.getText('CmdClickToAddCondition')\r\n ```\r\n * @param args The keys of the resource string.\r\n * @returns Text of the resource defined by key or null if the key is not found\r\n *\r\n */\r\n function getText() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var textsObj = currentLocale.texts;\r\n var resText = '';\r\n if (args && args.length) {\r\n var argLength = args.length;\r\n for (var i = 0; i < argLength; i++) {\r\n resText = textsObj[args[i]];\r\n if (typeof resText === 'object') {\r\n textsObj = resText;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n return resText;\r\n }\r\n i18n.getText = getText;\r\n function getLocaleSettings() {\r\n return currentLocale.settings;\r\n }\r\n i18n.getLocaleSettings = getLocaleSettings;\r\n function getOneLocaleSetting(key) {\r\n return currentLocale.settings[key];\r\n }\r\n i18n.getOneLocaleSetting = getOneLocaleSetting;\r\n function getShortMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.shortMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getShortMonthName = getShortMonthName;\r\n function getLongMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.longMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getLongMonthName = getLongMonthName;\r\n function getShortWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.shortWeekDayNames.length >= dayNum\r\n ? settings.shortWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getShortWeekDayName = getShortWeekDayName;\r\n function getLongWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.longWeekDayNames.length >= dayNum\r\n ? settings.longWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getLongWeekDayName = getLongWeekDayName;\r\n /**\r\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\r\n * @param settingsToUpdate a LocaleSettings object\r\n */\r\n function updateLocaleSettings(settingsToUpdate) {\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\r\n }\r\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\r\n }\r\n i18n.updateLocaleSettings = updateLocaleSettings;\r\n /**\r\n * Updates the texts for the current locale\r\n * @param texts A plain JS object that contains textual resources\r\n */\r\n function updateLocaleTexts(texts) {\r\n if (typeof texts !== 'object') {\r\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\r\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\r\n return;\r\n }\r\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\r\n utils.assignDeep(currentLocale.texts, texts);\r\n }\r\n i18n.updateLocaleTexts = updateLocaleTexts;\r\n function updateDefaultTexts(texts) {\r\n for (var localeId in allLocales) {\r\n var locale = allLocales[localeId];\r\n locale.texts = utils.assignDeep({}, texts, locale.texts);\r\n }\r\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\r\n }\r\n i18n.updateDefaultTexts = updateDefaultTexts;\r\n /**\r\n * Updates the information for the specified locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be added\r\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function updateLocaleInfo(localeId, localeData) {\r\n mapInfo(localeData);\r\n var localeInfoToUpdate = currentLocale;\r\n if (localeId) {\r\n if (!localeData.localeId) {\r\n localeData.localeId = localeId;\r\n }\r\n localeInfoToUpdate = allLocales[localeId];\r\n if (!localeInfoToUpdate) {\r\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\r\n allLocales[localeId] = localeInfoToUpdate;\r\n }\r\n }\r\n utils.assignDeep(localeInfoToUpdate, localeData);\r\n }\r\n i18n.updateLocaleInfo = updateLocaleInfo;\r\n /**\r\n * Adds the locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be created\r\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function addLocale(localeId, localeInfo) {\r\n updateLocaleInfo(localeId, localeInfo);\r\n }\r\n i18n.addLocale = addLocale;\r\n /**\r\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\r\n */\r\n function determineSettingsByLocale(localeId) {\r\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\r\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\r\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\r\n var dateFormat = dateStr\r\n .replace('07', 'dd')\r\n .replace('7', 'd')\r\n .replace('06', 'MM')\r\n .replace('6', 'M')\r\n .replace('2020', 'yyyy')\r\n .replace('20', 'yy');\r\n var timeFormat = timeStr\r\n .replace('19', 'HH')\r\n .replace('07', 'hh')\r\n .replace('7', 'h')\r\n .replace('34', 'mm')\r\n .replace('56', 'ss')\r\n .replace('PM', 'tt');\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = {};\r\n }\r\n var localeSettings = {\r\n shortDateFormat: dateFormat,\r\n shortTimeFormat: timeFormat\r\n };\r\n updateLocaleSettings(localeSettings);\r\n }\r\n function loadBrowserLocaleSettings() {\r\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\r\n determineSettingsByLocale(lang);\r\n }\r\n function resetLocales() {\r\n if (!currentLocale) {\r\n currentLocale = utils.assignDeep({}, defaultLocale);\r\n loadBrowserLocaleSettings();\r\n }\r\n }\r\n i18n.resetLocales = resetLocales;\r\n function dateTimeToStr(dateTime, dataType, format) {\r\n if (format) {\r\n if (format == 'd') {\r\n format = buildShortDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'D') {\r\n format = buildLongDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'f') {\r\n format = buildShortDateTimeFormat(DataType.DateTime);\r\n }\r\n else if (format == 'F') {\r\n format = buildLongDateTimeFormat(DataType.DateTime);\r\n }\r\n }\r\n else {\r\n format = buildShortDateTimeFormat(dataType);\r\n }\r\n return utils.dateTimeToStr(dateTime, format);\r\n }\r\n i18n.dateTimeToStr = dateTimeToStr;\r\n function buildShortDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.shortDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.shortTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function buildLongDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.longDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.longTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function numberToStr(number, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n return formatWithSequence(number, format.slice(1));\r\n }\r\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\r\n var locale = getCurrentLocale();\r\n return number.toLocaleString(locale, getNumberFormatOptions(format));\r\n }\r\n else {\r\n return convertWithMask(Math.trunc(number), format);\r\n }\r\n }\r\n var localeSettings = getLocaleSettings();\r\n return utils.numberToStr(number, localeSettings.decimalSeparator);\r\n }\r\n i18n.numberToStr = numberToStr;\r\n function booleanToStr(bool, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n var values = format.slice(1).split('|');\r\n if (values.length > 1) {\r\n var value = values[(bool) ? 1 : 0];\r\n return i18n.getText(value) || value;\r\n }\r\n }\r\n }\r\n return \"\" + bool;\r\n }\r\n i18n.booleanToStr = booleanToStr;\r\n var cachedSequenceFormats = {};\r\n function formatWithSequence(number, format) {\r\n if (!cachedSequenceFormats[format]) {\r\n // parse and save in cache format values \r\n var values_2 = format.split('|')\r\n .filter(function (v) { return v.length > 0; })\r\n .map(function (v) { return v.split('='); });\r\n cachedSequenceFormats[format] = {};\r\n if (values_2.length > 0) {\r\n if (values_2[0].length > 1) {\r\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\r\n var value = values_1[_i];\r\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\r\n }\r\n }\r\n else {\r\n values_2.forEach(function (value, index) {\r\n cachedSequenceFormats[format][index] = value[0];\r\n });\r\n }\r\n }\r\n }\r\n var values = cachedSequenceFormats[format];\r\n if (values[number] !== undefined) {\r\n var value = values[number];\r\n return i18n.getText(value) || value;\r\n }\r\n return number.toString();\r\n }\r\n function convertWithMask(number, mask) {\r\n var value = number.toString();\r\n var result = '';\r\n var index = value.length - 1;\r\n for (var i = mask.length - 1; i >= 0; i--) {\r\n var ch = mask.charAt(i);\r\n if (ch === '#' || ch === '0') {\r\n if (index >= 0) {\r\n result += value.charAt(index);\r\n index--;\r\n }\r\n else {\r\n if (ch === '0') {\r\n result += 0;\r\n }\r\n }\r\n }\r\n else {\r\n result += ch;\r\n }\r\n }\r\n return result.split('').reverse().join('');\r\n }\r\n function getNumberFormatOptions(format) {\r\n var localeSettings = getLocaleSettings();\r\n var type = format[0].toUpperCase();\r\n var digits = (format.length > 1)\r\n ? Number.parseInt(format.slice(1))\r\n : type == 'D' ? 1 : 2;\r\n switch (type) {\r\n case 'D':\r\n return {\r\n style: 'decimal',\r\n useGrouping: false,\r\n minimumIntegerDigits: digits\r\n };\r\n case 'C':\r\n return {\r\n style: 'currency',\r\n currency: localeSettings.currency,\r\n minimumFractionDigits: digits\r\n };\r\n default:\r\n return {\r\n style: 'decimal',\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits\r\n };\r\n }\r\n }\r\n})(i18n || (i18n = {}));\r\n//# sourceMappingURL=i18n.js.map","import * as strf from './string_utils';\r\nimport { DataType } from '../types/data_type';\r\nimport { i18n } from '../i18n/i18n';\r\nexport var utils;\r\n(function (utils) {\r\n function getAllDataTypes() {\r\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\r\n }\r\n utils.getAllDataTypes = getAllDataTypes;\r\n function getDateDataTypes() {\r\n return [DataType.Time, DataType.Date, DataType.DateTime];\r\n }\r\n utils.getDateDataTypes = getDateDataTypes;\r\n function getStringDataTypes() {\r\n return [DataType.String, DataType.Memo, DataType.FixedChar];\r\n }\r\n utils.getStringDataTypes = getStringDataTypes;\r\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\r\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\r\n function getNumericDataTypes() {\r\n return _numericTypes;\r\n }\r\n utils.getNumericDataTypes = getNumericDataTypes;\r\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\r\n //-------------- object functions -------------------\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function copies only the first level properties.\r\n * For a deep copy please use `assignDeep`\r\n * @param target - the target object\r\n * @param args - an array of the source objects\r\n */\r\n function assign(target) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n for (var i = 0; i < args.length; i++) {\r\n var source = args[i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n utils.assign = assign;\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function make a deep copy -\r\n * so `assignDeep` will be called recursively for all object properties\r\n * on the first level.\r\n * @param target - the target object\r\n * @param sources - an array of the source objects\r\n */\r\n function assignDeep(target) {\r\n var sources = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n sources[_i - 1] = arguments[_i];\r\n }\r\n return assignDeepCore(new WeakMap(), target, sources);\r\n }\r\n utils.assignDeep = assignDeep;\r\n function assignDeepCore(hashSet, target, sources) {\r\n if (!target) {\r\n target = {};\r\n }\r\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\r\n var source = sources_1[_i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n var sourceVal = source[key];\r\n if (sourceVal !== null && typeof sourceVal === 'object') {\r\n if (hashSet.has(sourceVal)) {\r\n target[key] = hashSet.get(sourceVal);\r\n }\r\n else {\r\n if (Array.isArray(sourceVal)) {\r\n target[key] = createArrayFrom(sourceVal);\r\n hashSet.set(sourceVal, target[key]);\r\n }\r\n else {\r\n if (typeof target[key] == 'undefined' || target[key] == null) {\r\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\r\n }\r\n hashSet.set(sourceVal, target[key]);\r\n assignDeepCore(hashSet, target[key], [sourceVal]);\r\n }\r\n }\r\n }\r\n else {\r\n target[key] = sourceVal;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n function getIfDefined(value, defaultValue) {\r\n return (typeof value !== 'undefined') ? value : defaultValue;\r\n }\r\n utils.getIfDefined = getIfDefined;\r\n function IsDefinedAndNotNull(value) {\r\n return typeof value !== 'undefined' && value !== null;\r\n }\r\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\r\n function copyArrayTo(collection1, collection2) {\r\n var len1 = collection1.length;\r\n var len2 = collection2.length;\r\n for (var i = 0; i < len1 && i < len2; i++) {\r\n collection2[i] = collection1[i];\r\n }\r\n }\r\n utils.copyArrayTo = copyArrayTo;\r\n function createArrayFrom(collection) {\r\n var result = [];\r\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\r\n var item = collection_1[_i];\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n utils.createArrayFrom = createArrayFrom;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the found object or null.\r\n * @param array\r\n * @param id\r\n */\r\n function findItemById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return array[idx];\r\n }\r\n return null;\r\n }\r\n utils.findItemById = findItemById;\r\n function findItemIndexById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return idx;\r\n }\r\n return -1;\r\n }\r\n utils.findItemIndexById = findItemIndexById;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the index of the found element, or -1 if nothing was found.\r\n * @param array\r\n * @param id\r\n */\r\n function indexOfArrayItem(arr, item) {\r\n if (arr.indexOf) {\r\n return arr.indexOf(item);\r\n }\r\n else {\r\n var len = arr.length;\r\n for (var i = 0; i < len; i++) {\r\n if (item == arr[i]) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }\r\n utils.indexOfArrayItem = indexOfArrayItem;\r\n /**\r\n * Moves an item in some array to a new position\r\n * @param array\r\n * @param index1\r\n * @param index2\r\n */\r\n function moveArrayItem(array, index1, index2) {\r\n if (index1 >= array.length) {\r\n throw 'Index out of bounds: ' + index1;\r\n }\r\n if (index2 >= array.length) {\r\n index2 = array.length - 1;\r\n }\r\n var item = array.splice(index1, 1)[0];\r\n array.splice(index2, 0, item);\r\n }\r\n utils.moveArrayItem = moveArrayItem;\r\n /**\r\n * Searches for a particular item in the array are removes that item if found.\r\n * @param arr\r\n * @param value\r\n */\r\n function removeArrayItem(arr, value) {\r\n var index = arr.indexOf(value);\r\n if (index != -1) {\r\n return arr.splice(index, 1)[0];\r\n }\r\n }\r\n utils.removeArrayItem = removeArrayItem;\r\n function insertArrayItem(arr, index, value) {\r\n arr.splice(index, 0, value);\r\n }\r\n utils.insertArrayItem = insertArrayItem;\r\n function fillArray(arr, value, start, end) {\r\n if (start === void 0) { start = 0; }\r\n var len = arr.length >>> 0;\r\n var relativeStart = start >> 0;\r\n var k = relativeStart < 0 ?\r\n Math.max(len + relativeStart, 0) :\r\n Math.min(relativeStart, len);\r\n var relativeEnd = end === undefined ?\r\n len : end >> 0;\r\n var final = relativeEnd < 0 ?\r\n Math.max(len + relativeEnd, 0) :\r\n Math.min(relativeEnd, len);\r\n while (k < final) {\r\n arr[k] = value;\r\n k++;\r\n }\r\n return arr;\r\n }\r\n utils.fillArray = fillArray;\r\n //------------ DOM utils ------------\r\n /**\r\n * Calculates the shift on which we need to move our element horizontally\r\n * to find current window\r\n * @param absLeft\r\n * @param width\r\n */\r\n function shiftToFitWindow(absLeft, width) {\r\n var body = document.getElementsByTagName('body')[0];\r\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\r\n var absRight = absLeft + width;\r\n var shift = 0;\r\n if (absRight > winWidth) {\r\n shift = winWidth - absRight - 10;\r\n if (absLeft + shift < 0) {\r\n shift = 10 - absLeft;\r\n }\r\n }\r\n return shift;\r\n }\r\n utils.shiftToFitWindow = shiftToFitWindow;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an object\r\n * @param val\r\n */\r\n function isObject(val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ((typeof val === 'function') || (typeof val === 'object'));\r\n }\r\n utils.isObject = isObject;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isNumericType(dtype) {\r\n var index = _numericTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isNumericType = isNumericType;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isIntType(dtype) {\r\n var index = _intTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isIntType = isIntType;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an a numeric value\r\n * @param val\r\n */\r\n function isNumeric(val) {\r\n return !isNaN(parseFloat(val)) && isFinite(val);\r\n }\r\n utils.isNumeric = isNumeric;\r\n /**\r\n * Returns `true` if two data types passed in parameters\r\n * are compatible - so it's safe to copy the values between\r\n * two expressions with these two types\r\n * @param type1\r\n * @param type2\r\n */\r\n function areCompatibleDataTypes(type1, type2) {\r\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\r\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\r\n || (type1 == DataType.DateTime && type2 == DataType.Date);\r\n }\r\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\r\n /**\r\n * Returns `true` if the property with named `propName`\r\n * in the object `obj` has some value\r\n * @param obj\r\n * @param propName\r\n */\r\n function isPropSet(obj, propName) {\r\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\r\n }\r\n utils.isPropSet = isPropSet;\r\n //-------------- ID generator -----------\r\n var prefixIdLen = 4;\r\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n var magicTicks = 636712160627685350;\r\n /**\r\n * Generates an unique ID\r\n */\r\n function generateId(prefix) {\r\n if (!prefix) {\r\n prefix = 'easy';\r\n }\r\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\r\n if (prfx && prfx.length > 0) {\r\n prfx += \"-\";\r\n }\r\n //adding 2 random symbols\r\n var randValue = strf.repeatString(\"\", 2);\r\n ;\r\n var maxSymbolIndex = symbols.length - 1;\r\n randValue = replaceAtString(randValue, 0, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n randValue = replaceAtString(randValue, 1, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n //generating main ID part (64-base representation of the current value of the time ticks)\r\n var ticksNum64 = intToNum36(getNowTicks() - magicTicks);\r\n return prfx + randValue + ticksNum64;\r\n }\r\n utils.generateId = generateId;\r\n function intToNum36(value) {\r\n var targetBase = 36;\r\n var i = 14;\r\n var buffer = strf.repeatString(\"\", i);\r\n var rest = value;\r\n do {\r\n buffer = replaceAtString(buffer, i--, symbols[rest % targetBase]);\r\n rest = Math.floor(rest /= targetBase);\r\n } while (rest > 0);\r\n return strf.reverseString(buffer.trim());\r\n }\r\n function squeezeMoniker(str, maxlen) {\r\n var parts = str.split('-');\r\n var pml = 1;\r\n var ptt = maxlen;\r\n if (parts.length < maxlen) {\r\n pml = maxlen / parts.length;\r\n ptt = parts.length;\r\n }\r\n var result = \"\";\r\n for (var i = 0; i < ptt; i++) {\r\n result += squeeze(parts[i], pml);\r\n }\r\n return result;\r\n }\r\n function squeeze(str, maxlen) {\r\n var len = str.length;\r\n if (len > maxlen) {\r\n var step = len / maxlen;\r\n var result = \"\";\r\n result += str[0];\r\n var nextIndex = step;\r\n var ch = void 0;\r\n for (var i = 1; i < len; i++) {\r\n ch = str[i];\r\n if (i + 1 > nextIndex) {\r\n result += ch;\r\n nextIndex += step;\r\n }\r\n }\r\n return result;\r\n }\r\n else {\r\n return str;\r\n }\r\n }\r\n function replaceAtString(str, index, value) {\r\n return str.substr(0, index) + value + str.substr(index + value.length);\r\n }\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n function getNowTicks() {\r\n return (621355968e9 + (new Date()).getTime() * 1e4);\r\n }\r\n function safeParseInt(str) {\r\n var res = parseInt(str);\r\n if (isNaN(res))\r\n throw \"\\\"\" + str + \"\\\" is not a valid number\";\r\n return res;\r\n }\r\n function getDaysInMonth(month, year) {\r\n return new Date(year, month + 1, 0).getDate();\r\n }\r\n // ------------- date/time functions -------------------\r\n // TO DO: improve to process all datetime cases\r\n function strToDateTime(value, format) {\r\n if (!value || value.length == 0)\r\n return new Date();\r\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var formatItems = normalizedFormat.split('-');\r\n var dateItems = normalizedValue.split('-');\r\n var monthIndex = formatItems.indexOf(\"MM\");\r\n var dayIndex = formatItems.indexOf(\"dd\");\r\n var yearIndex = formatItems.indexOf(\"yyyy\");\r\n var hourIndex = formatItems.indexOf(\"HH\");\r\n var minutesIndex = formatItems.indexOf(\"mm\");\r\n var secondsIndex = formatItems.indexOf(\"ss\");\r\n var today = new Date();\r\n try {\r\n var year = yearIndex > -1 && yearIndex < dateItems.length\r\n ? safeParseInt(dateItems[yearIndex])\r\n : today.getFullYear();\r\n var month = monthIndex > -1 && monthIndex < dateItems.length\r\n ? safeParseInt(dateItems[monthIndex]) - 1\r\n : today.getMonth() - 1;\r\n if (month > 11)\r\n throw '';\r\n var day = dayIndex > -1 && dayIndex < dateItems.length\r\n ? safeParseInt(dateItems[dayIndex])\r\n : today.getDate();\r\n if (day > getDaysInMonth(month, year))\r\n throw '';\r\n var hour = hourIndex > -1 && hourIndex < dateItems.length\r\n ? safeParseInt(dateItems[hourIndex])\r\n : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\r\n ? safeParseInt(dateItems[minutesIndex])\r\n : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\r\n ? safeParseInt(dateItems[secondsIndex])\r\n : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(year, month, day, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw value + \" is not a valid date.\";\r\n }\r\n }\r\n utils.strToDateTime = strToDateTime;\r\n function strToTime(str) {\r\n var timeItems = str.split(':');\r\n try {\r\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(0, 0, 0, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw str + \" is not a valid time.\";\r\n }\r\n }\r\n utils.strToTime = strToTime;\r\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{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 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: year.toString(),\r\n MMMM: i18n.getLongMonthName(month),\r\n MMM: i18n.getShortMonthName(month),\r\n MM: (month < 10) ? '0' + month : month.toString(),\r\n M: month.toString(),\r\n dd: (day < 10) ? '0' + day : day.toString(),\r\n d: day.toString(),\r\n HH: (hour < 10) ? '0' + hour : hour.toString(),\r\n H: hour.toString(),\r\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\r\n h: hour12.toString(),\r\n tt: isPm ? 'PM' : 'AM',\r\n mm: (minute < 10) ? '0' + minute : minute.toString(),\r\n ss: (second < 10) ? '0' + second : second.toString()\r\n };\r\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\r\n return $1 || matches[match];\r\n });\r\n }\r\n utils.dateTimeToStr = dateTimeToStr;\r\n /**\r\n * Converts a numeric value to the string taking into the account the decimal separator\r\n * @param value - the number to convert\r\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\r\n */\r\n function numberToStr(number, decimalSeparator) {\r\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\r\n return number.toString().replace('.', decimalSeparator);\r\n }\r\n utils.numberToStr = numberToStr;\r\n})(utils || (utils = {}));\r\n//# sourceMappingURL=utils.js.map","export function repeatString(str, times) {\r\n var result = \"\";\r\n for (var i = 0; i < times; i++) {\r\n result += str;\r\n }\r\n return result;\r\n}\r\nexport function reverseString(str) {\r\n return str.split(\"\").reverse().join(\"\");\r\n}\r\nexport function strEndsWith(str, symbol) {\r\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\r\n}\r\n/**\r\n * Adds two paths and returns the result\r\n * Correctly processes leading and trailing slashes\r\n * @param path1\r\n * @param path2\r\n */\r\nexport function combinePath(path1, path2) {\r\n var result = path1;\r\n if (result != null && result.length > 0) {\r\n if (result.charAt(result.length - 1) != '/')\r\n result += \"/\";\r\n result += path2;\r\n }\r\n else {\r\n result = path2;\r\n }\r\n return result;\r\n}\r\n//# sourceMappingURL=string_utils.js.map","var HttpActionResult = /** @class */ (function () {\r\n function HttpActionResult(request, promise) {\r\n this.request = request;\r\n this.promise = promise;\r\n }\r\n HttpActionResult.prototype.getPromise = function () {\r\n return this.promise;\r\n };\r\n HttpActionResult.prototype.getRequest = function () {\r\n return this.request;\r\n };\r\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\r\n return this.promise.then(onfulfilled, onrejected);\r\n };\r\n HttpActionResult.prototype.catch = function (onrejected) {\r\n return this.promise.catch(onrejected);\r\n };\r\n HttpActionResult.prototype.finally = function (onfinally) {\r\n return this.promise.finally(onfinally);\r\n };\r\n return HttpActionResult;\r\n}());\r\nexport { HttpActionResult };\r\n//# sourceMappingURL=http_action_result.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport { utils } from '../utils/utils';\r\nimport { HttpActionResult } from './http_action_result';\r\nimport { HttpMethod } from './http_method';\r\nimport { HttpRequest } from './http_request';\r\nvar HttpResponseError = /** @class */ (function (_super) {\r\n __extends(HttpResponseError, _super);\r\n function HttpResponseError(status, message) {\r\n var _this = _super.call(this, message) || this;\r\n _this.status = status;\r\n return _this;\r\n }\r\n return HttpResponseError;\r\n}(Error));\r\nexport { HttpResponseError };\r\nvar HttpClient = /** @class */ (function () {\r\n function HttpClient() {\r\n this.defaultHeaders = {};\r\n this.customPayload = undefined;\r\n }\r\n Object.defineProperty(HttpClient.prototype, \"responseBody\", {\r\n /** Gets the response body for the latest request */\r\n get: function () {\r\n return this._responseBody;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n HttpClient.prototype.get = function (url, options) {\r\n return this.send(HttpMethod.Get, url, null, options);\r\n };\r\n HttpClient.prototype.post = function (url, data, options) {\r\n return this.send(HttpMethod.Post, url, data, options);\r\n };\r\n HttpClient.prototype.put = function (url, data, options) {\r\n return this.send(HttpMethod.Put, url, data, options);\r\n };\r\n HttpClient.prototype.delete = function (url, data, options) {\r\n return this.send(HttpMethod.Delete, url, data, options);\r\n };\r\n HttpClient.prototype.send = function (method, url, data, options) {\r\n var _this = this;\r\n options = options || {};\r\n var dataType = options.dataType || 'json';\r\n var contentType = options.contentType || (dataType !== 'form-data')\r\n ? 'application/json'\r\n : null;\r\n if (data && dataType != 'form-data' && this.customPayload) {\r\n data.data = utils.assignDeep(data.data || {}, this.customPayload);\r\n }\r\n var XHR = ('onload' in new XMLHttpRequest())\r\n ? XMLHttpRequest\r\n : window[\"XDomainRequest\"]; //IE support\r\n var xhr = new XHR();\r\n var desc = {\r\n method: method,\r\n url: url,\r\n headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),\r\n queryParams: options.queryParams || {},\r\n data: data\r\n };\r\n if (contentType)\r\n desc.headers['Content-Type'] = contentType;\r\n var request = new HttpRequest(xhr, desc);\r\n if (this.beforeEachRequest) {\r\n console.warn(\"HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\\n Use 'onRequest' instead\");\r\n this.beforeEachRequest(request);\r\n }\r\n if (this.onRequest) {\r\n this.onRequest(request);\r\n }\r\n var dataToSend = (request.data && typeof request.data !== 'string'\r\n && dataType == 'json')\r\n ? JSON.stringify(request.data)\r\n : request.data;\r\n request.open();\r\n return new HttpActionResult(request, new Promise(function (resolve, reject) {\r\n if (options.responseType)\r\n xhr.responseType = options.responseType;\r\n xhr.onerror = function (error) {\r\n reject(new HttpResponseError(xhr.status, xhr.responseText));\r\n };\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState != 4)\r\n return; //we process only the state change to DONE(4)\r\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\r\n var status = xhr.status;\r\n if (status === 0) {\r\n reject(new HttpResponseError(status, \"Network error or the request was aborted\"));\r\n }\r\n else if (status >= 200 && status < 400) {\r\n //Success\r\n var responseObj = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? xhr.response\r\n : (responseContentType.indexOf('application/json') == 0\r\n ? JSON.parse(xhr.responseText)\r\n : xhr.responseText);\r\n _this._responseBody = responseObj;\r\n if (_this.onResponse) {\r\n _this.onResponse(xhr);\r\n }\r\n resolve(responseObj);\r\n }\r\n else {\r\n //Error\r\n var rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? HttpClient.decodeArrayBuffer(xhr.response)\r\n : Promise.resolve(xhr.responseText);\r\n rtPromise.then(function (responseText) {\r\n var responseObj = (responseContentType.indexOf('application/json') == 0)\r\n ? JSON.parse(responseText)\r\n : responseText;\r\n _this._responseBody = responseObj;\r\n var message = responseObj.message ||\r\n (status == 404\r\n ? \"No such endpoint: \" + url\r\n : responseObj);\r\n reject(new HttpResponseError(status, message));\r\n });\r\n }\r\n };\r\n xhr.send(dataToSend);\r\n }));\r\n };\r\n HttpClient.decodeArrayBuffer = function (uintArray) {\r\n var reader = new FileReader();\r\n return new Promise(function (resolve) {\r\n reader.onloadend = function () {\r\n if (reader.readyState == FileReader.DONE) {\r\n resolve(reader.result);\r\n }\r\n };\r\n reader.readAsText(new Blob([uintArray]));\r\n });\r\n };\r\n return HttpClient;\r\n}());\r\nexport { HttpClient };\r\n//# sourceMappingURL=http_client.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nexport var ColumnAlignment;\r\n(function (ColumnAlignment) {\r\n ColumnAlignment[ColumnAlignment[\"None\"] = 0] = \"None\";\r\n ColumnAlignment[ColumnAlignment[\"Left\"] = 1] = \"Left\";\r\n ColumnAlignment[ColumnAlignment[\"Center\"] = 2] = \"Center\";\r\n ColumnAlignment[ColumnAlignment[\"Right\"] = 3] = \"Right\";\r\n})(ColumnAlignment || (ColumnAlignment = {}));\r\nvar DataColumn = /** @class */ (function () {\r\n function DataColumn(desc) {\r\n if (!desc)\r\n throw Error(\"Options are required\");\r\n if (!desc.id)\r\n throw Error(\"Field Id is required\");\r\n if (!desc.label)\r\n throw Error(\"Label is required\");\r\n this.id = desc.id;\r\n this.type = utils.getIfDefined(desc.type, DataType.String);\r\n this.label = desc.label;\r\n this.originAttrId = desc.originAttrId;\r\n this.isAggr = desc.isAggr || false;\r\n this.displayFormat = desc.dfmt;\r\n this.groupFooterColumnTemplate = desc.gfct;\r\n this.style = desc.style || {};\r\n this.description = desc.description;\r\n this.calculatedWidth = 0;\r\n }\r\n return DataColumn;\r\n}());\r\nexport { DataColumn };\r\nvar DataColumnList = /** @class */ (function () {\r\n function DataColumnList() {\r\n this.items = [];\r\n this.mapper = {};\r\n this._dateColumnIdx = [];\r\n }\r\n Object.defineProperty(DataColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DataColumnList.prototype.add = function (colOrDesc) {\r\n var col;\r\n if (colOrDesc instanceof DataColumn) {\r\n col = colOrDesc;\r\n }\r\n else {\r\n col = new DataColumn(colOrDesc);\r\n }\r\n var index = this.items.length;\r\n this.items.push(col);\r\n this.mapper[col.id] = index;\r\n if ([DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0) {\r\n this._dateColumnIdx.push(index);\r\n }\r\n return index;\r\n };\r\n DataColumnList.prototype.updateDateColumnIdx = function () {\r\n this._dateColumnIdx = this.getItems()\r\n .filter(function (col) { return [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0; })\r\n .map(function (col, index) { return index; });\r\n };\r\n DataColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.count) {\r\n this.items[index] = col;\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex) {\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.count) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n DataColumnList.prototype.getIndex = function (id) {\r\n return this.mapper[id];\r\n };\r\n DataColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n DataColumnList.prototype.getDateColumnIndexes = function () {\r\n return this._dateColumnIdx;\r\n };\r\n DataColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n var removeDate = this._dateColumnIdx.indexOf(index);\r\n if (removeDate >= 0) {\r\n this._dateColumnIdx.splice(removeDate, 1);\r\n }\r\n delete this.mapper[col.id];\r\n };\r\n DataColumnList.prototype.clear = function () {\r\n this.items = [];\r\n this._dateColumnIdx = [];\r\n this.mapper = {};\r\n };\r\n return DataColumnList;\r\n}());\r\nexport { DataColumnList };\r\n//# sourceMappingURL=data_column.js.map","import { DataType } from '../types/data_type';\r\nimport { EntityAttrKind } from '../types/entity_attr_kind';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Represents one entity.\r\n */\r\nvar MetaEntity = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntity(parent) {\r\n /** Returns false if this entity is read-only */\r\n this.isEditable = true;\r\n this.name = \"\";\r\n this.caption = \"\";\r\n this.description = \"\";\r\n this.parent = parent;\r\n this.attributes = new Array();\r\n this.subEntities = new Array();\r\n }\r\n /**\r\n * Loads entity from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntity.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.name = dto.name;\r\n this.captionPlural = dto.namePlur;\r\n this.caption = dto.name;\r\n this.description = dto.desc;\r\n if (typeof (dto.ied) !== 'undefined')\r\n this.isEditable = dto.ied;\r\n this.subEntities = new Array();\r\n if (dto.ents) {\r\n for (var i = 0; i < dto.ents.length; i++) {\r\n var newEntity = model.createEntity(this);\r\n newEntity.loadFromData(model, dto.ents[i]);\r\n this.subEntities.push(newEntity);\r\n }\r\n }\r\n this.attributes = new Array();\r\n if (dto.attrs) {\r\n for (var i = 0; i < dto.attrs.length; i++) {\r\n var newAttr = model.createEntityAttr(this);\r\n newAttr.loadFromData(model, dto.attrs[i]);\r\n this.attributes.push(newAttr);\r\n }\r\n }\r\n }\r\n };\r\n MetaEntity.prototype.scan = function (processAttribute, processEntity) {\r\n var opts = { stop: false };\r\n var internalProcessEntity = function (entity) {\r\n if (processEntity)\r\n processEntity(entity, opts);\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; (i < attrCount) && !opts.stop; i++) {\r\n var attr = entity.attributes[i];\r\n if (processAttribute) {\r\n processAttribute(attr, opts);\r\n }\r\n if (opts.stop)\r\n return;\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; (i < subEntityCount) && !opts.stop; i++) {\r\n internalProcessEntity(entity.subEntities[i]);\r\n }\r\n }\r\n };\r\n internalProcessEntity(this);\r\n };\r\n MetaEntity.prototype.getFirstPrimaryAttr = function () {\r\n return this.getPrimaryAttrs()[0];\r\n };\r\n MetaEntity.prototype.getPrimaryAttrs = function () {\r\n return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });\r\n };\r\n return MetaEntity;\r\n}());\r\nexport { MetaEntity };\r\nvar MetaEntityAttr = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntityAttr(entity) {\r\n this.id = \"\";\r\n this.caption = \"{Unrecognized attribute}\";\r\n this.dataType = DataType.String;\r\n this.size = 0;\r\n this.isPrimaryKey = false;\r\n this.isForeignKey = false;\r\n this.isNullable = true;\r\n this.showOnView = true;\r\n this.isEditable = true;\r\n this.showOnCreate = true;\r\n this.showOnEdit = true;\r\n this.showInLookup = false;\r\n this.lookupAttr = \"\";\r\n this.expr = \"\";\r\n this.entity = entity;\r\n this.kind = EntityAttrKind.Data;\r\n }\r\n /**\r\n * Loads entity attribute from JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntityAttr.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.description = dto.desc;\r\n this.caption = dto.cptn;\r\n this.dataType = dto.dtype;\r\n this.isPrimaryKey = dto.ipk;\r\n this.isForeignKey = dto.ifk;\r\n this.size = dto.size;\r\n this.lookupAttr = dto.lattr;\r\n this.lookupEntity = dto.lent;\r\n this.dataAttr = dto.dattr;\r\n this.lookupDataAttr = dto.ldattr;\r\n var isDataType = utils.getDateDataTypes().indexOf(this.dataType);\r\n this.defaultValue = dto.defVal && isDataType ? new Date(dto.defVal) : dto.defVal;\r\n this.isNullable = utils.getIfDefined(dto.nul, this.isNullable);\r\n this.isEditable = utils.getIfDefined(dto.ied, this.isEditable);\r\n this.showOnView = utils.getIfDefined(dto.ivis || dto.sov, this.showOnView);\r\n this.showOnCreate = utils.getIfDefined(dto.soc, this.showOnCreate);\r\n this.showOnEdit = utils.getIfDefined(dto.soe, this.showOnEdit);\r\n this.showInLookup = utils.getIfDefined(dto.sil, this.showInLookup);\r\n this.kind = dto.kind;\r\n this.displayFormat = dto.dfmt;\r\n if (dto.udata)\r\n this.userData = dto.udata;\r\n if (dto.edtr) {\r\n this.defaultEditor = model.getEditorById(dto.edtr) || model.createValueEditor();\r\n }\r\n }\r\n };\r\n return MetaEntityAttr;\r\n}());\r\nexport { MetaEntityAttr };\r\n//# sourceMappingURL=meta_entity.js.map","import { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\n/**\r\n * Represents a value editor.\r\n */\r\nvar ValueEditor = /** @class */ (function () {\r\n /** The default constructor. */\r\n function ValueEditor() {\r\n this.id = \"\";\r\n this.tag = EditorTag.Unknown;\r\n this.resType = DataType.Unknown;\r\n this.defValue = \"\";\r\n }\r\n /**\r\n * Loads value editor from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n ValueEditor.prototype.loadFromData = function (data) {\r\n if (data) {\r\n this.id = data.id;\r\n this.tag = data.tag;\r\n this.defValue = data.defval;\r\n this.resType = data.rtype;\r\n this.accept = data.accept;\r\n this.multiline = data.multiline;\r\n if (data.subType) {\r\n this.resType = data.subType;\r\n }\r\n if (data.name) {\r\n this.name = data.name;\r\n }\r\n if (data.values) {\r\n this.values = data.values;\r\n }\r\n }\r\n };\r\n ValueEditor.prototype.getValueText = function (value) {\r\n var result = \"\";\r\n if (!this.values)\r\n return result;\r\n if (Array.isArray(value)) {\r\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n if (value.indexOf(item.id) >= 0) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n else {\r\n for (var _b = 0, _c = this.values; _b < _c.length; _b++) {\r\n var item = _c[_b];\r\n if (item.id === value) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n if (result) {\r\n result = result.substring(0, result.length - 1);\r\n }\r\n return result;\r\n };\r\n return ValueEditor;\r\n}());\r\nexport { ValueEditor };\r\n//# sourceMappingURL=value_editor.js.map","import { i18n } from '../i18n/i18n';\r\nimport { utils } from '../utils/utils';\r\nimport { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\nimport { MetaEntity, MetaEntityAttr } from './meta_entity';\r\nimport { ValueEditor } from './value_editor';\r\n/**\r\n * Represents a data model\r\n */\r\nvar MetaData = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaData() {\r\n this.mainEntity = null;\r\n this.id = '__none';\r\n this.name = 'Empty model';\r\n this.rootEntity = this.createEntity();\r\n this.displayFormats = new Map();\r\n }\r\n /**\r\n * Gets the main entity of model\r\n * @return The main entity.\r\n */\r\n MetaData.prototype.getMainEntity = function () {\r\n return this.mainEntity;\r\n };\r\n MetaData.prototype.createEntity = function (parent) {\r\n return new MetaEntity(parent);\r\n };\r\n MetaData.prototype.createEntityAttr = function (parent) {\r\n return new MetaEntityAttr(parent);\r\n };\r\n MetaData.prototype.createValueEditor = function () {\r\n return new ValueEditor();\r\n };\r\n /**\r\n * Loads data model from JSON.\r\n * @param stringJson The JSON string.\r\n */\r\n MetaData.prototype.loadFromJSON = function (stringJson) {\r\n var model = JSON.parse(stringJson);\r\n this.loadFromData(model);\r\n };\r\n /**\r\n * Loads data model from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n MetaData.prototype.loadFromData = function (data) {\r\n this.id = data.id;\r\n this.name = data.name;\r\n this.version = data.vers;\r\n //Editors\r\n this.editors = new Array();\r\n if (data.editors) {\r\n for (var i = 0; i < data.editors.length; i++) {\r\n var newEditor = this.createValueEditor();\r\n newEditor.loadFromData(data.editors[i]);\r\n this.editors.push(newEditor);\r\n }\r\n }\r\n //rootEntity\r\n this.rootEntity.loadFromData(this, data.entroot);\r\n //DataFormats\r\n this.displayFormats = new Map();\r\n if (data.displayFormats) {\r\n for (var dtypeStr in data.displayFormats) {\r\n var dtype = DataType[dtypeStr];\r\n var formats = data.displayFormats[dtypeStr] || new Array();\r\n this.displayFormats.set(dtype, formats);\r\n }\r\n }\r\n };\r\n /**\r\n * Gets the display formats.\r\n * @returns The display formats.\r\n */\r\n MetaData.prototype.getDisplayFormats = function () {\r\n return this.displayFormats;\r\n };\r\n /**\r\n * Gets the display formats for type\r\n * @param type The type\r\n * @returns An array of display formats\r\n */\r\n MetaData.prototype.getDisplayFormatsForType = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type);\r\n }\r\n return [];\r\n };\r\n /**\r\n * Gets the default display format for the provided type\r\n * @param type The type\r\n * @returns The default type format or null\r\n */\r\n MetaData.prototype.getDefaultFormat = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type).filter(function (f) { return f.isdef; })[0];\r\n }\r\n return null;\r\n };\r\n /**\r\n * Sets data to data model.\r\n * @param model Its JSON representation object or JSON string.\r\n */\r\n MetaData.prototype.setData = function (model) {\r\n if (typeof model === 'string') {\r\n this.loadFromJSON(model);\r\n }\r\n else {\r\n this.loadFromData(model);\r\n }\r\n };\r\n /**\r\n * Checks wether the data model is empty.\r\n * @returns `true` if the data model is empty, otherwise `false`.\r\n */\r\n MetaData.prototype.isEmpty = function () {\r\n return this.rootEntity.subEntities.length === 0 && this.rootEntity.attributes.length === 0;\r\n };\r\n /**\r\n * Gets ID of the data model.\r\n * @returns The ID.\r\n */\r\n MetaData.prototype.getId = function () {\r\n return this.id;\r\n };\r\n /**\r\n * Gets name of the data model.\r\n * @returns The name.\r\n */\r\n MetaData.prototype.getName = function () {\r\n return this.name;\r\n };\r\n /**\r\n * Gets root entity of the data model.\r\n * @returns The root entity.\r\n */\r\n MetaData.prototype.getRootEntity = function () {\r\n return this.rootEntity;\r\n };\r\n /**\r\n * Finds editor by its ID.\r\n * @param editorId The editor ID.\r\n * @returns The value editor or `null`.\r\n */\r\n MetaData.prototype.getEditorById = function (editorId) {\r\n for (var _i = 0, _a = this.editors; _i < _a.length; _i++) {\r\n var editor = _a[_i];\r\n if (editor.id === editorId) {\r\n return editor;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getAttributeById = function (attrId) {\r\n var attr = this.getEntityAttrById(this.getRootEntity(), attrId);\r\n if (!attr) {\r\n return null;\r\n }\r\n return attr;\r\n };\r\n /**\r\n * Checks wether attribute contains such property.\r\n * @param attrId The attribute ID.\r\n * @param propName The property name.\r\n * @returns `true` if the attribute contains the property, otherwise `false`.\r\n */\r\n MetaData.prototype.checkAttrProperty = function (attrId, propName) {\r\n var attribute = this.getAttributeById(attrId);\r\n if (attribute) {\r\n if (typeof attribute[propName] === 'undefined') {\r\n throw 'No such property: ' + propName;\r\n }\r\n if (attribute[propName]) {\r\n return true;\r\n }\r\n else if (attribute.lookupAttr) {\r\n attrId = attribute.lookupAttr;\r\n attribute = this.getAttributeById(attrId);\r\n return attribute && attribute[propName];\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else\r\n return false;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified entity and all its sub-entities.\r\n * @param entity\r\n * @param attrId\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getEntityAttrById = function (entity, attrId) {\r\n var idx;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (idx = 0; idx < attrCount; idx++) {\r\n if (entity.attributes[idx].id == attrId) {\r\n return entity.attributes[idx];\r\n }\r\n }\r\n }\r\n var res;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (idx = 0; idx < subEntityCount; idx++) {\r\n res = this.getEntityAttrById(entity.subEntities[idx], attrId);\r\n if (res)\r\n return res;\r\n }\r\n }\r\n return null;\r\n };\r\n MetaData.prototype.listByEntityWithFilter = function (entity, filterFunc) {\r\n var result = new Array();\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name);\r\n if (!caption) {\r\n caption = ent.caption;\r\n }\r\n var newEnt = utils.assign(this.createEntity(), { id: ent.name, text: caption, items: [], isEntity: true });\r\n newEnt.items = this.listByEntityWithFilter(ent, filterFunc);\r\n if (newEnt.items.length > 0)\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id);\r\n if (!caption)\r\n caption = attr.caption;\r\n var newEnt = utils.assign(this.createEntity(), { id: attr.id, text: caption, dataType: attr.dataType });\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n MetaData.prototype.listByEntity = function (entity, opts, filterFunc) {\r\n opts = opts || {};\r\n var resultEntities = [];\r\n var resultAttributes = [];\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name) || ent.caption;\r\n var newEnt = utils.assign(this.createEntity(), {\r\n id: ent.name,\r\n text: caption,\r\n items: [],\r\n isEntity: true,\r\n description: ent.description\r\n });\r\n var newOpts = utils.assign({}, opts);\r\n newOpts.includeRootData = false;\r\n newEnt.items = this.listByEntity(ent, newOpts, filterFunc);\r\n if (newEnt.items.length > 0) {\r\n resultEntities.push(newEnt);\r\n }\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\r\n resultAttributes.push(utils.assign(this.createEntityAttr(entity), {\r\n id: attr.id, text: caption,\r\n dataType: attr.dataType, lookupAttr: attr.lookupAttr,\r\n description: attr.description\r\n }));\r\n }\r\n }\r\n }\r\n var sortCheck = function (a, b) {\r\n if (a.text.toLowerCase() == b.text.toLowerCase()) {\r\n return 0;\r\n }\r\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n return 1;\r\n }\r\n return -1;\r\n };\r\n if (opts.sortEntities) {\r\n resultEntities.sort(sortCheck);\r\n resultAttributes.sort(sortCheck);\r\n }\r\n var result;\r\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\r\n result = resultEntities.concat(resultAttributes);\r\n }\r\n else {\r\n result = resultAttributes.concat(resultEntities);\r\n }\r\n if (opts.attrPlacement == 2) {\r\n result.sort(sortCheck);\r\n }\r\n if (opts.includeRootData) {\r\n caption = i18n.getText('Entities', entity.name);\r\n if (!caption)\r\n caption = entity.caption;\r\n return { id: entity.name, text: caption, items: result };\r\n }\r\n else {\r\n return result;\r\n }\r\n };\r\n /**\r\n * Clears data model.\r\n */\r\n MetaData.prototype.clear = function () {\r\n this.rootEntity = this.createEntity();\r\n this.editors = [];\r\n this.version = '';\r\n };\r\n /**\r\n * Add default value editors.\r\n */\r\n MetaData.prototype.addDefaultValueEditors = function () {\r\n var ve;\r\n ve = this.addOrUpdateValueEditor('_DTE', EditorTag.Edit, DataType.String);\r\n ve.defValue = '';\r\n this.addOrUpdateValueEditor('_DPDE', EditorTag.DateTime, DataType.DateTime);\r\n this.addOrUpdateValueEditor('_DPTE', EditorTag.DateTime, DataType.DateTime);\r\n };\r\n /**\r\n * Add or update a value editor.\r\n * @param id The id.\r\n * @param tag The tag.\r\n * @param resType The result type.\r\n * @returns The value editor.\r\n */\r\n MetaData.prototype.addOrUpdateValueEditor = function (id, tag, resType) {\r\n var ve = utils.findItemById(this.editors, id);\r\n if (!ve) {\r\n ve = this.createValueEditor();\r\n ve.id = id;\r\n this.editors.push(ve);\r\n }\r\n ve.tag = tag;\r\n ve.resType = resType;\r\n return ve;\r\n };\r\n /**\r\n * Gets entities tree.\r\n * @param opts The options.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to options and the filter function\r\n */\r\n MetaData.prototype.getEntitiesTree = function (opts, filterFunc) {\r\n return this.listByEntity(this.getRootEntity(), opts, filterFunc);\r\n };\r\n /**\r\n * Gets entities tree due to filter.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to the filter function\r\n */\r\n MetaData.prototype.getEntitiesTreeWithFilter = function (filterFunc) {\r\n return this.listByEntityWithFilter(this.getRootEntity(), filterFunc);\r\n };\r\n /**\r\n * Finds full entity path by attribute\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getFullEntityPathByAttr = function (attrId, sep) {\r\n sep = sep || ' ';\r\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\r\n };\r\n /**\r\n * Finds entity path by attribute\r\n * @param entity The entity.\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @param root The root option.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getEntityPathByAttr = function (entity, attrId, sep, root) {\r\n if (!entity)\r\n return '';\r\n sep = sep || ' ';\r\n var entityCaption = '';\r\n if (entity.caption && !root) {\r\n var entityText = i18n.getText('Entities', entity.caption);\r\n entityCaption = entityText ? entityText : entity.caption;\r\n }\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; i < attrCount; i++) {\r\n if (entity.attributes[i].id == attrId) {\r\n return entityCaption;\r\n }\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; i < subEntityCount; i++) {\r\n var ent = entity.subEntities[i];\r\n var res = this.getEntityPathByAttr(ent, attrId, sep, false);\r\n if (res !== '') {\r\n if (entityCaption !== '')\r\n res = entityCaption + sep + res;\r\n return res;\r\n }\r\n }\r\n }\r\n return '';\r\n };\r\n /**\r\n * Gets the attribute text.\r\n * @param attr The attribute.\r\n * @param format The format.\r\n * @returns Formatted text.\r\n */\r\n MetaData.prototype.getAttributeText = function (attr, format) {\r\n var attrText = i18n.getText('Attributes', attr.id);\r\n if (!attrText) {\r\n attrText = attr.caption;\r\n }\r\n if (!format) {\r\n return attrText;\r\n }\r\n var result = '';\r\n var entityPath = this.getFullEntityPathByAttr(attr.id, ' ');\r\n if (entityPath) {\r\n result = format.replace(new RegExp('{attr}', 'g'), attrText);\r\n result = result.replace(new RegExp('{entity}', 'g'), entityPath);\r\n }\r\n else {\r\n result = attrText;\r\n }\r\n return result.trim();\r\n };\r\n /**\r\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\r\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\r\n * The processed attribute is passed in the first function parameter.\r\n * @param processEntity The callback function which is called for each entity in tree.\r\n * The processed entity is passed in the first function parameter.\r\n */\r\n MetaData.prototype.runThroughEntities = function (processAttribute, processEntity) {\r\n this.getRootEntity().scan(processAttribute, processEntity);\r\n };\r\n /**\r\n * Finds first attribute by filter.\r\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\r\n */\r\n MetaData.prototype.getFirstAttributeByFilter = function (filterFunc) {\r\n var res = null;\r\n this.runThroughEntities(function (attr, opts) {\r\n if (filterFunc(attr)) {\r\n opts.stop = true;\r\n res = attr;\r\n }\r\n }, null);\r\n return res;\r\n };\r\n return MetaData;\r\n}());\r\nexport { MetaData };\r\n//# sourceMappingURL=meta_data.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n/**\r\n * Defines aggregations settings for the current context.\r\n * Group, aggregate columns, grand totals, etc.\r\n */\r\nvar AggregationSettings = /** @class */ (function () {\r\n function AggregationSettings(colStore) {\r\n this.colStore = colStore;\r\n this.aggregates = [];\r\n this.groups = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this._caseSensitiveGroups = false;\r\n this.COUNT_FIELD_NAME = 'GRPRECCNT';\r\n }\r\n Object.defineProperty(AggregationSettings.prototype, \"caseSensitiveGroups\", {\r\n get: function () {\r\n return this._caseSensitiveGroups;\r\n },\r\n set: function (value) {\r\n this._caseSensitiveGroups = value;\r\n this.updateCompareProc();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AggregationSettings.prototype.updateCompareProc = function () {\r\n this.compareValues = this._caseSensitiveGroups\r\n ? this.strictCompare\r\n : this.caseInsensitiveCompare;\r\n };\r\n AggregationSettings.prototype.addGroup = function (settings) {\r\n var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);\r\n if (!this.colStore.validateColumns(cols))\r\n throw \"Invalid columns: \" + cols;\r\n if (this.hasColumnsInUse(cols))\r\n throw \"Can't add same columns to different groups/aggregates\";\r\n this.groups.push(__assign({ columns: cols }, settings));\r\n return this;\r\n };\r\n AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {\r\n var colId = typeof colIndexOrId == 'string'\r\n ? colIndexOrId\r\n : this.colStore.getColumnIds(colIndexOrId, colIndexOrId)[0];\r\n if (this.hasColumnsInUse([colId]) || !this.colStore.validateAggregate(colId, funcId))\r\n throw 'Invalid aggregation function for the column: ' + colId;\r\n this.aggregates.push({ colId: colId, funcId: funcId });\r\n return this;\r\n };\r\n AggregationSettings.prototype.addGrandTotals = function () {\r\n this.useGrandTotals = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.addCounts = function () {\r\n this.useRecordCount = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.getGroups = function () {\r\n var _this = this;\r\n var cols = [];\r\n var mappedGrops = this.groups.map(function (grp) {\r\n cols = cols.concat(grp.columns);\r\n return __assign(__assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });\r\n });\r\n return mappedGrops;\r\n };\r\n AggregationSettings.prototype.getInternalGroups = function () {\r\n return this.groups;\r\n };\r\n AggregationSettings.prototype.lastGroup = function () {\r\n var groups = this.getGroups();\r\n return groups[groups.length - 1];\r\n };\r\n AggregationSettings.prototype.getAggregates = function () {\r\n return this.aggregates;\r\n };\r\n AggregationSettings.prototype.hasAggregates = function () {\r\n return this.aggregates.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGroups = function () {\r\n return this.groups.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGrandTotals = function () {\r\n return this.useGrandTotals;\r\n };\r\n AggregationSettings.prototype.hasRecordCount = function () {\r\n return this.useRecordCount;\r\n };\r\n AggregationSettings.prototype.isEmpty = function () {\r\n return !(this.hasAggregates() || this.hasGroups() ||\r\n this.hasAggregates() || this.hasRecordCount());\r\n };\r\n AggregationSettings.prototype.drop = function () {\r\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\r\n this.clear();\r\n };\r\n AggregationSettings.prototype.clear = function () {\r\n this.groups = [];\r\n this.aggregates = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this.caseSensitiveGroups = false;\r\n return this;\r\n };\r\n /**\r\n * Checks if all columns from the list passed in the parameter are \"unused\".\r\n * Here \"unused column\" means a column that is included neither in any group nor in the aggregates list.\r\n * @param cols - the array of column IDs\r\n * @returns true if all columns in the list are not used anywhere, othervise - fals\r\n */\r\n AggregationSettings.prototype.hasColumnsInUse = function (cols) {\r\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var interCols = group.columns\r\n .filter(function (c) { return cols.indexOf(c) >= 0; });\r\n if (interCols.length > 0)\r\n return true;\r\n }\r\n for (var _b = 0, _c = this.aggregates; _b < _c.length; _b++) {\r\n var aggr = _c[_b];\r\n if (cols.indexOf(aggr.colId) >= 0)\r\n return true;\r\n }\r\n return false;\r\n };\r\n AggregationSettings.prototype.needAggrCalculation = function () {\r\n return (this.hasAggregates() || this.hasRecordCount())\r\n && (this.hasGrandTotals() || this.hasGroups());\r\n };\r\n AggregationSettings.prototype.saveToData = function () {\r\n return {\r\n groups: Array.from(this.groups),\r\n ugt: this.useGrandTotals,\r\n urc: this.useRecordCount,\r\n csg: this.caseSensitiveGroups,\r\n aggregates: Array.from(this.aggregates)\r\n };\r\n };\r\n AggregationSettings.prototype.loadFromData = function (data) {\r\n if (data) {\r\n if (typeof data.ugt !== 'undefined')\r\n this.useGrandTotals = data.ugt;\r\n if (typeof data.urc !== 'undefined')\r\n this.useRecordCount = data.urc;\r\n if (typeof data.csg !== 'undefined')\r\n this.caseSensitiveGroups = data.csg;\r\n if (data.groups) {\r\n this.groups = Array.from(data.groups);\r\n }\r\n if (data.aggregates) {\r\n this.aggregates = Array.from(data.aggregates);\r\n }\r\n }\r\n };\r\n AggregationSettings.prototype.buildGroupKey = function (group, row) {\r\n var caseInsensitive = !this.caseSensitiveGroups;\r\n var result = {};\r\n if (group) {\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var colId = _a[_i];\r\n var keyVal = row.getValue(colId);\r\n if (caseInsensitive && typeof (keyVal) === 'string') {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n result[colId] = keyVal;\r\n }\r\n }\r\n return result;\r\n };\r\n //returns true if value1 == value2\r\n AggregationSettings.prototype.strictCompare = function (value1, value2) {\r\n 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 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 return AggregationSettings;\r\n}());\r\nexport { AggregationSettings };\r\n//# sourceMappingURL=aggr_settings.js.map","export var liquid;\r\n(function (liquid) {\r\n function renderLiquidTemplate(template, vars) {\r\n var result = template;\r\n if (vars) {\r\n for (var v in vars) {\r\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\r\n result = result.replace(liquidVarRegexp, vars[v]);\r\n }\r\n }\r\n return result;\r\n }\r\n liquid.renderLiquidTemplate = renderLiquidTemplate;\r\n})(liquid || (liquid = {}));\r\n//# sourceMappingURL=liquid.js.map","var DataRow = /** @class */ (function () {\r\n function DataRow(columns, values) {\r\n this.columns = columns;\r\n this.values = values;\r\n }\r\n DataRow.prototype.toArray = function () {\r\n return Array.from(this.values);\r\n };\r\n DataRow.prototype.size = function () {\r\n return this.values.length;\r\n };\r\n DataRow.prototype.getValue = function (colIdOrIndex) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n return this.values[index];\r\n };\r\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n this.values[index] = value;\r\n };\r\n return DataRow;\r\n}());\r\nexport { DataRow };\r\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\r\nimport { DataRow } from './data_row';\r\nimport { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nvar EasyDataTable = /** @class */ (function () {\r\n function EasyDataTable(options) {\r\n this._chunkSize = 1000;\r\n this._elasticChunks = false;\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.loader = null;\r\n this.needTotal = true;\r\n this.isInMemory = false;\r\n options = options || {};\r\n this._chunkSize = options.chunkSize || this._chunkSize;\r\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\r\n this.loader = options.loader;\r\n if (typeof options.inMemory !== 'undefined') {\r\n this.isInMemory = options.inMemory;\r\n }\r\n if (this.isInMemory) {\r\n this.needTotal = false;\r\n }\r\n this._columns = new DataColumnList();\r\n this.onUpdate = options.onUpdate;\r\n if (options.columns) {\r\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\r\n var colDesc = _a[_i];\r\n this._columns.add(colDesc);\r\n }\r\n }\r\n if (options.rows) {\r\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\r\n var rowData = _c[_b];\r\n var row = this.createRow(rowData);\r\n this.addRow(row);\r\n }\r\n }\r\n this.needTotal = !this._elasticChunks;\r\n }\r\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\r\n get: function () {\r\n return this._columns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\r\n get: function () {\r\n return this._chunkSize;\r\n },\r\n set: function (value) {\r\n this._chunkSize = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\r\n get: function () {\r\n return this._elasticChunks;\r\n },\r\n set: function (value) {\r\n this._elasticChunks = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyDataTable.prototype.getRows = function (params) {\r\n var _this = this;\r\n var fromIndex = 0, count = this._chunkSize;\r\n if (params) {\r\n if ('page' in params) {\r\n fromIndex = params.pageSize * (params.page - 1);\r\n count = params.pageSize;\r\n }\r\n else {\r\n fromIndex = params.offset;\r\n count = params.limit;\r\n }\r\n }\r\n var endIndex = fromIndex + count; //the first index of the next page\r\n //if we don't calculate total on this request\r\n if (!this.needTotal && !this.elasticChunks) {\r\n if (fromIndex >= this.total) {\r\n return Promise.resolve([]);\r\n }\r\n if (endIndex > this.total) {\r\n endIndex = this.total;\r\n }\r\n }\r\n if (this.isInMemory && endIndex > this.cachedRows.length) {\r\n endIndex = this.cachedRows.length;\r\n }\r\n var allChunksCached = endIndex <= this.cachedRows.length;\r\n if (allChunksCached) {\r\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\r\n }\r\n //if loader is not defined\r\n if (!this.loader) {\r\n throw \"Loader is not defined. Can't get the rows from \" + fromIndex + \" to \" + endIndex;\r\n }\r\n // we need total only for the first request\r\n var needTotal = this.needTotal;\r\n if (this.needTotal) {\r\n this.needTotal = false;\r\n }\r\n var offset = this.cachedRows.length;\r\n var limit = endIndex - offset;\r\n if (limit < this._chunkSize) {\r\n limit = this._chunkSize;\r\n }\r\n var resultPromise = this.loader.loadChunk({\r\n offset: offset,\r\n limit: limit,\r\n needTotal: needTotal\r\n })\r\n .then(function (result) {\r\n if (needTotal) {\r\n _this.total = result.total;\r\n }\r\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\r\n if (endIndex > _this.cachedRows.length) {\r\n endIndex = _this.cachedRows.length;\r\n }\r\n if (_this.elasticChunks) {\r\n var count_1 = result.table.getCachedCount();\r\n if (count_1 < limit) {\r\n _this.total = _this.cachedRows.length;\r\n }\r\n }\r\n _this.fireUpdated();\r\n return _this.cachedRows.slice(fromIndex, endIndex);\r\n });\r\n return resultPromise;\r\n };\r\n EasyDataTable.prototype.getRow = function (index) {\r\n return this.getRows({ offset: index, limit: 1 })\r\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\r\n };\r\n EasyDataTable.prototype.getTotal = function () {\r\n return this.total;\r\n };\r\n EasyDataTable.prototype.setTotal = function (total) {\r\n this.total = total;\r\n this.needTotal = false;\r\n };\r\n EasyDataTable.prototype.getCachedCount = function () {\r\n return this.cachedRows.length;\r\n };\r\n EasyDataTable.prototype.clear = function () {\r\n this.columns.clear();\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.needTotal = !this._elasticChunks;\r\n this.fireUpdated();\r\n };\r\n EasyDataTable.prototype.createRow = function (dataOrRow) {\r\n var _this = this;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n var values = new Array(this._columns.count);\r\n var getValue = dataOrRow instanceof DataRow\r\n ? function (colId) { return dataOrRow.getValue(colId); }\r\n : function (colId) { return dataOrRow[colId]; };\r\n if (dataOrRow) {\r\n this.columns.getItems().forEach(function (column) {\r\n var value = getValue(column.id);\r\n var index = _this.columns.getIndex(column.id);\r\n values[index] = (dateIdx.indexOf(index) >= 0)\r\n ? _this.mapDate(value, column.type)\r\n : value;\r\n });\r\n }\r\n return new DataRow(this._columns, values);\r\n };\r\n EasyDataTable.prototype.mapDate = function (value, dtype) {\r\n if (value) {\r\n var result = new Date(value);\r\n if (isNaN(result.getTime())\r\n && dtype == DataType.Time) {\r\n result = utils.strToTime(value);\r\n }\r\n return result;\r\n }\r\n return null;\r\n };\r\n EasyDataTable.prototype.addRow = function (rowOrValues) {\r\n var newRow;\r\n if (Array.isArray(rowOrValues)) {\r\n var values = rowOrValues;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n if (dateIdx.length > 0) {\r\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\r\n var idx = dateIdx_1[_i];\r\n if (values[idx]) {\r\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\r\n }\r\n }\r\n }\r\n newRow = new DataRow(this._columns, values);\r\n }\r\n else {\r\n newRow = this.createRow(rowOrValues);\r\n }\r\n this.cachedRows.push(newRow);\r\n var cachedTotal = this.getCachedCount();\r\n if (cachedTotal > this.total) {\r\n this.total = cachedTotal;\r\n }\r\n return newRow;\r\n };\r\n EasyDataTable.prototype.getCachedRows = function () {\r\n return this.cachedRows;\r\n };\r\n EasyDataTable.prototype.totalIsKnown = function () {\r\n if (this.elasticChunks) {\r\n var count = this.getCachedCount();\r\n return count === this.total;\r\n }\r\n return !this.needTotal;\r\n };\r\n EasyDataTable.prototype.fireUpdated = function () {\r\n if (this.onUpdate) {\r\n this.onUpdate(this);\r\n }\r\n };\r\n return EasyDataTable;\r\n}());\r\nexport { EasyDataTable };\r\n//# sourceMappingURL=easy_data_table.js.map","/**\r\n * EasyData representation of GUID.\r\n */\r\nvar EasyGuid = /** @class */ (function () {\r\n function EasyGuid() {\r\n }\r\n /**\r\n * Generates new GUID.\r\n * @returns The string representation of GUID.\r\n */\r\n EasyGuid.newGuid = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n };\r\n return EasyGuid;\r\n}());\r\nexport { EasyGuid };\r\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\r\n/**\r\n * The representation of event emitter.\r\n */\r\nvar EventEmitter = /** @class */ (function () {\r\n /**\r\n * The default constructor.\r\n * @param source The source.\r\n */\r\n function EventEmitter(source) {\r\n this.silentMode = 0;\r\n this.events = new Array();\r\n this.source = source;\r\n }\r\n /**\r\n * Subscries to the event.\r\n * @param eventType The event type.\r\n * @param callback The callback.\r\n * @returns The subscribtion ID.\r\n */\r\n EventEmitter.prototype.subscribe = function (eventType, callback) {\r\n var event = this.getEventRecByType(eventType);\r\n var eventCallback = {\r\n id: EasyGuid.newGuid(),\r\n callback: callback\r\n };\r\n if (event) {\r\n event.eventCallbacks.push(eventCallback);\r\n }\r\n else {\r\n event = {\r\n type: eventType,\r\n eventCallbacks: new Array(eventCallback)\r\n };\r\n this.events.push(event);\r\n }\r\n return eventCallback.id;\r\n };\r\n /**\r\n * Unsubsribes from the event.\r\n * @param eventType The event type.\r\n * @param callbackId The subscribtion ID.\r\n */\r\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\r\n var event = this.getEventRecByType(eventType);\r\n if (event) {\r\n var index = -1;\r\n for (index = 0; index < event.eventCallbacks.length; index++) {\r\n if (event.eventCallbacks[index].id === callbackId) {\r\n break;\r\n }\r\n }\r\n if (index >= 0) {\r\n event.eventCallbacks.splice(index, 1);\r\n }\r\n }\r\n };\r\n /**\r\n * Fires the event.\r\n * @param eventType The event type.\r\n * @param data The event data.\r\n * @param postpone The postpone.\r\n * @param force To fire force. If value is `true`, ignores silent mode.\r\n */\r\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\r\n if (postpone === void 0) { postpone = 0; }\r\n if (force === void 0) { force = false; }\r\n if (this.silentMode && !force) {\r\n return;\r\n }\r\n var eventRec = this.getEventRecByType(eventType);\r\n if (eventRec) {\r\n var eqevent_1 = {\r\n type: eventType,\r\n source: this.source,\r\n data: data\r\n };\r\n var emitAllFunc = function () {\r\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\r\n var callback = _a[_i];\r\n callback.callback(eqevent_1);\r\n }\r\n };\r\n if (postpone > 0) {\r\n setTimeout(emitAllFunc, postpone);\r\n }\r\n else {\r\n emitAllFunc();\r\n }\r\n }\r\n };\r\n /**\r\n * Enters to silent mode.\r\n */\r\n EventEmitter.prototype.enterSilentMode = function () {\r\n this.silentMode++;\r\n };\r\n /**\r\n * Exits from silent mode.\r\n */\r\n EventEmitter.prototype.exitSilentMode = function () {\r\n if (this.silentMode) {\r\n this.silentMode--;\r\n }\r\n };\r\n /**\r\n * Checks if emitter is in silent mode.\r\n * @return `true`, if silent mode is enable.\r\n */\r\n EventEmitter.prototype.isSilent = function () {\r\n return this.silentMode > 0;\r\n };\r\n EventEmitter.prototype.getEventRecByType = function (eventType) {\r\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\r\n var event_1 = _a[_i];\r\n if (event_1.type == eventType) {\r\n return event_1;\r\n }\r\n }\r\n return null;\r\n };\r\n return EventEmitter;\r\n}());\r\nexport { EventEmitter };\r\n//# sourceMappingURL=event_emitter.js.map","import { i18n } from './i18n';\r\ni18n.resetLocales();\r\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\r\nexport * from './types/data_type';\r\nexport * from './types/entity_attr_kind';\r\nexport * from './types/editor_tag';\r\n//http\r\nexport * from './http/http_method';\r\nexport * from './http/http_request';\r\nexport * from './http/http_client';\r\n//meta data\r\nexport * from './meta/meta_data';\r\nexport * from './meta/meta_entity';\r\nexport * from './meta/value_editor';\r\nexport * from './data/aggr_settings';\r\nexport * from './data/data_column';\r\nexport * from './data/data_row';\r\nexport * from './data/easy_data_table';\r\n//event\r\nexport * from './event/event_emitter';\r\n//i18n\r\nexport * from './i18n/i18n';\r\n//utils\r\nexport * from './utils/easy_guid';\r\nexport * from './utils/string_utils';\r\nexport * from './utils/utils';\r\nexport * from './utils/liquid';\r\nimport './i18n/load_default_locale_settings';\r\nif (typeof Object.values !== 'function') {\r\n Object.values = function (obj) {\r\n return Object.keys(obj).map(function (key) { return obj[key]; });\r\n };\r\n}\r\nif (typeof Math.trunc !== 'function') {\r\n Math.trunc = function (x) {\r\n if (isNaN(x)) {\r\n return NaN;\r\n }\r\n if (x > 0) {\r\n return Math.floor(x);\r\n }\r\n return Math.ceil(x);\r\n };\r\n}\r\n//# sourceMappingURL=public_api.js.map","import { \r\n DataLoader, DataRow, \r\n EasyDataTable, utils as dataUtils \r\n} from '@easydata/core';\r\n\r\nimport { DataFilter } from './data_filter';\r\n\r\nexport class TextDataFilter implements DataFilter {\r\n private filterValue = '';\r\n\r\n //turns off client-side search\r\n //for test purposes\r\n private justServerSide = false;\r\n\r\n constructor (\r\n private loader: DataLoader, \r\n private sourceTable: EasyDataTable, \r\n private sourceId: string,\r\n private isLookup = false) {\r\n }\r\n\r\n public getValue() {\r\n return this.filterValue;\r\n }\r\n \r\n public apply(value: string): Promise<EasyDataTable> {\r\n this.filterValue = value;\r\n\r\n if (this.filterValue) {\r\n return this.applyCore();\r\n }\r\n else {\r\n return this.clear();\r\n }\r\n }\r\n\r\n public clear(): Promise<EasyDataTable> {\r\n this.filterValue = '';\r\n return Promise.resolve(this.sourceTable);\r\n }\r\n\r\n private applyCore(): Promise<EasyDataTable> {\r\n if (this.sourceTable.getTotal() == this.sourceTable.getCachedCount() && !this.justServerSide) {\r\n return this.applyInMemoryFilter();\r\n }\r\n else {\r\n const filters = [\r\n { class: \"__substring\", value: this.filterValue }\r\n ]\r\n return this.loader.loadChunk({ \r\n offset: 0, \r\n limit: this.sourceTable.chunkSize, \r\n needTotal: true, \r\n filters: filters,\r\n sourceId: this.sourceId,\r\n lookup: this.isLookup\r\n } as any)\r\n .then(data => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n loader: {\r\n loadChunk: (params) => this.loader\r\n .loadChunk({ ...params, filters: filters, sourceId: this.sourceId, lookup: this.isLookup } as any)\r\n }\r\n });\r\n\r\n for (const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n }\r\n\r\n filteredTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n filteredTable.addRow(row);\r\n }\r\n\r\n return filteredTable;\r\n })\r\n }\r\n }\r\n\r\n private applyInMemoryFilter(): Promise<EasyDataTable> {\r\n return new Promise((resolve, reject) => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n inMemory: true\r\n });\r\n\r\n for(const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n } \r\n \r\n const words = this.filterValue.split('||').map(w => w.trim().toLowerCase());\r\n const suitableColumns = this.sourceTable.columns.getItems()\r\n .filter(col => dataUtils.isNumericType(col.type) \r\n || dataUtils.getStringDataTypes().indexOf(col.type) >= 0)\r\n const hasEnterance = (row: DataRow) => {\r\n for (const col of suitableColumns) {\r\n const value = row.getValue(col.id);\r\n if (value) {\r\n const normalized = value.toString().toLowerCase();\r\n\r\n for(const word of words) {\r\n if (normalized.indexOf(word) >= 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n for (const row of this.sourceTable.getCachedRows()) {\r\n if (hasEnterance(row)) {\r\n filteredTable.addRow(row); \r\n }\r\n }\r\n\r\n filteredTable.setTotal(filteredTable.getCachedCount());\r\n\r\n resolve(filteredTable);\r\n });\r\n } \r\n}","import { browserUtils } from './browser_utils';\r\n/**\r\n * Wraps all the elements inside \"parent\" by \"wrapper\" element\r\n * @param parent The element to add wrapper to.\r\n * @param wrapper The element that will wrap child elements.\r\n */\r\nexport function wrapInner(parent, wrapper) {\r\n parent.appendChild(wrapper);\r\n while (parent.firstChild !== wrapper) {\r\n wrapper.appendChild(parent.firstChild);\r\n }\r\n}\r\n/**\r\n * Creates ands adds a new [[HTMLElement]] to \"parent\"\r\n * @param parent The element to add new element to.\r\n * @param tag Html tag of the new element.\r\n * @param options The options. In particular, options.cssClass sets the new element class.\r\n * @returns New element.\r\n */\r\nexport function addElement(parent, tag, options) {\r\n var element = document.createElement(tag);\r\n var opts = options || {};\r\n if (opts.cssClass) {\r\n element.className = opts.cssClass;\r\n }\r\n parent.appendChild(element);\r\n return element;\r\n}\r\n/**\r\n * Adds css class to the html element.\r\n * @param element The element to add css class to.\r\n * @param className The name of the css class to be added.\r\n */\r\nexport function addCssClass(element, className) {\r\n element.className = (element.className)\r\n ? element.className + ' ' + className\r\n : className;\r\n}\r\n/**\r\n * Hides the html element.\r\n * @param element The element to be hidden.\r\n */\r\nexport function hideElement(element) {\r\n element.style.display = 'none';\r\n}\r\n/**\r\n * Shows the html element.\r\n * @param element The element to be shown.\r\n * @param display The value of \"display\" style to be set. Default value is \"block\".\r\n */\r\nexport function showElement(element, display) {\r\n if (!display) {\r\n display = '';\r\n }\r\n element.style.display = display;\r\n}\r\n/**\r\n * Hides the \"first\" element and shows the \"second\".\r\n * @param first The element to be hidden.\r\n * @param second The element to be shown.\r\n * @param options The options. The following options are applied:\r\n * - display - the value of \"display\" style to be set. Default value is \"block\"\r\n * - duration - the duration of fading in and out\r\n * - complete - the callback to be called when toggle is complete\r\n */\r\nexport function toggleVisibility(first, second, options) {\r\n if (!options) {\r\n options = {};\r\n }\r\n if (!options.display) {\r\n options.display = '';\r\n }\r\n if (!options.duration) {\r\n options.duration = 200;\r\n }\r\n //TODO: later we need to make it fading in and out\r\n hideElement(first);\r\n showElement(second, options.display);\r\n if (options.complete) {\r\n options.complete();\r\n }\r\n}\r\n/**\r\n * Checks if element is visible\r\n * @param element The element to check.\r\n * @returns `true` if visible, otherwise - `false`.\r\n */\r\nexport function isVisible(element) {\r\n return element.style.display != 'none'\r\n && element.offsetWidth != 0\r\n && element.offsetHeight != 0;\r\n}\r\nexport function createBrowserEvent(eventName) {\r\n var event;\r\n if (typeof (Event) === 'function') {\r\n event = new Event(eventName);\r\n }\r\n else {\r\n event = document.createEvent('Event');\r\n event.initEvent(eventName, true, true);\r\n }\r\n return event;\r\n}\r\nexport function getViewportSize() {\r\n var width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\r\n var height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n}\r\nexport function getDocSize() {\r\n if (browserUtils.IsIE())\r\n return getWinSize();\r\n var width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\r\n var height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n}\r\nexport function getScrollPos() {\r\n var body = document.body;\r\n var docElem = document.documentElement;\r\n return {\r\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\r\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\r\n };\r\n}\r\nexport function getElementAbsolutePos(element) {\r\n var res = { x: 0, y: 0 };\r\n if (element !== null) {\r\n var position = offset(element);\r\n res = { x: position.left, y: position.top };\r\n }\r\n return res;\r\n}\r\nfunction offset(element) {\r\n var defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\r\n var box;\r\n try {\r\n box = element.getBoundingClientRect();\r\n }\r\n catch (_a) {\r\n box = defaultBoundingClientRect;\r\n }\r\n var body = document.body;\r\n var docElem = document.documentElement;\r\n var scollPos = getScrollPos();\r\n var scrollTop = scollPos.top;\r\n var scrollLeft = scollPos.left;\r\n var clientTop = docElem.clientTop || body.clientTop || 0;\r\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\r\n var top = box.top + scrollTop - clientTop;\r\n var left = box.left + scrollLeft - clientLeft;\r\n return { top: Math.round(top), left: Math.round(left) };\r\n}\r\nexport function getWinSize() {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n };\r\n}\r\nexport function slideDown(target, duration, callback) {\r\n target.style.removeProperty('display');\r\n var display = window.getComputedStyle(target).display;\r\n if (display === 'none')\r\n display = 'block';\r\n target.style.display = display;\r\n var height = target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0 + 'px';\r\n target.style.paddingTop = 0 + 'px';\r\n target.style.paddingBottom = 0 + 'px';\r\n target.style.marginTop = 0 + 'px';\r\n target.style.marginBottom = 0 + 'px';\r\n target.offsetHeight;\r\n target.style.boxSizing = 'border-box';\r\n target.style.transitionProperty = \"height, margin, padding\";\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.height = height + 'px';\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n window.setTimeout(function () {\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n target.style.removeProperty('box-sizing');\r\n if (callback) {\r\n callback();\r\n }\r\n }, duration);\r\n}\r\nexport function slideUp(target, duration, callback) {\r\n target.style.transitionProperty = 'height, margin, padding';\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.boxSizing = 'border-box';\r\n target.style.height = target.offsetHeight + 'px';\r\n target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0 + 'px';\r\n target.style.paddingTop = 0 + 'px';\r\n target.style.paddingBottom = 0 + 'px';\r\n target.style.marginTop = 0 + 'px';\r\n target.style.marginBottom = 0 + 'px';\r\n window.setTimeout(function () {\r\n target.style.display = 'none';\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n target.style.removeProperty('box-sizing');\r\n if (callback) {\r\n callback();\r\n }\r\n }, duration);\r\n}\r\nexport var eqCssPrefix = 'eqjs';\r\nexport var eqCssMobile = 'eqjs-mobile';\r\n//# sourceMappingURL=ui-utils.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { mask } from './mask';\r\nvar DomElementBuilder = /** @class */ (function () {\r\n function DomElementBuilder(tag, parent) {\r\n if (typeof tag === \"string\") {\r\n this.element = document.createElement(tag);\r\n }\r\n else {\r\n this.element = tag;\r\n }\r\n if (parent && this.element.parentElement !== parent) {\r\n parent.appendChild(this.element);\r\n }\r\n }\r\n DomElementBuilder.prototype.addChild = function (tag, childBuilder) {\r\n var builder = domel(tag, this.element);\r\n if (childBuilder) {\r\n childBuilder(builder);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.addChildElement = function (element) {\r\n if (element) {\r\n this.element.appendChild(element);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.attr = function (attrId, attrValue) {\r\n this.element.setAttribute(attrId, attrValue);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.id = function (value) {\r\n return this.attr(\"id\", value);\r\n };\r\n DomElementBuilder.prototype.focus = function () {\r\n this.element.focus();\r\n return this;\r\n };\r\n DomElementBuilder.prototype.title = function (value) {\r\n return this.attr('title', value);\r\n };\r\n DomElementBuilder.prototype.data = function (dataId, dataValue) {\r\n if (dataValue === void 0) { dataValue = null; }\r\n if (dataValue === null) {\r\n this.element.removeAttribute('data-' + dataId);\r\n return this;\r\n }\r\n else {\r\n return this.attr('data-' + dataId, dataValue);\r\n }\r\n };\r\n DomElementBuilder.prototype.show = function () {\r\n return this.removeStyle('display');\r\n };\r\n DomElementBuilder.prototype.hide = function (toHide) {\r\n if (toHide === void 0) { toHide = true; }\r\n return (toHide) ? this.setStyle('display', 'none') : this;\r\n };\r\n DomElementBuilder.prototype.visible = function (isVisible) {\r\n if (isVisible === void 0) { isVisible = true; }\r\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\r\n };\r\n DomElementBuilder.prototype.isVisible = function () {\r\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\r\n };\r\n DomElementBuilder.prototype.addClass = function (className) {\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n if (className) {\r\n var fullList = __spreadArrays(className.trim().split(\" \"), classNames);\r\n for (var i = 0; i < fullList.length; i++)\r\n this.element.classList.add(fullList[i]);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.removeClass = function (className) {\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n if (className) {\r\n var fullList = __spreadArrays(className.trim().split(\" \"), classNames);\r\n for (var i = 0; i < fullList.length; i++)\r\n this.element.classList.remove(fullList[i]);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.toggleClass = function (className, force) {\r\n if (force === void 0) { force = undefined; }\r\n if (className) {\r\n this.element.classList.toggle(className, force);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.on = function (eventType, listener) {\r\n var eventTypes = eventType.split(' ');\r\n for (var i = 0; i < eventTypes.length; i++) {\r\n this.element.addEventListener(eventTypes[i], listener);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.off = function (eventType, listener) {\r\n var eventTypes = eventType.split(' ');\r\n for (var i = 0; i < eventTypes.length; i++) {\r\n this.element.removeEventListener(eventTypes[i], listener);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.setStyle = function (styleId, styleValue) {\r\n this.element.style.setProperty(styleId, styleValue);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.removeStyle = function (styleId) {\r\n this.element.style.removeProperty(styleId);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.text = function (text) {\r\n this.element.innerText = text;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.html = function (html) {\r\n this.element.innerHTML = html;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.clear = function () {\r\n var oldElem = this.element;\r\n this.element = document.createElement(this.element.tagName);\r\n oldElem.replaceWith(this.element);\r\n };\r\n DomElementBuilder.prototype.addText = function (text) {\r\n var textEl = document.createTextNode(text);\r\n this.element.appendChild(textEl);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.addHtml = function (html) {\r\n this.element.innerHTML += html;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.toDOM = function () {\r\n return this.element;\r\n };\r\n DomElementBuilder.prototype.appendTo = function (parent) {\r\n if (parent) {\r\n parent.appendChild(this.element);\r\n }\r\n return this;\r\n };\r\n return DomElementBuilder;\r\n}());\r\nexport { DomElementBuilder };\r\nvar DomTextAreaElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomTextAreaElementBuilder, _super);\r\n function DomTextAreaElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"textarea\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomTextAreaElementBuilder.prototype.name = function (value) {\r\n this.element.name = value;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.rows = function (rows) {\r\n this.element.rows = rows;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.cols = function (cols) {\r\n this.element.cols = cols;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.value = function (value) {\r\n this.element.value = value;\r\n return this;\r\n };\r\n return DomTextAreaElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomTextAreaElementBuilder };\r\nvar DomInputElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomInputElementBuilder, _super);\r\n function DomInputElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"input\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomInputElementBuilder.prototype.name = function (value) {\r\n this.element.name = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.type = function (value) {\r\n this.element.type = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.size = function (value) {\r\n this.element.size = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.value = function (value) {\r\n if (value instanceof Date) {\r\n this.element.valueAsDate = value;\r\n }\r\n else if (typeof value === \"number\") {\r\n this.element.valueAsNumber = value;\r\n }\r\n else {\r\n this.element.value = value;\r\n }\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.mask = function (maskPattern) {\r\n mask(this.element, maskPattern);\r\n return this;\r\n };\r\n return DomInputElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomInputElementBuilder };\r\nvar DomSelectElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomSelectElementBuilder, _super);\r\n function DomSelectElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"select\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomSelectElementBuilder.prototype.addOption = function (value) {\r\n var option = document.createElement('option');\r\n if (typeof value === \"string\") {\r\n option.value = value;\r\n option.innerHTML = value;\r\n }\r\n else {\r\n option.value = value.value;\r\n option.innerHTML = value.title || value.value;\r\n option.selected = value.selected || false;\r\n }\r\n this.element.appendChild(option);\r\n return this;\r\n };\r\n DomSelectElementBuilder.prototype.value = function (value) {\r\n this.element.value = value;\r\n return this;\r\n };\r\n return DomSelectElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomSelectElementBuilder };\r\nexport function domel(tag, parent) {\r\n if (tag === \"div\" || tag instanceof HTMLDivElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n if (tag === \"span\" || tag instanceof HTMLSpanElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"a\" || tag instanceof HTMLAnchorElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"button\" || tag instanceof HTMLButtonElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"img\" || tag instanceof HTMLImageElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"input\" || tag instanceof HTMLInputElement) {\r\n return new DomInputElementBuilder(tag instanceof HTMLInputElement ? tag : null, parent);\r\n }\r\n else if (tag === \"textarea\" || tag instanceof HTMLTextAreaElement) {\r\n return new DomTextAreaElementBuilder(tag instanceof HTMLTextAreaElement ? tag : null, parent);\r\n }\r\n else if (tag === \"select\" || tag instanceof HTMLSelectElement) {\r\n return new DomSelectElementBuilder(tag instanceof HTMLSelectElement ? tag : null, parent);\r\n }\r\n return new DomElementBuilder(tag, parent);\r\n}\r\n//# sourceMappingURL=dom_elem_builder.js.map","export function mask(input, maskPattern) {\r\n var d = { 9: '[0-9]', a: '[a-z]' };\r\n var mask = maskPattern.split('');\r\n var keyDownHandler = function (e) {\r\n // backspace key or delete key\r\n if (e.keyCode === 8 || e.keyCode === 46) {\r\n e.preventDefault();\r\n var mskd = [];\r\n var startSelection = input.selectionStart;\r\n if (startSelection == 0)\r\n return;\r\n var selection = startSelection;\r\n var onlyLodash = true;\r\n for (var index = mask.length - 1; index >= 0; index--) {\r\n var el = mask[index];\r\n if (d[el]) {\r\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\r\n if (t && index != startSelection - 1) {\r\n onlyLodash = false;\r\n }\r\n if (index === startSelection - 1)\r\n selection--;\r\n mskd.push(t && index != startSelection - 1\r\n ? input.value.charAt(index)\r\n : '_');\r\n }\r\n else {\r\n if (index === selection - 1)\r\n selection--;\r\n if (startSelection - 1 === index)\r\n startSelection--;\r\n mskd.push(el);\r\n }\r\n }\r\n input.value = !onlyLodash ? mskd.reverse().join('') : '';\r\n input.selectionStart = input.selectionEnd = selection < 0 ? 0 : selection;\r\n var event_1 = document.createEvent('Event');\r\n event_1.initEvent('input', true, true);\r\n input.dispatchEvent(event_1);\r\n }\r\n };\r\n var keyPressHandler = function (e) {\r\n var char = String.fromCharCode(e.charCode);\r\n if (char) {\r\n e.preventDefault();\r\n var mskd_1 = [];\r\n var selectionStart_1 = input.selectionStart;\r\n var selection_1 = selectionStart_1;\r\n mask.forEach(function (el, index) {\r\n if (d[el]) {\r\n var ch = (index != selectionStart_1)\r\n ? input.value.charAt(index)\r\n : char;\r\n var t = new RegExp(d[el], 'i').test(ch);\r\n mskd_1.push(t ? ch : '_');\r\n if (t && selectionStart_1 === index)\r\n selection_1++;\r\n }\r\n else {\r\n mskd_1.push(el);\r\n if (selection_1 === index)\r\n selection_1++;\r\n if (selectionStart_1 === index)\r\n selectionStart_1++;\r\n }\r\n });\r\n input.value = mskd_1.join('');\r\n input.selectionStart = input.selectionEnd = selection_1;\r\n var event_2 = document.createEvent('Event');\r\n event_2.initEvent('input', true, true);\r\n input.dispatchEvent(event_2);\r\n }\r\n };\r\n var inputHandler = function (e) {\r\n if (e.type === 'focus' && input.value !== '')\r\n return;\r\n var mskd = [];\r\n var startSelection = input.selectionStart;\r\n mask.forEach(function (el, index) {\r\n if (d[el]) {\r\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\r\n mskd.push(t ? input.value.charAt(index) : '_');\r\n }\r\n else {\r\n mskd.push(el);\r\n }\r\n });\r\n input.value = mskd.join('');\r\n input.selectionStart = input.selectionEnd = startSelection;\r\n };\r\n input.addEventListener('keydown', keyDownHandler);\r\n input.addEventListener('keypress', keyPressHandler);\r\n input.addEventListener('input', inputHandler);\r\n input.addEventListener('focus', inputHandler);\r\n}\r\n//# sourceMappingURL=mask.js.map","import { utils } from '@easydata/core';\r\nimport { getElementAbsolutePos } from './ui-utils';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nvar touchEventIsDefined = typeof TouchEvent !== 'undefined';\r\nexport var DropEffect;\r\n(function (DropEffect) {\r\n DropEffect[\"None\"] = \"none\";\r\n DropEffect[\"Allow\"] = \"allow\";\r\n DropEffect[\"Forbid\"] = \"forbid\";\r\n})(DropEffect || (DropEffect = {}));\r\nvar EqDragEvent = /** @class */ (function () {\r\n function EqDragEvent(item, dragImage, sourceEvent) {\r\n this.dropEffect = DropEffect.Allow;\r\n this.pageX = 0;\r\n this.pageY = 0;\r\n this.item = item;\r\n this.dragImage = dragImage;\r\n this.data = item.data;\r\n this.sourceEvent = sourceEvent;\r\n if (sourceEvent && sourceEvent instanceof MouseEvent) {\r\n this.pageX = sourceEvent.pageX,\r\n this.pageY = sourceEvent.pageY;\r\n }\r\n if (sourceEvent && touchEventIsDefined && sourceEvent instanceof TouchEvent\r\n && sourceEvent.touches[0]) {\r\n this.pageX = sourceEvent.touches[0].pageX,\r\n this.pageY = sourceEvent.touches[0].pageY;\r\n }\r\n }\r\n return EqDragEvent;\r\n}());\r\nexport { EqDragEvent };\r\nvar Position = /** @class */ (function () {\r\n function Position(ev) {\r\n if (ev && ev instanceof MouseEvent) {\r\n this.x = ev.pageX,\r\n this.y = ev.pageY;\r\n }\r\n if (ev && touchEventIsDefined && ev instanceof TouchEvent && ev.touches[0]) {\r\n this.x = ev.touches[0].pageX,\r\n this.y = ev.touches[0].pageY;\r\n }\r\n }\r\n return Position;\r\n}());\r\nvar DragManager = /** @class */ (function () {\r\n function DragManager() {\r\n this.delta = 5;\r\n this.draggableItem = null;\r\n this.dragImage = null;\r\n this.finishedSuccessfully = false;\r\n this.mouseDownPosition = null;\r\n this.containerDescriptors = [];\r\n this.containerDescriptorIndex = -1;\r\n this.dropEffect = DropEffect.None;\r\n this.classPrefix = 'eqjs-drop';\r\n this.DRAG_DISABLED_ATTR = 'drag-disabled';\r\n }\r\n DragManager.prototype.registerDraggableItem = function (descriptor) {\r\n var _this = this;\r\n var element = descriptor.element;\r\n if (!element) {\r\n throw Error(\"Element in draggle item is null or undefined\");\r\n }\r\n element.ondragstart = function () {\r\n return false;\r\n };\r\n var detectDragging = function (ev) {\r\n if (element.hasAttribute(_this.DRAG_DISABLED_ATTR)) {\r\n return;\r\n }\r\n ev.preventDefault();\r\n if (ev instanceof MouseEvent) {\r\n ev.stopPropagation();\r\n }\r\n var cursorPosition = new Position(ev);\r\n if (Math.abs(cursorPosition.x - _this.mouseDownPosition.x) > _this.delta\r\n || Math.abs(cursorPosition.y - _this.mouseDownPosition.y) > _this.delta) {\r\n startDragging(ev);\r\n }\r\n };\r\n var mouseMoveEventListener = function (ev) {\r\n _this.mouseMoveDragListener(ev);\r\n };\r\n var startDragging = function (ev) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n element.removeEventListener('mousemove', detectDragging);\r\n element.removeEventListener('touchmove', detectDragging);\r\n _this.finishedSuccessfully = false;\r\n if (descriptor.beforeDragStart)\r\n descriptor.beforeDragStart();\r\n _this.dragImage = domel('div')\r\n .setStyle('position', 'absolute')\r\n .setStyle('z-index', '65530')\r\n .toDOM();\r\n document.body.appendChild(_this.dragImage);\r\n _this.dragImage.appendChild(element.cloneNode(true));\r\n if (descriptor.renderer) {\r\n descriptor.renderer(_this.dragImage);\r\n }\r\n _this.dropEffect = DropEffect.None;\r\n _this.updateCusror(_this.dropEffect);\r\n _this.updateImageClass(_this.dropEffect);\r\n _this.draggableItem = {\r\n element: element,\r\n scope: descriptor.scope,\r\n data: descriptor.data\r\n };\r\n _this.updateDragItemPosition(ev);\r\n var event = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n event.dropEffect = _this.dropEffect;\r\n if (descriptor.onDragStart) {\r\n descriptor.onDragStart(event);\r\n }\r\n if (_this.dropEffect !== event.dropEffect) {\r\n _this.dropEffect = event.dropEffect;\r\n _this.updateImageClass(_this.dropEffect);\r\n }\r\n document.addEventListener('mousemove', mouseMoveEventListener, true);\r\n document.addEventListener('touchmove', mouseMoveEventListener, true);\r\n };\r\n var mouseDownListener = function (ev) {\r\n if (touchEventIsDefined && ev instanceof TouchEvent) {\r\n ev.preventDefault();\r\n }\r\n _this.mouseDownPosition = new Position(ev);\r\n element.addEventListener('mousemove', detectDragging);\r\n element.addEventListener('touchmove', detectDragging);\r\n document.addEventListener('mouseup', mouseUpListener);\r\n document.addEventListener('touchend', mouseUpListener);\r\n };\r\n element.addEventListener('mousedown', mouseDownListener);\r\n element.addEventListener('touchstart', mouseDownListener);\r\n var mouseUpListener = function (ev) {\r\n _this.mouseDownPosition = null;\r\n element.removeEventListener('mousemove', detectDragging);\r\n element.removeEventListener('touchmove', detectDragging);\r\n document.removeEventListener('mousemove', mouseMoveEventListener, true);\r\n document.removeEventListener('touchmove', mouseMoveEventListener, true);\r\n if (_this.draggableItem) {\r\n endDraggind(ev);\r\n }\r\n };\r\n var endDraggind = function (ev) {\r\n try {\r\n if (_this.containerDescriptorIndex >= 0) {\r\n var dropContDesc = _this.containerDescriptors[_this.containerDescriptorIndex];\r\n var container = {\r\n element: dropContDesc.element,\r\n scopes: dropContDesc.scopes,\r\n data: dropContDesc.data\r\n };\r\n var event_1 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n try {\r\n if (container.scopes.indexOf(_this.draggableItem.scope) >= 0\r\n && _this.dropEffect === DropEffect.Allow) {\r\n _this.finishedSuccessfully = true;\r\n if (dropContDesc.onDrop) {\r\n dropContDesc.onDrop(container, event_1);\r\n }\r\n }\r\n }\r\n finally {\r\n if (dropContDesc.onDragLeave) {\r\n dropContDesc.onDragLeave(container, event_1);\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n try {\r\n var event_2 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n event_2.data.finishedSuccessfully = _this.finishedSuccessfully;\r\n if (descriptor.onDragEnd) {\r\n descriptor.onDragEnd(event_2);\r\n }\r\n }\r\n finally {\r\n _this.draggableItem = null;\r\n if (_this.dragImage && _this.dragImage.parentElement) {\r\n _this.dragImage.parentElement.removeChild(_this.dragImage);\r\n }\r\n _this.dragImage = null;\r\n _this.finishedSuccessfully = false;\r\n document.removeEventListener('mouseup', mouseUpListener);\r\n document.removeEventListener('touchend', mouseUpListener);\r\n }\r\n }\r\n };\r\n };\r\n DragManager.prototype.registerDropContainer = function (descriptor) {\r\n var element = descriptor.element;\r\n if (!element) {\r\n throw Error(\"Element in drop container is null or undefined\");\r\n }\r\n this.containerDescriptors.push(descriptor);\r\n };\r\n DragManager.prototype.removeDropContainer = function (descriptorOrSlot) {\r\n var descs = this.containerDescriptors\r\n .filter(function (desc) { return desc === descriptorOrSlot\r\n || desc.element == descriptorOrSlot; });\r\n if (descs) {\r\n for (var _i = 0, descs_1 = descs; _i < descs_1.length; _i++) {\r\n var desc = descs_1[_i];\r\n utils.removeArrayItem(this.containerDescriptors, desc);\r\n }\r\n }\r\n };\r\n DragManager.prototype.mouseMoveDragListener = function (ev) {\r\n if (ev instanceof MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n ev.stopPropagation();\r\n this.updateDragItemPosition(ev);\r\n if (this.containerDescriptorIndex == -1) {\r\n for (var i = 0; i < this.containerDescriptors.length; i++) {\r\n var descriptor = this.containerDescriptors[i];\r\n if (this.detectDragEnterEvent(descriptor.element, ev)) {\r\n this.containerDescriptorIndex = i;\r\n break;\r\n }\r\n }\r\n if (this.containerDescriptorIndex >= 0) {\r\n this.dragEnterEvent(ev);\r\n }\r\n }\r\n else {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n if (this.detectDragLeaveEvent(descriptor.element, ev)) {\r\n this.dragLeaveEvent(ev);\r\n this.containerDescriptorIndex = -1;\r\n }\r\n }\r\n if (this.containerDescriptorIndex >= 0) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_3 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_3.dropEffect = this.dropEffect;\r\n if (descriptor.onDragOver) {\r\n descriptor.onDragOver(container, event_3);\r\n }\r\n }\r\n }\r\n };\r\n DragManager.prototype.updateCusror = function (dropEffect) {\r\n switch (dropEffect) {\r\n case DropEffect.Allow:\r\n this.setCursorStyle(this.dragImage, 'grabbing');\r\n break;\r\n case DropEffect.Forbid:\r\n this.setCursorStyle(this.dragImage, 'no-drop');\r\n break;\r\n default:\r\n this.setCursorStyle(this.dragImage, 'grabbing');\r\n break;\r\n }\r\n };\r\n DragManager.prototype.updateImageClass = function (dropEffect) {\r\n this.dragImage.classList.remove(this.classPrefix + \"-allow\");\r\n this.dragImage.classList.remove(this.classPrefix + \"-forbid\");\r\n this.dragImage.classList.remove(this.classPrefix + \"-none\");\r\n switch (dropEffect) {\r\n case DropEffect.Allow:\r\n this.dragImage.classList.add(this.classPrefix + \"-allow\");\r\n break;\r\n case DropEffect.None:\r\n this.dragImage.classList.add(this.classPrefix + \"-none\");\r\n break;\r\n case DropEffect.Forbid:\r\n this.dragImage.classList.add(this.classPrefix + \"-forbid\");\r\n break;\r\n default:\r\n this.dragImage.classList.add(this.classPrefix + \"-none\");\r\n break;\r\n }\r\n };\r\n DragManager.prototype.setCursorStyle = function (element, cursor) {\r\n if (element) {\r\n element.style.cursor = cursor;\r\n for (var i = 0; i < element.children.length; i++) {\r\n this.setCursorStyle(element.children[i], cursor);\r\n }\r\n }\r\n };\r\n DragManager.prototype.updateDragItemPosition = function (ev) {\r\n if (this.dragImage) {\r\n var pos = new Position(ev);\r\n this.dragImage.style.top = (pos.y - this.dragImage.offsetHeight / 2) + 'px';\r\n this.dragImage.style.left = (pos.x - this.dragImage.offsetWidth / 2) + 'px';\r\n }\r\n };\r\n DragManager.prototype.dragEnterEvent = function (ev) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_4 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_4.dropEffect = DropEffect.Allow;\r\n if (descriptor.onDragEnter) {\r\n descriptor.onDragEnter(container, event_4);\r\n }\r\n this.dropEffect = event_4.dropEffect;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n else {\r\n if (this.dropEffect !== DropEffect.Forbid) {\r\n this.dropEffect = DropEffect.None;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n }\r\n };\r\n DragManager.prototype.dragLeaveEvent = function (ev) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_5 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_5.dropEffect = DropEffect.None;\r\n if (descriptor.onDragLeave) {\r\n descriptor.onDragLeave(container, event_5);\r\n }\r\n this.dropEffect = event_5.dropEffect;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n };\r\n DragManager.prototype.detectDragEnterEvent = function (container, ev) {\r\n var containerPos = getElementAbsolutePos(container);\r\n var pos = new Position(ev);\r\n if (pos.y < containerPos.y || pos.y > containerPos.y + container.offsetHeight) {\r\n return false;\r\n }\r\n if (pos.x < containerPos.x || pos.x > containerPos.x + container.offsetWidth) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n DragManager.prototype.detectDragLeaveEvent = function (container, ev) {\r\n var containerPos = getElementAbsolutePos(container);\r\n var pos = new Position(ev);\r\n if (pos.y > containerPos.y && pos.y < containerPos.y + container.offsetHeight\r\n && pos.x > containerPos.x && pos.x < containerPos.x + container.offsetWidth) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n return DragManager;\r\n}());\r\nexport { DragManager };\r\n//global variable\r\nexport var eqDragManager = new DragManager();\r\n//# sourceMappingURL=drag_manager.js.map","export var AutoResizeColumns;\r\n(function (AutoResizeColumns) {\r\n AutoResizeColumns[AutoResizeColumns[\"Always\"] = 0] = \"Always\";\r\n AutoResizeColumns[AutoResizeColumns[\"Once\"] = 1] = \"Once\";\r\n AutoResizeColumns[AutoResizeColumns[\"Never\"] = 2] = \"Never\";\r\n})(AutoResizeColumns || (AutoResizeColumns = {}));\r\n//# sourceMappingURL=easy_grid_options.js.map","import { i18n, DataType } from '@easydata/core';\r\nimport { GridColumnAlign } from './easy_grid_columns';\r\nvar cssPrefix = \"keg\";\r\nexport var DFMT_REGEX = /{0:(.*?)}/g;\r\nexport var CellRendererType;\r\n(function (CellRendererType) {\r\n CellRendererType[CellRendererType[\"STRING\"] = 1] = \"STRING\";\r\n CellRendererType[CellRendererType[\"NUMBER\"] = 2] = \"NUMBER\";\r\n CellRendererType[CellRendererType[\"DATETIME\"] = 3] = \"DATETIME\";\r\n CellRendererType[CellRendererType[\"BOOL\"] = 4] = \"BOOL\";\r\n})(CellRendererType || (CellRendererType = {}));\r\nvar StringCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var text = value ? value.toString().replace(/\\n/g, '\\u21B5 ') : '';\r\n cellValueElement.innerText = text;\r\n cellValueElement.title = text;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-left\");\r\n }\r\n};\r\nvar NumberCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var strValue = (value || '').toString();\r\n if (typeof value == 'number') {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n strValue = value.toLocaleString();\r\n }\r\n }\r\n cellValueElement.innerText = strValue;\r\n cellValueElement.title = strValue;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar DateTimeCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var isDate = Object.prototype.toString.call(value) === '[object Date]';\r\n var strValue = (value || '').toString();\r\n if (isDate) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.dateTimeToStr(value, column.type, $1);\r\n });\r\n }\r\n else {\r\n var locale = i18n.getCurrentLocale();\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n switch (column.type) {\r\n case DataType.Date:\r\n strValue = value.toLocaleDateString(locale);\r\n break;\r\n case DataType.Time:\r\n strValue = value.toLocaleTimeString(locale, timeOptions);\r\n break;\r\n case DataType.DateTime:\r\n strValue = value.toLocaleDateString(locale) + \" \" + value.toLocaleTimeString(locale, timeOptions);\r\n break;\r\n }\r\n }\r\n }\r\n cellValueElement.innerText = strValue;\r\n cellValueElement.title = strValue;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar BoolCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n var strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.booleanToStr(value, $1);\r\n });\r\n return StringCellRendererDefault(strValue, column, cellValueElement, rowElement);\r\n }\r\n else {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-bool\");\r\n cellValueElement.classList.add(cssPrefix + \"-\" + (value ? 'cell-value-true' : 'cell-value-false'));\r\n }\r\n};\r\nvar GridCellRendererStore = /** @class */ (function () {\r\n function GridCellRendererStore(options) {\r\n this.renderers = {};\r\n this.defaultRenderers = {};\r\n this.registerRenderer('StringDefault', StringCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.STRING, StringCellRendererDefault);\r\n this.registerRenderer('NumberDefault', NumberCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.NUMBER, NumberCellRendererDefault);\r\n this.registerRenderer('DateTimeDefault', DateTimeCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.DATETIME, DateTimeCellRendererDefault);\r\n this.registerRenderer('BoolDefault', BoolCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.BOOL, BoolCellRendererDefault);\r\n }\r\n GridCellRendererStore.prototype.getDefaultRenderer = function (columnType) {\r\n var cellType = this.getCellType(columnType);\r\n return this.defaultRenderers[CellRendererType[cellType]];\r\n };\r\n GridCellRendererStore.prototype.getDefaultRendererByType = function (rendererType) {\r\n return this.defaultRenderers[CellRendererType[rendererType]];\r\n };\r\n GridCellRendererStore.prototype.setDefaultRenderer = function (cellType, renderer) {\r\n if (renderer) {\r\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\r\n }\r\n };\r\n GridCellRendererStore.prototype.getRenderer = function (name) {\r\n return this.renderers[name];\r\n };\r\n GridCellRendererStore.prototype.registerRenderer = function (name, renderer) {\r\n this.renderers[name] = renderer;\r\n };\r\n GridCellRendererStore.prototype.getCellType = function (dataType) {\r\n switch (dataType) {\r\n case DataType.Autoinc:\r\n case DataType.Byte:\r\n case DataType.Word:\r\n case DataType.Currency:\r\n case DataType.Float:\r\n case DataType.Int32:\r\n case DataType.Int64:\r\n return CellRendererType.NUMBER;\r\n case DataType.Date:\r\n case DataType.DateTime:\r\n case DataType.Time:\r\n return CellRendererType.DATETIME;\r\n case DataType.Bool:\r\n return CellRendererType.BOOL;\r\n default:\r\n return CellRendererType.STRING;\r\n }\r\n };\r\n return GridCellRendererStore;\r\n}());\r\nexport { GridCellRendererStore };\r\n//# sourceMappingURL=easy_grid_cell_renderer.js.map","import { utils, ColumnAlignment } from '@easydata/core';\r\nimport { CellRendererType } from \"./easy_grid_cell_renderer\";\r\nvar DEFAULT_WIDTH_STRING = 250;\r\nvar ROW_NUM_WIDTH = 60;\r\nexport var GridColumnAlign;\r\n(function (GridColumnAlign) {\r\n GridColumnAlign[GridColumnAlign[\"NONE\"] = 1] = \"NONE\";\r\n GridColumnAlign[GridColumnAlign[\"LEFT\"] = 2] = \"LEFT\";\r\n GridColumnAlign[GridColumnAlign[\"CENTER\"] = 3] = \"CENTER\";\r\n GridColumnAlign[GridColumnAlign[\"RIGHT\"] = 4] = \"RIGHT\";\r\n})(GridColumnAlign || (GridColumnAlign = {}));\r\nfunction MapAlignment(alignment) {\r\n switch (alignment) {\r\n case ColumnAlignment.Left:\r\n return GridColumnAlign.LEFT;\r\n case ColumnAlignment.Center:\r\n return GridColumnAlign.CENTER;\r\n case ColumnAlignment.Right:\r\n return GridColumnAlign.RIGHT;\r\n default:\r\n return GridColumnAlign.NONE;\r\n }\r\n}\r\nvar GridColumn = /** @class */ (function () {\r\n function GridColumn(column, grid, isRowNum) {\r\n if (isRowNum === void 0) { isRowNum = false; }\r\n this._label = null;\r\n this._description = null;\r\n //public left: number;\r\n this.align = GridColumnAlign.NONE;\r\n this.isVisible = true;\r\n this.isRowNum = false;\r\n this.dataColumn = column;\r\n this.grid = grid;\r\n var widthOptions = grid.options.columnWidths || {};\r\n if (column) {\r\n if (column.style.alignment) {\r\n this.align = MapAlignment(column.style.alignment);\r\n }\r\n this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;\r\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);\r\n this._description = column.description;\r\n }\r\n else if (isRowNum) {\r\n this.isRowNum = true;\r\n this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;\r\n this._label = '';\r\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\r\n }\r\n if (grid && grid.options && grid.options.onGetCellRenderer) {\r\n this.cellRenderer = grid.options.onGetCellRenderer(this, this.cellRenderer) || this.cellRenderer;\r\n }\r\n }\r\n Object.defineProperty(GridColumn.prototype, \"label\", {\r\n get: function () {\r\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\r\n },\r\n set: function (value) {\r\n this._label = this.label;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ;\r\n Object.defineProperty(GridColumn.prototype, \"description\", {\r\n /** Get column description. */\r\n get: function () {\r\n return this._description;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GridColumn.prototype, \"type\", {\r\n get: function () {\r\n return this.dataColumn ? this.dataColumn.type : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return GridColumn;\r\n}());\r\nexport { GridColumn };\r\nvar GridColumnList = /** @class */ (function () {\r\n function GridColumnList(columnList, grid) {\r\n this.items = [];\r\n this.grid = grid;\r\n this.sync(columnList);\r\n }\r\n GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {\r\n if (hasRowNumCol === void 0) { hasRowNumCol = true; }\r\n this.clear();\r\n var rowNumCol = new GridColumn(null, this.grid, true);\r\n this.add(rowNumCol);\r\n if (!hasRowNumCol) {\r\n rowNumCol.isVisible = false;\r\n }\r\n if (columnList) {\r\n for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {\r\n var column = _a[_i];\r\n var col = new GridColumn(column, this.grid);\r\n if (this.grid.options.onSyncGridColumn) {\r\n this.grid.options.onSyncGridColumn(col);\r\n }\r\n this.add(col);\r\n }\r\n }\r\n };\r\n Object.defineProperty(GridColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n GridColumnList.prototype.add = function (col) {\r\n var index = this.items.length;\r\n this.items.push(col);\r\n return index;\r\n };\r\n GridColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.items.length) {\r\n this.items[index] = col;\r\n }\r\n };\r\n GridColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex)\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n };\r\n GridColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.items.length) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n // public getIndex(name: string) : number {\r\n // return this.mapper[name];\r\n // }\r\n GridColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n GridColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n //delete this.mapper[col.name];\r\n };\r\n GridColumnList.prototype.clear = function () {\r\n this.items = [];\r\n //this.mapper = {};\r\n };\r\n return GridColumnList;\r\n}());\r\nexport { GridColumnList };\r\n//# sourceMappingURL=easy_grid_columns.js.map","export var DialogFooterAlignment;\r\n(function (DialogFooterAlignment) {\r\n DialogFooterAlignment[DialogFooterAlignment[\"Left\"] = 1] = \"Left\";\r\n DialogFooterAlignment[DialogFooterAlignment[\"Center\"] = 2] = \"Center\";\r\n DialogFooterAlignment[DialogFooterAlignment[\"Right\"] = 3] = \"Right\";\r\n})(DialogFooterAlignment || (DialogFooterAlignment = {}));\r\n//# sourceMappingURL=dialog_service.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { EventEmitter, DataRow, utils, i18n, DataType } from '@easydata/core';\r\nimport { eqDragManager, DropEffect } from '../utils/drag_manager';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { getElementAbsolutePos, eqCssPrefix } from '../utils/ui-utils';\r\nimport { AutoResizeColumns } from './easy_grid_options';\r\nimport { GridColumnList, GridColumnAlign } from './easy_grid_columns';\r\nimport { GridCellRendererStore } from './easy_grid_cell_renderer';\r\nvar DEFAULT_ROW_HEIGHT = 36;\r\nvar DEFAULT_ROW_COUNT = 15;\r\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\r\nvar EasyGrid = /** @class */ (function () {\r\n /** Creates and initializes all internal properties of the grid object */\r\n function EasyGrid(options) {\r\n this.cssPrefix = \"keg\";\r\n this.pagination = { page: 1, pageSize: 30, total: 0 };\r\n this.paginationOptions = {\r\n maxButtonCount: 10,\r\n useBootstrap: false //true\r\n };\r\n this.defaultDataGridOptions = {\r\n slot: null,\r\n dataTable: null,\r\n fixHeightOnFirstRender: false,\r\n syncGridColumns: true,\r\n useRowNumeration: true,\r\n allowDragDrop: false,\r\n aggregates: {\r\n settings: null,\r\n calculator: null\r\n },\r\n paging: {\r\n enabled: true,\r\n pageSize: 30,\r\n pageSizeItems: [20, 30, 50, 100, 200]\r\n },\r\n columnWidths: {\r\n autoResize: AutoResizeColumns.Always,\r\n stringColumns: {\r\n min: 100,\r\n max: 500,\r\n default: 250\r\n },\r\n numberColumns: {\r\n min: 60,\r\n default: 120\r\n },\r\n boolColumns: {\r\n min: 50,\r\n default: 80\r\n },\r\n dateColumns: {\r\n min: 80,\r\n default: 200\r\n },\r\n otherColumns: {\r\n min: 100,\r\n max: 500,\r\n default: 250\r\n },\r\n rowNumColumn: {\r\n min: 40,\r\n default: 60\r\n }\r\n },\r\n showPlusButton: false,\r\n viewportRowsCount: null,\r\n showActiveRow: true\r\n };\r\n this.rowsOnPagePromise = null;\r\n this.containerInitialHeight = 0;\r\n this.firstRender = true;\r\n this.prevRowTotals = null;\r\n this.landingIndex = -1;\r\n this.landingSlot = domel('div')\r\n .addClass(this.cssPrefix + \"-col-landing-slot\")\r\n .addChildElement(domel('div')\r\n .toDOM())\r\n .toDOM();\r\n this._activeRowIndex = -1;\r\n if (options && options.paging) {\r\n options.paging = utils.assign(this.defaultDataGridOptions.paging, options.paging);\r\n }\r\n this.options = this.mergeOptions(options);\r\n this.processColumnWidthsOptions();\r\n if (!this.options.slot)\r\n throw Error('\"slot\" parameter is required to initialize EasyDataGrid');\r\n if (!this.options.dataTable)\r\n throw Error('\"dataTable\" parameter is required to initialize EasyDataGrid');\r\n this.dataTable = options.dataTable;\r\n this.eventEmitter = new EventEmitter(this);\r\n this.cellRendererStore = new GridCellRendererStore(options);\r\n this.columns = new GridColumnList(this.dataTable.columns, this);\r\n this.setSlot(this.options.slot);\r\n this.init(this.options);\r\n }\r\n EasyGrid.prototype.mergeOptions = function (options) {\r\n var colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\r\n var pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\r\n var result = utils.assign({}, this.defaultDataGridOptions, options);\r\n result.columnWidths = colWidthOptions;\r\n result.paging = pagingOptions;\r\n return result;\r\n };\r\n EasyGrid.prototype.processColumnWidthsOptions = function () {\r\n var widthOptions = this.options.columnWidths;\r\n if (!widthOptions)\r\n return;\r\n //string columns\r\n utils.getStringDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.stringColumns), widthOptions[dataType]);\r\n });\r\n //numeric columns\r\n utils.getNumericDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.numberColumns), widthOptions[dataType]);\r\n });\r\n //bool columns\r\n widthOptions[DataType.Bool] = __assign(__assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\r\n //date columns\r\n utils.getDateDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.dateColumns), widthOptions[dataType]);\r\n });\r\n //other columns\r\n var knownTypes = __spreadArrays(utils.getStringDataTypes(), utils.getNumericDataTypes(), utils.getDateDataTypes(), [\r\n DataType.Bool\r\n ]);\r\n utils.getAllDataTypes().forEach(function (dataType) {\r\n if (!(dataType in knownTypes)) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.otherColumns), widthOptions[dataType]);\r\n }\r\n });\r\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\r\n };\r\n EasyGrid.prototype.setSlot = function (slot) {\r\n if (typeof slot === 'string') {\r\n if (slot.length) {\r\n if (slot[0] === '#') {\r\n this.slot = document.getElementById(slot.substring(1));\r\n }\r\n else if (slot[0] === '.') {\r\n var result = document.getElementsByClassName(slot.substring(1));\r\n if (result.length)\r\n this.slot = result[0];\r\n }\r\n else {\r\n throw Error('Unrecognized slot parameter ' +\r\n '(Must be id, class or HTMLElement): ' + slot);\r\n }\r\n }\r\n }\r\n else {\r\n this.slot = slot;\r\n }\r\n };\r\n /** Initializes grid widget according to the options passed in the parameter */\r\n EasyGrid.prototype.init = function (options) {\r\n var _this = this;\r\n if (options.onInit) {\r\n this.addEventListener('init', options.onInit);\r\n }\r\n if (options.onRowClick) {\r\n this.addEventListener('rowClick', options.onRowClick);\r\n }\r\n if (options.onRowDbClick) {\r\n this.addEventListener('rowDbClick', options.onRowDbClick);\r\n }\r\n if (options.onPlusButtonClick) {\r\n this.addEventListener('plusButtonClick', options.onPlusButtonClick);\r\n }\r\n if (options.onColumnChanged) {\r\n this.addEventListener('columnChanged', options.onColumnChanged);\r\n }\r\n if (options.onColumnDeleted) {\r\n this.addEventListener('columnDeleted', options.onColumnDeleted);\r\n }\r\n if (options.onColumnMoved) {\r\n this.addEventListener('columnMoved', options.onColumnMoved);\r\n }\r\n if (options.onPageChanged) {\r\n this.addEventListener('pageChanged', options.onPageChanged);\r\n }\r\n if (options.onActiveRowChanged) {\r\n this.addEventListener('activeRowChanged', options.onActiveRowChanged);\r\n }\r\n this.addEventListener('pageChanged', function (ev) { return _this.activeRowIndex = -1; });\r\n utils.assignDeep(this.paginationOptions, options.pagination);\r\n this.pagination.pageSize = this.options.paging.pageSize\r\n || this.pagination.pageSize;\r\n if (this.options.allowDragDrop) {\r\n eqDragManager.registerDropContainer({\r\n element: this.slot,\r\n scopes: [\"gridColumnMove\"],\r\n onDragEnter: function (_, ev) {\r\n _this.slot.classList.add(eqCssPrefix + \"-drophover\");\r\n _this.showLandingSlot(ev.pageX, ev.pageY);\r\n },\r\n onDragOver: function (_, ev) {\r\n _this.showLandingSlot(ev.pageX, ev.pageY);\r\n },\r\n onDragLeave: function (_, ev) {\r\n ev.dropEffect = DropEffect.Forbid;\r\n _this.slot.classList.remove(eqCssPrefix + \"-drophover\");\r\n _this.hideLandingSlot();\r\n },\r\n onDrop: function (_, ev) {\r\n _this.dataTable.columns.move(ev.data.column, _this.landingIndex);\r\n _this.refresh();\r\n _this.fireEvent({\r\n type: 'columnMoved',\r\n columnId: ev.data.column.id,\r\n newIndex: _this.landingIndex\r\n });\r\n }\r\n });\r\n }\r\n this.refresh();\r\n this.fireEvent('init');\r\n };\r\n /** Fires a grid event. You can pass either an event type\r\n * (like 'init', 'rowClick', 'pageChanged', etc )\r\n * or a ready-to-use grid event object\r\n * */\r\n EasyGrid.prototype.fireEvent = function (event) {\r\n if (typeof event === \"string\") {\r\n this.eventEmitter.fire(event);\r\n }\r\n else {\r\n this.eventEmitter.fire(event.type, event);\r\n }\r\n };\r\n /** Allows to set the data (represented by a EasyDataTable object)\r\n * or to replace the existing one associated with the grid */\r\n EasyGrid.prototype.setData = function (data) {\r\n this.dataTable = data;\r\n this.clear();\r\n this.refresh();\r\n };\r\n /** Returns the EasyDataTable object associated with the grid via `setData()` call */\r\n EasyGrid.prototype.getData = function () {\r\n return this.dataTable;\r\n };\r\n /** Gets the list of grid columns */\r\n EasyGrid.prototype.getColumns = function () {\r\n return this.columns;\r\n };\r\n /** This function is called when the grid is destroyed */\r\n EasyGrid.prototype.destroy = function () {\r\n this.slot.innerHTML = \"\";\r\n };\r\n /** Clears the current DOM object and re-renders everything from the scratch */\r\n EasyGrid.prototype.refresh = function () {\r\n this.clearDOM();\r\n this.render();\r\n };\r\n EasyGrid.prototype.clearDOM = function () {\r\n this.slot.innerHTML = '';\r\n };\r\n /** Clears all DOM object in the grid and return it to its initial state */\r\n EasyGrid.prototype.clear = function () {\r\n this.pagination.page = 1;\r\n this.clearDOM();\r\n };\r\n /** Renders the grid */\r\n EasyGrid.prototype.render = function () {\r\n var _this = this;\r\n if (!this.hasData() && !this.options.showPlusButton)\r\n return;\r\n this.containerInitialHeight = this.slot.clientHeight;\r\n this.rootDiv = document.createElement('div');\r\n this.rootDiv.style.width = '100%';\r\n this.rootDiv.classList.add(this.cssPrefix + \"-root\");\r\n this.columns.sync(this.dataTable.columns, this.options.useRowNumeration);\r\n this.renderHeader();\r\n this.rootDiv.appendChild(this.headerDiv);\r\n this.renderBody();\r\n this.rootDiv.appendChild(this.bodyDiv);\r\n this.renderFooter();\r\n this.rootDiv.appendChild(this.footerDiv);\r\n var gridContainer = document.createElement('div');\r\n gridContainer.classList.add(this.cssPrefix + \"-container\");\r\n gridContainer.appendChild(this.rootDiv);\r\n this.slot.appendChild(gridContainer);\r\n var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\r\n if (this.rowsOnPagePromise) {\r\n this.rowsOnPagePromise\r\n .then(function () { return _this.updateHeight(); })\r\n .then(function () {\r\n _this.firstRender = false;\r\n _this.rowsOnPagePromise = null;\r\n });\r\n }\r\n else {\r\n setTimeout(function () {\r\n _this.updateHeight()\r\n .then(function () {\r\n _this.firstRender = false;\r\n if (needAutoResize) {\r\n _this.resizeColumns();\r\n }\r\n });\r\n }, 100);\r\n }\r\n };\r\n EasyGrid.prototype.updateHeight = function () {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n if (_this.options.viewportRowsCount) {\r\n var firstRow = _this.bodyCellContainerDiv.firstElementChild;\r\n var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\r\n var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\r\n var viewportHeight_1 = rowHeight * rowCount;\r\n domel(_this.bodyViewportDiv)\r\n .setStyle('height', viewportHeight_1 + \"px\");\r\n setTimeout(function () {\r\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\r\n viewportHeight_1 = viewportHeight_1 + sbHeight;\r\n domel(_this.bodyViewportDiv)\r\n .setStyle('height', viewportHeight_1 + \"px\");\r\n resolve();\r\n }, 100);\r\n return;\r\n }\r\n else if (_this.containerInitialHeight > 0) {\r\n // comment for now since it does not work in all cases\r\n // const bodyHeight = this.containerInitialHeight - this.headerDiv.offsetHeight - this.footerDiv.offsetHeight;\r\n // domel(this.bodyDiv)\r\n // .setStyle('height', `${bodyHeight}px`);\r\n }\r\n resolve();\r\n })\r\n .then(function () {\r\n if (_this.options.fixHeightOnFirstRender && _this.firstRender) {\r\n _this.slot.style.height = _this.slot.offsetHeight + \"px\";\r\n }\r\n });\r\n };\r\n EasyGrid.prototype.getContainerWidth = function () {\r\n return this.columns.getItems()\r\n .filter(function (col) { return col.isVisible; })\r\n .map(function (col) { return col.width; })\r\n .reduce(function (sum, current) { return sum + current; });\r\n };\r\n EasyGrid.prototype.renderHeader = function () {\r\n var _this = this;\r\n this.headerDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-header\")\r\n .toDOM();\r\n this.headerViewportDiv = domel('div', this.headerDiv)\r\n .addClass(this.cssPrefix + \"-header-viewport\")\r\n .toDOM();\r\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-container\")\r\n .toDOM();\r\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\r\n .addClass(this.cssPrefix + \"-header-row\")\r\n .toDOM();\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var hd = _this.renderColumnHeader(column, index);\r\n _this.headerRowDiv.appendChild(hd);\r\n if (column.isRowNum) {\r\n domel(hd)\r\n .addChildElement(_this.renderHeaderButtons());\r\n }\r\n });\r\n var containerWidth = this.getContainerWidth();\r\n domel(this.headerCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n };\r\n EasyGrid.prototype.hasData = function () {\r\n return this.dataTable.columns.count > 0;\r\n };\r\n EasyGrid.prototype.renderColumnHeader = function (column, index) {\r\n var _this = this;\r\n var colBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-header-cell\")\r\n .data('col-idx', \"\" + index)\r\n .setStyle('width', column.width + \"px\");\r\n if (column.dataColumn) {\r\n colBuilder\r\n .data('col-id', \"\" + column.dataColumn.id);\r\n }\r\n var colDiv = colBuilder.toDOM();\r\n domel('div', colDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-resize\");\r\n if (!column.isRowNum) {\r\n domel('div', colDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-label\")\r\n .text(column.label);\r\n }\r\n if (column.description) {\r\n domel('div', colDiv)\r\n .addClass('question-mark')\r\n .title(column.description);\r\n }\r\n if (this.options.allowDragDrop) {\r\n eqDragManager.registerDraggableItem({\r\n element: colDiv,\r\n scope: \"gridColumnMove\",\r\n data: { column: column },\r\n renderer: function (dragImage) {\r\n dragImage.innerHTML = '';\r\n var attrLabel = document.createElement('div');\r\n attrLabel.innerText = column.label;\r\n dragImage.classList.add(_this.cssPrefix + \"-sortable-helper\");\r\n dragImage.appendChild(attrLabel);\r\n },\r\n onDragStart: function (ev) {\r\n ev.dropEffect = DropEffect.Allow;\r\n }\r\n });\r\n }\r\n return colDiv;\r\n };\r\n EasyGrid.prototype.renderBody = function () {\r\n var _this = this;\r\n this.bodyDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-body\")\r\n .toDOM();\r\n this.bodyViewportDiv = domel('div', this.bodyDiv)\r\n .addClass(this.cssPrefix + \"-body-viewport\")\r\n .attr('tabIndex', '0')\r\n .toDOM();\r\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\r\n .addClass(this.cssPrefix + \"-cell-container\")\r\n .toDOM();\r\n var showAggrs = this.canShowAggregates();\r\n if (this.dataTable) {\r\n this.showProgress();\r\n this.rowsOnPagePromise = this.getRowsToRender()\r\n .then(function (rows) {\r\n _this.pagination.total = _this.dataTable.getTotal();\r\n _this.hideProgress();\r\n //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)\r\n _this.bodyCellContainerDiv.innerHTML = '';\r\n _this.prevRowTotals = null;\r\n var rowsToRender = 0;\r\n if (rows.length) {\r\n var groups_1 = showAggrs\r\n ? _this.options.aggregates.settings.getGroups()\r\n : [];\r\n rowsToRender = (rows.length < _this.pagination.pageSize)\r\n ? rows.length\r\n : _this.pagination.pageSize;\r\n rows.forEach(function (row, index) {\r\n if (showAggrs)\r\n _this.updateTotalsState(groups_1, row);\r\n //we don't actually render the last row\r\n if (index < rowsToRender) {\r\n var tr = _this.renderRow(row, index);\r\n _this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n });\r\n var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;\r\n if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {\r\n var row = new DataRow(_this.dataTable.columns, new Array(_this.dataTable.columns.count));\r\n _this.updateTotalsState(groups_1, row, true);\r\n }\r\n }\r\n var needAutoResize = _this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\r\n if (needAutoResize) {\r\n _this.resizeColumns();\r\n }\r\n else {\r\n var containerWidth = _this.getContainerWidth();\r\n domel(_this.bodyCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n }\r\n return rowsToRender;\r\n })\r\n .catch(function (error) { console.error(error); return 0; });\r\n }\r\n this.bodyViewportDiv.addEventListener('scroll', function (ev) {\r\n domel(_this.headerViewportDiv)\r\n .setStyle('margin-left', \"-\" + _this.bodyViewportDiv.scrollLeft + \"px\");\r\n });\r\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\r\n };\r\n EasyGrid.prototype.isLastPage = function () {\r\n if (this.dataTable.elasticChunks) {\r\n return this.dataTable.totalIsKnown()\r\n && (this.pagination.page * this.pagination.pageSize) >= this.pagination.total;\r\n }\r\n return this.pagination.page * this.pagination.pageSize >= this.pagination.total;\r\n };\r\n EasyGrid.prototype.canShowAggregates = function () {\r\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\r\n return false;\r\n var aggrSettings = this.options.aggregates.settings;\r\n var result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\r\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\r\n return result;\r\n };\r\n EasyGrid.prototype.updateTotalsState = function (groups, newRow, isLast) {\r\n if (isLast === void 0) { isLast = false; }\r\n var aggrSettings = this.options.aggregates.settings;\r\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\r\n var changeLevel = -1;\r\n for (var level = 1; level <= groups.length; level++) {\r\n var group = groups[level - 1];\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var col = _a[_i];\r\n if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {\r\n changeLevel = level;\r\n break;\r\n }\r\n }\r\n if (changeLevel !== -1)\r\n break;\r\n }\r\n if (changeLevel !== -1) {\r\n for (var level = groups.length; level >= changeLevel; level--) {\r\n var row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\r\n var tr = this.renderTotalsRow(level, row);\r\n this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n }\r\n }\r\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\r\n var tr = this.renderTotalsRow(0, newRow);\r\n this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n this.prevRowTotals = newRow;\r\n };\r\n EasyGrid.prototype.applyGroupColumnTemplate = function (template, value, count) {\r\n var result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? \"<span>\" + value + \"</span>\" : '-');\r\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? \"<span>\" + count + \"</span>\" : '-');\r\n return result;\r\n };\r\n EasyGrid.prototype.renderTotalsRow = function (level, row) {\r\n var _this = this;\r\n var aggrSettings = this.options.aggregates.settings;\r\n var group = (level > 0)\r\n ? aggrSettings.getGroups()[level - 1]\r\n : { columns: [], aggregates: aggrSettings.getAggregates() };\r\n var rowBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-row\")\r\n .addClass(this.cssPrefix + \"-row-totals\")\r\n .addClass(this.cssPrefix + \"-totals-lv\" + level)\r\n .data('totals-level', \"\" + level)\r\n .attr('tabindex', '-1');\r\n var rowElement = rowBuilder.toDOM();\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var val = '';\r\n var colIndex = !column.isRowNum\r\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\r\n : -1;\r\n if (!column.isRowNum && column.dataColumn) {\r\n if (group.columns.indexOf(column.dataColumn.id) >= 0) {\r\n val = row.getValue(colIndex);\r\n }\r\n ;\r\n }\r\n if (colIndex == _this.dataTable.columns.count - 1) {\r\n val = '. . . . . .';\r\n }\r\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\r\n });\r\n var aggrContainer = this.options.aggregates.calculator.getAggrContainer();\r\n var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });\r\n var key = aggrSettings.buildGroupKey(group, row);\r\n aggrContainer.getAggregateData(level, key)\r\n .then(function (values) {\r\n for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {\r\n var aggrColId = aggrCols_1[_i];\r\n row.setValue(aggrColId, values[aggrColId]);\r\n }\r\n rowElement.innerHTML = '';\r\n _this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var val = '';\r\n var colIndex = !column.isRowNum\r\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\r\n : -1;\r\n if (!column.isRowNum) {\r\n var isLastGroupColumn = false;\r\n if (column.dataColumn) {\r\n var groupColIndex = group.columns.indexOf(column.dataColumn.id);\r\n var aggrColIndex = aggrCols.indexOf(column.dataColumn.id);\r\n if (level > 0) {\r\n isLastGroupColumn = groupColIndex == group.columns.length - 1;\r\n }\r\n else {\r\n //if it's a grand total row consider first column as the last group column\r\n isLastGroupColumn = colIndex == 0;\r\n }\r\n if (groupColIndex >= 0 || aggrColIndex >= 0) {\r\n val = row.getValue(colIndex);\r\n }\r\n ;\r\n }\r\n var groupFooterTemplate = '';\r\n if (level > 0) {\r\n groupFooterTemplate = column.dataColumn.groupFooterColumnTemplate;\r\n //set the default template for the last grouping column\r\n if (!groupFooterTemplate && aggrSettings.hasRecordCount() && isLastGroupColumn) {\r\n groupFooterTemplate = '{{GroupValue}} ({{GroupCount}})';\r\n }\r\n }\r\n if (groupFooterTemplate) {\r\n var cellDiv_1 = _this.renderCell(column, index, val, rowElement);\r\n var innerCell = cellDiv_1.firstChild;\r\n val = innerCell.innerHTML;\r\n val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\r\n }\r\n }\r\n var cellDiv = _this.renderCell(column, index, val, rowElement);\r\n rowElement.appendChild(cellDiv);\r\n });\r\n })\r\n .catch(function (error) { return console.error(error); });\r\n return rowElement;\r\n };\r\n EasyGrid.prototype.onViewportKeydown = function (ev) {\r\n if (this.options.showActiveRow) {\r\n var rowCount = this.bodyCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-row\").length;\r\n var newValue = void 0;\r\n switch (ev.key) {\r\n case 'ArrowLeft':\r\n break;\r\n case 'ArrowRight':\r\n break;\r\n case 'ArrowUp':\r\n ev.preventDefault();\r\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? rowCount - 1 : this.activeRowIndex - 1;\r\n this.activeRowIndex = newValue >= 0 ? newValue : 0;\r\n break;\r\n case 'ArrowDown':\r\n ev.preventDefault();\r\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? 0 : this.activeRowIndex + 1;\r\n this.activeRowIndex = newValue < rowCount ? newValue : rowCount - 1;\r\n break;\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.ensureRowVisibility = function (rowOrIndex) {\r\n var row = typeof rowOrIndex === 'number'\r\n ? this.getDataRow(rowOrIndex)\r\n : rowOrIndex;\r\n if (row) {\r\n var rowRect = row.getBoundingClientRect();\r\n var viewportRect = this.bodyViewportDiv.getBoundingClientRect();\r\n var rowTop = rowRect.top - viewportRect.top;\r\n var rowBottom = rowRect.bottom - viewportRect.top;\r\n var viewportHeight = this.bodyViewportDiv.clientHeight;\r\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n if (rowTop > 0 &&\r\n rowBottom <= viewportHeight &&\r\n rowRect.top > 0 &&\r\n rowRect.bottom < windowHeight) {\r\n return;\r\n }\r\n if (rowTop < 0) {\r\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowTop;\r\n }\r\n else if (rowBottom > viewportHeight) {\r\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowBottom - viewportHeight;\r\n }\r\n rowRect = row.getBoundingClientRect();\r\n if (rowRect.top < 0) {\r\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.top;\r\n }\r\n else if (rowRect.bottom > windowHeight) {\r\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.bottom - windowHeight;\r\n }\r\n }\r\n };\r\n /** Returns a promise with the list of the rows to render on one page.\r\n * The list contains pageSize+1 row to make it possible\r\n * to render the totals row (if it appears to be on the edge between pages)\r\n */\r\n EasyGrid.prototype.getRowsToRender = function () {\r\n if (this.options.paging.enabled === false) {\r\n return Promise.resolve(this.dataTable.getCachedRows());\r\n }\r\n return this.dataTable.getRows({\r\n offset: (this.pagination.page - 1) * this.pagination.pageSize,\r\n limit: this.pagination.pageSize + 1\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n return [];\r\n });\r\n };\r\n EasyGrid.prototype.renderFooter = function () {\r\n var _this = this;\r\n this.footerDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-footer\")\r\n .toDOM();\r\n if (this.rowsOnPagePromise) {\r\n this.rowsOnPagePromise.then(function (count) {\r\n _this.footerDiv.innerHTML = '';\r\n _this.footerPaginateDiv = _this.renderPageNavigator();\r\n _this.footerDiv.appendChild(_this.footerPaginateDiv);\r\n var pageInfoBlock = _this.renderPageInfoBlock(count);\r\n _this.footerDiv.appendChild(pageInfoBlock);\r\n });\r\n }\r\n };\r\n EasyGrid.prototype.renderPageInfoBlock = function (count) {\r\n var pageInfoDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-page-info\")\r\n .toDOM();\r\n var rowCount = this.dataTable.getTotal();\r\n if (rowCount > 0) {\r\n var fistPageRecordNum = count\r\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\r\n : 0;\r\n var lastPageRecordNum = count\r\n ? fistPageRecordNum + count - 1\r\n : 0;\r\n var totalStr = this.dataTable.getTotal().toString();\r\n if (this.dataTable.elasticChunks) {\r\n var count_1 = this.dataTable.getCachedCount();\r\n var total = this.dataTable.getTotal();\r\n if (count_1 !== total)\r\n totalStr = '?';\r\n }\r\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\r\n .replace('{FirstPageRecordNum}', \"<span>\" + fistPageRecordNum.toString() + \"</span>\")\r\n .replace('{LastPageRecordNum}', \"<span>\" + lastPageRecordNum.toString() + \"</span>\")\r\n .replace('{Total}', \"<span>\" + totalStr + \"</span>\");\r\n }\r\n return pageInfoDiv;\r\n };\r\n EasyGrid.prototype.showProgress = function () {\r\n };\r\n EasyGrid.prototype.hideProgress = function () {\r\n };\r\n EasyGrid.prototype.getLocalIndexByGlobal = function (index) {\r\n if (this.pagination) {\r\n return index % this.pagination.pageSize;\r\n }\r\n else {\r\n return index;\r\n }\r\n };\r\n EasyGrid.prototype.getGlobalIndexByLocal = function (index) {\r\n if (this.pagination) {\r\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\r\n }\r\n else {\r\n return index;\r\n }\r\n };\r\n EasyGrid.prototype.renderRow = function (row, index) {\r\n var _this = this;\r\n var indexGlobal = this.getGlobalIndexByLocal(index);\r\n var rowBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-row\")\r\n .addClass(this.cssPrefix + \"-row-\" + (index % 2 == 1 ? 'odd' : 'even'))\r\n .data('row-idx', \"\" + indexGlobal)\r\n .attr('tabindex', '-1')\r\n .on('click', function (ev) {\r\n _this.activeRowIndex = index;\r\n _this.fireEvent({\r\n type: 'rowClick',\r\n row: row,\r\n rowIndex: index,\r\n sourceEvent: ev\r\n });\r\n })\r\n .on('dblclick', function (ev) {\r\n _this.fireEvent({\r\n type: 'rowDbClick',\r\n row: row,\r\n rowIndex: index,\r\n sourceEvent: ev\r\n });\r\n });\r\n if (index == 0) {\r\n rowBuilder.addClass(this.cssPrefix + \"-row-first\");\r\n }\r\n var rowElement = rowBuilder.toDOM();\r\n if (this.options.showActiveRow && index == this.activeRowIndex) {\r\n rowBuilder.addClass(this.cssPrefix + \"-row-active\");\r\n }\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);\r\n var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\r\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\r\n });\r\n return rowElement;\r\n };\r\n EasyGrid.prototype.renderCell = function (column, colIndex, value, rowElement) {\r\n var builder = domel('div')\r\n .addClass(this.cssPrefix + \"-cell\")\r\n .data('col-idx', \"\" + colIndex)\r\n .attr('tabindex', '-1')\r\n .setStyle('width', column.width + \"px\");\r\n if (column.align == GridColumnAlign.LEFT) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-left\");\r\n }\r\n else if (column.align == GridColumnAlign.RIGHT) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-right\");\r\n }\r\n else if (column.align == GridColumnAlign.CENTER) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-center\");\r\n }\r\n var cellElement = builder.toDOM();\r\n var valueCell = cellElement.appendChild(domel('div')\r\n .addClass(this.cssPrefix + \"-cell-value\")\r\n .toDOM());\r\n if (column.cellRenderer) {\r\n column.cellRenderer(value, column, valueCell, rowElement);\r\n }\r\n return cellElement;\r\n };\r\n /** Sets current grid pages (if paging is used) */\r\n EasyGrid.prototype.setPage = function (page) {\r\n this.pagination.page = page;\r\n this.fireEvent({ type: \"pageChanged\", page: page });\r\n this.refresh();\r\n this.bodyViewportDiv.focus();\r\n };\r\n EasyGrid.prototype.renderPageNavigator = function () {\r\n var _this = this;\r\n var paginateDiv = document.createElement('div');\r\n paginateDiv.className = this.cssPrefix + \"-pagination-wrapper\";\r\n var rowCount = this.dataTable.getTotal();\r\n if (this.options.paging && this.options.paging.enabled && rowCount > 0) {\r\n var prefix_1 = this.paginationOptions.useBootstrap ? '' : this.cssPrefix + \"-\";\r\n var buttonClickHandler_1 = function (ev) {\r\n var element = ev.target;\r\n if (element.hasAttribute('data-page')) {\r\n var page = parseInt(element.getAttribute('data-page'));\r\n _this.setPage(page);\r\n }\r\n };\r\n var renderPageCell = function (pageIndex, content, disabled, extreme, active) {\r\n var li = document.createElement('li');\r\n li.className = prefix_1 + \"page-item\";\r\n if (!extreme) {\r\n if (active) {\r\n li.className += ' active';\r\n }\r\n var a_1 = document.createElement('a');\r\n a_1.setAttribute('href', 'javascript:void(0)');\r\n a_1.innerHTML = content || pageIndex.toString();\r\n a_1.setAttribute(\"data-page\", \"\" + pageIndex);\r\n a_1.className = prefix_1 + \"page-link\";\r\n a_1.addEventListener(\"click\", buttonClickHandler_1);\r\n li.appendChild(a_1);\r\n return li;\r\n }\r\n var a = document.createElement('span');\r\n a.setAttribute('aria-hidden', 'true');\r\n a.className = prefix_1 + \"page-link\";\r\n if (disabled) {\r\n li.className += ' disabled';\r\n }\r\n else {\r\n if (_this.paginationOptions.useBootstrap) {\r\n a = document.createElement('a');\r\n a.setAttribute('href', 'javascript:void(0)');\r\n a.setAttribute(\"data-page\", \"\" + pageIndex);\r\n }\r\n else {\r\n var newA = document.createElement('a');\r\n newA.setAttribute('href', 'javascript:void(0)');\r\n newA.setAttribute('data-page', \"\" + pageIndex);\r\n a = newA;\r\n }\r\n a.className = prefix_1 + \"page-link\";\r\n a.addEventListener(\"click\", buttonClickHandler_1);\r\n }\r\n a.innerHTML = content;\r\n li.appendChild(a);\r\n return li;\r\n };\r\n if (this.dataTable.elasticChunks) {\r\n var pageIndex = this.pagination.page || 1;\r\n var ul = document.createElement('ul');\r\n ul.className = prefix_1 + \"pagination\";\r\n var cell = renderPageCell(pageIndex - 1, '&laquo;', pageIndex == 1, true, false);\r\n ul.appendChild(cell);\r\n cell = renderPageCell(pageIndex + 1, '&raquo;', this.isLastPage(), true, false);\r\n ul.appendChild(cell);\r\n paginateDiv.appendChild(ul);\r\n }\r\n else {\r\n if (this.pagination.total > this.pagination.pageSize) {\r\n var pageIndex = this.pagination.page || 1;\r\n var pageCount = Math.ceil(this.pagination.total / this.pagination.pageSize) || 1;\r\n var maxButtonCount = this.paginationOptions.maxButtonCount || 10;\r\n var zeroBasedIndex = pageIndex - 1;\r\n var firstPageIndex = zeroBasedIndex - (zeroBasedIndex % maxButtonCount) + 1;\r\n var lastPageIndex = firstPageIndex + maxButtonCount - 1;\r\n if (lastPageIndex > pageCount) {\r\n lastPageIndex = pageCount;\r\n }\r\n var ul = document.createElement('ul');\r\n ul.className = prefix_1 + \"pagination\";\r\n var cell = renderPageCell(firstPageIndex - 1, '&laquo;', firstPageIndex == 1, true, false);\r\n ul.appendChild(cell);\r\n for (var i = firstPageIndex; i <= lastPageIndex; i++) {\r\n cell = renderPageCell(i, i.toString(), false, false, i == pageIndex);\r\n ul.appendChild(cell);\r\n }\r\n cell = renderPageCell(lastPageIndex + 1, '&raquo;', lastPageIndex == pageCount, true, false);\r\n ul.appendChild(cell);\r\n paginateDiv.appendChild(ul);\r\n }\r\n }\r\n if (this.options.paging.allowPageSizeChange) {\r\n var selectChangeHandler = function (ev) {\r\n var newValue = parseInt(ev.target.value);\r\n _this.pagination.pageSize = newValue;\r\n _this.pagination.page = 1;\r\n _this.refresh();\r\n };\r\n var pageSizes = document.createElement('div');\r\n pageSizes.className = this.cssPrefix + \"-page-sizes\";\r\n var selectSize = document.createElement('div');\r\n selectSize.className = \"kfrm-select \" + this.cssPrefix + \"-page-sizes-select\";\r\n pageSizes.appendChild(selectSize);\r\n var sel_1 = document.createElement('select');\r\n var selOptions = this.options.paging.pageSizeItems || [];\r\n var selSet = new Set(selOptions);\r\n selSet.add(this.options.paging.pageSize || 20);\r\n Array.from(selSet).forEach(function (el) {\r\n var option = document.createElement(\"option\");\r\n option.value = el.toString();\r\n option.text = el.toString();\r\n sel_1.appendChild(option);\r\n });\r\n sel_1.value = (this.pagination.pageSize || 20).toString();\r\n selectSize.appendChild(sel_1);\r\n sel_1.addEventListener('change', selectChangeHandler);\r\n var labelDiv = document.createElement('div');\r\n labelDiv.className = this.cssPrefix + \"-page-sizes-label\";\r\n pageSizes.appendChild(labelDiv);\r\n var label = document.createElement('span');\r\n label.innerText = i18n.getText('GridItemsPerPage');\r\n labelDiv.appendChild(label);\r\n paginateDiv.appendChild(pageSizes);\r\n }\r\n }\r\n return paginateDiv;\r\n };\r\n EasyGrid.prototype.addEventListener = function (eventType, handler) {\r\n return this.eventEmitter.subscribe(eventType, function (event) { return handler(event.data); });\r\n };\r\n EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {\r\n this.eventEmitter.unsubscribe(eventType, handlerId);\r\n };\r\n EasyGrid.prototype.renderHeaderButtons = function () {\r\n var _this = this;\r\n if (this.options.showPlusButton) {\r\n return domel('div')\r\n .addClass(this.cssPrefix + \"-header-btn-plus\")\r\n .title(this.options.plusButtonTitle || 'Add')\r\n .addChild('a', function (builder) { return builder\r\n .attr('href', 'javascript:void(0)')\r\n .on('click', function (e) {\r\n e.preventDefault();\r\n _this.fireEvent({\r\n type: 'plusButtonClick',\r\n sourceEvent: e\r\n });\r\n }); })\r\n .toDOM();\r\n }\r\n return domel('span')\r\n .addText('#')\r\n .toDOM();\r\n };\r\n EasyGrid.prototype.showLandingSlot = function (pageX, pageY) {\r\n var colElems = this.headerRowDiv.querySelectorAll(\"[class*=\" + this.cssPrefix + \"-table-col]\");\r\n var cols = [];\r\n for (var i = 1; i < colElems.length; i++) {\r\n var rowElem = colElems[i];\r\n if (rowElem.style.display === 'none')\r\n continue;\r\n cols.push(rowElem);\r\n }\r\n if (cols.length === 0) {\r\n this.landingIndex = 0;\r\n this.headerRowDiv.appendChild(this.landingSlot);\r\n return;\r\n }\r\n var landingPos = getElementAbsolutePos(this.landingSlot);\r\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\r\n return;\r\n }\r\n var newLandingIndex = this.landingIndex;\r\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\r\n var col = cols_1[_i];\r\n var colPos = getElementAbsolutePos(col);\r\n var width = col.offsetWidth;\r\n if (pageX > colPos.x && pageX < colPos.x + width) {\r\n // -1 as we don't need to count add button here\r\n newLandingIndex = parseInt(col.getAttribute('data-col-idx')) - 1;\r\n }\r\n }\r\n if (newLandingIndex != this.landingIndex) {\r\n this.landingIndex = newLandingIndex;\r\n if (this.landingIndex < cols.length) {\r\n this.headerRowDiv.insertBefore(this.landingSlot, cols[this.landingIndex]);\r\n }\r\n else {\r\n this.headerRowDiv.appendChild(this.landingSlot);\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.hideLandingSlot = function () {\r\n var _this = this;\r\n this.landingIndex = -1;\r\n setTimeout(function () {\r\n if (_this.landingSlot.parentElement) {\r\n _this.landingSlot.parentElement.removeChild(_this.landingSlot);\r\n }\r\n }, 10);\r\n };\r\n Object.defineProperty(EasyGrid.prototype, \"activeRowIndex\", {\r\n get: function () {\r\n return this._activeRowIndex;\r\n },\r\n set: function (value) {\r\n if (value !== this._activeRowIndex) {\r\n var oldValue = this._activeRowIndex;\r\n this._activeRowIndex = value;\r\n this.updateActiveRow();\r\n this.fireEvent({\r\n type: 'activeRowChanged',\r\n oldValue: oldValue,\r\n newValue: this.activeRowIndex,\r\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyGrid.prototype.updateActiveRow = function () {\r\n var _this = this;\r\n if (this.options.showActiveRow) {\r\n var rows = this.bodyCellContainerDiv.querySelectorAll(\"[class*=\" + this.cssPrefix + \"-row-active]\");\r\n rows.forEach(function (el) { el.classList.remove(_this.cssPrefix + \"-row-active\"); });\r\n var activeRow = this.getActiveRow();\r\n if (activeRow) {\r\n activeRow.classList.add(this.cssPrefix + \"-row-active\");\r\n this.ensureRowVisibility(this.activeRowIndex);\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.getActiveRow = function () {\r\n return this.getDataRow(this.activeRowIndex);\r\n };\r\n EasyGrid.prototype.getDataRow = function (index) {\r\n var rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-row:not(.\" + this.cssPrefix + \"-row-totals)\"));\r\n if (index >= 0 && index < rows.length)\r\n return rows[index];\r\n return null;\r\n };\r\n /** Makes the grid focused for keyboard events */\r\n EasyGrid.prototype.focus = function () {\r\n this.bodyViewportDiv.focus();\r\n };\r\n /** Resizes columns according to the data they represent */\r\n EasyGrid.prototype.resizeColumns = function () {\r\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\r\n return;\r\n var containerWidth = this.bodyCellContainerDiv.style.width;\r\n this.bodyCellContainerDiv.style.visibility = 'hidden';\r\n this.bodyCellContainerDiv.style.width = '1px';\r\n //this.headerRowDiv.style.visibility = 'hidden';\r\n this.headerRowDiv.style.width = '1px';\r\n var sumWidth = 0;\r\n var columns = this.columns.getItems();\r\n var headerCells = this.headerCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-header-cell\");\r\n var headerIdx = 0;\r\n var _loop_1 = function (idx) {\r\n var column = columns[idx];\r\n if (!column.isVisible)\r\n return \"continue\";\r\n var calculatedWidth = this_1.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\r\n ? column.dataColumn.calculatedWidth\r\n : 0;\r\n var cellValues = this_1.bodyCellContainerDiv.querySelectorAll(\".\" + this_1.cssPrefix + \"-cell[data-col-idx=\\\"\" + idx + \"\\\"] > .\" + this_1.cssPrefix + \"-cell-value\");\r\n var maxWidth = 0;\r\n if (calculatedWidth > 0) {\r\n sumWidth += calculatedWidth;\r\n column.width = calculatedWidth;\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = calculatedWidth + \"px\";\r\n });\r\n headerCells[headerIdx].style.width = calculatedWidth + \"px\";\r\n }\r\n else {\r\n if (cellValues.length == 0) {\r\n headerCells[headerIdx].style.width = null;\r\n headerCells[headerIdx].style.whiteSpace = 'nowrap';\r\n }\r\n maxWidth = headerCells[headerIdx].offsetWidth;\r\n if (cellValues.length > 0) {\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = null;\r\n var width = value.parentElement.offsetWidth;\r\n if (width > maxWidth) {\r\n maxWidth = width;\r\n }\r\n });\r\n maxWidth += 3;\r\n var maxOption = column.isRowNum\r\n ? this_1.options.columnWidths.rowNumColumn.max || 500\r\n : this_1.options.columnWidths[column.dataColumn.type].max || 2000;\r\n var minOption = column.isRowNum\r\n ? this_1.options.columnWidths.rowNumColumn.min || 0\r\n : this_1.options.columnWidths[column.dataColumn.type].min || 20;\r\n if (maxWidth > maxOption) {\r\n maxWidth = maxOption;\r\n }\r\n if (maxWidth < minOption) {\r\n maxWidth = minOption;\r\n }\r\n if (utils.isNumericType(column.type)) {\r\n //increase the calculated width in 1.3 times for numeric columns\r\n maxWidth = Math.round(maxWidth * 1.3);\r\n }\r\n sumWidth += maxWidth;\r\n column.width = maxWidth;\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = maxWidth + \"px\";\r\n });\r\n headerCells[headerIdx].style.width = maxWidth + \"px\";\r\n if (column.dataColumn) {\r\n column.dataColumn.calculatedWidth = maxWidth;\r\n }\r\n }\r\n else {\r\n sumWidth += maxWidth;\r\n }\r\n }\r\n headerIdx++;\r\n };\r\n var this_1 = this;\r\n for (var idx = 0; idx < this.columns.count; idx++) {\r\n _loop_1(idx);\r\n }\r\n if (sumWidth > 0) {\r\n this.bodyCellContainerDiv.style.width = sumWidth + \"px\";\r\n this.headerCellContainerDiv.style.width = sumWidth + \"px\";\r\n }\r\n else {\r\n this.bodyCellContainerDiv.style.width = containerWidth;\r\n this.headerCellContainerDiv.style.width = containerWidth;\r\n }\r\n this.bodyCellContainerDiv.style.visibility = null;\r\n this.headerRowDiv.removeAttribute('style');\r\n };\r\n return EasyGrid;\r\n}());\r\nexport { EasyGrid };\r\n//# sourceMappingURL=easy_grid.js.map","var Calendar = /** @class */ (function () {\r\n function Calendar(slot, options) {\r\n this.slot = slot;\r\n this.options = options || {};\r\n if (!this.options.yearRange) {\r\n this.options.yearRange = 'c-10:c+10';\r\n }\r\n }\r\n Object.defineProperty(Calendar.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp-cal';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Calendar.prototype.setDate = function (date) {\r\n this.currentDate = new Date(date);\r\n };\r\n Calendar.prototype.getDate = function () {\r\n return new Date(this.currentDate);\r\n };\r\n Calendar.prototype.dateChanged = function (apply) {\r\n if (this.options.onDateChanged) {\r\n this.options.onDateChanged(this.currentDate, apply);\r\n }\r\n };\r\n return Calendar;\r\n}());\r\nexport { Calendar };\r\n//# sourceMappingURL=calendar.js.map","import { getElementAbsolutePos } from '../utils/ui-utils';\r\nvar DateTimePicker = /** @class */ (function () {\r\n function DateTimePicker(options) {\r\n this.calendar = null;\r\n this.timePicker = null;\r\n this.options = options;\r\n this.render();\r\n }\r\n Object.defineProperty(DateTimePicker.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DateTimePicker.prototype.setDateTime = function (dateTime) {\r\n this.currentDateTime = new Date(dateTime);\r\n if (this.calendar) {\r\n this.calendar.setDate(this.currentDateTime);\r\n }\r\n if (this.timePicker) {\r\n this.timePicker.setTime(this.currentDateTime);\r\n }\r\n };\r\n DateTimePicker.prototype.getDateTime = function () {\r\n return new Date(this.currentDateTime);\r\n };\r\n DateTimePicker.prototype.render = function () {\r\n var _this = this;\r\n if (this.options.showCalendar) {\r\n this.calendar = this.createCalendar({\r\n yearRange: this.options.yearRange,\r\n showDateTimeInput: this.options.showDateTimeInput,\r\n timePickerIsUsed: this.options.showTimePicker,\r\n oneClickDateSelection: this.options.oneClickDateSelection,\r\n onDateChanged: function (date, apply) {\r\n _this.currentDateTime = date;\r\n if (_this.timePicker) {\r\n _this.timePicker.setTime(_this.currentDateTime);\r\n }\r\n if (_this.options.showTimePicker) {\r\n _this.dateTimeChanged();\r\n }\r\n if (apply) {\r\n _this.apply(_this.currentDateTime);\r\n }\r\n }\r\n });\r\n if (this.calendar)\r\n this.calendar.render();\r\n }\r\n if (this.options.showTimePicker) {\r\n this.timePicker = this.createTimePicker({\r\n onTimeChanged: function (time) {\r\n _this.currentDateTime.setHours(time.getHours());\r\n _this.currentDateTime.setMinutes(time.getMinutes());\r\n if (_this.calendar) {\r\n _this.calendar.setDate(_this.currentDateTime);\r\n }\r\n _this.dateTimeChanged();\r\n }\r\n });\r\n if (this.timePicker)\r\n this.timePicker.render();\r\n }\r\n this.setDateTime(new Date());\r\n };\r\n DateTimePicker.prototype.createCalendar = function (options) {\r\n return null;\r\n };\r\n DateTimePicker.prototype.createTimePicker = function (options) {\r\n return null;\r\n };\r\n DateTimePicker.prototype.show = function (anchor) {\r\n if (this.options.beforeShow) {\r\n this.options.beforeShow();\r\n }\r\n var pos = getElementAbsolutePos(anchor || document.body);\r\n this.slot.style.top = pos.y + anchor.clientHeight + 'px';\r\n this.slot.style.left = pos.x + 'px';\r\n };\r\n DateTimePicker.prototype.apply = function (date) {\r\n if (this.options.onApply) {\r\n this.options.onApply(date);\r\n }\r\n this.destroy();\r\n };\r\n DateTimePicker.prototype.cancel = function () {\r\n if (this.options.onCancel) {\r\n this.options.onCancel();\r\n }\r\n this.destroy();\r\n };\r\n DateTimePicker.prototype.destroy = function () {\r\n if (this.slot && this.slot.parentElement) {\r\n this.slot.parentElement.removeChild(this.slot);\r\n }\r\n };\r\n DateTimePicker.prototype.dateTimeChanged = function () {\r\n if (this.options.onDateTimeChanged) {\r\n this.options.onDateTimeChanged(this.currentDateTime);\r\n }\r\n };\r\n return DateTimePicker;\r\n}());\r\nexport { DateTimePicker };\r\n//# sourceMappingURL=date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { Calendar } from './calendar';\r\nvar DefaultCalendar = /** @class */ (function (_super) {\r\n __extends(DefaultCalendar, _super);\r\n function DefaultCalendar(slot, options) {\r\n var _this = _super.call(this, slot, options) || this;\r\n _this.daysOfWeek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n _this.months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n _this.calendarBody = null;\r\n _this.isManualInputChanging = false;\r\n for (var i = 0; i < _this.daysOfWeek.length; i++) {\r\n _this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\r\n }\r\n for (var i = 0; i < _this.months.length; i++) {\r\n _this.months[i] = i18n.getLongMonthName(i + 1);\r\n }\r\n return _this;\r\n }\r\n DefaultCalendar.prototype.setDate = function (date) {\r\n _super.prototype.setDate.call(this, date);\r\n this.selectedMonth = this.currentDate.getMonth();\r\n this.selectedYear = this.currentDate.getFullYear();\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.render = function () {\r\n var _this = this;\r\n var header = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-header\");\r\n if (this.options.showDateTimeInput) {\r\n header\r\n .addChildElement(this.renderManualDateInput());\r\n }\r\n else {\r\n header\r\n .addChild('span', function (builder) { return _this.headerTextElem = builder.toDOM(); });\r\n }\r\n domel(this.slot)\r\n .addChildElement(this.renderCalendarButtons());\r\n this.calendarBody = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-body\")\r\n .toDOM();\r\n };\r\n DefaultCalendar.prototype.getInputDateFormat = function () {\r\n var settings = i18n.getLocaleSettings();\r\n return (this.options.timePickerIsUsed)\r\n ? settings.editDateFormat + \" \" + settings.editTimeFormat\r\n : settings.editDateFormat;\r\n };\r\n DefaultCalendar.prototype.renderManualDateInput = function () {\r\n var _this = this;\r\n var format = this.getInputDateFormat();\r\n var builder = domel('input')\r\n .attr('placeholder', format)\r\n .addClass(this.cssPrefix + \"-header-input\");\r\n builder\r\n .mask(format.replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99'))\r\n .on('input', function (ev) {\r\n builder.removeClass('error');\r\n try {\r\n _this.isManualInputChanging = true;\r\n var newDate = dataUtils.strToDateTime(_this.manualInputElem.value, format);\r\n _this.currentDate = newDate;\r\n _this.jump(_this.currentDate.getFullYear(), _this.currentDate.getMonth());\r\n _this.dateChanged(false);\r\n }\r\n catch (e) {\r\n builder.addClass('error');\r\n }\r\n finally {\r\n _this.isManualInputChanging = false;\r\n }\r\n })\r\n .on('keydown', function (ev) {\r\n if (ev.keyCode === 13) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (_this.manualInputElem.className.indexOf('error') < 0\r\n && !_this.isManualInputChanging)\r\n _this.dateChanged(true);\r\n }\r\n })\r\n .on('focus', function () {\r\n setTimeout(function () {\r\n _this.manualInputElem.selectionStart = 0;\r\n _this.manualInputElem.selectionEnd = 0;\r\n }, 50);\r\n });\r\n this.manualInputElem = builder.toDOM();\r\n return this.manualInputElem;\r\n };\r\n DefaultCalendar.prototype.updateDisplayedDateValue = function () {\r\n if (this.manualInputElem) {\r\n if (!this.isManualInputChanging) {\r\n var format = this.getInputDateFormat();\r\n this.manualInputElem.value = dataUtils.dateTimeToStr(this.currentDate, format);\r\n this.manualInputElem.focus();\r\n }\r\n }\r\n else if (this.headerTextElem) {\r\n var locale = i18n.getCurrentLocale();\r\n this.headerTextElem.innerText = this.currentDate.toLocaleString(locale == 'en' ? undefined : locale, {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n }\r\n };\r\n DefaultCalendar.prototype.renderCalendarButtons = function () {\r\n var _this = this;\r\n var builder = domel('nav')\r\n .addClass(this.cssPrefix + \"-nav\")\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-prev\")\r\n .on('click', function () {\r\n _this.prev();\r\n })\r\n .addChild('span', function (builder) { return builder.html('&lsaquo;'); }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-selectors\")\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-month\")\r\n .addChild('select', function (builder) {\r\n builder\r\n .on('change', function () {\r\n _this.jump(_this.selectedYear, parseInt(_this.selectMonthElem.value));\r\n });\r\n var _loop_1 = function (i) {\r\n builder.addChild('option', function (builder) { return builder\r\n .attr('value', i.toString())\r\n .text(_this.months[i]); });\r\n };\r\n for (var i = 0; i < _this.months.length; i++) {\r\n _loop_1(i);\r\n }\r\n _this.selectMonthElem = builder.toDOM();\r\n }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-year\")\r\n .addChild('select', function (builder) { return _this.selectYearElem = builder\r\n .on('change', function () {\r\n _this.jump(parseInt(_this.selectYearElem.value), _this.selectedMonth);\r\n })\r\n .toDOM(); }); }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-next\")\r\n .on('click', function () {\r\n _this.next();\r\n })\r\n .addChild('span', function (builder) { return builder.html('&rsaquo;'); }); });\r\n return builder.toDOM();\r\n };\r\n DefaultCalendar.prototype.prev = function () {\r\n this.selectedYear = (this.selectedMonth === 0) ? this.selectedYear - 1 : this.selectedYear;\r\n this.selectedMonth = (this.selectedMonth === 0) ? 11 : this.selectedMonth - 1;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.next = function () {\r\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\r\n this.selectedMonth = (this.selectedMonth + 1) % 12;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.rerenderSelectYear = function () {\r\n var match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\r\n var minusYear = 0;\r\n var plusYear = 1;\r\n if (match !== null) {\r\n minusYear = parseInt(match[1]);\r\n plusYear = parseInt(match[2]);\r\n }\r\n this.selectYearElem.innerHTML = '';\r\n for (var i = 0; i <= minusYear + plusYear; i++) {\r\n var op = document.createElement(\"option\");\r\n var year = this.selectedYear - minusYear + i;\r\n op.value = year.toString();\r\n op.innerText = year.toString();\r\n this.selectYearElem.appendChild(op);\r\n }\r\n };\r\n DefaultCalendar.prototype.jump = function (year, month) {\r\n this.selectedYear = year;\r\n this.selectedMonth = month;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.rerenderMonth = function () {\r\n var _this = this;\r\n //header text\r\n this.updateDisplayedDateValue();\r\n this.rerenderSelectYear();\r\n var firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\r\n var daysInMonth = new Date(this.selectedYear, this.selectedMonth + 1, 0).getDate();\r\n this.calendarBody.innerHTML = \"\";\r\n this.selectYearElem.value = this.selectedYear.toString();\r\n this.selectMonthElem.value = this.selectedMonth.toString();\r\n this.daysOfWeek.forEach(function (day, idx) {\r\n domel('div', _this.calendarBody)\r\n .addClass(_this.cssPrefix + \"-weekday\")\r\n .addClass(idx == 0 || idx == 6 ? _this.cssPrefix + \"-weekend\" : '')\r\n .text(day);\r\n });\r\n // Add empty cells before first day\r\n for (var i = 0; i < firstDay; i++) {\r\n domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day-empty\");\r\n }\r\n // Add all month days\r\n var today = new Date();\r\n for (var day = 1; day <= daysInMonth; day++) {\r\n var builder = domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day\")\r\n .attr('data-date', day.toString())\r\n .text(day.toString())\r\n .on('click', function (e) {\r\n _this.currentDate.setFullYear(_this.selectedYear);\r\n _this.currentDate.setMonth(_this.selectedMonth);\r\n _this.currentDate.setDate(parseInt(e.target.getAttribute('data-date')));\r\n _this.dateChanged(_this.options.oneClickDateSelection);\r\n });\r\n if (day === today.getDate() && this.selectedYear === today.getFullYear() && this.selectedMonth === today.getMonth()) {\r\n builder.addClass(this.cssPrefix + \"-day-current\");\r\n }\r\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\r\n builder.addClass(this.cssPrefix + \"-day-selected\");\r\n }\r\n var dayOfWeek = (firstDay + day - 1) % 7;\r\n if (dayOfWeek == 0 || dayOfWeek == 6) {\r\n builder.addClass(this.cssPrefix + \"-weekend\");\r\n }\r\n }\r\n // Add empty cells after last day\r\n var cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\r\n var cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\r\n for (var i = 0; i < cellsToDraw; i++) {\r\n domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day-empty\");\r\n }\r\n };\r\n DefaultCalendar.prototype.dateChanged = function (apply) {\r\n _super.prototype.dateChanged.call(this, apply);\r\n this.rerenderMonth();\r\n };\r\n return DefaultCalendar;\r\n}(Calendar));\r\nexport { DefaultCalendar };\r\n//# sourceMappingURL=default_calendar.js.map","var TimePicker = /** @class */ (function () {\r\n function TimePicker(slot, options) {\r\n this.slot = slot;\r\n this.options = options || {};\r\n }\r\n Object.defineProperty(TimePicker.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp-tp';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TimePicker.prototype.setTime = function (time) {\r\n this.currentTime = new Date(time);\r\n };\r\n TimePicker.prototype.getTime = function () {\r\n return new Date(this.currentTime);\r\n };\r\n TimePicker.prototype.timeChanged = function () {\r\n if (this.options.onTimeChanged) {\r\n this.options.onTimeChanged(this.currentTime);\r\n }\r\n };\r\n return TimePicker;\r\n}());\r\nexport { TimePicker };\r\n//# sourceMappingURL=time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { TimePicker } from './time_picker';\r\nvar DefaultTimePicker = /** @class */ (function (_super) {\r\n __extends(DefaultTimePicker, _super);\r\n function DefaultTimePicker() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DefaultTimePicker.prototype.setTime = function (time) {\r\n _super.prototype.setTime.call(this, time);\r\n this.updateDisplayedTime();\r\n this.hoursInput.valueAsNumber = time.getHours();\r\n this.minutesInput.valueAsNumber = time.getMinutes();\r\n };\r\n DefaultTimePicker.prototype.render = function () {\r\n var _this = this;\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-time\")\r\n .addChild('span', function (builder) { return _this.timeText = builder.toDOM(); })\r\n .toDOM();\r\n var slidersBuilder = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-sliders\");\r\n slidersBuilder\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-time-row\")\r\n .title('Hours')\r\n .addChild('input', function (builder) { return _this.hoursInput = builder\r\n .addClass(_this.cssPrefix + \"-input-hours\")\r\n .type('range')\r\n .attr('min', '0')\r\n .attr('max', '23')\r\n .attr('step', '1')\r\n .on('input', function (e) {\r\n _this.currentTime.setHours(_this.hoursInput.valueAsNumber);\r\n _this.updateDisplayedTime();\r\n _this.timeChanged();\r\n })\r\n .toDOM(); }); });\r\n slidersBuilder\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-time-row\")\r\n .title('Minutes')\r\n .addChild('input', function (builder) { return _this.minutesInput = builder\r\n .addClass(_this.cssPrefix + \"-input-minutes\")\r\n .type('range')\r\n .attr('min', '0')\r\n .attr('max', '59')\r\n .attr('step', '1')\r\n .on('input', function (e) {\r\n _this.currentTime.setMinutes(_this.minutesInput.valueAsNumber);\r\n _this.updateDisplayedTime();\r\n _this.timeChanged();\r\n })\r\n .toDOM(); }); });\r\n return this.slot;\r\n };\r\n DefaultTimePicker.prototype.updateDisplayedTime = function () {\r\n var locale = i18n.getCurrentLocale();\r\n var timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n });\r\n this.timeText.innerText = timeToDraw;\r\n };\r\n return DefaultTimePicker;\r\n}(TimePicker));\r\nexport { DefaultTimePicker };\r\n//# sourceMappingURL=default_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { DateTimePicker } from './date_time_picker';\r\nimport { DefaultCalendar } from './default_calendar';\r\nimport { DefaultTimePicker } from './default_time_picker';\r\nimport { getElementAbsolutePos } from '../utils/ui-utils';\r\nvar DefaultDateTimePicker = /** @class */ (function (_super) {\r\n __extends(DefaultDateTimePicker, _super);\r\n function DefaultDateTimePicker() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DefaultDateTimePicker.prototype.render = function () {\r\n var _this = this;\r\n var sb = domel('div', document.body)\r\n .addClass(\"\" + this.cssPrefix)\r\n .attr('tabIndex', '0')\r\n .setStyle('position', 'absolute')\r\n .setStyle('top', '-1000px')\r\n .setStyle('left', '-1000px')\r\n .on('keydown', function (ev) {\r\n if (ev.keyCode === 27) { // ESC is pressed\r\n _this.cancel();\r\n }\r\n else if (ev.keyCode === 13) { // Enter is pressed\r\n _this.apply(_this.getDateTime());\r\n }\r\n return false;\r\n });\r\n if (this.options.zIndex) {\r\n sb.setStyle('z-index', \"\" + this.options.zIndex);\r\n }\r\n this.slot = sb.toDOM();\r\n _super.prototype.render.call(this);\r\n this.renderButtons();\r\n this.globalMouseDownHandler = function (e) {\r\n var event = window.event || e;\r\n var o = event.srcElement || event.target;\r\n var isOutside = !_this.slot.contains(event.target);\r\n if (isOutside) {\r\n document.removeEventListener('mousedown', _this.globalMouseDownHandler, true);\r\n _this.cancel();\r\n }\r\n return true;\r\n };\r\n };\r\n DefaultDateTimePicker.prototype.renderButtons = function () {\r\n var _this = this;\r\n var builder = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-buttons\")\r\n .addChild('button', function (b) { return _this.nowButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-now\")\r\n .text(i18n.getText('ButtonNow'))\r\n .on('click', function () {\r\n _this.setDateTime(new Date());\r\n _this.dateTimeChanged();\r\n return false;\r\n })\r\n .toDOM(); });\r\n if (this.options.showTimePicker || !this.options.oneClickDateSelection) {\r\n builder.addChild('button', function (b) { return _this.submitButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-apply\")\r\n .text(i18n.getText('ButtonApply'))\r\n .on('click', function () {\r\n _this.apply(_this.getDateTime());\r\n return false;\r\n })\r\n .toDOM(); });\r\n }\r\n builder.addChild('button', function (b) { return _this.submitButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-cancel\")\r\n .text(i18n.getText('ButtonCancel'))\r\n .on('click', function () {\r\n _this.cancel();\r\n return false;\r\n })\r\n .toDOM(); });\r\n };\r\n DefaultDateTimePicker.prototype.createCalendar = function (options) {\r\n this.calendarSlot =\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-cal\")\r\n .toDOM();\r\n return new DefaultCalendar(this.calendarSlot, options);\r\n };\r\n DefaultDateTimePicker.prototype.createTimePicker = function (options) {\r\n this.timePickerSlot =\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-tp\")\r\n .toDOM();\r\n return new DefaultTimePicker(this.timePickerSlot, options);\r\n };\r\n DefaultDateTimePicker.prototype.show = function (anchor) {\r\n var _this = this;\r\n if (this.options.showDateTimeInput) {\r\n if (this.options.beforeShow) {\r\n this.options.beforeShow();\r\n }\r\n var anchorPos = getElementAbsolutePos(anchor || document.body);\r\n var parentPos = getElementAbsolutePos(anchor ? anchor.parentElement || anchor : document.body);\r\n this.slot.style.top = parentPos.y + 'px';\r\n this.slot.style.left = anchorPos.x + 'px';\r\n }\r\n else {\r\n _super.prototype.show.call(this, anchor);\r\n this.slot.focus();\r\n }\r\n setTimeout(function () {\r\n document.addEventListener('mousedown', _this.globalMouseDownHandler, true);\r\n }, 1);\r\n };\r\n return DefaultDateTimePicker;\r\n}(DateTimePicker));\r\nexport { DefaultDateTimePicker };\r\n//# sourceMappingURL=default_date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n, utils, liquid } from '@easydata/core';\r\nimport { DialogFooterAlignment } from './dialog_service';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nvar cssPrefix = \"kdlg\";\r\nvar DefaultDialogService = /** @class */ (function () {\r\n function DefaultDialogService() {\r\n }\r\n DefaultDialogService.prototype.openConfirm = function (title, content, callback) {\r\n var _this = this;\r\n var template = \"<div id=\\\"\" + cssPrefix + \"-dialog-confirm\\\">\" + content + \"</div>\";\r\n var options = {\r\n title: title,\r\n closable: false,\r\n submitable: true,\r\n cancelable: true,\r\n body: template\r\n };\r\n if (callback) {\r\n options.onSubmit = function () {\r\n callback(true);\r\n };\r\n options.onCancel = function () {\r\n callback(false);\r\n };\r\n this.open(options);\r\n return;\r\n }\r\n return new Promise(function (resolve) {\r\n options.onSubmit = function () {\r\n resolve(true);\r\n };\r\n options.onCancel = function () {\r\n resolve(false);\r\n };\r\n _this.open(options);\r\n });\r\n };\r\n DefaultDialogService.prototype.openPrompt = function (title, content, defVal, callback) {\r\n var _this = this;\r\n var template = \"<div id=\\\"\" + cssPrefix + \"-dialog-form\\\" class=\\\"kfrm-form\\\">\\n <div class=\\\"kfrm-fields label-above\\\">\\n <label for=\\\"\" + cssPrefix + \"-dialog-form-input\\\" id=\\\"\" + cssPrefix + \"-dialog-form-content\\\">\" + content + \"</label>\\n <input type=\\\"text\\\" name=\\\"\" + cssPrefix + \"-dialog-form-input\\\" id=\\\"\" + cssPrefix + \"-dialog-form-input\\\" />\\n </div>\\n </div>\";\r\n var options = {\r\n title: title,\r\n submitable: true,\r\n closable: true,\r\n cancelable: true,\r\n submitOnEnter: true,\r\n body: template,\r\n arrangeParents: false,\r\n beforeOpen: function () {\r\n var input = document.getElementById(cssPrefix + \"-dialog-form-input\");\r\n if (defVal) {\r\n input.value = defVal;\r\n }\r\n input.focus();\r\n }\r\n };\r\n var processInput = function (callback) {\r\n var input = document.getElementById(cssPrefix + \"-dialog-form-input\");\r\n var result = input.value;\r\n if (result && result.replace(/\\s/g, '').length > 0) {\r\n callback(result);\r\n return true;\r\n }\r\n input.classList.add('eqjs-invalid');\r\n return false;\r\n };\r\n if (callback) {\r\n options.onSubmit = function () {\r\n return processInput(callback);\r\n };\r\n options.onCancel = function () {\r\n callback(\"\");\r\n };\r\n this.open(options);\r\n return;\r\n }\r\n return new Promise(function (resolve) {\r\n options.onSubmit = function () {\r\n return processInput(resolve);\r\n };\r\n options.onCancel = function () {\r\n resolve(\"\");\r\n };\r\n _this.open(options);\r\n });\r\n };\r\n DefaultDialogService.prototype.open = function (options, data) {\r\n var _this = this;\r\n var dialog = new DefaultDialog(options, data);\r\n var onDestroy = options.onDestroy;\r\n options.onDestroy = function (dlg) {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy(dlg);\r\n };\r\n dialog.open();\r\n this.track(dialog);\r\n return dialog;\r\n };\r\n DefaultDialogService.prototype.createSet = function (options) {\r\n return new DefaultDialogSet(options, this);\r\n };\r\n DefaultDialogService.prototype.untrack = function (dlg) {\r\n var index = DefaultDialogService.openDialogs.indexOf(dlg);\r\n if (index >= 0) {\r\n DefaultDialogService.openDialogs.splice(index, 1);\r\n }\r\n };\r\n DefaultDialogService.prototype.track = function (dlg) {\r\n DefaultDialogService.openDialogs.push(dlg);\r\n };\r\n DefaultDialogService.prototype.openProgress = function (options) {\r\n var _this = this;\r\n var dialog = new DefaultProgressDialog(options);\r\n var onDestroy = options.onDestroy;\r\n options.onDestroy = function (dlg) {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy(dlg);\r\n };\r\n dialog.open();\r\n this.track(dialog);\r\n return dialog;\r\n };\r\n DefaultDialogService.prototype.getAllDialogs = function () {\r\n return Array.from(DefaultDialogService.openDialogs);\r\n };\r\n DefaultDialogService.prototype.closeAllDialogs = function () {\r\n for (var _i = 0, _a = Array.from(DefaultDialogService.openDialogs); _i < _a.length; _i++) {\r\n var dialog = _a[_i];\r\n dialog.close();\r\n }\r\n };\r\n DefaultDialogService.openDialogs = [];\r\n return DefaultDialogService;\r\n}());\r\nexport { DefaultDialogService };\r\nvar DefaultDialog = /** @class */ (function () {\r\n function DefaultDialog(options, data) {\r\n var _this = this;\r\n this.options = options;\r\n this.submitHandler = function (token) {\r\n if (_this.options.onSubmit && _this.options.onSubmit(_this, token) === false) {\r\n return false;\r\n }\r\n _this.destroy();\r\n return true;\r\n };\r\n this.cancelHandler = function () {\r\n if (_this.options.onCancel) {\r\n _this.options.onCancel(_this);\r\n }\r\n _this.destroy();\r\n };\r\n this.keydownHandler = function (ev) {\r\n if (ev.keyCode == 13 && _this.isActiveDialog()) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (_this.submitHandler()) {\r\n window.removeEventListener('keydown', _this.keydownHandler, false);\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n this.dialogId = utils.generateId('dlg');\r\n this.data = data;\r\n this.slot =\r\n domel('div', document.body)\r\n .attr('tab-index', '-1')\r\n .data('dialog-id', this.dialogId)\r\n .addClass(cssPrefix + \"-modal\", 'is-active')\r\n .focus()\r\n .addChild('div', function (b) { return b\r\n .addClass('kdlg-modal-background'); })\r\n .addChild('div', function (b) { return _this.windowElement = b\r\n .addClass(cssPrefix + \"-modal-window\")\r\n .addChild('header', function (b) {\r\n _this.headerElement = b\r\n .addClass(cssPrefix + \"-header\")\r\n .addChild('p', function (b) { return b\r\n .addClass(cssPrefix + \"-header-title\")\r\n .addText(options.title); })\r\n .toDOM();\r\n if (options.closable !== false)\r\n b.addChild('button', function (b) { return b\r\n .addClass(cssPrefix + \"-modal-close\")\r\n .on('click', function () {\r\n _this.cancelHandler();\r\n })\r\n .focus(); });\r\n })\r\n .addChild('div', function (b) {\r\n b.addClass(cssPrefix + \"-alert-container\");\r\n _this.alertElement = b.toDOM();\r\n })\r\n .addChild('section', function (b) {\r\n _this.bodyElement = b\r\n .addClass(cssPrefix + \"-body\")\r\n .toDOM();\r\n if (typeof options.body === 'string') {\r\n var html = liquid.renderLiquidTemplate(options.body, data);\r\n b.addHtml(html);\r\n }\r\n else {\r\n b.addChildElement(options.body);\r\n }\r\n })\r\n .addChild('footer', function (b) {\r\n var alignClass = null;\r\n if (options.footerAlignment && options.footerAlignment == DialogFooterAlignment.Center) {\r\n alignClass = 'align-center';\r\n }\r\n else {\r\n alignClass = 'align-right';\r\n }\r\n _this.footerElement = b\r\n .addClass(cssPrefix + \"-footer\")\r\n .toDOM();\r\n b.addClass(alignClass);\r\n if (options.submitable === false)\r\n return;\r\n b.addChild('button', function (bb) {\r\n bb.id(_this.dialogId + '-btn-submit')\r\n .addClass('kfrm-button', 'is-info')\r\n .addText(options.submitButtonText || i18n.getText('ButtonOK'));\r\n if (options.recaptchaSiteKey) {\r\n bb.data('sitekey', options.recaptchaSiteKey);\r\n bb.addClass('g-recaptcha');\r\n bb.on('click', function (e) {\r\n if (grecaptcha) {\r\n grecaptcha.ready(function () {\r\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\r\n .then(function (token) {\r\n _this.submitHandler(token);\r\n });\r\n });\r\n }\r\n else {\r\n _this.submitHandler();\r\n }\r\n });\r\n }\r\n else {\r\n bb.on('click', function (e) {\r\n _this.submitHandler();\r\n });\r\n }\r\n bb.focus();\r\n });\r\n if (options.cancelable !== false)\r\n b.addChild('button', function (bb) { return bb\r\n .id(_this.dialogId + '-btn-cancel')\r\n .addClass('kfrm-button')\r\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\r\n .on('click', function (e) {\r\n _this.cancelHandler();\r\n }); });\r\n })\r\n .toDOM(); })\r\n .toDOM();\r\n }\r\n DefaultDialog.prototype.getData = function () {\r\n return this.data;\r\n };\r\n DefaultDialog.prototype.getRootElement = function () {\r\n return this.slot;\r\n };\r\n DefaultDialog.prototype.getSubmitButtonElement = function () {\r\n return document.getElementById(this.dialogId + '-btn-submit');\r\n };\r\n DefaultDialog.prototype.getCancelButtonElement = function () {\r\n return document.getElementById(this.dialogId + '-btn-cancel');\r\n };\r\n DefaultDialog.prototype.open = function () {\r\n var _this = this;\r\n if (this.options.beforeOpen) {\r\n this.options.beforeOpen(this);\r\n }\r\n domel(this.slot).show();\r\n if (this.options.arrangeParents) {\r\n this.arrangeParents(true);\r\n }\r\n var windowDiv = this.slot\r\n .querySelector(\".\" + cssPrefix + \"-modal-window\");\r\n if (this.options.height) {\r\n windowDiv.style.height = typeof this.options.height === 'string'\r\n ? this.options.height\r\n : this.options.height + \"px\";\r\n }\r\n if (this.options.width) {\r\n windowDiv.style.width = typeof this.options.width === 'string'\r\n ? this.options.width\r\n : this.options.width + \"px\";\r\n }\r\n if (this.options.submitOnEnter) {\r\n window.addEventListener('keydown', this.keydownHandler, false);\r\n }\r\n //clear alert on change in any input element \r\n this.slot.querySelectorAll('input')\r\n .forEach(function (element) {\r\n return element.addEventListener('input', function () {\r\n _this.clearAlert();\r\n if (_this.options.onInput) {\r\n _this.options.onInput(_this);\r\n }\r\n });\r\n });\r\n if (this.options.onShow) {\r\n this.options.onShow(this);\r\n }\r\n };\r\n DefaultDialog.prototype.submit = function () {\r\n this.submitHandler();\r\n };\r\n DefaultDialog.prototype.cancel = function () {\r\n this.cancelHandler();\r\n };\r\n DefaultDialog.prototype.close = function () {\r\n this.destroy();\r\n };\r\n DefaultDialog.prototype.disableButtons = function () {\r\n var buttons = this.slot.querySelectorAll('button');\r\n buttons.forEach(function (button) { return button.disabled = true; });\r\n };\r\n DefaultDialog.prototype.enableButtons = function () {\r\n var buttons = this.slot.querySelectorAll('button');\r\n buttons.forEach(function (button) { return button.disabled = false; });\r\n };\r\n DefaultDialog.prototype.showAlert = function (text, reason, replace) {\r\n var alert = domel('div')\r\n .addClass(cssPrefix + \"-alert \" + (reason || ''))\r\n .addChild('span', function (b) { return b\r\n .addClass(cssPrefix + \"-alert-closebtn\")\r\n .text('×')\r\n .on('click', function (ev) {\r\n var alert = ev.target.parentElement;\r\n alert.parentElement.removeChild(alert);\r\n }); })\r\n .addText(text)\r\n .toDOM();\r\n if (replace === true) {\r\n this.clearAlert();\r\n }\r\n this.alertElement.appendChild(alert);\r\n };\r\n DefaultDialog.prototype.clearAlert = function () {\r\n this.alertElement.innerHTML = '';\r\n };\r\n DefaultDialog.prototype.destroy = function () {\r\n var elem = document.querySelectorAll(\"[data-dialog-id=\\\"\" + this.dialogId + \"\\\"]\");\r\n if (elem.length <= 0)\r\n return;\r\n if (this.options.arrangeParents) {\r\n this.arrangeParents(false);\r\n }\r\n document.body.removeChild(this.slot);\r\n if (this.options.submitOnEnter) {\r\n window.removeEventListener('keydown', this.keydownHandler, false);\r\n }\r\n if (this.options.onDestroy) {\r\n this.options.onDestroy(this);\r\n }\r\n };\r\n DefaultDialog.prototype.isActiveDialog = function () {\r\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\r\n return windowDivs[windowDivs.length - 1] === this.slot;\r\n };\r\n DefaultDialog.prototype.arrangeParents = function (turnOn) {\r\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\r\n for (var i = 0; i < windowDivs.length - 1; i++) {\r\n if (turnOn) {\r\n var offset = i == 0 ? 20 : i * 40 + 20;\r\n domel(windowDivs[i])\r\n .setStyle('margin-top', offset + \"px\")\r\n .setStyle('margin-left', offset + \"px\");\r\n }\r\n else {\r\n domel(windowDivs[i])\r\n .removeStyle('margin-top')\r\n .removeStyle('margin-left');\r\n }\r\n }\r\n };\r\n return DefaultDialog;\r\n}());\r\nexport { DefaultDialog };\r\nvar DefaultProgressDialog = /** @class */ (function (_super) {\r\n __extends(DefaultProgressDialog, _super);\r\n function DefaultProgressDialog(options, data) {\r\n var _this = this;\r\n var contentElement;\r\n var progressElement;\r\n var body = domel('div')\r\n .addChild('div', function (b) { return contentElement = b\r\n .text(options.content || '')\r\n .toDOM(); })\r\n .addChild('div', function (b) {\r\n b\r\n .addClass(cssPrefix + \"-progress-line\")\r\n .addChild('div', function (b) {\r\n progressElement = b\r\n .addClass('fill')\r\n .toDOM();\r\n if (options.determinated) {\r\n b.setStyle('width', '0%');\r\n }\r\n else {\r\n b.addClass('indeterminate');\r\n }\r\n });\r\n })\r\n .toDOM();\r\n _this = _super.call(this, {\r\n title: options.title,\r\n body: body,\r\n beforeOpen: options.beforeOpen,\r\n onSubmit: options.onSubmit,\r\n width: options.width,\r\n height: options.height,\r\n submitable: false,\r\n cancelable: false,\r\n closable: false,\r\n onDestroy: options.onDestroy\r\n }, data) || this;\r\n _this.contentElement = contentElement;\r\n _this.progressElement = progressElement;\r\n return _this;\r\n }\r\n DefaultProgressDialog.prototype.updateContent = function (content) {\r\n this.contentElement.innerText = content;\r\n };\r\n DefaultProgressDialog.prototype.updateProgress = function (progress) {\r\n var _this = this;\r\n progress = this.in01(progress);\r\n this.progressElement.style.width = progress * 100 + \"%\";\r\n if (progress === 1) {\r\n // postpone for 0.5s for smooth closing\r\n setTimeout(function () {\r\n _this.submit();\r\n }, 500);\r\n }\r\n };\r\n DefaultProgressDialog.prototype.in01 = function (num) {\r\n if (num > 1)\r\n return 1;\r\n if (num < 0)\r\n return 0;\r\n return num;\r\n };\r\n return DefaultProgressDialog;\r\n}(DefaultDialog));\r\nexport { DefaultProgressDialog };\r\nvar DefaultDialogSet = /** @class */ (function () {\r\n function DefaultDialogSet(options, dialogService) {\r\n this.options = options;\r\n this.dialogService = dialogService;\r\n this.currentDialog = null;\r\n this.currentIndex = 0;\r\n this.options = options;\r\n this.dialogService = dialogService;\r\n }\r\n DefaultDialogSet.prototype.getCurrent = function () {\r\n return this.currentDialog;\r\n };\r\n DefaultDialogSet.prototype.openNext = function (data) {\r\n return this.open(this.currentIndex + 1, data);\r\n };\r\n DefaultDialogSet.prototype.openPrev = function (data) {\r\n return this.open(this.currentIndex - 1, data);\r\n };\r\n DefaultDialogSet.prototype.open = function (page, data) {\r\n if (page < 0) {\r\n this.currentIndex = 0;\r\n }\r\n else if (page >= this.options.length) {\r\n this.currentIndex = this.options.length - 1;\r\n }\r\n else {\r\n this.currentIndex = page;\r\n }\r\n if (this.currentDialog) {\r\n try {\r\n this.currentDialog.close();\r\n }\r\n catch (e) { }\r\n }\r\n var dlgOptions = this.options[this.currentIndex];\r\n this.currentDialog = this.dialogService.open(dlgOptions, data);\r\n return this.currentDialog;\r\n };\r\n DefaultDialogSet.prototype.close = function () {\r\n if (this.currentDialog) {\r\n this.currentDialog.close();\r\n this.currentDialog = null;\r\n }\r\n };\r\n return DefaultDialogSet;\r\n}());\r\nexport { DefaultDialogSet };\r\n//# sourceMappingURL=default_dialog_service.js.map","import { i18n } from '@easydata/core';\r\nfunction addEasyDataUITexts() {\r\n i18n.updateDefaultTexts({\r\n GridPageInfo: '{FirstPageRecordNum} - {LastPageRecordNum} of {Total} records',\r\n GridItemsPerPage: 'items per page',\r\n ButtonOK: \"OK\",\r\n ButtonCancel: \"Cancel\",\r\n ButtonApply: 'Apply',\r\n ButtonNow: 'Now',\r\n LblTotal: 'Total'\r\n });\r\n}\r\naddEasyDataUITexts();\r\n//# sourceMappingURL=text_resources.js.map","// grid\r\nexport * from './grid/easy_grid';\r\nexport * from './grid/easy_grid_options';\r\nexport * from './grid/easy_grid_columns';\r\nexport * from './grid/easy_grid_cell_renderer';\r\n//datetimepicker\r\nexport * from './datetimepicker/calendar';\r\nexport * from './datetimepicker/date_time_picker';\r\nexport * from './datetimepicker/default_calendar';\r\nexport * from './datetimepicker/default_date_time_picker';\r\nexport * from './datetimepicker/default_time_picker';\r\nexport * from './datetimepicker/time_picker';\r\n// utils\r\nexport * from './utils/browser_utils';\r\nexport * from './utils/dom_elem_builder';\r\nexport * from './utils/drag_manager';\r\nexport * from './utils/mask';\r\nexport * from './utils/ui-utils';\r\n//dialogs\r\nexport * from './dialogs/default_dialog_service';\r\nexport * from './dialogs/dialog_service';\r\nimport './i18n/text_resources';\r\nimport { DefaultDialogService } from './dialogs/default_dialog_service';\r\n// export dialogs to use outside of context as global\r\nvar dialogs = new DefaultDialogService();\r\nexport { dialogs };\r\n//# sourceMappingURL=public_api.js.map","import { i18n } from '@easydata/core';\r\nimport { DataType } from '@easydata/core';\r\n\r\nconst internalDateFormat = 'yyyy-MM-dd';\r\nconst internalTimeFormat = 'HH:mm';\r\n\r\nexport const getInternalDateTimeFormat = (dtype: DataType): string => {\r\n if (dtype == DataType.Date)\r\n return internalDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return internalTimeFormat;\r\n\r\n return `${internalDateFormat}T${internalTimeFormat}`;\r\n}\r\n\r\nexport const getEditDateTimeFormat = (dtype: DataType): string => {\r\n const settings = i18n.getLocaleSettings();\r\n if (dtype == DataType.Date)\r\n return settings.editDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return settings.editTimeFormat;\r\n\r\n return `${settings.editDateFormat} ${settings.editTimeFormat}`;\r\n}\r\n\r\nexport const setLocation = (path: string) => {\r\n const state = window.history.state;\r\n history.pushState(state, document.title, path)\r\n window.dispatchEvent(new Event('ed_set_location'));\r\n}","import { MetaEntityAttr } from '@easydata/core';\r\n\r\nexport interface ValidationResult {\r\n successed: boolean;\r\n messages?: string[];\r\n}\r\n\r\nexport abstract class Validator {\r\n\r\n public name: string;\r\n\r\n public abstract validate(attr: MetaEntityAttr, value: any): ValidationResult;\r\n \r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nimport { getEditDateTimeFormat } from '../utils/utils';\r\n\r\nexport class DateTimeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'DateTime';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n\r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n try {\r\n const editFormat = getEditDateTimeFormat(attr.dataType);\r\n const newDate = dataUtils.strToDateTime(value, editFormat);\r\n }\r\n catch {\r\n return {\r\n successed: false,\r\n messages: [i18n.getText('DateTimeError')]\r\n }\r\n }\r\n }\r\n\r\n \r\n return { successed: true };\r\n }\r\n}","import { \r\n DataType, utils as dataUtils, \r\n MetaEntityAttr, \r\n} from '@easydata/core';\r\n\r\nimport { domel } from '@easydata/ui';\r\n\r\nimport { DataContext } from '../main/data_context';\r\n\r\nimport { ValidationResult, Validator } from '../validators/validator';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\nimport { DateTimeValidator } from '../validators/datetime_validator';\r\n\r\nexport class EntityEditForm {\r\n private errorsDiv: HTMLElement;\r\n\r\n private html: HTMLElement;\r\n\r\n constructor(private context: DataContext) { \r\n }\r\n\r\n private validators: Validator[] = [ new DateTimeValidator() ];\r\n\r\n public getHtml() {\r\n return this.html;\r\n }\r\n\r\n private setHtmlInt(html: HTMLElement) {\r\n this.html = html;\r\n this.errorsDiv = this.html.querySelector('.errors-block');\r\n }\r\n\r\n public validate(): boolean {\r\n this.clearErrors();\r\n\r\n const inputs = Array.from(this.html.querySelectorAll<HTMLInputElement | HTMLSelectElement>('input, select'));\r\n let isValid = true;\r\n for(const input of inputs) {\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox')\r\n continue;\r\n\r\n const result = this.validateValue(attr, input.value);\r\n if (!result.successed) {\r\n if (isValid) {\r\n domel(this.errorsDiv)\r\n .addChild('ul');\r\n }\r\n\r\n isValid = false;\r\n\r\n for(const message of result.messages) {\r\n this.errorsDiv.firstElementChild.innerHTML += `<li>${attr.caption}: ${message}</li>`;\r\n }\r\n }\r\n \r\n this.markInputValid(input, result.successed);\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n public getData(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const filePromises: Promise<any>[] = [];\r\n const inputs = Array.from(this.html\r\n .querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea'));\r\n\r\n let obj = {};\r\n for (const input of inputs) {\r\n const property = input.name.substring(input.name.lastIndexOf('.') + 1);\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox') {\r\n obj[property] = (input as HTMLInputElement).checked;\r\n }\r\n else if (input.type === 'file') {\r\n filePromises.push(this.fileToBase64((input as HTMLInputElement).files[0])\r\n .then(content => obj[property] = content));\r\n }\r\n else {\r\n obj[property] = this.mapValue(attr.dataType, input.value);\r\n }\r\n }\r\n\r\n Promise.all(filePromises)\r\n .then(() => resolve(obj))\r\n .catch((e) => reject(e));\r\n });\r\n }\r\n\r\n private fileToBase64(file: File): Promise<string> {\r\n return new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n const result = reader.result.toString();\r\n resolve(result.substring(result.indexOf(',') + 1));\r\n } \r\n reader.onerror = error => reject(error);\r\n })\r\n }\r\n\r\n public useValidator(...validator: Validator[]) {\r\n this.useValidators(validator);\r\n }\r\n\r\n public useValidators(validators: Validator[]) {\r\n this.validators = this.validators.concat(validators);\r\n }\r\n\r\n private mapValue(type: DataType, value: string) {\r\n if (dataUtils.getDateDataTypes().indexOf(type) >= 0) {\r\n if (type !== DataType.Time && value && value.length) {\r\n const editFormat = crudUtils.getEditDateTimeFormat(type);\r\n const internalFormat = crudUtils.getInternalDateTimeFormat(type);\r\n\r\n const date = dataUtils.strToDateTime(value, editFormat);\r\n return dataUtils.dateTimeToStr(date, internalFormat)\r\n } \r\n\r\n return value && value.length ? value : null;\r\n }\r\n\r\n if (dataUtils.isIntType(type))\r\n return parseInt(value);\r\n\r\n if (dataUtils.isNumericType(type))\r\n return parseFloat(value);\r\n\r\n return value;\r\n }\r\n\r\n private clearErrors() {\r\n this.errorsDiv.innerHTML = '';\r\n\r\n this.html.querySelectorAll('input, select').forEach(el => {\r\n el.classList.remove('is-valid');\r\n el.classList.remove('is-invalid');\r\n });\r\n }\r\n\r\n private markInputValid(input: HTMLElement, valid: boolean) {\r\n input.classList.add(valid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private validateValue(attr: MetaEntityAttr, value: any): ValidationResult {\r\n const result = { successed: true, messages: []}\r\n for(const validator of this.validators) {\r\n const res = validator.validate(attr, value);\r\n if (!res.successed) {\r\n result.successed = false;\r\n result.messages = result.messages.concat(res.messages);\r\n }\r\n }\r\n\r\n return result;\r\n } \r\n}\r\n","import { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { \r\n browserUtils, CellRendererType,\r\n domel, EasyGrid, \r\n GridCellRenderer, GridColumn, DFMT_REGEX\r\n} from '@easydata/ui';\r\nimport { DataFilter } from '../filter/data_filter';\r\n\r\nexport interface TextFilterWidgetOptions {\r\n focus?: boolean,\r\n instantMode?: boolean;\r\n instantTimeout?: number\r\n}\r\n\r\nexport class TextFilterWidget {\r\n private options = {\r\n focus: false,\r\n instantMode: false,\r\n instantTimeout: 1000\r\n }\r\n\r\n constructor(\r\n private slot: HTMLElement, \r\n private grid: EasyGrid, \r\n private filter: DataFilter,\r\n options?: TextFilterWidgetOptions) {\r\n\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n const stringDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.STRING);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.STRING, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(stringDefRenderer, value, column, cellElement, rowElement));\r\n\r\n const numDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.NUMBER);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.NUMBER, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(numDefRenderer, value, column, cellElement, rowElement));\r\n\r\n this.render();\r\n }\r\n\r\n private filterInput: HTMLInputElement;\r\n\r\n private render() { \r\n const horizClass = browserUtils.IsIE() \r\n ? 'kfrm-fields-ie is-horizontal' \r\n : 'kfrm-fields is-horizontal';\r\n\r\n const isEdgeOrIE = browserUtils.IsIE() || browserUtils.IsEdge();\r\n \r\n domel(this.slot)\r\n .addClass(horizClass)\r\n .addChild('div', b => {\r\n b\r\n .addClass('control')\r\n .addChild('input', b => { \r\n this.filterInput = b.toDOM();\r\n b \r\n .attr('placeholder', i18n.getText('SearchInputPlaceholder'))\r\n .type('text')\r\n\r\n b.on('keydown', this.inputKeydownHandler.bind(this))\r\n\r\n if (this.options.instantMode) {\r\n b.on('keyup', this.inputKeyupHandler.bind(this));\r\n }\r\n });\r\n\r\n if (!isEdgeOrIE) {\r\n b \r\n .addClass('has-icons-right')\r\n .addChild('span', b => {\r\n b\r\n .addClass('icon')\r\n .addClass('is-right')\r\n .addClass('is-clickable')\r\n .html('&#x1F5D9;')\r\n .on('click', this.clearButtonClickHander.bind(this));\r\n });\r\n }\r\n });\r\n\r\n if (!this.options.instantMode) {\r\n domel(this.slot)\r\n .addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .addText(i18n.getText('SearchBtn'))\r\n .on('click', this.searchButtonClickHandler.bind(this))\r\n );\r\n }\r\n\r\n if (this.options.focus) {\r\n this.filterInput.focus();\r\n }\r\n }\r\n\r\n private applyFilterTimeout: any;\r\n\r\n private inputKeydownHandler(ev: Event) {\r\n if ((ev as KeyboardEvent).keyCode == 13) {\r\n this.applyFilter(true);\r\n }\r\n }\r\n\r\n private inputKeyupHandler() {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n this.applyFilterTimeout = setTimeout(() => {\r\n this.applyFilter(true);\r\n }, this.options.instantTimeout);\r\n }\r\n\r\n private clearButtonClickHander() {\r\n this.filterInput.value = '';\r\n this.filterInput.focus();\r\n\r\n this.applyFilter(true);\r\n }\r\n\r\n private searchButtonClickHandler() {\r\n this.applyFilter(true);\r\n }\r\n\r\n public applyFilter(checkChange : boolean) : boolean {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n const filterValue = this.filter.getValue();\r\n if (!checkChange || filterValue != this.filterInput.value) {\r\n this.filter.apply(this.filterInput.value)\r\n .then(data => {\r\n this.grid.setData(data);\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private highlightCellRenderer(defaultRenderer: GridCellRenderer, value: any, column: GridColumn, cellElement: HTMLElement, rowElement: HTMLElement) { \r\n if (dataUtils.isNumericType(column.type) \r\n || dataUtils.getStringDataTypes().indexOf(column.type) >= 0) \r\n {\r\n if (value) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n value = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n value = value.toLocaleString();\r\n }\r\n\r\n \r\n const result = this.highlightText(value.toString());\r\n if (result instanceof HTMLElement) {\r\n cellElement.title = value;\r\n cellElement.appendChild(result);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n defaultRenderer(value, column, cellElement, rowElement);\r\n }\r\n\r\n private highlightText(content: string): HTMLElement | string{\r\n const normalizedContent = content.toLowerCase();\r\n const filterValue = this.filter.getValue().toString();\r\n if (filterValue && filterValue.length > 0 && content && content.length > 0) {\r\n \r\n const indexInMas = [];\r\n const words = filterValue.split('||').map(w => w.trim().toLowerCase());\r\n for(let i = 0; i < words.length; i++) {\r\n let pos = 0;\r\n const lowerWord = words[i];\r\n if (!lowerWord.length)\r\n continue;\r\n if (lowerWord === normalizedContent) {\r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content;\r\n \r\n return highlightSpan;\r\n }\r\n while (pos < content.length - 1) {\r\n const index = normalizedContent.indexOf(lowerWord, pos);\r\n if (index >= 0) {\r\n indexInMas.push({index: index, length: words[i].length});\r\n pos = index + lowerWord.length;\r\n } else {\r\n pos++;\r\n }\r\n }\r\n }\r\n \r\n if (indexInMas.length > 0) {\r\n \r\n //sort array item by index\r\n indexInMas.sort((item1, item2) => {\r\n \r\n if (item1.index > item2.index) {\r\n return 1;\r\n } \r\n else if (item1.index == item2.index2) {\r\n return 0;\r\n } \r\n else {\r\n return -1;\r\n }\r\n \r\n });\r\n \r\n //remove intersecting gaps\r\n for(let i = 0; i < indexInMas.length - 1;) {\r\n const delta = indexInMas[i + 1].index - (indexInMas[i].index + indexInMas[i].length);\r\n if (delta < 0) {\r\n const addDelta = indexInMas[i + 1].length + delta;\r\n if (addDelta > 0) {\r\n indexInMas[i].length += addDelta;\r\n }\r\n indexInMas.splice(i + 1, 1);\r\n } else {\r\n i++;\r\n }\r\n }\r\n \r\n const div = document.createElement('div');\r\n for (let i = 0; i < indexInMas.length; i++) {\r\n if (i === 0) {\r\n const text = document.createTextNode(content.substring(0, indexInMas[i].index));\r\n div.appendChild(text);\r\n }\r\n \r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content.substring(indexInMas[i].index,\r\n indexInMas[i].index + indexInMas[i].length)\r\n \r\n div.appendChild(highlightSpan);\r\n\r\n const text = (i < indexInMas.length - 1) \r\n ? document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length, indexInMas[i + 1].index))\r\n : document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length));\r\n\r\n div.appendChild(text);\r\n }\r\n \r\n return div;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n}","import { \r\n DataRow, DataType, EasyDataTable, \r\n EditorTag, EntityAttrKind, i18n, \r\n MetaEntityAttr, utils as dataUtils,\r\n ValueEditor\r\n} from '@easydata/core';\r\n\r\nimport { \r\n browserUtils, DateTimePickerOptions, \r\n DefaultDateTimePicker, DefaultDialogService, \r\n domel, DomElementBuilder, EasyGrid \r\n} from '@easydata/ui';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityEditForm } from './entity_edit_form';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nconst isIE = browserUtils.IsIE();\r\n\r\nexport type FormBuildParams = {\r\n values?: DataRow,\r\n isEditForm?: boolean;\r\n};\r\n\r\nexport class EntityEditFormBuilder {\r\n private form: EntityEditForm;\r\n\r\n constructor(private context: DataContext, private params?: FormBuildParams) {\r\n this.params = params || {};\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.form = new EntityEditForm(this.context);\r\n }\r\n\r\n private setupLookupField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, value: any): void {\r\n const lookupEntity = this.context.getMetaData().getRootEntity()\r\n .subEntities.filter(ent => ent.id == attr.lookupEntity)[0];\r\n const dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);\r\n\r\n if (!dataAttr) return;\r\n\r\n readOnly = readOnly || !dataAttr.isEditable;\r\n\r\n value = this.params.values\r\n ? this.params.values.getValue(dataAttr.id)\r\n : undefined;\r\n\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n let inputEl: HTMLInputElement;\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n b.attr('readonly', '');\r\n\r\n b.name(dataAttr.id)\r\n b.type(this.resolveInputType(dataAttr.dataType));\r\n\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString() : '');\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText('NavigationBtnTitle'))\r\n .addText('...')\r\n .on('click', (ev) => {\r\n const lookupTable = new EasyDataTable({\r\n loader: {\r\n loadChunk: (chunkParams) => this.context.getDataLoader()\r\n .loadChunk({ ...chunkParams, id: lookupEntity.id } as any)\r\n }\r\n });\r\n\r\n this.context.getDataLoader()\r\n .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id } as any)\r\n .then(data => {\r\n for (const col of data.table.columns.getItems()) {\r\n const attrs = lookupEntity.attributes.filter(attr =>\r\n attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup));\r\n\r\n if (attrs.length) {\r\n lookupTable.columns.add(col);\r\n }\r\n }\r\n\r\n lookupTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n lookupTable.addRow(row);\r\n }\r\n\r\n const ds = new DefaultDialogService();\r\n let gridSlot: HTMLElement = null;\r\n\r\n let selectedSlot: HTMLElement = null;\r\n\r\n let widgetSlot: HTMLElement;\r\n const slot = domel('div')\r\n .addClass(`kfrm-form`)\r\n .addChild('div', b => b\r\n .addClass(`kfrm-field`)\r\n .addChild('label', b => b\r\n .addText(i18n.getText('LookupSelectedItem'))\r\n .toDOM()\r\n )\r\n .addChild('div', b => selectedSlot = b\r\n .addText('None')\r\n .toDOM()\r\n )\r\n )\r\n .addChild('div', b => widgetSlot = b.toDOM())\r\n .addChild('div', b => b\r\n .addClass('kfrm-control')\r\n .addChild('div', b => gridSlot = b.toDOM())\r\n )\r\n .toDOM();\r\n\r\n let selectedValue = inputEl.value;\r\n\r\n const getValue = (row: DataRow | any, colId: string) => {\r\n\r\n if (row instanceof DataRow) {\r\n return row.getValue(colId);\r\n }\r\n\r\n const property = colId.substring(colId.lastIndexOf('.') + 1);\r\n return row[property]\r\n }\r\n\r\n const updateSelectedValue = (row: DataRow | any) => {\r\n selectedSlot.innerHTML = lookupTable.columns\r\n .getItems()\r\n .map(col => {\r\n return `<b>${col.label}:</b> ${getValue(row, col.id)}`\r\n })\r\n .join(', ');\r\n }\r\n\r\n if (selectedValue) {\r\n const attr = lookupEntity.getFirstPrimaryAttr();\r\n const key = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n this.context.fetchRecord({[key]: selectedValue}, lookupEntity.id)\r\n .then(data => {\r\n if (data.entity) {\r\n updateSelectedValue(data.entity);\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n const lookupGrid = new EasyGrid({\r\n slot: gridSlot,\r\n dataTable: lookupTable,\r\n fixHeightOnFirstRender: true,\r\n paging: {\r\n pageSize: 10\r\n },\r\n onActiveRowChanged: (ev) => {\r\n lookupGrid.getData().getRow(ev.rowIndex)\r\n .then((row) => {\r\n selectedValue = row.getValue(attr.lookupDataAttr);\r\n updateSelectedValue(row);\r\n });\r\n }\r\n });\r\n\r\n ds.open({\r\n title: i18n.getText('LookupDlgCaption')\r\n .replace('{entity}', lookupEntity.caption),\r\n body: slot,\r\n arrangeParents: true,\r\n beforeOpen: () => {\r\n const dataFilter = this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);\r\n new TextFilterWidget(widgetSlot, lookupGrid, dataFilter,\r\n { instantMode: true, focus: true });\r\n },\r\n onSubmit: () => {\r\n inputEl.value = selectedValue;\r\n return true;\r\n },\r\n onDestroy: () => {\r\n lookupGrid.destroy();\r\n // return focus on button\r\n b.toDOM().focus();\r\n }\r\n });\r\n });\r\n })\r\n );\r\n });\r\n }\r\n\r\n private setupDateTimeField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden: boolean) {\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n const editFormat = crudUtils.getEditDateTimeFormat(attr.dataType);\r\n\r\n let inputEl: HTMLInputElement;\r\n let btnEl: HTMLButtonElement;\r\n\r\n const mask = editFormat\r\n .replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99')\r\n\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n\r\n b.name(attr.id)\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n else {\r\n b.mask(mask)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .on('input', ev => {\r\n b.removeClass('is-invalid');\r\n try {\r\n const newDate = dataUtils.strToDateTime(inputEl.value, editFormat);\r\n }\r\n catch (e) {\r\n b.addClass('is-invalid');\r\n }\r\n finally {\r\n\r\n }\r\n })\r\n .on('blur', ev => {\r\n if (inputEl.value === mask.replace(/[9]/g, '_')) {\r\n inputEl.value = '';\r\n }\r\n });\r\n }\r\n\r\n b.value((dataUtils.IsDefinedAndNotNull(value)\r\n ? dataUtils.dateTimeToStr(value, editFormat)\r\n : ''))\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => btnEl = b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText(attr.dataType !== DataType.Time\r\n ? 'CalendarBtnTitle'\r\n : 'TimerBtnTitle'))\r\n .addChild('i', b => b.addClass(attr.dataType !== DataType.Time\r\n ? 'ed-calendar-icon'\r\n : 'ed-timer-icon'))\r\n .on('click', (ev) => {\r\n\r\n let value: Date;\r\n try {\r\n value = inputEl.value.length\r\n ? attr.dataType !== DataType.Time\r\n ? dataUtils.strToDateTime(inputEl.value, editFormat)\r\n : dataUtils.strToTime(inputEl.value)\r\n : new Date(new Date().setSeconds(0));\r\n }\r\n catch {\r\n value = new Date(new Date().setSeconds(0));\r\n }\r\n\r\n const pickerOptions: DateTimePickerOptions = {\r\n zIndex: 9999999999,\r\n showCalendar: attr.dataType !== DataType.Time,\r\n showTimePicker: attr.dataType !== DataType.Date,\r\n onApply: (dateTime: Date) => {\r\n dateTime.setSeconds(0);\r\n dateTime.setMilliseconds(0);\r\n\r\n inputEl.value = dataUtils.dateTimeToStr(dateTime, editFormat);\r\n\r\n }\r\n };\r\n\r\n const dtp = new DefaultDateTimePicker(pickerOptions);\r\n dtp.setDateTime(value);\r\n dtp.show(ev.target as HTMLElement);\r\n\r\n }).toDOM()\r\n );\r\n });\r\n }\r\n\r\n private setupListField(parent: HTMLElement, attr: MetaEntityAttr, value: any, values: any, readOnly: boolean) {\r\n domel(parent)\r\n .addChild('div', b => b\r\n .addClass('kfrm-select full-width')\r\n .addChild('select', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n b.attr('name', attr.id)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n if (values) {\r\n for (let i = 0; i < values.length; i++) {\r\n const val = values[i];\r\n b.addOption({\r\n value: val.id,\r\n title: val.text,\r\n selected: i === 0\r\n });\r\n }\r\n }\r\n b.value(value);\r\n })\r\n );\r\n }\r\n\r\n private setupFileField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, accept: string) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n b.attr('accept', accept);\r\n });\r\n }\r\n\r\n private setupTextField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden : boolean) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n if (attr.dataType == DataType.Bool) {\r\n if (value)\r\n b.attr('checked', '');\r\n } \r\n else {\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n }\r\n });\r\n }\r\n\r\n private setupTextArea(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean) {\r\n // feature: modify size in value editor ??\r\n domel(parent)\r\n .addChild('textarea', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n \r\n b.attr('name', attr.id)\r\n b.setStyle('height', `120px`)\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n });\r\n }\r\n\r\n private addFormField(parent: HTMLElement, attr: MetaEntityAttr) {\r\n const value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)\r\n ? this.params.values.getValue(attr.id)\r\n : !this.params.isEditForm\r\n ? attr.defaultValue\r\n : undefined;\r\n\r\n const editor = this.resolveEditor(attr);\r\n\r\n const readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);\r\n const required = !attr.isNullable;\r\n \r\n if (isIE) {\r\n parent = domel('div', parent)\r\n .addClass('kfrm-field-ie')\r\n .toDOM();\r\n }\r\n\r\n domel(parent)\r\n .addChild('label', b => {\r\n b.attr('for', attr.id);\r\n b.addHtml(`${attr.caption} ${required ? '<sup style=\"color: red\">*</sup>' : ''}: `);\r\n\r\n if (attr.description) {\r\n b.addChild('div', b => b\r\n .attr('title', attr.description)\r\n .addClass('question-mark')\r\n .setStyle('vertical-align', 'middle')\r\n .setStyle('display', 'inline-block')\r\n );\r\n }\r\n });\r\n \r\n const hidden = attr.isPrimaryKey;\r\n \r\n if (attr.kind === EntityAttrKind.Lookup) {\r\n this.setupLookupField(parent, attr, readOnly, value);\r\n return;\r\n }\r\n\r\n switch (editor.tag) {\r\n case EditorTag.DateTime:\r\n this.setupDateTimeField(parent, attr, value, readOnly, hidden);\r\n break;\r\n\r\n case EditorTag.List:\r\n this.setupListField(parent, attr, value, editor.values, readOnly);\r\n break;\r\n\r\n case EditorTag.File:\r\n this.setupFileField(parent, attr, readOnly, editor.accept);\r\n break;\r\n\r\n case EditorTag.Edit:\r\n default:\r\n if (editor.multiline) {\r\n this.setupTextArea(parent, attr, value, readOnly);\r\n }\r\n else {\r\n this.setupTextField(parent, attr, value, readOnly, hidden);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private resolveInputType(dataType: DataType): string {\r\n if (dataType === DataType.Bool)\r\n return 'checkbox';\r\n\r\n if (dataType === DataType.Blob)\r\n return 'file';\r\n\r\n return 'text';\r\n }\r\n\r\n private resolveEditor(attr: MetaEntityAttr): ValueEditor {\r\n let editor = attr.defaultEditor || new ValueEditor();\r\n if (editor.tag == EditorTag.Unknown) {\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n editor.tag = EditorTag.DateTime;\r\n }\r\n else {\r\n editor.tag = EditorTag.Edit;\r\n }\r\n }\r\n\r\n return editor;\r\n }\r\n\r\n private applySumbit(ev: KeyboardEvent): boolean {\r\n if (ev.keyCode === 13) {\r\n this.sumbitCallback && this.sumbitCallback();\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private sumbitCallback: () => void;\r\n\r\n public onSubmit(sumbitCallback: () => void) {\r\n this.sumbitCallback = sumbitCallback;\r\n return this;\r\n }\r\n\r\n public build(): EntityEditForm {\r\n let fb: DomElementBuilder<HTMLDivElement>;\r\n const formHtml =\r\n domel('div')\r\n .addClass('kfrm-form')\r\n .addChild('div', b => b\r\n .addClass(`errors-block`)\r\n .toDOM()\r\n )\r\n .addChild('div', b => {\r\n b.addClass(`${isIE\r\n ? 'kfrm-fields-ie col-ie-1-4 label-align-right'\r\n : 'kfrm-fields col-a-1 label-align-right'}`);\r\n\r\n fb = b;\r\n })\r\n .toDOM();\r\n\r\n this.form['setHtmlInt'](formHtml);\r\n\r\n for (const attr of this.context.getActiveEntity().attributes) { \r\n if (!this.params.isEditForm && !attr.showOnCreate)\r\n continue;\r\n\r\n if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {\r\n continue;\r\n }\r\n\r\n this.addFormField(fb.toDOM(), attr)\r\n }\r\n\r\n return this.form;\r\n }\r\n}","export class ProgressBar {\r\n\r\n constructor(private slot: HTMLElement) {\r\n this.hide();\r\n this.slot.classList.add('ed-progress-bar');\r\n }\r\n\r\n public show() {\r\n this.slot.style.removeProperty('display');\r\n }\r\n\r\n public hide() {\r\n this.slot.style.display = 'none';\r\n }\r\n}","import { \r\n DataChunkDescriptor, \r\n DataLoader, EasyDataTable \r\n} from '@easydata/core';\r\n\r\nimport { DataContext } from './data_context';\r\n\r\nexport class EasyDataServerLoader implements DataLoader {\r\n constructor(protected context: DataContext) {\r\n\r\n }\r\n\r\n loadChunk(params: DataChunkDescriptor | any) {\r\n const url = this.context.resolveEndpoint('FetchDataset', \r\n { sourceId: params.sourceId || this.context.getActiveEntity().id });\r\n delete params.sourceId;\r\n\r\n this.context.startProcess();\r\n const http = this.context.getHttpClient();\r\n return http.post(url, params)\r\n .then((result) => {\r\n\r\n const dataTable = new EasyDataTable({\r\n chunkSize: 1000\r\n });\r\n\r\n const resultSet = result.resultSet;\r\n for(const col of resultSet.cols) {\r\n dataTable.columns.add(col);\r\n }\r\n\r\n for(const row of resultSet.rows) {\r\n dataTable.addRow(row);\r\n }\r\n \r\n let totalRecords = 0;\r\n if (result.meta && result.meta.totalRecords) {\r\n totalRecords = result.meta.totalRecords; \r\n }\r\n\r\n return {\r\n table: dataTable,\r\n total: totalRecords,\r\n hasNext: !params.needTotal \r\n || params.offset + params.limit < totalRecords\r\n }\r\n \r\n })\r\n .finally(() => {\r\n this.context.endProcess();\r\n });\r\n }\r\n\r\n}","import { \r\n HttpClient, MetaData,\r\n MetaEntity, combinePath, \r\n EasyDataTable, EasyDataTableOptions,\r\n DataLoader\r\n} from '@easydata/core';\r\nimport { DataFilter } from '../filter/data_filter';\r\nimport { TextDataFilter } from '../filter/text_data_filter';\r\n\r\nimport { EasyDataServerLoader } from './easy_data_server_loader';\r\n\r\ntype EasyDataEndpointKey = \r\n 'GetMetaData' |\r\n 'FetchDataset' | \r\n 'FetchRecord' |\r\n 'CreateRecord' |\r\n 'UpdateRecord' |\r\n 'DeleteRecord' ;\r\n\r\n\r\ninterface CompoundRecordKey { \r\n [key: string]: string \r\n}\r\n \r\nexport interface EasyDataContextOptions {\r\n metaDataId?: string;\r\n endpoint?: string;\r\n dataTable?: EasyDataTableOptions,\r\n onProcessStart?: () => void;\r\n onProcessEnd?: () => void;\r\n}\r\n\r\nexport class DataContext {\r\n private endpoints: Map<string, string> = new Map<string, string>();\r\n\r\n private http: HttpClient;\r\n\r\n private model: MetaData;\r\n\r\n private data: EasyDataTable;\r\n\r\n private dataLoader: EasyDataServerLoader;\r\n\r\n private activeEntity: MetaEntity;\r\n\r\n private options: EasyDataContextOptions;\r\n\r\n constructor(options?: EasyDataContextOptions) {\r\n this.options = options || {};\r\n\r\n this.http = new HttpClient();\r\n this.model = new MetaData();\r\n this.model.id = options.metaDataId || '__default';\r\n\r\n this.dataLoader = new EasyDataServerLoader(this);\r\n const dataTableOptions = {\r\n loader: this.dataLoader,\r\n ...options.dataTable\r\n };\r\n\r\n this.data = new EasyDataTable(dataTableOptions);\r\n\r\n this.setDefaultEndpoints(this.options.endpoint || '/api/easydata');\r\n }\r\n\r\n public getActiveEntity() {\r\n return this.activeEntity;\r\n }\r\n\r\n public setActiveSource(entityId: string) {\r\n this.activeEntity = this.model.getRootEntity().subEntities\r\n .filter(e => e.id == entityId)[0];\r\n }\r\n\r\n public getMetaData(): MetaData {\r\n return this.model;\r\n }\r\n\r\n public getData() {\r\n return this.data;\r\n }\r\n\r\n public getDataLoader(): DataLoader {\r\n return this.dataLoader;\r\n }\r\n\r\n public createFilter(): DataFilter\r\n public createFilter(sourceId: string, data: EasyDataTable, isLookup?: boolean): DataFilter\r\n public createFilter(sourceId?: string, data?: EasyDataTable, isLookup?: boolean): DataFilter {\r\n return new TextDataFilter(\r\n this.dataLoader, \r\n data || this.getData(), \r\n sourceId || this.activeEntity.id, \r\n isLookup);\r\n }\r\n\r\n public loadMetaData(): Promise<MetaData> {\r\n const url = this.resolveEndpoint('GetMetaData');\r\n this.startProcess();\r\n return this.http.get(url) \r\n .then(result => {\r\n if (result.model) {\r\n this.model.loadFromData(result.model);\r\n }\r\n\r\n return this.model;\r\n })\r\n .catch(error => { \r\n console.error(`Error: ${error.message}. Source: ${error.sourceError}`);\r\n return null;\r\n })\r\n .finally(() => {\r\n this.endProcess();\r\n });\r\n }\r\n\r\n public getHttpClient() {\r\n return this.http;\r\n }\r\n\r\n public fetchDataset() {\r\n this.data.clear();\r\n return this.dataLoader.loadChunk({offset: 0, limit: this.data.chunkSize, needTotal: true})\r\n .then(result => { \r\n for(const col of result.table.columns.getItems()) {\r\n this.data.columns.add(col);\r\n }\r\n\r\n this.data.setTotal(result.total);\r\n\r\n for(const row of result.table.getCachedRows()) {\r\n this.data.addRow(row);\r\n }\r\n\r\n return this.data;\r\n })\r\n }\r\n\r\n public fetchRecord(keys : CompoundRecordKey, sourceId?: string) {\r\n const url = this.resolveEndpoint('FetchRecord', { sourceId: sourceId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.get(url, { queryParams: keys})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public createRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('CreateRecord', \r\n { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public updateRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('UpdateRecord', { sourceId: sourceId || this.activeEntity.id });\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public deleteRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('DeleteRecord', { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json'})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public setEndpoint(key: EasyDataEndpointKey, value: string) : void\r\n public setEndpoint(key: EasyDataEndpointKey | string, value: string) : void {\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey, value: string): void\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey | string, value: string): void {\r\n if (!this.endpoints.has(key))\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n private endpointVarsRegex = /\\{.*?\\}/g;\r\n\r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey, options?: any): string \r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey | string, options?: any) : string {\r\n options = options || {};\r\n\r\n let result = this.endpoints.get(endpointKey);\r\n if (!result) {\r\n throw endpointKey + ' endpoint is not defined'; \r\n }\r\n\r\n let matches = result.match(this.endpointVarsRegex);\r\n if (matches) {\r\n for (let match of matches) {\r\n let opt = match.substring(1, match.length - 1);\r\n let optVal = options[opt];\r\n if (!optVal) {\r\n if (opt == 'modelId') {\r\n optVal = this.model.getId();\r\n }\r\n else if (opt == 'sourceId') {\r\n optVal = this.activeEntity.id;\r\n }\r\n else {\r\n throw `Parameter [${opt}] is not defined`;\r\n }\r\n }\r\n \r\n result = result.replace(match, optVal);\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n public startProcess() {\r\n if (this.options.onProcessStart)\r\n this.options.onProcessStart();\r\n }\r\n\r\n public endProcess() {\r\n if (this.options.onProcessEnd)\r\n this.options.onProcessEnd();\r\n }\r\n\r\n private setDefaultEndpoints(endpointBase : string) {\r\n this.setEnpointIfNotExist('GetMetaData', combinePath(endpointBase, 'models/{modelId}'));\r\n this.setEnpointIfNotExist('FetchDataset', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('FetchRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('CreateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/create'));\r\n this.setEnpointIfNotExist('UpdateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/update'));\r\n this.setEnpointIfNotExist('DeleteRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/delete'));\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nexport class TypeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Type';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.isNumericType(attr.dataType)) {\r\n if (!dataUtils.isNumeric(value))\r\n return { \r\n successed: false, \r\n messages: [ i18n.getText('NumberError') ]\r\n };\r\n\r\n\r\n if (dataUtils.isIntType(attr.dataType) \r\n && !Number.isInteger(Number.parseFloat(value))) {\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('IntNumberError') ]\r\n }\r\n }\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from \"./validator\";\r\n\r\nexport class RequiredValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Required';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!attr.isNullable && (\r\n !dataUtils.IsDefinedAndNotNull(value)\r\n || value === ''))\r\n\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('RequiredError') ]\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { DataRow, i18n, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { \r\n DefaultDialogService, \r\n DialogService, domel, EasyGrid, \r\n GridCellRenderer, GridColumn, RowClickEvent \r\n} from '@easydata/ui';\r\n\r\nimport { EntityEditFormBuilder } from '../form/entity_form_builder';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { RequiredValidator } from '../validators/required_validator';\r\nimport { TypeValidator } from '../validators/type_validator';\r\nimport { Validator } from '../validators/validator';\r\nimport { EasyDataViewOptions } from './options';\r\nimport { setLocation } from '../utils/utils';\r\n\r\nexport class EntityDataView {\r\n private options: EasyDataViewOptions = {\r\n showFilterBox: true,\r\n showBackToEntities: true\r\n }\r\n\r\n private dlg: DialogService;\r\n\r\n private grid: EasyGrid;\r\n\r\n private filterWidget : TextFilterWidget;\r\n\r\n private defaultValidators: Validator[] = [ new RequiredValidator(), new TypeValidator()];\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string,\r\n options: EasyDataViewOptions) \r\n {\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n this.dlg = new DefaultDialogService();\r\n\r\n const ent = this.context.getActiveEntity();\r\n if (!ent) {\r\n throw \"Can't find active entity for \" + window.location.pathname;\r\n }\r\n \r\n this.slot.innerHTML += `<h1>${ent.captionPlural || ent.caption}</h1>`;\r\n if (this.options.showBackToEntities) {\r\n domel(this.slot)\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(`← ${i18n.getText('BackToEntities')}`)\r\n .on('click', (e) => {\r\n e.preventDefault();\r\n setLocation(this.basePath);\r\n })\r\n );\r\n }\r\n\r\n this.renderGrid();\r\n }\r\n\r\n private syncGridColumnHandler(column: GridColumn) {\r\n if (column.dataColumn) {\r\n const attr = this.context.getMetaData().getAttributeById(column.dataColumn.id);\r\n if (attr) {\r\n column.isVisible = attr.showOnView;\r\n }\r\n }\r\n }\r\n\r\n private renderGrid() {\r\n this.context.fetchDataset()\r\n .then(result => {\r\n const gridSlot = document.createElement('div');\r\n this.slot.appendChild(gridSlot);\r\n gridSlot.id = 'Grid';\r\n this.grid = new EasyGrid(dataUtils.assignDeep({\r\n slot: gridSlot,\r\n dataTable: result,\r\n paging: {\r\n pageSize: 15,\r\n allowPageSizeChange: true,\r\n pageSizeItems: [15, 30, 50, 100, 200]\r\n },\r\n showPlusButton: this.context.getActiveEntity().isEditable,\r\n plusButtonTitle: i18n.getText('AddRecordBtnTitle'),\r\n showActiveRow: false,\r\n onPlusButtonClick: this.addClickHandler.bind(this),\r\n onGetCellRenderer: this.manageCellRenderer.bind(this),\r\n onRowDbClick: this.rowDbClickHandler.bind(this),\r\n onSyncGridColumn: this.syncGridColumnHandler.bind(this)\r\n }, this.options.grid || {}));\r\n\r\n if (this.options.showFilterBox) {\r\n let filterWidgetSlot: HTMLElement;\r\n const filterBarDiv = domel('div')\r\n .addClass(`kfrm-form`)\r\n .setStyle('margin', '10px 0px')\r\n .addChild('div', b => \r\n filterWidgetSlot = b.toDOM()\r\n ).toDOM();\r\n \r\n this.slot.insertBefore(filterBarDiv, gridSlot);\r\n \r\n const dataFilter = this.context.createFilter();\r\n this.filterWidget = new TextFilterWidget(filterWidgetSlot, this.grid, dataFilter); \r\n }\r\n });\r\n }\r\n\r\n private manageCellRenderer(column: GridColumn, defaultRenderer: GridCellRenderer) {\r\n if (column.isRowNum) {\r\n column.width = 110;\r\n return (value: any, column: GridColumn, cell: HTMLElement, rowEl: HTMLElement) => {\r\n const b = domel('div', cell)\r\n .addClass(`keg-cell-value`);\r\n \r\n if (this.context.getActiveEntity().isEditable) {\r\n b.addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('EditBtn'))\r\n .on('click', (ev) => this.editClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n )\r\n .addChild('span', b => b.text(' | '))\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('DeleteBtn'))\r\n .on('click', (ev) => \r\n this.deleteClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addClickHandler() {\r\n const activeEntity = this.context.getActiveEntity();\r\n const form = new EntityEditFormBuilder(this.context)\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n\r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('AddDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n \r\n form.getData()\r\n .then(obj => this.context.createRecord(obj))\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private editClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n this.showEditForm(row);\r\n }\r\n })\r\n }\r\n\r\n private showEditForm(row: DataRow) {\r\n const activeEntity = this.context.getActiveEntity();\r\n\r\n const form = new EntityEditFormBuilder(this.context, { isEditForm: true, values: row })\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n \r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('EditDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n\r\n form.getData()\r\n .then(obj => this.context.updateRecord(obj))\r\n .then(() => { \r\n return this.refreshData();\r\n }) \r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n\r\n private rowDbClickHandler(ev: RowClickEvent) {\r\n if (this.context.getActiveEntity().isEditable) {\r\n this.showEditForm(ev.row);\r\n }\r\n }\r\n\r\n private deleteClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n const activeEntity = this.context.getActiveEntity();\r\n const keyAttrs = activeEntity.getPrimaryAttrs();\r\n const keyVals = keyAttrs.map(attr => row.getValue(attr.id));\r\n const keys = keyAttrs.reduce((val, attr, index) => { \r\n const property = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n val[property] = keyVals[index];\r\n return val; \r\n }, {});\r\n this.dlg.openConfirm(\r\n i18n.getText('DeleteDlgCaption')\r\n .replace('{entity}', activeEntity.caption), \r\n i18n.getText('DeleteDlgMessage')\r\n .replace('{recordId}', Object.keys(keys)\r\n .map(key => `${key}:${keys[key]}`).join(';')), \r\n )\r\n .then((result) => {\r\n if (result) {\r\n this.context.deleteRecord(keys)\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n private processError(error) {\r\n this.dlg.open({\r\n title: 'Ooops, something went wrong',\r\n body: error.message,\r\n closable: true,\r\n cancelable: false\r\n });\r\n }\r\n\r\n private refreshData(): Promise<void> {\r\n return this.context.fetchDataset()\r\n .then(() => {\r\n let processed = false;\r\n if (this.filterWidget) { \r\n processed = this.filterWidget.applyFilter(false);\r\n }\r\n\r\n if (!processed) {\r\n this.grid.refresh();\r\n }\r\n });\r\n }\r\n}","import { i18n, MetaData } from '@easydata/core';\r\nimport { domel } from '@easydata/ui';\r\nimport { setLocation } from '../utils/utils';\r\nimport { DataContext } from '../main/data_context';\r\n\r\nexport class RootDataView {\r\n private metaData: MetaData;\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string) {\r\n\r\n this.metaData = this.context.getMetaData();\r\n this.slot.innerHTML += `<h1>${i18n.getText('RootViewTitle')}</h1>`;\r\n\r\n this.renderEntitySelector();\r\n }\r\n\r\n private renderEntitySelector() {\r\n const entities = this.metaData.getRootEntity().subEntities;\r\n if (this.slot) {\r\n domel(this.slot)\r\n .addChild('div', b => b\r\n .addClass('ed-root')\r\n .addChild('div', b => b\r\n .addClass('ed-menu-description')\r\n .addText(i18n.getText(!this.metaData.isEmpty() ? 'EntityMenuDesc' : 'ModelIsEmpty'))\r\n )\r\n .addChild('ul', b => {\r\n b.addClass('ed-entity-menu');\r\n entities.forEach(ent => {\r\n b.addChild('li', b => {\r\n b.addClass('ed-entity-item')\r\n .on('click', () => {\r\n setLocation(`${this.basePath}/${decodeURIComponent(ent.id)}`);\r\n })\r\n .addChild('div', b => {\r\n b.addClass('ed-entity-item-caption')\r\n .addText(ent.captionPlural || ent.caption);\r\n });\r\n\r\n if (ent.description) {\r\n b.addChild('div', b => {\r\n b.addClass('ed-entity-item-descr')\r\n .addText(`${ent.description}`);\r\n });\r\n }\r\n });\r\n });\r\n })\r\n );\r\n }\r\n }\r\n}","import { utils as dataUtils } from '@easydata/core';\r\n\r\nimport { ProgressBar } from '../widgets/progress_bar';\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityDataView } from './entity_data_view';\r\nimport { EasyDataViewDispatcherOptions } from './options';\r\nimport { RootDataView } from './root_data_view';\r\n\r\nexport class EasyDataViewDispatcher {\r\n private context: DataContext;\r\n private basePath: string;\r\n\r\n private container: HTMLElement;\r\n\r\n private options: EasyDataViewDispatcherOptions = {\r\n container: '#EasyDataContainer',\r\n basePath: 'easydata' \r\n };\r\n\r\n constructor(options?: EasyDataViewDispatcherOptions) {\r\n this.options = dataUtils.assign(this.options, options || {});\r\n\r\n if (this.options.rootEntity) {\r\n this.options.showBackToEntities = false;\r\n this.basePath = '/';\r\n }\r\n else {\r\n this.basePath = this.normalizeBasePath(this.options.basePath);\r\n }\r\n\r\n this.setContainer(this.options.container);\r\n\r\n const progressBarSlot = document.createElement('div');\r\n const bar = new ProgressBar(progressBarSlot); \r\n \r\n const parent = this.container.parentElement;\r\n parent.insertBefore(progressBarSlot, parent.firstElementChild);\r\n \r\n this.context = new DataContext({\r\n endpoint: this.options.endpoint,\r\n dataTable: this.options.dataTable,\r\n onProcessStart: () => bar.show(),\r\n onProcessEnd: () => bar.hide()\r\n });\r\n\r\n }\r\n \r\n private normalizeBasePath(basePath: string): string {\r\n basePath = this.trimSlashes(basePath);\r\n const fullPath = decodeURIComponent(window.location.pathname);\r\n const idx = fullPath.toLocaleLowerCase().indexOf(basePath);\r\n return idx >= 0 ? fullPath.substring(0, idx + basePath.length) : '/';\r\n }\r\n\r\n private trimSlashes(path: string): string {\r\n return path.replace(/^\\/|\\/$/g, '')\r\n }\r\n\r\n private setContainer(container: HTMLElement | string) {\r\n if (!container) {\r\n throw 'Container is undefined';\r\n }\r\n\r\n if (typeof container === 'string') {\r\n if (container.length){\r\n if (container[0] === '.') {\r\n const result = document.getElementsByClassName(container.substring(1));\r\n if (result.length) \r\n this.container = result[0] as HTMLElement;\r\n }\r\n else {\r\n if (container[0] === '#') {\r\n container = container.substring(1);\r\n }\r\n this.container = document.getElementById(container);\r\n }\r\n if (!this.container) {\r\n throw Error('Unrecognized `container` parameter: ' + container + '\\n' \r\n + 'It must be an element ID, a class name (starting with .) or an HTMLElement object itself.');\r\n }\r\n }\r\n }\r\n else {\r\n this.container = container;\r\n }\r\n }\r\n\r\n private getActiveSourceId(): string | null {\r\n if (this.options.rootEntity) \r\n return this.options.rootEntity;\r\n\r\n const path = decodeURIComponent(window.location.pathname);\r\n const idIndex = this.basePath.length + 1;\r\n return idIndex < path.length ? path.substring(idIndex) : null;\r\n }\r\n\r\n run(): Promise<void> { \r\n this.attach();\r\n\r\n return this.context.loadMetaData()\r\n .then(() => {\r\n this.setActiveView();\r\n })\r\n .catch(error => console.error(error))\r\n }\r\n\r\n private setActiveView() {\r\n this.clear();\r\n\r\n const sourceId = this.getActiveSourceId();\r\n if (sourceId) {\r\n this.context.setActiveSource(sourceId);\r\n window['EDView'] = new EntityDataView(this.container, this.context,\r\n this.basePath, this.options);\r\n }\r\n else {\r\n window['EDView'] = new RootDataView(this.container, this.context, this.basePath);\r\n }\r\n }\r\n\r\n private clear() {\r\n this.container.innerHTML = '';\r\n this.context.getData().clear();\r\n }\r\n\r\n private onSetLocation = () => {\r\n this.setActiveView();\r\n }\r\n\r\n private attach = () => {\r\n window.addEventListener('ed_set_location', this.onSetLocation);\r\n window.addEventListener('popstate', this.onSetLocation);\r\n }\r\n\r\n detach() {\r\n window.removeEventListener('ed_set_location', this.onSetLocation);\r\n window.removeEventListener('popstate', this.onSetLocation);\r\n }\r\n}","import { i18n } from '@easydata/core';\r\n\r\n\r\nfunction addEasyDataCRUDTexts() {\r\n i18n.updateDefaultTexts({\r\n RequiredError: 'Value is required.',\r\n NumberError: 'Value should be a number',\r\n IntNumberError: 'Value should be an integer number',\r\n DateTimeError: 'Invalid date or time value',\r\n LookupSelectedItem: 'Selected item: ',\r\n LookupDlgCaption: 'Select {entity}',\r\n None: 'None',\r\n NavigationBtnTitle: 'Navigation values',\r\n CalendarBtnTitle: 'Open calendar',\r\n TimerBtnTitle: 'Open timer',\r\n AddBtnTitle: 'Add',\r\n AddRecordBtnTitle: 'Add record',\r\n EditBtn: 'Edit',\r\n DeleteBtn: 'Delete',\r\n SelectLink: '[ select ]',\r\n AddDlgCaption: 'Create {entity}',\r\n EditDlgCaption: 'Edit {entity}',\r\n DeleteDlgCaption: 'Delete {entity}',\r\n DeleteDlgMessage: 'Are you sure you want to remove this record: {{recordId}}?',\r\n EntityMenuDesc: 'Click on an entity to view/edit its content',\r\n BackToEntities: 'Back to entities',\r\n SearchBtn: 'Search',\r\n SearchInputPlaceholder: 'Search...',\r\n RootViewTitle: 'Entities',\r\n ModelIsEmpty: 'No entity was found.'\r\n });\r\n}\r\n\r\naddEasyDataCRUDTexts();"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://easydataCRUD/webpack/universalModuleDefinition","webpack://easydataCRUD/webpack/bootstrap","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/browser_utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/data_type.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/entity_attr_kind.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/types/editor_tag.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_method.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_request.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/i18n/i18n.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/string_utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_action_result.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/http/http_client.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/data_column.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/meta_entity.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/value_editor.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/meta/meta_data.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/aggr_settings.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/liquid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/data_row.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/data/easy_data_table.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/utils/easy_guid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/event/event_emitter.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/i18n/load_default_locale_settings.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/core/dist/lib/public_api.js","webpack://easydataCRUD/./src/filter/text_data_filter.ts","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/ui-utils.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/dom_elem_builder.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/mask.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/utils/drag_manager.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_options.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_cell_renderer.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid_columns.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/dialogs/dialog_service.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/grid/easy_grid.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/calendar.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/date_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_calendar.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/datetimepicker/default_date_time_picker.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/dialogs/default_dialog_service.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/i18n/text_resources.js","webpack://easydataCRUD/d:/a/easydata/easydata/easydata.js/packs/ui/dist/lib/public_api.js","webpack://easydataCRUD/./src/utils/utils.ts","webpack://easydataCRUD/./src/validators/validator.ts","webpack://easydataCRUD/./src/validators/datetime_validator.ts","webpack://easydataCRUD/./src/form/entity_edit_form.ts","webpack://easydataCRUD/./src/widgets/text_filter_widget.ts","webpack://easydataCRUD/./src/form/entity_form_builder.ts","webpack://easydataCRUD/./src/widgets/progress_bar.ts","webpack://easydataCRUD/./src/main/easy_data_server_loader.ts","webpack://easydataCRUD/./src/main/data_context.ts","webpack://easydataCRUD/./src/validators/type_validator.ts","webpack://easydataCRUD/./src/validators/required_validator.ts","webpack://easydataCRUD/./src/views/entity_data_view.ts","webpack://easydataCRUD/./src/views/root_data_view.ts","webpack://easydataCRUD/./src/views/easy_data_view_dispatcher.ts","webpack://easydataCRUD/./src/i18n/text_resources.ts"],"names":["root","factory","exports","module","define","amd","window","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","browserUtils","_isFirefox","_isIE","IsIE","ua","navigator","userAgent","indexOf","IsEdge","eval","IsFirefox","toLowerCase","_detectedIsMobileMode","_isMobileMode","undefined","detectIsMobileMode","oldValue","isMobileMode","matchMedia","matches","newValue","mobileModeChangeHandler","setIsMobileMode","onMobileModeChanged","callback","getMobileCssClass","addEventListener","DataType","EntityAttrKind","HttpMethod","EditorTag","HttpRequest","xhr","descriptor","this","method","url","headers","queryParams","data","setHeader","setQueryParam","getXMLHttpRequest","getResponseHeaders","readyState","HEADERS_RECEIVED","headerMap","_i","arr_1","getAllResponseHeaders","trim","split","length","parts","header","shift","join","open","_this","UNSENT","keys","encodeURI","map","param","setRequestHeader","abort","repeatString","str","times","result","combinePath","path1","path2","charAt","i18n","currentLocale","englishUSLocaleSettings","shortDateFormat","longDateFormat","editDateFormat","shortTimeFormat","editTimeFormat","longTimeFormat","shortMonthNames","longMonthNames","shortWeekDayNames","longWeekDayNames","decimalSeparator","currency","defaultLocale","localeId","englishName","displayName","texts","ButtonOK","ButtonCancel","Yes","No","True","False","settings","allLocales","mappers","mapInfo","info","mappers_1","mapper","getCurrentLocale","setCurrentLocale","newLocale","assignDeep","getLocaleSettings","updateLocaleSettings","settingsToUpdate","updateLocaleInfo","localeData","localeInfoToUpdate","loadBrowserLocaleSettings","now","dateStr","timeStr","dateFormat","timeFormat","lang","language","Date","toLocaleDateString","year","month","day","toLocaleTimeString","hour","minute","second","replace","buildShortDateTimeFormat","dataType","format","localeSettings","Time","buildLongDateTimeFormat","addMapper","push","getLocales","locale","sort","a","b","setLocale","console","warn","getText","args","arguments","textsObj","resText","argLength","getOneLocaleSetting","getShortMonthName","monthNum","getLongMonthName","getShortWeekDayName","dayNum","toString","getLongWeekDayName","updateLocaleTexts","error","updateDefaultTexts","addLocale","localeInfo","resetLocales","dateTimeToStr","dateTime","DateTime","numberToStr","number","type","toUpperCase","cachedSequenceFormats","values_2","filter","v","values_1","Number","parseInt","forEach","index","values","formatWithSequence","slice","toLocaleString","digits","style","useGrouping","minimumIntegerDigits","minimumFractionDigits","maximumFractionDigits","getNumberFormatOptions","mask","ch","reverse","convertWithMask","Math","trunc","booleanToStr","bool","utils","getAllDataTypes","item","getDateDataTypes","getStringDataTypes","String","Memo","FixedChar","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","Autoinc","getNumericDataTypes","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","Array","isArray","createArrayFrom","set","getPrototypeOf","collection","collection_1","assign","WeakMap","getIfDefined","defaultValue","IsDefinedAndNotNull","copyArrayTo","collection1","collection2","len1","len2","findItemById","array","id","arrLength","idx","findItemIndexById","indexOfArrayItem","arr","len","moveArrayItem","index1","index2","splice","removeArrayItem","insertArrayItem","fillArray","start","end","relativeStart","k","max","min","relativeEnd","final","shiftToFitWindow","absLeft","width","body","document","getElementsByTagName","winWidth","innerWidth","documentElement","clientWidth","absRight","isObject","val","isNumericType","dtype","isIntType","isNumeric","isNaN","parseFloat","isFinite","areCompatibleDataTypes","type1","type2","Unknown","isPropSet","obj","propName","symbols","squeeze","maxlen","step","nextIndex","replaceAtString","substr","getRandomInt","floor","random","safeParseInt","res","generateId","prefix","prfx","pml","ptt","squeezeMoniker","randValue","maxSymbolIndex","targetBase","buffer","rest","intToNum36","getTime","strToDateTime","normalizedValue","formatItems","dateItems","monthIndex","dayIndex","yearIndex","hourIndex","minutesIndex","secondsIndex","today","getFullYear","getMonth","getDate","getDaysInMonth","_a","strToTime","timeItems","DT_FORMAT_RGEX","date","yearStr","getHours","getMinutes","getSeconds","hour12","isPm","yyyy","yy","substring","MMMM","MMM","MM","M","dd","HH","H","hh","h","tt","mm","ss","match","$1","extendStatics","ColumnAlignment","HttpActionResult","request","promise","getPromise","getRequest","then","onfulfilled","onrejected","catch","finally","onfinally","__extends","setPrototypeOf","__proto__","__","constructor","__assign","apply","HttpResponseError","_super","status","message","Error","HttpClient","defaultHeaders","customPayload","_responseBody","configurable","options","send","Get","post","Post","put","Put","delete","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","Promise","resolve","reject","responseType","onerror","responseText","onreadystatechange","responseContentType","getResponseHeader","responseObj","response","parse","onResponse","decodeArrayBuffer","uintArray","reader","FileReader","onloadend","DONE","readAsText","Blob","MetaEntity","parent","isEditable","caption","description","attributes","subEntities","loadFromData","model","dto","captionPlural","namePlur","ied","ents","newEntity","createEntity","attrs","newAttr","createEntityAttr","scan","processAttribute","processEntity","opts","stop","internalProcessEntity","entity","attrCount","attr","subEntityCount","getFirstPrimaryAttr","getPrimaryAttrs","isPrimaryKey","MetaEntityAttr","size","isForeignKey","isNullable","showOnView","showOnCreate","showOnEdit","showInLookup","lookupAttr","expr","kind","Data","cptn","ipk","ifk","lattr","lookupEntity","lent","dataAttr","dattr","lookupDataAttr","ldattr","isDataType","defVal","nul","ivis","sov","soc","soe","sil","displayFormat","dfmt","udata","userData","edtr","defaultEditor","getEditorById","createValueEditor","ValueEditor","tag","resType","defValue","defval","rtype","accept","multiline","subType","getValueText","text","_b","_c","MetaData","mainEntity","rootEntity","displayFormats","Map","getMainEntity","loadFromJSON","stringJson","version","vers","editors","newEditor","entroot","dtypeStr","formats","getDisplayFormats","getDisplayFormatsForType","getDefaultFormat","f","isdef","setData","isEmpty","getId","getName","getRootEntity","editorId","editor","getAttributeById","attrId","getEntityAttrById","checkAttrProperty","attribute","listByEntityWithFilter","filterFunc","ent","entIdx","newEnt","items","isEntity","attrIdx","listByEntity","resultEntities","resultAttributes","newOpts","includeRootData","sortCheck","sortEntities","attrPlacement","concat","clear","addDefaultValueEditors","addOrUpdateValueEditor","ve","getEntitiesTree","getEntitiesTreeWithFilter","getFullEntityPathByAttr","sep","getEntityPathByAttr","entityCaption","entityText","getAttributeText","attrText","entityPath","RegExp","runThroughEntities","getFirstAttributeByFilter","AggregationSettings","colStore","aggregates","groups","useGrandTotals","useRecordCount","_caseSensitiveGroups","COUNT_FIELD_NAME","updateCompareProc","compareValues","strictCompare","caseInsensitiveCompare","addGroup","cols","columns","getColumnIds","from","to","validateColumns","hasColumnsInUse","addAggregateColumn","colIndexOrId","funcId","colId","validateAggregate","addGrandTotals","addCounts","getGroups","grp","getInternalGroups","lastGroup","getAggregates","hasAggregates","hasGroups","hasGrandTotals","hasRecordCount","drop","caseSensitiveGroups","aggr","needAggrCalculation","saveToData","ugt","urc","csg","buildGroupKey","group","row","caseInsensitive","keyVal","getValue","value1","value2","liquid","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","calculatedWidth","DataColumnList","_dateColumnIdx","add","colOrDesc","col","updateDateColumnIdx","getItems","count","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","toArray","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","cachedRows","total","loader","needTotal","isInMemory","chunkSize","elasticChunks","inMemory","_columns","onUpdate","colDesc","rows","rowData","createRow","addRow","getRows","params","fromIndex","pageSize","page","offset","limit","endIndex","loadChunk","table","getCachedRows","getCachedCount","fireUpdated","getRow","getTotal","setTotal","dataOrRow","dateIdx","column","mapDate","rowOrValues","newRow","dateIdx_1","cachedTotal","totalIsKnown","EasyGuid","newGuid","EventEmitter","silentMode","events","subscribe","eventType","event","getEventRecByType","eventCallback","eventCallbacks","unsubscribe","callbackId","fire","postpone","force","eventRec","eqevent_1","emitAllFunc","setTimeout","enterSilentMode","exitSilentMode","isSilent","event_1","renderLiquidTemplate","template","vars","liquidVarRegexp","x","NaN","ceil","sourceTable","sourceId","isLookup","filterValue","justServerSide","applyCore","class","filters","lookup","filteredTable","applyInMemoryFilter","words","w","suitableColumns","hasEnterance","normalized","word","getElementAbsolutePos","element","y","position","box","defaultBoundingClientRect","top","right","bottom","left","height","getBoundingClientRect","docElem","scollPos","pageYOffset","scrollTop","pageXOffset","scrollLeft","getScrollPos","clientTop","clientLeft","round","eqCssPrefix","__spreadArrays","il","j","jl","DomElementBuilder","createElement","parentElement","appendChild","addChild","childBuilder","builder","domel","addChildElement","attrValue","setAttribute","focus","title","dataId","dataValue","removeAttribute","show","removeStyle","hide","toHide","setStyle","visible","isVisible","offsetWidth","offsetHeight","getClientRects","addClass","className","classNames","fullList","classList","removeClass","remove","toggleClass","toggle","on","listener","eventTypes","off","removeEventListener","styleId","styleValue","setProperty","removeProperty","innerText","html","innerHTML","oldElem","tagName","replaceWith","addText","textEl","createTextNode","addHtml","toDOM","appendTo","DomTextAreaElementBuilder","DomInputElementBuilder","valueAsDate","valueAsNumber","maskPattern","input","inputHandler","e","mskd","startSelection","selectionStart","el","test","selectionEnd","keyCode","preventDefault","selection","onlyLodash","createEvent","initEvent","dispatchEvent","char","fromCharCode","charCode","mskd_1","selectionStart_1","selection_1","event_2","DomSelectElementBuilder","addOption","option","selected","HTMLDivElement","HTMLSpanElement","HTMLAnchorElement","HTMLButtonElement","HTMLImageElement","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","DropEffect","touchEventIsDefined","TouchEvent","AutoResizeColumns","EqDragEvent","dragImage","sourceEvent","dropEffect","Allow","pageX","pageY","MouseEvent","touches","Position","ev","eqDragManager","DragManager","delta","draggableItem","finishedSuccessfully","mouseDownPosition","containerDescriptors","containerDescriptorIndex","None","classPrefix","DRAG_DISABLED_ATTR","registerDraggableItem","ondragstart","detectDragging","hasAttribute","stopPropagation","cursorPosition","abs","startDragging","mouseMoveEventListener","mouseMoveDragListener","beforeDragStart","cloneNode","renderer","updateCusror","updateImageClass","scope","updateDragItemPosition","onDragStart","mouseDownListener","mouseUpListener","endDraggind","dropContDesc","container","scopes","onDrop","onDragLeave","onDragEnd","removeChild","registerDropContainer","removeDropContainer","descriptorOrSlot","descs","descs_1","detectDragEnterEvent","dragEnterEvent","detectDragLeaveEvent","dragLeaveEvent","event_3","onDragOver","setCursorStyle","Forbid","cursor","children","pos","event_4","onDragEnter","event_5","containerPos","CellRendererType","cssPrefix","DFMT_REGEX","GridColumnAlign","StringCellRendererDefault","cellValueElement","rowElement","align","NONE","NumberCellRendererDefault","strValue","dataColumn","_","DateTimeCellRendererDefault","isDate","timeOptions","BoolCellRendererDefault","GridCellRendererStore","renderers","defaultRenderers","registerRenderer","setDefaultRenderer","STRING","NUMBER","DATETIME","BOOL","getDefaultRenderer","columnType","cellType","getCellType","getDefaultRendererByType","rendererType","getRenderer","Bool","DialogFooterAlignment","GridColumn","grid","isRowNum","_label","_description","widthOptions","columnWidths","alignment","Left","LEFT","Center","CENTER","Right","RIGHT","MapAlignment","default","cellRenderer","cellRendererStore","rowNumColumn","onGetCellRenderer","GridColumnList","columnList","sync","hasRowNumCol","rowNumCol","onSyncGridColumn","EasyGrid","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","calculator","paging","enabled","pageSizeItems","autoResize","Always","stringColumns","numberColumns","boolColumns","dateColumns","otherColumns","showPlusButton","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","mergeOptions","processColumnWidthsOptions","eventEmitter","setSlot","init","colWidthOptions","pagingOptions","knownTypes","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onPlusButtonClick","onColumnChanged","onColumnDeleted","onColumnMoved","onPageChanged","onActiveRowChanged","activeRowIndex","showLandingSlot","hideLandingSlot","refresh","fireEvent","columnId","getData","getColumns","destroy","clearDOM","render","hasData","clientHeight","rootDiv","renderHeader","headerDiv","renderBody","bodyDiv","renderFooter","footerDiv","gridContainer","needAutoResize","Never","updateHeight","resizeColumns","firstRow","bodyCellContainerDiv","firstElementChild","viewportHeight_1","bodyViewportDiv","sbHeight","getContainerWidth","reduce","sum","current","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderHeaderButtons","containerWidth","colBuilder","colDiv","attrLabel","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","rowsToRender","groups_1","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onViewportKeydown","aggrSettings","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","getAggregateData","aggrCols_1","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","firstChild","cellDiv","rowCount","querySelectorAll","ensureRowVisibility","rowOrIndex","getDataRow","rowRect","viewportRect","rowTop","rowBottom","viewportHeight","windowHeight","innerHeight","footerPaginateDiv","renderPageNavigator","pageInfoBlock","renderPageInfoBlock","pageInfoDiv","fistPageRecordNum","lastPageRecordNum","totalStr","getLocalIndexByGlobal","getGlobalIndexByLocal","indexGlobal","rowBuilder","rowIndex","colindex","cellElement","valueCell","setPage","paginateDiv","prefix_1","buttonClickHandler_1","getAttribute","renderPageCell","pageIndex","content","disabled","extreme","active","li","a_1","newA","ul","cell","pageCount","zeroBasedIndex","firstPageIndex","lastPageIndex","allowPageSizeChange","pageSizes","selectSize","sel_1","selOptions","selSet","Set","labelDiv","handler","handlerId","plusButtonTitle","colElems","rowElem","display","landingPos","newLandingIndex","cols_1","colPos","insertBefore","updateActiveRow","activeRow","getActiveRow","visibility","sumWidth","headerCells","headerIdx","_loop_1","this_1","cellValues","maxWidth","whiteSpace","maxOption","minOption","Calendar","yearRange","setDate","currentDate","dateChanged","onDateChanged","DateTimePicker","calendar","timePicker","setDateTime","currentDateTime","setTime","getDateTime","showCalendar","createCalendar","showDateTimeInput","timePickerIsUsed","showTimePicker","oneClickDateSelection","dateTimeChanged","createTimePicker","onTimeChanged","time","setHours","setMinutes","anchor","beforeShow","onApply","cancel","onCancel","onDateTimeChanged","DefaultCalendar","daysOfWeek","months","calendarBody","isManualInputChanging","selectedMonth","selectedYear","rerenderMonth","renderManualDateInput","headerTextElem","renderCalendarButtons","getInputDateFormat","newDate","manualInputElem","jump","updateDisplayedDateValue","prev","selectMonthElem","selectYearElem","next","rerenderSelectYear","exec","minusYear","plusYear","op","firstDay","getDay","daysInMonth","setFullYear","setMonth","dayOfWeek","cellsDrawnInLastRow","cellsToDraw","TimePicker","currentTime","timeChanged","DefaultTimePicker","updateDisplayedTime","hoursInput","minutesInput","timeText","slidersBuilder","timeToDraw","DefaultDateTimePicker","sb","zIndex","renderButtons","globalMouseDownHandler","srcElement","contains","nowButton","submitButton","calendarSlot","timePickerSlot","anchorPos","parentPos","DefaultDialogService","openConfirm","closable","submitable","cancelable","onSubmit","openPrompt","submitOnEnter","arrangeParents","beforeOpen","processInput","dialog","onDestroy","dlg","untrack","track","createSet","DefaultDialogSet","openDialogs","openProgress","getAllDialogs","closeAllDialogs","close","DefaultDialog","submitHandler","token","cancelHandler","keydownHandler","isActiveDialog","dialogId","windowElement","headerElement","alertElement","bodyElement","alignClass","footerAlignment","footerElement","bb","submitButtonText","recaptchaSiteKey","grecaptcha","ready","execute","action","cancelButtonText","getRootElement","getSubmitButtonElement","getCancelButtonElement","windowDiv","querySelector","clearAlert","onInput","onShow","submit","disableButtons","button","enableButtons","showAlert","reason","alert","windowDivs","turnOn","DefaultProgressDialog","contentElement","progressElement","determinated","updateContent","updateProgress","progress","in01","num","dialogService","currentDialog","currentIndex","getCurrent","openNext","openPrev","dlgOptions","GridPageInfo","GridItemsPerPage","ButtonApply","ButtonNow","LblTotal","internalDateFormat","internalTimeFormat","getEditDateTimeFormat","setLocation","path","state","history","pushState","Event","validate","successed","editFormat","messages","Validator","context","validators","getHtml","setHtmlInt","errorsDiv","clearErrors","isValid","getMetaData","validateValue","markInputValid","filePromises","inputs","lastIndexOf","checked","fileToBase64","files","mapValue","all","file","readAsDataURL","onload","useValidator","useValidators","validator","internalFormat","valid","instantMode","instantTimeout","stringDefRenderer","highlightCellRenderer","numDefRenderer","horizClass","isEdgeOrIE","filterInput","inputKeydownHandler","inputKeyupHandler","clearButtonClickHander","searchButtonClickHandler","applyFilter","applyFilterTimeout","clearTimeout","checkChange","defaultRenderer","highlightText","HTMLElement","normalizedContent","indexInMas","lowerWord","highlightSpan","backgroundColor","item1","item2","addDelta","div","isIE","reset","form","setupLookupField","readOnly","inputEl","resolveInputType","lookupTable","chunkParams","getDataLoader","widgetSlot","ds","gridSlot","selectedSlot","selectedValue","updateSelectedValue","fetchRecord","lookupGrid","dataFilter","createFilter","setupDateTimeField","hidden","applySumbit","setSeconds","pickerOptions","setMilliseconds","dtp","setupListField","setupFileField","setupTextField","setupTextArea","addFormField","Lookup","isEditForm","resolveEditor","required","sumbitCallback","build","fb","formHtml","getActiveEntity","resolveEndpoint","startProcess","getHttpClient","resultSet","totalRecords","meta","hasNext","endProcess","endpoints","endpointVarsRegex","http","metaDataId","dataLoader","dataTableOptions","setDefaultEndpoints","endpoint","activeEntity","setActiveSource","entityId","loadMetaData","sourceError","fetchDataset","createRecord","updateRecord","deleteRecord","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","isInteger","basePath","showFilterBox","showBackToEntities","defaultValidators","location","pathname","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBarDiv","filterWidget","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","processed","metaData","renderEntitySelector","entities","decodeURIComponent","onSetLocation","setActiveView","attach","normalizeBasePath","setContainer","progressBarSlot","bar","ProgressBar","trimSlashes","fullPath","toLocaleLowerCase","getActiveSourceId","idIndex","run","detach","RequiredError","NumberError","IntNumberError","DateTimeError","LookupSelectedItem","LookupDlgCaption","NavigationBtnTitle","CalendarBtnTitle","TimerBtnTitle","AddBtnTitle","AddRecordBtnTitle","EditBtn","DeleteBtn","SelectLink","AddDlgCaption","EditDlgCaption","DeleteDlgCaption","DeleteDlgMessage","EntityMenuDesc","BackToEntities","SearchBtn","SearchInputPlaceholder","RootViewTitle","ModelIsEmpty"],"mappings":"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","file":"easydata.crud.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine(\"easydataCRUD\", [], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"easydataCRUD\"] = factory();\n\telse\n\t\troot[\"easydataCRUD\"] = factory();\n})(window, function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1);\n","export var browserUtils;\r\n(function (browserUtils) {\r\n var _isFirefox = null;\r\n var _isIE = null;\r\n function IsIE() {\r\n // return eval('/*@cc_on!@*/false || !!document.documentMode');\r\n if (_isIE === null) {\r\n var ua = navigator.userAgent;\r\n /* MSIE used to detect old browsers and Trident used to newer ones*/\r\n _isIE = ua.indexOf(\"MSIE \") > -1 || ua.indexOf(\"Trident/\") > -1;\r\n }\r\n return _isIE;\r\n }\r\n browserUtils.IsIE = IsIE;\r\n function IsEdge() {\r\n return !IsIE() && eval('!!window.StyleMedia');\r\n }\r\n browserUtils.IsEdge = IsEdge;\r\n function IsFirefox() {\r\n if (_isFirefox === null) {\r\n var ua = navigator.userAgent;\r\n _isFirefox = ua.toLowerCase().indexOf('firefox') > -1;\r\n }\r\n return _isFirefox;\r\n }\r\n browserUtils.IsFirefox = IsFirefox;\r\n var _detectedIsMobileMode = false;\r\n var _isMobileMode = undefined;\r\n var detectIsMobileMode = function () {\r\n var oldValue = isMobileMode();\r\n _detectedIsMobileMode = window.matchMedia('only screen and (max-width: 840px)').matches\r\n || window.matchMedia('only screen and (max-height: 420px)').matches;\r\n var newValue = isMobileMode();\r\n if (newValue !== oldValue && mobileModeChangeHandler) {\r\n mobileModeChangeHandler(newValue);\r\n }\r\n };\r\n detectIsMobileMode();\r\n window.addEventListener('resize', function () { return detectIsMobileMode(); });\r\n function isMobileMode() {\r\n if (_isMobileMode !== undefined) {\r\n return _isMobileMode;\r\n }\r\n else {\r\n return _detectedIsMobileMode;\r\n }\r\n }\r\n browserUtils.isMobileMode = isMobileMode;\r\n function setIsMobileMode(value) {\r\n var oldValue = isMobileMode();\r\n _isMobileMode = value;\r\n var newValue = isMobileMode();\r\n if (newValue !== oldValue && mobileModeChangeHandler) {\r\n mobileModeChangeHandler(newValue);\r\n }\r\n }\r\n browserUtils.setIsMobileMode = setIsMobileMode;\r\n var mobileModeChangeHandler;\r\n function onMobileModeChanged(callback) {\r\n mobileModeChangeHandler = callback;\r\n }\r\n browserUtils.onMobileModeChanged = onMobileModeChanged;\r\n function getMobileCssClass() {\r\n return isMobileMode() ? 'k-mobile' : null;\r\n }\r\n browserUtils.getMobileCssClass = getMobileCssClass;\r\n})(browserUtils || (browserUtils = {}));\r\n//# sourceMappingURL=browser_utils.js.map","/** Represents the common types of the data. */\r\nexport var DataType;\r\n(function (DataType) {\r\n /** Unknown type value*/\r\n DataType[DataType[\"Unknown\"] = 0] = \"Unknown\";\r\n /** String value*/\r\n DataType[DataType[\"String\"] = 1] = \"String\";\r\n /** 8-bit integer value */\r\n DataType[DataType[\"Byte\"] = 2] = \"Byte\";\r\n /** 16-bit integer value */\r\n DataType[DataType[\"Word\"] = 3] = \"Word\";\r\n /** 32-bit integer value */\r\n DataType[DataType[\"Int32\"] = 4] = \"Int32\";\r\n /** 64-bit integer value */\r\n DataType[DataType[\"Int64\"] = 5] = \"Int64\";\r\n /** Boolean value */\r\n DataType[DataType[\"Bool\"] = 6] = \"Bool\";\r\n /** Floating-point numeric value */\r\n DataType[DataType[\"Float\"] = 7] = \"Float\";\r\n /** Money value */\r\n DataType[DataType[\"Currency\"] = 8] = \"Currency\";\r\n /** Binary-coded decimal value */\r\n DataType[DataType[\"BCD\"] = 9] = \"BCD\";\r\n /** Date value */\r\n DataType[DataType[\"Date\"] = 10] = \"Date\";\r\n /** Time value */\r\n DataType[DataType[\"Time\"] = 11] = \"Time\";\r\n /** Date and time value */\r\n DataType[DataType[\"DateTime\"] = 12] = \"DateTime\";\r\n /** Autoincrement 32-bit integer value */\r\n DataType[DataType[\"Autoinc\"] = 13] = \"Autoinc\";\r\n /** MEMO value (text with unlimited length) */\r\n DataType[DataType[\"Memo\"] = 14] = \"Memo\";\r\n /** BLOB value (any data with unlimited length) */\r\n DataType[DataType[\"Blob\"] = 15] = \"Blob\";\r\n /** Fixed character value */\r\n DataType[DataType[\"FixedChar\"] = 16] = \"FixedChar\";\r\n /** The unique identifier */\r\n DataType[DataType[\"Guid\"] = 17] = \"Guid\";\r\n /*-------- Spatial data types ----------*/\r\n /** Any geometry data */\r\n DataType[DataType[\"Geometry\"] = 18] = \"Geometry\";\r\n /** Any data that represents some geography objects</summary> */\r\n DataType[DataType[\"Geography\"] = 19] = \"Geography\";\r\n})(DataType || (DataType = {}));\r\n//# sourceMappingURL=data_type.js.map","export var EntityAttrKind;\r\n(function (EntityAttrKind) {\r\n EntityAttrKind[EntityAttrKind[\"Data\"] = 0] = \"Data\";\r\n EntityAttrKind[EntityAttrKind[\"Virtual\"] = 1] = \"Virtual\";\r\n EntityAttrKind[EntityAttrKind[\"Lookup\"] = 2] = \"Lookup\";\r\n})(EntityAttrKind || (EntityAttrKind = {}));\r\n//# sourceMappingURL=entity_attr_kind.js.map","export var EditorTag = {\r\n /** Unknown tag value */\r\n Unknown: \"Unknown\",\r\n /** Edit tag value */\r\n Edit: \"EDIT\",\r\n /** DateTime tag value */\r\n DateTime: \"DATETIME\",\r\n /** List tag value */\r\n List: \"LIST\",\r\n /** CustomList tag value */\r\n CustomList: \"CUSTOMLIST\",\r\n /** File tag value */\r\n File: \"FILE\"\r\n};\r\n//# sourceMappingURL=editor_tag.js.map","export var HttpMethod;\r\n(function (HttpMethod) {\r\n HttpMethod[\"Trace\"] = \"TRACE\";\r\n HttpMethod[\"Options\"] = \"OPTIONS\";\r\n HttpMethod[\"Get\"] = \"GET\";\r\n HttpMethod[\"Put\"] = \"PUT\";\r\n HttpMethod[\"Post\"] = \"POST\";\r\n HttpMethod[\"Delete\"] = \"DELETE\";\r\n})(HttpMethod || (HttpMethod = {}));\r\n//# sourceMappingURL=http_method.js.map","var HttpRequest = /** @class */ (function () {\r\n function HttpRequest(xhr, descriptor) {\r\n this.xhr = xhr;\r\n this.method = descriptor.method;\r\n this.url = descriptor.url;\r\n this.headers = descriptor.headers;\r\n this.queryParams = descriptor.queryParams;\r\n this.data = descriptor.data;\r\n }\r\n HttpRequest.prototype.setHeader = function (name, value) {\r\n this.headers[name] = value;\r\n };\r\n HttpRequest.prototype.setQueryParam = function (name, value) {\r\n this.queryParams[name] = value;\r\n };\r\n HttpRequest.prototype.getXMLHttpRequest = function () {\r\n return this.xhr;\r\n };\r\n HttpRequest.prototype.getResponseHeaders = function () {\r\n if (this.xhr.readyState == this.xhr.HEADERS_RECEIVED) {\r\n var headers = this.xhr.getAllResponseHeaders();\r\n var arr = headers.trim().split(/[\\r\\n]+/);\r\n // Create a map of header names to values\r\n var headerMap = {};\r\n for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) {\r\n var line = arr_1[_i];\r\n var parts = line.split(': ');\r\n var header = parts.shift();\r\n var value = parts.join(': ');\r\n headerMap[header] = value;\r\n }\r\n return headerMap;\r\n }\r\n return {};\r\n };\r\n HttpRequest.prototype.open = function () {\r\n var _this = this;\r\n if (this.xhr.readyState !== this.xhr.UNSENT)\r\n return;\r\n var url = this.url;\r\n if (this.queryParams && Object.keys(this.queryParams).length > 0) {\r\n url += encodeURI('?' + Object.keys(this.queryParams)\r\n .map(function (param) { return param + '=' + _this.queryParams[param]; })\r\n .join('&'));\r\n }\r\n this.xhr.open(this.method, url, true);\r\n this.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\r\n for (var header in this.headers) {\r\n this.xhr.setRequestHeader(header, this.headers[header]);\r\n }\r\n };\r\n HttpRequest.prototype.abort = function () {\r\n this.xhr.abort();\r\n };\r\n return HttpRequest;\r\n}());\r\nexport { HttpRequest };\r\n//# sourceMappingURL=http_request.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Contains internatialization functionality.\r\n */\r\nexport var i18n;\r\n(function (i18n) {\r\n var englishUSLocaleSettings = {\r\n shortDateFormat: 'MM/dd/yyyy',\r\n longDateFormat: 'dd MMM, yyyy',\r\n editDateFormat: 'MM/dd/yyyy',\r\n shortTimeFormat: 'HH:mm',\r\n editTimeFormat: 'HH:mm',\r\n longTimeFormat: 'HH:mm:ss',\r\n shortMonthNames: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n longMonthNames: ['January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'],\r\n shortWeekDayNames: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n longWeekDayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n decimalSeparator: '.',\r\n currency: 'USD'\r\n };\r\n var defaultLocale = {\r\n localeId: 'en-US',\r\n englishName: 'English',\r\n displayName: 'English',\r\n texts: {\r\n ButtonOK: 'OK',\r\n ButtonCancel: 'Cancel',\r\n Yes: 'Yes',\r\n No: 'No',\r\n True: 'True',\r\n False: 'False'\r\n },\r\n settings: englishUSLocaleSettings\r\n };\r\n var allLocales = {\r\n 'en-US': defaultLocale\r\n };\r\n var currentLocale;\r\n var mappers = [];\r\n function mapInfo(info) {\r\n for (var _i = 0, mappers_1 = mappers; _i < mappers_1.length; _i++) {\r\n var mapper = mappers_1[_i];\r\n mapper(info);\r\n }\r\n }\r\n function addMapper(mapper) {\r\n mappers.push(mapper);\r\n }\r\n i18n.addMapper = addMapper;\r\n /**\r\n * Gets added locales with their names.\r\n * @returns The locales.\r\n */\r\n function getLocales() {\r\n var result = [];\r\n for (var locale in allLocales) {\r\n result.push({\r\n locale: locale,\r\n englishName: allLocales[locale].englishName,\r\n displayName: allLocales[locale].displayName\r\n });\r\n }\r\n return result.sort(function (a, b) {\r\n if (a.englishName > b.englishName) {\r\n return 1;\r\n }\r\n else if (a.englishName === b.englishName) {\r\n return 0;\r\n }\r\n return -1;\r\n });\r\n }\r\n i18n.getLocales = getLocales;\r\n /**\r\n * Gets the current locale ID.\r\n * @returns The locale.\r\n */\r\n function getCurrentLocale() {\r\n return currentLocale.localeId;\r\n }\r\n i18n.getCurrentLocale = getCurrentLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @deprecated Use setCurrentLocale instead\r\n * @param l The locale.\r\n */\r\n function setLocale(l) {\r\n console.warn('This method is deprecated. Use setCurrentLocale instead');\r\n setCurrentLocale(l);\r\n }\r\n i18n.setLocale = setLocale;\r\n /**\r\n * Sets the curent locale.\r\n * @param localeId The locale.\r\n */\r\n function setCurrentLocale(localeId) {\r\n var newLocale = allLocales[localeId];\r\n if (newLocale) {\r\n utils.assignDeep(currentLocale, newLocale);\r\n }\r\n else {\r\n currentLocale.englishName = localeId;\r\n currentLocale.displayName = localeId;\r\n currentLocale.texts = utils.assignDeep({}, defaultLocale.texts);\r\n }\r\n currentLocale.localeId = localeId;\r\n }\r\n i18n.setCurrentLocale = setCurrentLocale;\r\n /**\r\n * Returns localized text by the key defined in parameter.\r\n * Here we get the text of the resource string assigned to CmdClickToAddCondition key:\r\n *\r\n ```\r\n const text = i18n.getText('CmdClickToAddCondition')\r\n ```\r\n * @param args The keys of the resource string.\r\n * @returns Text of the resource defined by key or null if the key is not found\r\n *\r\n */\r\n function getText() {\r\n var args = [];\r\n for (var _i = 0; _i < arguments.length; _i++) {\r\n args[_i] = arguments[_i];\r\n }\r\n var textsObj = currentLocale.texts;\r\n var resText = '';\r\n if (args && args.length) {\r\n var argLength = args.length;\r\n for (var i = 0; i < argLength; i++) {\r\n resText = textsObj[args[i]];\r\n if (typeof resText === 'object') {\r\n textsObj = resText;\r\n }\r\n else {\r\n break;\r\n }\r\n }\r\n }\r\n return resText;\r\n }\r\n i18n.getText = getText;\r\n function getLocaleSettings() {\r\n return currentLocale.settings;\r\n }\r\n i18n.getLocaleSettings = getLocaleSettings;\r\n function getOneLocaleSetting(key) {\r\n return currentLocale.settings[key];\r\n }\r\n i18n.getOneLocaleSetting = getOneLocaleSetting;\r\n function getShortMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.shortMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getShortMonthName = getShortMonthName;\r\n function getLongMonthName(monthNum) {\r\n var settings = getLocaleSettings();\r\n if (monthNum > 0 && monthNum < 13) {\r\n return settings.longMonthNames[monthNum - 1];\r\n }\r\n else {\r\n throw 'Wrong month number: ' + monthNum;\r\n }\r\n }\r\n i18n.getLongMonthName = getLongMonthName;\r\n function getShortWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.shortWeekDayNames.length >= dayNum\r\n ? settings.shortWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getShortWeekDayName = getShortWeekDayName;\r\n function getLongWeekDayName(dayNum) {\r\n var settings = getLocaleSettings();\r\n if (dayNum > 0 && dayNum < 8) {\r\n return settings.longWeekDayNames.length >= dayNum\r\n ? settings.longWeekDayNames[dayNum - 1]\r\n : dayNum.toString();\r\n }\r\n else {\r\n throw 'Wrong month number: ' + dayNum;\r\n }\r\n }\r\n i18n.getLongWeekDayName = getLongWeekDayName;\r\n /**\r\n * Updates the locale settings (date/time formats, separators, etc) for the specified locale.\r\n * @param settingsToUpdate a LocaleSettings object\r\n */\r\n function updateLocaleSettings(settingsToUpdate) {\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = utils.assignDeep({}, englishUSLocaleSettings);\r\n }\r\n currentLocale.settings = utils.assignDeep(currentLocale.settings, settingsToUpdate);\r\n }\r\n i18n.updateLocaleSettings = updateLocaleSettings;\r\n /**\r\n * Updates the texts for the current locale\r\n * @param texts A plain JS object that contains textual resources\r\n */\r\n function updateLocaleTexts(texts) {\r\n if (typeof texts !== 'object') {\r\n console.error('Wrong parameter type in updateLocaleTexts function call.' +\r\n 'The first parameter (localeId) is not necessary. Use updateLocaleTexts(texts) instead');\r\n return;\r\n }\r\n mapInfo({ localeId: currentLocale.localeId, texts: texts });\r\n utils.assignDeep(currentLocale.texts, texts);\r\n }\r\n i18n.updateLocaleTexts = updateLocaleTexts;\r\n function updateDefaultTexts(texts) {\r\n for (var localeId in allLocales) {\r\n var locale = allLocales[localeId];\r\n locale.texts = utils.assignDeep({}, texts, locale.texts);\r\n }\r\n currentLocale.texts = utils.assignDeep({}, texts, currentLocale.texts);\r\n }\r\n i18n.updateDefaultTexts = updateDefaultTexts;\r\n /**\r\n * Updates the information for the specified locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be added\r\n * @param localeInfo a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function updateLocaleInfo(localeId, localeData) {\r\n mapInfo(localeData);\r\n var localeInfoToUpdate = currentLocale;\r\n if (localeId) {\r\n if (!localeData.localeId) {\r\n localeData.localeId = localeId;\r\n }\r\n localeInfoToUpdate = allLocales[localeId];\r\n if (!localeInfoToUpdate) {\r\n localeInfoToUpdate = utils.assignDeep({}, defaultLocale);\r\n allLocales[localeId] = localeInfoToUpdate;\r\n }\r\n }\r\n utils.assignDeep(localeInfoToUpdate, localeData);\r\n }\r\n i18n.updateLocaleInfo = updateLocaleInfo;\r\n /**\r\n * Adds the locale.\r\n * @param localeId The locale ID (like 'en', 'de', 'uk', etc).\r\n * If the locale does exist yet - it will be created\r\n * @param localeInfo - a LocaleInfo object that contains the locale settings and textual resources\r\n */\r\n function addLocale(localeId, localeInfo) {\r\n updateLocaleInfo(localeId, localeInfo);\r\n }\r\n i18n.addLocale = addLocale;\r\n /**\r\n * Overwrites some locale settings (date/time formats) with the formats used in browser's current language\r\n */\r\n function determineSettingsByLocale(localeId) {\r\n var now = new Date(2020, 5, 7, 19, 34, 56, 88);\r\n var dateOptions = { year: 'numeric', month: 'numeric', day: 'numeric' };\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n var dateStr = now.toLocaleDateString(localeId, dateOptions);\r\n var timeStr = now.toLocaleTimeString(localeId, timeOptions);\r\n var dateFormat = dateStr\r\n .replace('07', 'dd')\r\n .replace('7', 'd')\r\n .replace('06', 'MM')\r\n .replace('6', 'M')\r\n .replace('2020', 'yyyy')\r\n .replace('20', 'yy');\r\n var timeFormat = timeStr\r\n .replace('19', 'HH')\r\n .replace('07', 'hh')\r\n .replace('7', 'h')\r\n .replace('34', 'mm')\r\n .replace('56', 'ss')\r\n .replace('PM', 'tt');\r\n if (!currentLocale.settings) {\r\n currentLocale.settings = {};\r\n }\r\n var localeSettings = {\r\n shortDateFormat: dateFormat,\r\n shortTimeFormat: timeFormat\r\n };\r\n updateLocaleSettings(localeSettings);\r\n }\r\n function loadBrowserLocaleSettings() {\r\n var lang = typeof navigator === 'object' ? navigator.language : undefined;\r\n determineSettingsByLocale(lang);\r\n }\r\n function resetLocales() {\r\n if (!currentLocale) {\r\n currentLocale = utils.assignDeep({}, defaultLocale);\r\n loadBrowserLocaleSettings();\r\n }\r\n }\r\n i18n.resetLocales = resetLocales;\r\n function dateTimeToStr(dateTime, dataType, format) {\r\n if (format) {\r\n if (format == 'd') {\r\n format = buildShortDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'D') {\r\n format = buildLongDateTimeFormat(DataType.Date);\r\n }\r\n else if (format == 'f') {\r\n format = buildShortDateTimeFormat(DataType.DateTime);\r\n }\r\n else if (format == 'F') {\r\n format = buildLongDateTimeFormat(DataType.DateTime);\r\n }\r\n }\r\n else {\r\n format = buildShortDateTimeFormat(dataType);\r\n }\r\n return utils.dateTimeToStr(dateTime, format);\r\n }\r\n i18n.dateTimeToStr = dateTimeToStr;\r\n function buildShortDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.shortDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.shortTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.shortDateFormat + ' ' + localeSettings.shortTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function buildLongDateTimeFormat(dataType) {\r\n var localeSettings = getLocaleSettings();\r\n var format;\r\n switch (dataType) {\r\n case DataType.Date:\r\n format = localeSettings.longDateFormat;\r\n break;\r\n case DataType.Time:\r\n format = localeSettings.longTimeFormat;\r\n break;\r\n default:\r\n format = localeSettings.longDateFormat + ' ' + localeSettings.longTimeFormat;\r\n break;\r\n }\r\n return format;\r\n }\r\n function numberToStr(number, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n return formatWithSequence(number, format.slice(1));\r\n }\r\n else if (['D', 'F', 'C'].indexOf(type) >= 0) {\r\n var locale = getCurrentLocale();\r\n return number.toLocaleString(locale, getNumberFormatOptions(format));\r\n }\r\n else {\r\n return convertWithMask(Math.trunc(number), format);\r\n }\r\n }\r\n var localeSettings = getLocaleSettings();\r\n return utils.numberToStr(number, localeSettings.decimalSeparator);\r\n }\r\n i18n.numberToStr = numberToStr;\r\n function booleanToStr(bool, format) {\r\n if (format && format.length > 0) {\r\n var type = format.charAt(0).toUpperCase();\r\n if (type === 'S') {\r\n var values = format.slice(1).split('|');\r\n if (values.length > 1) {\r\n var value = values[(bool) ? 1 : 0];\r\n return i18n.getText(value) || value;\r\n }\r\n }\r\n }\r\n return \"\" + bool;\r\n }\r\n i18n.booleanToStr = booleanToStr;\r\n var cachedSequenceFormats = {};\r\n function formatWithSequence(number, format) {\r\n if (!cachedSequenceFormats[format]) {\r\n // parse and save in cache format values \r\n var values_2 = format.split('|')\r\n .filter(function (v) { return v.length > 0; })\r\n .map(function (v) { return v.split('='); });\r\n cachedSequenceFormats[format] = {};\r\n if (values_2.length > 0) {\r\n if (values_2[0].length > 1) {\r\n for (var _i = 0, values_1 = values_2; _i < values_1.length; _i++) {\r\n var value = values_1[_i];\r\n cachedSequenceFormats[format][Number.parseInt(value[1])] = value[0];\r\n }\r\n }\r\n else {\r\n values_2.forEach(function (value, index) {\r\n cachedSequenceFormats[format][index] = value[0];\r\n });\r\n }\r\n }\r\n }\r\n var values = cachedSequenceFormats[format];\r\n if (values[number] !== undefined) {\r\n var value = values[number];\r\n return i18n.getText(value) || value;\r\n }\r\n return number.toString();\r\n }\r\n function convertWithMask(number, mask) {\r\n var value = number.toString();\r\n var result = '';\r\n var index = value.length - 1;\r\n for (var i = mask.length - 1; i >= 0; i--) {\r\n var ch = mask.charAt(i);\r\n if (ch === '#' || ch === '0') {\r\n if (index >= 0) {\r\n result += value.charAt(index);\r\n index--;\r\n }\r\n else {\r\n if (ch === '0') {\r\n result += 0;\r\n }\r\n }\r\n }\r\n else {\r\n result += ch;\r\n }\r\n }\r\n return result.split('').reverse().join('');\r\n }\r\n function getNumberFormatOptions(format) {\r\n var localeSettings = getLocaleSettings();\r\n var type = format[0].toUpperCase();\r\n var digits = (format.length > 1)\r\n ? Number.parseInt(format.slice(1))\r\n : type == 'D' ? 1 : 2;\r\n switch (type) {\r\n case 'D':\r\n return {\r\n style: 'decimal',\r\n useGrouping: false,\r\n minimumIntegerDigits: digits\r\n };\r\n case 'C':\r\n return {\r\n style: 'currency',\r\n currency: localeSettings.currency,\r\n minimumFractionDigits: digits\r\n };\r\n default:\r\n return {\r\n style: 'decimal',\r\n minimumFractionDigits: digits,\r\n maximumFractionDigits: digits\r\n };\r\n }\r\n }\r\n})(i18n || (i18n = {}));\r\n//# sourceMappingURL=i18n.js.map","import * as strf from './string_utils';\r\nimport { DataType } from '../types/data_type';\r\nimport { i18n } from '../i18n/i18n';\r\nexport var utils;\r\n(function (utils) {\r\n function getAllDataTypes() {\r\n return Object.values(DataType).filter(function (item) { return typeof item === \"number\"; });\r\n }\r\n utils.getAllDataTypes = getAllDataTypes;\r\n function getDateDataTypes() {\r\n return [DataType.Time, DataType.Date, DataType.DateTime];\r\n }\r\n utils.getDateDataTypes = getDateDataTypes;\r\n function getStringDataTypes() {\r\n return [DataType.String, DataType.Memo, DataType.FixedChar];\r\n }\r\n utils.getStringDataTypes = getStringDataTypes;\r\n var _numericTypes = [DataType.Byte, DataType.Word, DataType.Int32,\r\n DataType.Int64, DataType.Float, DataType.Currency, DataType.Autoinc];\r\n function getNumericDataTypes() {\r\n return _numericTypes;\r\n }\r\n utils.getNumericDataTypes = getNumericDataTypes;\r\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64, DataType.Autoinc];\r\n //-------------- object functions -------------------\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function copies only the first level properties.\r\n * For a deep copy please use `assignDeep`\r\n * @param target - the target object\r\n * @param args - an array of the source objects\r\n */\r\n function assign(target) {\r\n var args = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n args[_i - 1] = arguments[_i];\r\n }\r\n for (var i = 0; i < args.length; i++) {\r\n var source = args[i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n target[key] = source[key];\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n utils.assign = assign;\r\n /**\r\n * Copy the content of all objests passed in `args` parameters into `target`\r\n * and returns the result\r\n * NB: This function make a deep copy -\r\n * so `assignDeep` will be called recursively for all object properties\r\n * on the first level.\r\n * @param target - the target object\r\n * @param sources - an array of the source objects\r\n */\r\n function assignDeep(target) {\r\n var sources = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n sources[_i - 1] = arguments[_i];\r\n }\r\n return assignDeepCore(new WeakMap(), target, sources);\r\n }\r\n utils.assignDeep = assignDeep;\r\n function assignDeepCore(hashSet, target, sources) {\r\n if (!target) {\r\n target = {};\r\n }\r\n for (var _i = 0, sources_1 = sources; _i < sources_1.length; _i++) {\r\n var source = sources_1[_i];\r\n if (source) {\r\n for (var key in source) {\r\n if (source.hasOwnProperty(key)) {\r\n var sourceVal = source[key];\r\n if (sourceVal !== null && typeof sourceVal === 'object') {\r\n if (hashSet.has(sourceVal)) {\r\n target[key] = hashSet.get(sourceVal);\r\n }\r\n else {\r\n if (Array.isArray(sourceVal)) {\r\n target[key] = createArrayFrom(sourceVal);\r\n hashSet.set(sourceVal, target[key]);\r\n }\r\n else {\r\n if (typeof target[key] == 'undefined' || target[key] == null) {\r\n target[key] = Object.create(Object.getPrototypeOf(sourceVal));\r\n }\r\n hashSet.set(sourceVal, target[key]);\r\n assignDeepCore(hashSet, target[key], [sourceVal]);\r\n }\r\n }\r\n }\r\n else {\r\n target[key] = sourceVal;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n return target;\r\n }\r\n function getIfDefined(value, defaultValue) {\r\n return (typeof value !== 'undefined') ? value : defaultValue;\r\n }\r\n utils.getIfDefined = getIfDefined;\r\n function IsDefinedAndNotNull(value) {\r\n return typeof value !== 'undefined' && value !== null;\r\n }\r\n utils.IsDefinedAndNotNull = IsDefinedAndNotNull;\r\n function copyArrayTo(collection1, collection2) {\r\n var len1 = collection1.length;\r\n var len2 = collection2.length;\r\n for (var i = 0; i < len1 && i < len2; i++) {\r\n collection2[i] = collection1[i];\r\n }\r\n }\r\n utils.copyArrayTo = copyArrayTo;\r\n function createArrayFrom(collection) {\r\n var result = [];\r\n for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\r\n var item = collection_1[_i];\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n utils.createArrayFrom = createArrayFrom;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the found object or null.\r\n * @param array\r\n * @param id\r\n */\r\n function findItemById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return array[idx];\r\n }\r\n return null;\r\n }\r\n utils.findItemById = findItemById;\r\n function findItemIndexById(array, id) {\r\n var arrLength = array.length;\r\n for (var idx = 0; idx < arrLength; idx++) {\r\n if (array[idx].id === id)\r\n return idx;\r\n }\r\n return -1;\r\n }\r\n utils.findItemIndexById = findItemIndexById;\r\n /**\r\n * Searches an array of the objects which implement ItemWithId by ID\r\n * Returs the index of the found element, or -1 if nothing was found.\r\n * @param array\r\n * @param id\r\n */\r\n function indexOfArrayItem(arr, item) {\r\n if (arr.indexOf) {\r\n return arr.indexOf(item);\r\n }\r\n else {\r\n var len = arr.length;\r\n for (var i = 0; i < len; i++) {\r\n if (item == arr[i]) {\r\n return i;\r\n }\r\n }\r\n return -1;\r\n }\r\n }\r\n utils.indexOfArrayItem = indexOfArrayItem;\r\n /**\r\n * Moves an item in some array to a new position\r\n * @param array\r\n * @param index1\r\n * @param index2\r\n */\r\n function moveArrayItem(array, index1, index2) {\r\n if (index1 >= array.length) {\r\n throw 'Index out of bounds: ' + index1;\r\n }\r\n if (index2 >= array.length) {\r\n index2 = array.length - 1;\r\n }\r\n var item = array.splice(index1, 1)[0];\r\n array.splice(index2, 0, item);\r\n }\r\n utils.moveArrayItem = moveArrayItem;\r\n /**\r\n * Searches for a particular item in the array are removes that item if found.\r\n * @param arr\r\n * @param value\r\n */\r\n function removeArrayItem(arr, value) {\r\n var index = arr.indexOf(value);\r\n if (index != -1) {\r\n return arr.splice(index, 1)[0];\r\n }\r\n }\r\n utils.removeArrayItem = removeArrayItem;\r\n function insertArrayItem(arr, index, value) {\r\n arr.splice(index, 0, value);\r\n }\r\n utils.insertArrayItem = insertArrayItem;\r\n function fillArray(arr, value, start, end) {\r\n if (start === void 0) { start = 0; }\r\n var len = arr.length >>> 0;\r\n var relativeStart = start >> 0;\r\n var k = relativeStart < 0 ?\r\n Math.max(len + relativeStart, 0) :\r\n Math.min(relativeStart, len);\r\n var relativeEnd = end === undefined ?\r\n len : end >> 0;\r\n var final = relativeEnd < 0 ?\r\n Math.max(len + relativeEnd, 0) :\r\n Math.min(relativeEnd, len);\r\n while (k < final) {\r\n arr[k] = value;\r\n k++;\r\n }\r\n return arr;\r\n }\r\n utils.fillArray = fillArray;\r\n //------------ DOM utils ------------\r\n /**\r\n * Calculates the shift on which we need to move our element horizontally\r\n * to find current window\r\n * @param absLeft\r\n * @param width\r\n */\r\n function shiftToFitWindow(absLeft, width) {\r\n var body = document.getElementsByTagName('body')[0];\r\n var winWidth = window.innerWidth || document.documentElement.clientWidth || body.clientWidth;\r\n var absRight = absLeft + width;\r\n var shift = 0;\r\n if (absRight > winWidth) {\r\n shift = winWidth - absRight - 10;\r\n if (absLeft + shift < 0) {\r\n shift = 10 - absLeft;\r\n }\r\n }\r\n return shift;\r\n }\r\n utils.shiftToFitWindow = shiftToFitWindow;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an object\r\n * @param val\r\n */\r\n function isObject(val) {\r\n if (val === null) {\r\n return false;\r\n }\r\n return ((typeof val === 'function') || (typeof val === 'object'));\r\n }\r\n utils.isObject = isObject;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isNumericType(dtype) {\r\n var index = _numericTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isNumericType = isNumericType;\r\n /**\r\n * Returns `true` if the `DataType` value passed in the parameter\r\n * represents some numeric type\r\n * @param dtype\r\n */\r\n function isIntType(dtype) {\r\n var index = _intTypes.indexOf(dtype);\r\n return (index >= 0);\r\n }\r\n utils.isIntType = isIntType;\r\n /**\r\n * Returns `true` if the value passed in the parameter is an a numeric value\r\n * @param val\r\n */\r\n function isNumeric(val) {\r\n return !isNaN(parseFloat(val)) && isFinite(val);\r\n }\r\n utils.isNumeric = isNumeric;\r\n /**\r\n * Returns `true` if two data types passed in parameters\r\n * are compatible - so it's safe to copy the values between\r\n * two expressions with these two types\r\n * @param type1\r\n * @param type2\r\n */\r\n function areCompatibleDataTypes(type1, type2) {\r\n return typeof type1 == \"undefined\" || typeof type2 == \"undefined\" || type1 == DataType.Unknown || type2 == DataType.Unknown\r\n || (type1 == type2) || (type1 == DataType.Date && type2 == DataType.DateTime)\r\n || (type1 == DataType.DateTime && type2 == DataType.Date);\r\n }\r\n utils.areCompatibleDataTypes = areCompatibleDataTypes;\r\n /**\r\n * Returns `true` if the property with named `propName`\r\n * in the object `obj` has some value\r\n * @param obj\r\n * @param propName\r\n */\r\n function isPropSet(obj, propName) {\r\n return obj[propName] || obj[propName.toLowerCase()] || obj[propName.toUpperCase()];\r\n }\r\n utils.isPropSet = isPropSet;\r\n //-------------- ID generator -----------\r\n var prefixIdLen = 4;\r\n var symbols = \"0123456789abcdefghijklmnopqrstuvwxyz\";\r\n var magicTicks = 636712160627685350;\r\n /**\r\n * Generates an unique ID\r\n */\r\n function generateId(prefix) {\r\n if (!prefix) {\r\n prefix = 'easy';\r\n }\r\n var prfx = (prefix.length > prefixIdLen) ? squeezeMoniker(prefix, prefixIdLen) : prefix;\r\n if (prfx && prfx.length > 0) {\r\n prfx += \"-\";\r\n }\r\n //adding 2 random symbols\r\n var randValue = strf.repeatString(\"\", 2);\r\n ;\r\n var maxSymbolIndex = symbols.length - 1;\r\n randValue = replaceAtString(randValue, 0, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n randValue = replaceAtString(randValue, 1, symbols[getRandomInt(0, maxSymbolIndex)]);\r\n //generating main ID part (64-base representation of the current value of the time ticks)\r\n var ticksNum64 = intToNum36(getNowTicks() - magicTicks);\r\n return prfx + randValue + ticksNum64;\r\n }\r\n utils.generateId = generateId;\r\n function intToNum36(value) {\r\n var targetBase = 36;\r\n var i = 14;\r\n var buffer = strf.repeatString(\"\", i);\r\n var rest = value;\r\n do {\r\n buffer = replaceAtString(buffer, i--, symbols[rest % targetBase]);\r\n rest = Math.floor(rest /= targetBase);\r\n } while (rest > 0);\r\n return strf.reverseString(buffer.trim());\r\n }\r\n function squeezeMoniker(str, maxlen) {\r\n var parts = str.split('-');\r\n var pml = 1;\r\n var ptt = maxlen;\r\n if (parts.length < maxlen) {\r\n pml = maxlen / parts.length;\r\n ptt = parts.length;\r\n }\r\n var result = \"\";\r\n for (var i = 0; i < ptt; i++) {\r\n result += squeeze(parts[i], pml);\r\n }\r\n return result;\r\n }\r\n function squeeze(str, maxlen) {\r\n var len = str.length;\r\n if (len > maxlen) {\r\n var step = len / maxlen;\r\n var result = \"\";\r\n result += str[0];\r\n var nextIndex = step;\r\n var ch = void 0;\r\n for (var i = 1; i < len; i++) {\r\n ch = str[i];\r\n if (i + 1 > nextIndex) {\r\n result += ch;\r\n nextIndex += step;\r\n }\r\n }\r\n return result;\r\n }\r\n else {\r\n return str;\r\n }\r\n }\r\n function replaceAtString(str, index, value) {\r\n return str.substr(0, index) + value + str.substr(index + value.length);\r\n }\r\n function getRandomInt(min, max) {\r\n return Math.floor(Math.random() * (max - min)) + min;\r\n }\r\n function getNowTicks() {\r\n return (621355968e9 + (new Date()).getTime() * 1e4);\r\n }\r\n function safeParseInt(str) {\r\n var res = parseInt(str);\r\n if (isNaN(res))\r\n throw \"\\\"\" + str + \"\\\" is not a valid number\";\r\n return res;\r\n }\r\n function getDaysInMonth(month, year) {\r\n return new Date(year, month + 1, 0).getDate();\r\n }\r\n // ------------- date/time functions -------------------\r\n // TO DO: improve to process all datetime cases\r\n function strToDateTime(value, format) {\r\n if (!value || value.length == 0)\r\n return new Date();\r\n var normalizedValue = value.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var normalizedFormat = format.replace(/[^a-zA-Z0-9_]/g, '-');\r\n var formatItems = normalizedFormat.split('-');\r\n var dateItems = normalizedValue.split('-');\r\n var monthIndex = formatItems.indexOf(\"MM\");\r\n var dayIndex = formatItems.indexOf(\"dd\");\r\n var yearIndex = formatItems.indexOf(\"yyyy\");\r\n var hourIndex = formatItems.indexOf(\"HH\");\r\n var minutesIndex = formatItems.indexOf(\"mm\");\r\n var secondsIndex = formatItems.indexOf(\"ss\");\r\n var today = new Date();\r\n try {\r\n var year = yearIndex > -1 && yearIndex < dateItems.length\r\n ? safeParseInt(dateItems[yearIndex])\r\n : today.getFullYear();\r\n var month = monthIndex > -1 && monthIndex < dateItems.length\r\n ? safeParseInt(dateItems[monthIndex]) - 1\r\n : today.getMonth() - 1;\r\n if (month > 11)\r\n throw '';\r\n var day = dayIndex > -1 && dayIndex < dateItems.length\r\n ? safeParseInt(dateItems[dayIndex])\r\n : today.getDate();\r\n if (day > getDaysInMonth(month, year))\r\n throw '';\r\n var hour = hourIndex > -1 && hourIndex < dateItems.length\r\n ? safeParseInt(dateItems[hourIndex])\r\n : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = minutesIndex > -1 && minutesIndex < dateItems.length\r\n ? safeParseInt(dateItems[minutesIndex])\r\n : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = secondsIndex > -1 && secondsIndex < dateItems.length\r\n ? safeParseInt(dateItems[secondsIndex])\r\n : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(year, month, day, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw value + \" is not a valid date.\";\r\n }\r\n }\r\n utils.strToDateTime = strToDateTime;\r\n function strToTime(str) {\r\n var timeItems = str.split(':');\r\n try {\r\n var hour = timeItems.length > 0 ? safeParseInt(timeItems[0]) : 0;\r\n if (hour > 23)\r\n throw '';\r\n var minute = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (minute > 59)\r\n throw '';\r\n var second = timeItems.length > 1 ? safeParseInt(timeItems[1]) : 0;\r\n if (second > 59)\r\n throw '';\r\n return new Date(0, 0, 0, hour, minute, second);\r\n }\r\n catch (_a) {\r\n throw str + \" is not a valid time.\";\r\n }\r\n }\r\n utils.strToTime = strToTime;\r\n var DT_FORMAT_RGEX = /\\[([^\\]]+)]|y{2,4}|M{1,4}|d{1,2}|H{1,2}|h{1,2}|m{2}|s{2}|t{2}/g;\r\n /**\r\n * Returns string representation of the date/time value according to the custom format (second parameter)\r\n * The format is compatible with the one used in .NET: https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings\r\n * @param date\r\n * @param format\r\n */\r\n function dateTimeToStr(date, format) {\r\n var year = date.getFullYear();\r\n var yearStr = year.toString();\r\n var month = date.getMonth() + 1;\r\n var day = date.getDate();\r\n var hour = date.getHours();\r\n var minute = date.getMinutes();\r\n var second = date.getSeconds();\r\n var hour12 = hour % 12 || 12; //the remainder of the division by 12. Or 12 if it's 0\r\n var isPm = hour > 11;\r\n var matches = {\r\n yyyy: yearStr,\r\n yy: yearStr.substring(yearStr.length - 2),\r\n MMMM: i18n.getLongMonthName(month),\r\n MMM: i18n.getShortMonthName(month),\r\n MM: (month < 10) ? '0' + month : month.toString(),\r\n M: month.toString(),\r\n dd: (day < 10) ? '0' + day : day.toString(),\r\n d: day.toString(),\r\n HH: (hour < 10) ? '0' + hour : hour.toString(),\r\n H: hour.toString(),\r\n hh: (hour12 < 10) ? '0' + hour12 : hour12.toString(),\r\n h: hour12.toString(),\r\n tt: isPm ? 'PM' : 'AM',\r\n mm: (minute < 10) ? '0' + minute : minute.toString(),\r\n ss: (second < 10) ? '0' + second : second.toString()\r\n };\r\n return format.replace(DT_FORMAT_RGEX, function (match, $1) {\r\n return $1 || matches[match];\r\n });\r\n }\r\n utils.dateTimeToStr = dateTimeToStr;\r\n /**\r\n * Converts a numeric value to the string taking into the account the decimal separator\r\n * @param value - the number to convert\r\n * @param decimalSeparator - the symbol that represents decimal separator. If not specified the function gets the one from the current locale settings.\r\n */\r\n function numberToStr(number, decimalSeparator) {\r\n decimalSeparator = decimalSeparator || i18n.getLocaleSettings().decimalSeparator;\r\n return number.toString().replace('.', decimalSeparator);\r\n }\r\n utils.numberToStr = numberToStr;\r\n})(utils || (utils = {}));\r\n//# sourceMappingURL=utils.js.map","export function repeatString(str, times) {\r\n var result = \"\";\r\n for (var i = 0; i < times; i++) {\r\n result += str;\r\n }\r\n return result;\r\n}\r\nexport function reverseString(str) {\r\n return str.split(\"\").reverse().join(\"\");\r\n}\r\nexport function strEndsWith(str, symbol) {\r\n return str && str.lastIndexOf(symbol) == (str.length - symbol.length);\r\n}\r\n/**\r\n * Adds two paths and returns the result\r\n * Correctly processes leading and trailing slashes\r\n * @param path1\r\n * @param path2\r\n */\r\nexport function combinePath(path1, path2) {\r\n var result = path1;\r\n if (result != null && result.length > 0) {\r\n if (result.charAt(result.length - 1) != '/')\r\n result += \"/\";\r\n result += path2;\r\n }\r\n else {\r\n result = path2;\r\n }\r\n return result;\r\n}\r\n//# sourceMappingURL=string_utils.js.map","var HttpActionResult = /** @class */ (function () {\r\n function HttpActionResult(request, promise) {\r\n this.request = request;\r\n this.promise = promise;\r\n }\r\n HttpActionResult.prototype.getPromise = function () {\r\n return this.promise;\r\n };\r\n HttpActionResult.prototype.getRequest = function () {\r\n return this.request;\r\n };\r\n HttpActionResult.prototype.then = function (onfulfilled, onrejected) {\r\n return this.promise.then(onfulfilled, onrejected);\r\n };\r\n HttpActionResult.prototype.catch = function (onrejected) {\r\n return this.promise.catch(onrejected);\r\n };\r\n HttpActionResult.prototype.finally = function (onfinally) {\r\n return this.promise.finally(onfinally);\r\n };\r\n return HttpActionResult;\r\n}());\r\nexport { HttpActionResult };\r\n//# sourceMappingURL=http_action_result.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nimport { utils } from '../utils/utils';\r\nimport { HttpActionResult } from './http_action_result';\r\nimport { HttpMethod } from './http_method';\r\nimport { HttpRequest } from './http_request';\r\nvar HttpResponseError = /** @class */ (function (_super) {\r\n __extends(HttpResponseError, _super);\r\n function HttpResponseError(status, message) {\r\n var _this = _super.call(this, message) || this;\r\n _this.status = status;\r\n return _this;\r\n }\r\n return HttpResponseError;\r\n}(Error));\r\nexport { HttpResponseError };\r\nvar HttpClient = /** @class */ (function () {\r\n function HttpClient() {\r\n this.defaultHeaders = {};\r\n this.customPayload = undefined;\r\n }\r\n Object.defineProperty(HttpClient.prototype, \"responseBody\", {\r\n /** Gets the response body for the latest request */\r\n get: function () {\r\n return this._responseBody;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n HttpClient.prototype.get = function (url, options) {\r\n return this.send(HttpMethod.Get, url, null, options);\r\n };\r\n HttpClient.prototype.post = function (url, data, options) {\r\n return this.send(HttpMethod.Post, url, data, options);\r\n };\r\n HttpClient.prototype.put = function (url, data, options) {\r\n return this.send(HttpMethod.Put, url, data, options);\r\n };\r\n HttpClient.prototype.delete = function (url, data, options) {\r\n return this.send(HttpMethod.Delete, url, data, options);\r\n };\r\n HttpClient.prototype.send = function (method, url, data, options) {\r\n var _this = this;\r\n options = options || {};\r\n var dataType = options.dataType || 'json';\r\n var contentType = options.contentType || (dataType !== 'form-data')\r\n ? 'application/json'\r\n : null;\r\n if (data && dataType != 'form-data' && this.customPayload) {\r\n data.data = utils.assignDeep(data.data || {}, this.customPayload);\r\n }\r\n var XHR = ('onload' in new XMLHttpRequest())\r\n ? XMLHttpRequest\r\n : window[\"XDomainRequest\"]; //IE support\r\n var xhr = new XHR();\r\n var desc = {\r\n method: method,\r\n url: url,\r\n headers: __assign(__assign({}, this.defaultHeaders), options.headers || {}),\r\n queryParams: options.queryParams || {},\r\n data: data\r\n };\r\n if (contentType)\r\n desc.headers['Content-Type'] = contentType;\r\n var request = new HttpRequest(xhr, desc);\r\n if (this.beforeEachRequest) {\r\n console.warn(\"HttpClient: 'beforeEachRequest' is deprecated and will be removed in future updates.\\n Use 'onRequest' instead\");\r\n this.beforeEachRequest(request);\r\n }\r\n if (this.onRequest) {\r\n this.onRequest(request);\r\n }\r\n var dataToSend = (request.data && typeof request.data !== 'string'\r\n && dataType == 'json')\r\n ? JSON.stringify(request.data)\r\n : request.data;\r\n request.open();\r\n return new HttpActionResult(request, new Promise(function (resolve, reject) {\r\n if (options.responseType)\r\n xhr.responseType = options.responseType;\r\n xhr.onerror = function (error) {\r\n reject(new HttpResponseError(xhr.status, xhr.responseText));\r\n };\r\n xhr.onreadystatechange = function () {\r\n if (xhr.readyState != 4)\r\n return; //we process only the state change to DONE(4)\r\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\r\n var status = xhr.status;\r\n if (status === 0) {\r\n reject(new HttpResponseError(status, \"Network error or the request was aborted\"));\r\n }\r\n else if (status >= 200 && status < 400) {\r\n //Success\r\n var responseObj = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? xhr.response\r\n : (responseContentType.indexOf('application/json') == 0\r\n ? JSON.parse(xhr.responseText)\r\n : xhr.responseText);\r\n _this._responseBody = responseObj;\r\n if (_this.onResponse) {\r\n _this.onResponse(xhr);\r\n }\r\n resolve(responseObj);\r\n }\r\n else {\r\n //Error\r\n var rtPromise = (xhr.responseType === 'arraybuffer' || xhr.responseType === 'blob')\r\n ? HttpClient.decodeArrayBuffer(xhr.response)\r\n : Promise.resolve(xhr.responseText);\r\n rtPromise.then(function (responseText) {\r\n var responseObj = (responseContentType.indexOf('application/json') == 0)\r\n ? JSON.parse(responseText)\r\n : responseText;\r\n _this._responseBody = responseObj;\r\n var message = responseObj.message ||\r\n (status == 404\r\n ? \"No such endpoint: \" + url\r\n : responseObj);\r\n reject(new HttpResponseError(status, message));\r\n });\r\n }\r\n };\r\n xhr.send(dataToSend);\r\n }));\r\n };\r\n HttpClient.decodeArrayBuffer = function (uintArray) {\r\n var reader = new FileReader();\r\n return new Promise(function (resolve) {\r\n reader.onloadend = function () {\r\n if (reader.readyState == FileReader.DONE) {\r\n resolve(reader.result);\r\n }\r\n };\r\n reader.readAsText(new Blob([uintArray]));\r\n });\r\n };\r\n return HttpClient;\r\n}());\r\nexport { HttpClient };\r\n//# sourceMappingURL=http_client.js.map","import { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nexport var ColumnAlignment;\r\n(function (ColumnAlignment) {\r\n ColumnAlignment[ColumnAlignment[\"None\"] = 0] = \"None\";\r\n ColumnAlignment[ColumnAlignment[\"Left\"] = 1] = \"Left\";\r\n ColumnAlignment[ColumnAlignment[\"Center\"] = 2] = \"Center\";\r\n ColumnAlignment[ColumnAlignment[\"Right\"] = 3] = \"Right\";\r\n})(ColumnAlignment || (ColumnAlignment = {}));\r\nvar DataColumn = /** @class */ (function () {\r\n function DataColumn(desc) {\r\n if (!desc)\r\n throw Error(\"Options are required\");\r\n if (!desc.id)\r\n throw Error(\"Field Id is required\");\r\n if (!desc.label)\r\n throw Error(\"Label is required\");\r\n this.id = desc.id;\r\n this.type = utils.getIfDefined(desc.type, DataType.String);\r\n this.label = desc.label;\r\n this.originAttrId = desc.originAttrId;\r\n this.isAggr = desc.isAggr || false;\r\n this.displayFormat = desc.dfmt;\r\n this.groupFooterColumnTemplate = desc.gfct;\r\n this.style = desc.style || {};\r\n this.description = desc.description;\r\n this.calculatedWidth = 0;\r\n }\r\n return DataColumn;\r\n}());\r\nexport { DataColumn };\r\nvar DataColumnList = /** @class */ (function () {\r\n function DataColumnList() {\r\n this.items = [];\r\n this.mapper = {};\r\n this._dateColumnIdx = [];\r\n }\r\n Object.defineProperty(DataColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DataColumnList.prototype.add = function (colOrDesc) {\r\n var col;\r\n if (colOrDesc instanceof DataColumn) {\r\n col = colOrDesc;\r\n }\r\n else {\r\n col = new DataColumn(colOrDesc);\r\n }\r\n var index = this.items.length;\r\n this.items.push(col);\r\n this.mapper[col.id] = index;\r\n if ([DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0) {\r\n this._dateColumnIdx.push(index);\r\n }\r\n return index;\r\n };\r\n DataColumnList.prototype.updateDateColumnIdx = function () {\r\n this._dateColumnIdx = this.getItems()\r\n .filter(function (col) { return [DataType.Date, DataType.DateTime, DataType.Time].indexOf(col.type) >= 0; })\r\n .map(function (col, index) { return index; });\r\n };\r\n DataColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.count) {\r\n this.items[index] = col;\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex) {\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n this.updateDateColumnIdx();\r\n }\r\n };\r\n DataColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.count) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n DataColumnList.prototype.getIndex = function (id) {\r\n return this.mapper[id];\r\n };\r\n DataColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n DataColumnList.prototype.getDateColumnIndexes = function () {\r\n return this._dateColumnIdx;\r\n };\r\n DataColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n var removeDate = this._dateColumnIdx.indexOf(index);\r\n if (removeDate >= 0) {\r\n this._dateColumnIdx.splice(removeDate, 1);\r\n }\r\n delete this.mapper[col.id];\r\n };\r\n DataColumnList.prototype.clear = function () {\r\n this.items = [];\r\n this._dateColumnIdx = [];\r\n this.mapper = {};\r\n };\r\n return DataColumnList;\r\n}());\r\nexport { DataColumnList };\r\n//# sourceMappingURL=data_column.js.map","import { DataType } from '../types/data_type';\r\nimport { EntityAttrKind } from '../types/entity_attr_kind';\r\nimport { utils } from '../utils/utils';\r\n/**\r\n * Represents one entity.\r\n */\r\nvar MetaEntity = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntity(parent) {\r\n /** Returns false if this entity is read-only */\r\n this.isEditable = true;\r\n this.name = \"\";\r\n this.caption = \"\";\r\n this.description = \"\";\r\n this.parent = parent;\r\n this.attributes = new Array();\r\n this.subEntities = new Array();\r\n }\r\n /**\r\n * Loads entity from its JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntity.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.name = dto.name;\r\n this.captionPlural = dto.namePlur;\r\n this.caption = dto.name;\r\n this.description = dto.desc;\r\n if (typeof (dto.ied) !== 'undefined')\r\n this.isEditable = dto.ied;\r\n this.subEntities = new Array();\r\n if (dto.ents) {\r\n for (var i = 0; i < dto.ents.length; i++) {\r\n var newEntity = model.createEntity(this);\r\n newEntity.loadFromData(model, dto.ents[i]);\r\n this.subEntities.push(newEntity);\r\n }\r\n }\r\n this.attributes = new Array();\r\n if (dto.attrs) {\r\n for (var i = 0; i < dto.attrs.length; i++) {\r\n var newAttr = model.createEntityAttr(this);\r\n newAttr.loadFromData(model, dto.attrs[i]);\r\n this.attributes.push(newAttr);\r\n }\r\n }\r\n }\r\n };\r\n MetaEntity.prototype.scan = function (processAttribute, processEntity) {\r\n var opts = { stop: false };\r\n var internalProcessEntity = function (entity) {\r\n if (processEntity)\r\n processEntity(entity, opts);\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; (i < attrCount) && !opts.stop; i++) {\r\n var attr = entity.attributes[i];\r\n if (processAttribute) {\r\n processAttribute(attr, opts);\r\n }\r\n if (opts.stop)\r\n return;\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; (i < subEntityCount) && !opts.stop; i++) {\r\n internalProcessEntity(entity.subEntities[i]);\r\n }\r\n }\r\n };\r\n internalProcessEntity(this);\r\n };\r\n MetaEntity.prototype.getFirstPrimaryAttr = function () {\r\n return this.getPrimaryAttrs()[0];\r\n };\r\n MetaEntity.prototype.getPrimaryAttrs = function () {\r\n return this.attributes.filter(function (attr) { return attr.isPrimaryKey; });\r\n };\r\n return MetaEntity;\r\n}());\r\nexport { MetaEntity };\r\nvar MetaEntityAttr = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaEntityAttr(entity) {\r\n this.id = \"\";\r\n this.caption = \"{Unrecognized attribute}\";\r\n this.dataType = DataType.String;\r\n this.size = 0;\r\n this.isPrimaryKey = false;\r\n this.isForeignKey = false;\r\n this.isNullable = true;\r\n this.showOnView = true;\r\n this.isEditable = true;\r\n this.showOnCreate = true;\r\n this.showOnEdit = true;\r\n this.showInLookup = false;\r\n this.lookupAttr = \"\";\r\n this.expr = \"\";\r\n this.entity = entity;\r\n this.kind = EntityAttrKind.Data;\r\n }\r\n /**\r\n * Loads entity attribute from JSON representation object.\r\n * @param model The Data Model.\r\n * @param dto The JSON representation object.\r\n */\r\n MetaEntityAttr.prototype.loadFromData = function (model, dto) {\r\n if (dto) {\r\n this.id = dto.id;\r\n this.description = dto.desc;\r\n this.caption = dto.cptn;\r\n this.dataType = dto.dtype;\r\n this.isPrimaryKey = dto.ipk;\r\n this.isForeignKey = dto.ifk;\r\n this.size = dto.size;\r\n this.lookupAttr = dto.lattr;\r\n this.lookupEntity = dto.lent;\r\n this.dataAttr = dto.dattr;\r\n this.lookupDataAttr = dto.ldattr;\r\n var isDataType = utils.getDateDataTypes().indexOf(this.dataType);\r\n this.defaultValue = dto.defVal && isDataType ? new Date(dto.defVal) : dto.defVal;\r\n this.isNullable = utils.getIfDefined(dto.nul, this.isNullable);\r\n this.isEditable = utils.getIfDefined(dto.ied, this.isEditable);\r\n this.showOnView = utils.getIfDefined(dto.ivis || dto.sov, this.showOnView);\r\n this.showOnCreate = utils.getIfDefined(dto.soc, this.showOnCreate);\r\n this.showOnEdit = utils.getIfDefined(dto.soe, this.showOnEdit);\r\n this.showInLookup = utils.getIfDefined(dto.sil, this.showInLookup);\r\n this.kind = dto.kind;\r\n this.displayFormat = dto.dfmt;\r\n if (dto.udata)\r\n this.userData = dto.udata;\r\n if (dto.edtr) {\r\n this.defaultEditor = model.getEditorById(dto.edtr) || model.createValueEditor();\r\n }\r\n }\r\n };\r\n return MetaEntityAttr;\r\n}());\r\nexport { MetaEntityAttr };\r\n//# sourceMappingURL=meta_entity.js.map","import { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\n/**\r\n * Represents a value editor.\r\n */\r\nvar ValueEditor = /** @class */ (function () {\r\n /** The default constructor. */\r\n function ValueEditor() {\r\n this.id = \"\";\r\n this.tag = EditorTag.Unknown;\r\n this.resType = DataType.Unknown;\r\n this.defValue = \"\";\r\n }\r\n /**\r\n * Loads value editor from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n ValueEditor.prototype.loadFromData = function (data) {\r\n if (data) {\r\n this.id = data.id;\r\n this.tag = data.tag;\r\n this.defValue = data.defval;\r\n this.resType = data.rtype;\r\n this.accept = data.accept;\r\n this.multiline = data.multiline;\r\n if (data.subType) {\r\n this.resType = data.subType;\r\n }\r\n if (data.name) {\r\n this.name = data.name;\r\n }\r\n if (data.values) {\r\n this.values = data.values;\r\n }\r\n }\r\n };\r\n ValueEditor.prototype.getValueText = function (value) {\r\n var result = \"\";\r\n if (!this.values)\r\n return result;\r\n if (Array.isArray(value)) {\r\n for (var _i = 0, _a = this.values; _i < _a.length; _i++) {\r\n var item = _a[_i];\r\n if (value.indexOf(item.id) >= 0) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n else {\r\n for (var _b = 0, _c = this.values; _b < _c.length; _b++) {\r\n var item = _c[_b];\r\n if (item.id === value) {\r\n result += item.text + ',';\r\n }\r\n }\r\n }\r\n if (result) {\r\n result = result.substring(0, result.length - 1);\r\n }\r\n return result;\r\n };\r\n return ValueEditor;\r\n}());\r\nexport { ValueEditor };\r\n//# sourceMappingURL=value_editor.js.map","import { i18n } from '../i18n/i18n';\r\nimport { utils } from '../utils/utils';\r\nimport { EditorTag } from '../types/editor_tag';\r\nimport { DataType } from '../types/data_type';\r\nimport { MetaEntity, MetaEntityAttr } from './meta_entity';\r\nimport { ValueEditor } from './value_editor';\r\n/**\r\n * Represents a data model\r\n */\r\nvar MetaData = /** @class */ (function () {\r\n /** The default constructor. */\r\n function MetaData() {\r\n this.mainEntity = null;\r\n this.id = '__none';\r\n this.name = 'Empty model';\r\n this.rootEntity = this.createEntity();\r\n this.displayFormats = new Map();\r\n }\r\n /**\r\n * Gets the main entity of model\r\n * @return The main entity.\r\n */\r\n MetaData.prototype.getMainEntity = function () {\r\n return this.mainEntity;\r\n };\r\n MetaData.prototype.createEntity = function (parent) {\r\n return new MetaEntity(parent);\r\n };\r\n MetaData.prototype.createEntityAttr = function (parent) {\r\n return new MetaEntityAttr(parent);\r\n };\r\n MetaData.prototype.createValueEditor = function () {\r\n return new ValueEditor();\r\n };\r\n /**\r\n * Loads data model from JSON.\r\n * @param stringJson The JSON string.\r\n */\r\n MetaData.prototype.loadFromJSON = function (stringJson) {\r\n var model = JSON.parse(stringJson);\r\n this.loadFromData(model);\r\n };\r\n /**\r\n * Loads data model from its JSON representation object.\r\n * @param data The JSON representation object.\r\n */\r\n MetaData.prototype.loadFromData = function (data) {\r\n this.id = data.id;\r\n this.name = data.name;\r\n this.version = data.vers;\r\n //Editors\r\n this.editors = new Array();\r\n if (data.editors) {\r\n for (var i = 0; i < data.editors.length; i++) {\r\n var newEditor = this.createValueEditor();\r\n newEditor.loadFromData(data.editors[i]);\r\n this.editors.push(newEditor);\r\n }\r\n }\r\n //rootEntity\r\n this.rootEntity.loadFromData(this, data.entroot);\r\n //DataFormats\r\n this.displayFormats = new Map();\r\n if (data.displayFormats) {\r\n for (var dtypeStr in data.displayFormats) {\r\n var dtype = DataType[dtypeStr];\r\n var formats = data.displayFormats[dtypeStr] || new Array();\r\n this.displayFormats.set(dtype, formats);\r\n }\r\n }\r\n };\r\n /**\r\n * Gets the display formats.\r\n * @returns The display formats.\r\n */\r\n MetaData.prototype.getDisplayFormats = function () {\r\n return this.displayFormats;\r\n };\r\n /**\r\n * Gets the display formats for type\r\n * @param type The type\r\n * @returns An array of display formats\r\n */\r\n MetaData.prototype.getDisplayFormatsForType = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type);\r\n }\r\n return [];\r\n };\r\n /**\r\n * Gets the default display format for the provided type\r\n * @param type The type\r\n * @returns The default type format or null\r\n */\r\n MetaData.prototype.getDefaultFormat = function (type) {\r\n if (this.displayFormats.has(type)) {\r\n return this.displayFormats.get(type).filter(function (f) { return f.isdef; })[0];\r\n }\r\n return null;\r\n };\r\n /**\r\n * Sets data to data model.\r\n * @param model Its JSON representation object or JSON string.\r\n */\r\n MetaData.prototype.setData = function (model) {\r\n if (typeof model === 'string') {\r\n this.loadFromJSON(model);\r\n }\r\n else {\r\n this.loadFromData(model);\r\n }\r\n };\r\n /**\r\n * Checks wether the data model is empty.\r\n * @returns `true` if the data model is empty, otherwise `false`.\r\n */\r\n MetaData.prototype.isEmpty = function () {\r\n return this.rootEntity.subEntities.length === 0 && this.rootEntity.attributes.length === 0;\r\n };\r\n /**\r\n * Gets ID of the data model.\r\n * @returns The ID.\r\n */\r\n MetaData.prototype.getId = function () {\r\n return this.id;\r\n };\r\n /**\r\n * Gets name of the data model.\r\n * @returns The name.\r\n */\r\n MetaData.prototype.getName = function () {\r\n return this.name;\r\n };\r\n /**\r\n * Gets root entity of the data model.\r\n * @returns The root entity.\r\n */\r\n MetaData.prototype.getRootEntity = function () {\r\n return this.rootEntity;\r\n };\r\n /**\r\n * Finds editor by its ID.\r\n * @param editorId The editor ID.\r\n * @returns The value editor or `null`.\r\n */\r\n MetaData.prototype.getEditorById = function (editorId) {\r\n for (var _i = 0, _a = this.editors; _i < _a.length; _i++) {\r\n var editor = _a[_i];\r\n if (editor.id === editorId) {\r\n return editor;\r\n }\r\n }\r\n return null;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified model (it's root entity and all its sub-entities).\r\n * @param attrId The attribute ID.\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getAttributeById = function (attrId) {\r\n var attr = this.getEntityAttrById(this.getRootEntity(), attrId);\r\n if (!attr) {\r\n return null;\r\n }\r\n return attr;\r\n };\r\n /**\r\n * Checks wether attribute contains such property.\r\n * @param attrId The attribute ID.\r\n * @param propName The property name.\r\n * @returns `true` if the attribute contains the property, otherwise `false`.\r\n */\r\n MetaData.prototype.checkAttrProperty = function (attrId, propName) {\r\n var attribute = this.getAttributeById(attrId);\r\n if (attribute) {\r\n if (typeof attribute[propName] === 'undefined') {\r\n throw 'No such property: ' + propName;\r\n }\r\n if (attribute[propName]) {\r\n return true;\r\n }\r\n else if (attribute.lookupAttr) {\r\n attrId = attribute.lookupAttr;\r\n attribute = this.getAttributeById(attrId);\r\n return attribute && attribute[propName];\r\n }\r\n else {\r\n return false;\r\n }\r\n }\r\n else\r\n return false;\r\n };\r\n /**\r\n * Gets entity attribute by its ID.\r\n * This function runs through all attributes inside specified entity and all its sub-entities.\r\n * @param entity\r\n * @param attrId\r\n * @returns The attribute or `null`.\r\n */\r\n MetaData.prototype.getEntityAttrById = function (entity, attrId) {\r\n var idx;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (idx = 0; idx < attrCount; idx++) {\r\n if (entity.attributes[idx].id == attrId) {\r\n return entity.attributes[idx];\r\n }\r\n }\r\n }\r\n var res;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (idx = 0; idx < subEntityCount; idx++) {\r\n res = this.getEntityAttrById(entity.subEntities[idx], attrId);\r\n if (res)\r\n return res;\r\n }\r\n }\r\n return null;\r\n };\r\n MetaData.prototype.listByEntityWithFilter = function (entity, filterFunc) {\r\n var result = new Array();\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name);\r\n if (!caption) {\r\n caption = ent.caption;\r\n }\r\n var newEnt = utils.assign(this.createEntity(), { id: ent.name, text: caption, items: [], isEntity: true });\r\n newEnt.items = this.listByEntityWithFilter(ent, filterFunc);\r\n if (newEnt.items.length > 0)\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id);\r\n if (!caption)\r\n caption = attr.caption;\r\n var newEnt = utils.assign(this.createEntity(), { id: attr.id, text: caption, dataType: attr.dataType });\r\n result.push(newEnt);\r\n }\r\n }\r\n }\r\n return result;\r\n };\r\n MetaData.prototype.listByEntity = function (entity, opts, filterFunc) {\r\n opts = opts || {};\r\n var resultEntities = [];\r\n var resultAttributes = [];\r\n var caption;\r\n var ent = null;\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var entIdx = 0; entIdx < subEntityCount; entIdx++) {\r\n ent = entity.subEntities[entIdx];\r\n if (!filterFunc || filterFunc(ent, null)) {\r\n caption = i18n.getText('Entities', ent.name) || ent.caption;\r\n var newEnt = utils.assign(this.createEntity(), {\r\n id: ent.name,\r\n text: caption,\r\n items: [],\r\n isEntity: true,\r\n description: ent.description\r\n });\r\n var newOpts = utils.assign({}, opts);\r\n newOpts.includeRootData = false;\r\n newEnt.items = this.listByEntity(ent, newOpts, filterFunc);\r\n if (newEnt.items.length > 0) {\r\n resultEntities.push(newEnt);\r\n }\r\n }\r\n }\r\n }\r\n var attr = null;\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var attrIdx = 0; attrIdx < attrCount; attrIdx++) {\r\n attr = entity.attributes[attrIdx];\r\n if (!filterFunc || filterFunc(entity, attr)) {\r\n caption = i18n.getText('Attributes', attr.id) || attr.caption;\r\n resultAttributes.push(utils.assign(this.createEntityAttr(entity), {\r\n id: attr.id, text: caption,\r\n dataType: attr.dataType, lookupAttr: attr.lookupAttr,\r\n description: attr.description\r\n }));\r\n }\r\n }\r\n }\r\n var sortCheck = function (a, b) {\r\n if (a.text.toLowerCase() == b.text.toLowerCase()) {\r\n return 0;\r\n }\r\n if (a.text.toLowerCase() > b.text.toLowerCase()) {\r\n return 1;\r\n }\r\n return -1;\r\n };\r\n if (opts.sortEntities) {\r\n resultEntities.sort(sortCheck);\r\n resultAttributes.sort(sortCheck);\r\n }\r\n var result;\r\n if (!opts.attrPlacement || opts.attrPlacement == 0) {\r\n result = resultEntities.concat(resultAttributes);\r\n }\r\n else {\r\n result = resultAttributes.concat(resultEntities);\r\n }\r\n if (opts.attrPlacement == 2) {\r\n result.sort(sortCheck);\r\n }\r\n if (opts.includeRootData) {\r\n caption = i18n.getText('Entities', entity.name);\r\n if (!caption)\r\n caption = entity.caption;\r\n return { id: entity.name, text: caption, items: result };\r\n }\r\n else {\r\n return result;\r\n }\r\n };\r\n /**\r\n * Clears data model.\r\n */\r\n MetaData.prototype.clear = function () {\r\n this.rootEntity = this.createEntity();\r\n this.editors = [];\r\n this.version = '';\r\n };\r\n /**\r\n * Add default value editors.\r\n */\r\n MetaData.prototype.addDefaultValueEditors = function () {\r\n var ve;\r\n ve = this.addOrUpdateValueEditor('_DTE', EditorTag.Edit, DataType.String);\r\n ve.defValue = '';\r\n this.addOrUpdateValueEditor('_DPDE', EditorTag.DateTime, DataType.DateTime);\r\n this.addOrUpdateValueEditor('_DPTE', EditorTag.DateTime, DataType.DateTime);\r\n };\r\n /**\r\n * Add or update a value editor.\r\n * @param id The id.\r\n * @param tag The tag.\r\n * @param resType The result type.\r\n * @returns The value editor.\r\n */\r\n MetaData.prototype.addOrUpdateValueEditor = function (id, tag, resType) {\r\n var ve = utils.findItemById(this.editors, id);\r\n if (!ve) {\r\n ve = this.createValueEditor();\r\n ve.id = id;\r\n this.editors.push(ve);\r\n }\r\n ve.tag = tag;\r\n ve.resType = resType;\r\n return ve;\r\n };\r\n /**\r\n * Gets entities tree.\r\n * @param opts The options.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to options and the filter function\r\n */\r\n MetaData.prototype.getEntitiesTree = function (opts, filterFunc) {\r\n return this.listByEntity(this.getRootEntity(), opts, filterFunc);\r\n };\r\n /**\r\n * Gets entities tree due to filter.\r\n * @param filterFunc The filter function.\r\n * Takes two parameters, Entity and EntityAttr (second parameter will be null for entities), and returns boolean (true if the corresponding entity or attribute).\r\n * @returns The tree of the entities and their attributes according to the filter function\r\n */\r\n MetaData.prototype.getEntitiesTreeWithFilter = function (filterFunc) {\r\n return this.listByEntityWithFilter(this.getRootEntity(), filterFunc);\r\n };\r\n /**\r\n * Finds full entity path by attribute\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getFullEntityPathByAttr = function (attrId, sep) {\r\n sep = sep || ' ';\r\n return this.getEntityPathByAttr(this.getRootEntity(), attrId, sep, true);\r\n };\r\n /**\r\n * Finds entity path by attribute\r\n * @param entity The entity.\r\n * @param attrId The attribute id.\r\n * @param sep The separator.\r\n * @param root The root option.\r\n * @returns The path.\r\n */\r\n MetaData.prototype.getEntityPathByAttr = function (entity, attrId, sep, root) {\r\n if (!entity)\r\n return '';\r\n sep = sep || ' ';\r\n var entityCaption = '';\r\n if (entity.caption && !root) {\r\n var entityText = i18n.getText('Entities', entity.caption);\r\n entityCaption = entityText ? entityText : entity.caption;\r\n }\r\n if (entity.attributes) {\r\n var attrCount = entity.attributes.length;\r\n for (var i = 0; i < attrCount; i++) {\r\n if (entity.attributes[i].id == attrId) {\r\n return entityCaption;\r\n }\r\n }\r\n }\r\n if (entity.subEntities) {\r\n var subEntityCount = entity.subEntities.length;\r\n for (var i = 0; i < subEntityCount; i++) {\r\n var ent = entity.subEntities[i];\r\n var res = this.getEntityPathByAttr(ent, attrId, sep, false);\r\n if (res !== '') {\r\n if (entityCaption !== '')\r\n res = entityCaption + sep + res;\r\n return res;\r\n }\r\n }\r\n }\r\n return '';\r\n };\r\n /**\r\n * Gets the attribute text.\r\n * @param attr The attribute.\r\n * @param format The format.\r\n * @returns Formatted text.\r\n */\r\n MetaData.prototype.getAttributeText = function (attr, format) {\r\n var attrText = i18n.getText('Attributes', attr.id);\r\n if (!attrText) {\r\n attrText = attr.caption;\r\n }\r\n if (!format) {\r\n return attrText;\r\n }\r\n var result = '';\r\n var entityPath = this.getFullEntityPathByAttr(attr.id, ' ');\r\n if (entityPath) {\r\n result = format.replace(new RegExp('{attr}', 'g'), attrText);\r\n result = result.replace(new RegExp('{entity}', 'g'), entityPath);\r\n }\r\n else {\r\n result = attrText;\r\n }\r\n return result.trim();\r\n };\r\n /**\r\n * Scans model's entity tree and calls the callback functions for each attribute and entity.\r\n * @param processAttribute The callback function which is called for each attribute in model's entity tree.\r\n * The processed attribute is passed in the first function parameter.\r\n * @param processEntity The callback function which is called for each entity in tree.\r\n * The processed entity is passed in the first function parameter.\r\n */\r\n MetaData.prototype.runThroughEntities = function (processAttribute, processEntity) {\r\n this.getRootEntity().scan(processAttribute, processEntity);\r\n };\r\n /**\r\n * Finds first attribute by filter.\r\n * @param filterFunc The filter function. Takes EntityAttr object in parameter and returns boolean\r\n */\r\n MetaData.prototype.getFirstAttributeByFilter = function (filterFunc) {\r\n var res = null;\r\n this.runThroughEntities(function (attr, opts) {\r\n if (filterFunc(attr)) {\r\n opts.stop = true;\r\n res = attr;\r\n }\r\n }, null);\r\n return res;\r\n };\r\n return MetaData;\r\n}());\r\nexport { MetaData };\r\n//# sourceMappingURL=meta_data.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\n/**\r\n * Defines aggregations settings for the current context.\r\n * Group, aggregate columns, grand totals, etc.\r\n */\r\nvar AggregationSettings = /** @class */ (function () {\r\n function AggregationSettings(colStore) {\r\n this.colStore = colStore;\r\n this.aggregates = [];\r\n this.groups = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this._caseSensitiveGroups = false;\r\n this.COUNT_FIELD_NAME = 'GRPRECCNT';\r\n }\r\n Object.defineProperty(AggregationSettings.prototype, \"caseSensitiveGroups\", {\r\n get: function () {\r\n return this._caseSensitiveGroups;\r\n },\r\n set: function (value) {\r\n this._caseSensitiveGroups = value;\r\n this.updateCompareProc();\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n AggregationSettings.prototype.updateCompareProc = function () {\r\n this.compareValues = this._caseSensitiveGroups\r\n ? this.strictCompare\r\n : this.caseInsensitiveCompare;\r\n };\r\n AggregationSettings.prototype.addGroup = function (settings) {\r\n var cols = settings.columns || this.colStore.getColumnIds(settings.from, settings.to);\r\n if (!this.colStore.validateColumns(cols))\r\n throw \"Invalid columns: \" + cols;\r\n if (this.hasColumnsInUse(cols))\r\n throw \"Can't add same columns to different groups/aggregates\";\r\n this.groups.push(__assign({ columns: cols }, settings));\r\n return this;\r\n };\r\n AggregationSettings.prototype.addAggregateColumn = function (colIndexOrId, funcId) {\r\n var colId = typeof colIndexOrId == 'string'\r\n ? colIndexOrId\r\n : this.colStore.getColumnIds(colIndexOrId, colIndexOrId)[0];\r\n if (this.hasColumnsInUse([colId]) || !this.colStore.validateAggregate(colId, funcId))\r\n throw 'Invalid aggregation function for the column: ' + colId;\r\n this.aggregates.push({ colId: colId, funcId: funcId });\r\n return this;\r\n };\r\n AggregationSettings.prototype.addGrandTotals = function () {\r\n this.useGrandTotals = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.addCounts = function () {\r\n this.useRecordCount = true;\r\n return this;\r\n };\r\n AggregationSettings.prototype.getGroups = function () {\r\n var _this = this;\r\n var cols = [];\r\n var mappedGrops = this.groups.map(function (grp) {\r\n cols = cols.concat(grp.columns);\r\n return __assign(__assign({}, grp), { columns: Array.from(cols), aggregates: Array.from(_this.aggregates) });\r\n });\r\n return mappedGrops;\r\n };\r\n AggregationSettings.prototype.getInternalGroups = function () {\r\n return this.groups;\r\n };\r\n AggregationSettings.prototype.lastGroup = function () {\r\n var groups = this.getGroups();\r\n return groups[groups.length - 1];\r\n };\r\n AggregationSettings.prototype.getAggregates = function () {\r\n return this.aggregates;\r\n };\r\n AggregationSettings.prototype.hasAggregates = function () {\r\n return this.aggregates.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGroups = function () {\r\n return this.groups.length > 0;\r\n };\r\n AggregationSettings.prototype.hasGrandTotals = function () {\r\n return this.useGrandTotals;\r\n };\r\n AggregationSettings.prototype.hasRecordCount = function () {\r\n return this.useRecordCount;\r\n };\r\n AggregationSettings.prototype.isEmpty = function () {\r\n return !(this.hasAggregates() || this.hasGroups() ||\r\n this.hasAggregates() || this.hasRecordCount());\r\n };\r\n AggregationSettings.prototype.drop = function () {\r\n console.warn('\"drop()\" method is obsolete. Use \"clear()\" instead');\r\n this.clear();\r\n };\r\n AggregationSettings.prototype.clear = function () {\r\n this.groups = [];\r\n this.aggregates = [];\r\n this.useGrandTotals = false;\r\n this.useRecordCount = false;\r\n this.caseSensitiveGroups = false;\r\n return this;\r\n };\r\n /**\r\n * Checks if all columns from the list passed in the parameter are \"unused\".\r\n * Here \"unused column\" means a column that is included neither in any group nor in the aggregates list.\r\n * @param cols - the array of column IDs\r\n * @returns true if all columns in the list are not used anywhere, othervise - fals\r\n */\r\n AggregationSettings.prototype.hasColumnsInUse = function (cols) {\r\n for (var _i = 0, _a = this.groups; _i < _a.length; _i++) {\r\n var group = _a[_i];\r\n var interCols = group.columns\r\n .filter(function (c) { return cols.indexOf(c) >= 0; });\r\n if (interCols.length > 0)\r\n return true;\r\n }\r\n for (var _b = 0, _c = this.aggregates; _b < _c.length; _b++) {\r\n var aggr = _c[_b];\r\n if (cols.indexOf(aggr.colId) >= 0)\r\n return true;\r\n }\r\n return false;\r\n };\r\n AggregationSettings.prototype.needAggrCalculation = function () {\r\n return (this.hasAggregates() || this.hasRecordCount())\r\n && (this.hasGrandTotals() || this.hasGroups());\r\n };\r\n AggregationSettings.prototype.saveToData = function () {\r\n return {\r\n groups: Array.from(this.groups),\r\n ugt: this.useGrandTotals,\r\n urc: this.useRecordCount,\r\n csg: this.caseSensitiveGroups,\r\n aggregates: Array.from(this.aggregates)\r\n };\r\n };\r\n AggregationSettings.prototype.loadFromData = function (data) {\r\n if (data) {\r\n if (typeof data.ugt !== 'undefined')\r\n this.useGrandTotals = data.ugt;\r\n if (typeof data.urc !== 'undefined')\r\n this.useRecordCount = data.urc;\r\n if (typeof data.csg !== 'undefined')\r\n this.caseSensitiveGroups = data.csg;\r\n if (data.groups) {\r\n this.groups = Array.from(data.groups);\r\n }\r\n if (data.aggregates) {\r\n this.aggregates = Array.from(data.aggregates);\r\n }\r\n }\r\n };\r\n AggregationSettings.prototype.buildGroupKey = function (group, row) {\r\n var caseInsensitive = !this.caseSensitiveGroups;\r\n var result = {};\r\n if (group) {\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var colId = _a[_i];\r\n var keyVal = row.getValue(colId);\r\n if (caseInsensitive && typeof (keyVal) === 'string') {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n result[colId] = keyVal;\r\n }\r\n }\r\n return result;\r\n };\r\n //returns true if value1 == value2\r\n AggregationSettings.prototype.strictCompare = function (value1, value2) {\r\n 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 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 return AggregationSettings;\r\n}());\r\nexport { AggregationSettings };\r\n//# sourceMappingURL=aggr_settings.js.map","export var liquid;\r\n(function (liquid) {\r\n function renderLiquidTemplate(template, vars) {\r\n var result = template;\r\n if (vars) {\r\n for (var v in vars) {\r\n var liquidVarRegexp = new RegExp('\\{\\{' + v + '\\}\\}', 'g');\r\n result = result.replace(liquidVarRegexp, vars[v]);\r\n }\r\n }\r\n return result;\r\n }\r\n liquid.renderLiquidTemplate = renderLiquidTemplate;\r\n})(liquid || (liquid = {}));\r\n//# sourceMappingURL=liquid.js.map","var DataRow = /** @class */ (function () {\r\n function DataRow(columns, values) {\r\n this.columns = columns;\r\n this.values = values;\r\n }\r\n DataRow.prototype.toArray = function () {\r\n return Array.from(this.values);\r\n };\r\n DataRow.prototype.size = function () {\r\n return this.values.length;\r\n };\r\n DataRow.prototype.getValue = function (colIdOrIndex) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n return this.values[index];\r\n };\r\n DataRow.prototype.setValue = function (colIdOrIndex, value) {\r\n var index;\r\n if (typeof colIdOrIndex === \"string\") {\r\n index = this.columns.getIndex(colIdOrIndex);\r\n if (index === undefined) {\r\n throw new RangeError(\"No column with id '\" + colIdOrIndex + \"'\");\r\n }\r\n }\r\n else {\r\n index = colIdOrIndex;\r\n }\r\n if (index >= this.values.length)\r\n throw new RangeError(\"Out of range: \" + index);\r\n this.values[index] = value;\r\n };\r\n return DataRow;\r\n}());\r\nexport { DataRow };\r\n//# sourceMappingURL=data_row.js.map","import { DataColumnList } from './data_column';\r\nimport { DataRow } from './data_row';\r\nimport { DataType } from '../types/data_type';\r\nimport { utils } from '../utils/utils';\r\nvar EasyDataTable = /** @class */ (function () {\r\n function EasyDataTable(options) {\r\n this._chunkSize = 1000;\r\n this._elasticChunks = false;\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.loader = null;\r\n this.needTotal = true;\r\n this.isInMemory = false;\r\n options = options || {};\r\n this._chunkSize = options.chunkSize || this._chunkSize;\r\n this._elasticChunks = options.elasticChunks || this._elasticChunks;\r\n this.loader = options.loader;\r\n if (typeof options.inMemory !== 'undefined') {\r\n this.isInMemory = options.inMemory;\r\n }\r\n if (this.isInMemory) {\r\n this.needTotal = false;\r\n }\r\n this._columns = new DataColumnList();\r\n this.onUpdate = options.onUpdate;\r\n if (options.columns) {\r\n for (var _i = 0, _a = options.columns; _i < _a.length; _i++) {\r\n var colDesc = _a[_i];\r\n this._columns.add(colDesc);\r\n }\r\n }\r\n if (options.rows) {\r\n for (var _b = 0, _c = options.rows; _b < _c.length; _b++) {\r\n var rowData = _c[_b];\r\n var row = this.createRow(rowData);\r\n this.addRow(row);\r\n }\r\n }\r\n this.needTotal = !this._elasticChunks;\r\n }\r\n Object.defineProperty(EasyDataTable.prototype, \"columns\", {\r\n get: function () {\r\n return this._columns;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"chunkSize\", {\r\n get: function () {\r\n return this._chunkSize;\r\n },\r\n set: function (value) {\r\n this._chunkSize = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(EasyDataTable.prototype, \"elasticChunks\", {\r\n get: function () {\r\n return this._elasticChunks;\r\n },\r\n set: function (value) {\r\n this._elasticChunks = value;\r\n this.total = 0;\r\n this.needTotal = !this.elasticChunks;\r\n this.cachedRows = [];\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyDataTable.prototype.getRows = function (params) {\r\n var _this = this;\r\n var fromIndex = 0, count = this._chunkSize;\r\n if (params) {\r\n if ('page' in params) {\r\n fromIndex = params.pageSize * (params.page - 1);\r\n count = params.pageSize;\r\n }\r\n else {\r\n fromIndex = params.offset;\r\n count = params.limit;\r\n }\r\n }\r\n var endIndex = fromIndex + count; //the first index of the next page\r\n //if we don't calculate total on this request\r\n if (!this.needTotal && !this.elasticChunks) {\r\n if (fromIndex >= this.total) {\r\n return Promise.resolve([]);\r\n }\r\n if (endIndex > this.total) {\r\n endIndex = this.total;\r\n }\r\n }\r\n if (this.isInMemory && endIndex > this.cachedRows.length) {\r\n endIndex = this.cachedRows.length;\r\n }\r\n var allChunksCached = endIndex <= this.cachedRows.length;\r\n if (allChunksCached) {\r\n return Promise.resolve(this.cachedRows.slice(fromIndex, endIndex));\r\n }\r\n //if loader is not defined\r\n if (!this.loader) {\r\n throw \"Loader is not defined. Can't get the rows from \" + fromIndex + \" to \" + endIndex;\r\n }\r\n // we need total only for the first request\r\n var needTotal = this.needTotal;\r\n if (this.needTotal) {\r\n this.needTotal = false;\r\n }\r\n var offset = this.cachedRows.length;\r\n var limit = endIndex - offset;\r\n if (limit < this._chunkSize) {\r\n limit = this._chunkSize;\r\n }\r\n var resultPromise = this.loader.loadChunk({\r\n offset: offset,\r\n limit: limit,\r\n needTotal: needTotal\r\n })\r\n .then(function (result) {\r\n if (needTotal) {\r\n _this.total = result.total;\r\n }\r\n Array.prototype.push.apply(_this.cachedRows, result.table.getCachedRows());\r\n if (endIndex > _this.cachedRows.length) {\r\n endIndex = _this.cachedRows.length;\r\n }\r\n if (_this.elasticChunks) {\r\n var count_1 = result.table.getCachedCount();\r\n if (count_1 < limit) {\r\n _this.total = _this.cachedRows.length;\r\n }\r\n }\r\n _this.fireUpdated();\r\n return _this.cachedRows.slice(fromIndex, endIndex);\r\n });\r\n return resultPromise;\r\n };\r\n EasyDataTable.prototype.getRow = function (index) {\r\n return this.getRows({ offset: index, limit: 1 })\r\n .then(function (rows) { return rows.length > 0 ? rows[0] : null; });\r\n };\r\n EasyDataTable.prototype.getTotal = function () {\r\n return this.total;\r\n };\r\n EasyDataTable.prototype.setTotal = function (total) {\r\n this.total = total;\r\n this.needTotal = false;\r\n };\r\n EasyDataTable.prototype.getCachedCount = function () {\r\n return this.cachedRows.length;\r\n };\r\n EasyDataTable.prototype.clear = function () {\r\n this.columns.clear();\r\n this.cachedRows = [];\r\n this.total = 0;\r\n this.needTotal = !this._elasticChunks;\r\n this.fireUpdated();\r\n };\r\n EasyDataTable.prototype.createRow = function (dataOrRow) {\r\n var _this = this;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n var values = new Array(this._columns.count);\r\n var getValue = dataOrRow instanceof DataRow\r\n ? function (colId) { return dataOrRow.getValue(colId); }\r\n : function (colId) { return dataOrRow[colId]; };\r\n if (dataOrRow) {\r\n this.columns.getItems().forEach(function (column) {\r\n var value = getValue(column.id);\r\n var index = _this.columns.getIndex(column.id);\r\n values[index] = (dateIdx.indexOf(index) >= 0)\r\n ? _this.mapDate(value, column.type)\r\n : value;\r\n });\r\n }\r\n return new DataRow(this._columns, values);\r\n };\r\n EasyDataTable.prototype.mapDate = function (value, dtype) {\r\n if (value) {\r\n var result = new Date(value);\r\n if (isNaN(result.getTime())\r\n && dtype == DataType.Time) {\r\n result = utils.strToTime(value);\r\n }\r\n return result;\r\n }\r\n return null;\r\n };\r\n EasyDataTable.prototype.addRow = function (rowOrValues) {\r\n var newRow;\r\n if (Array.isArray(rowOrValues)) {\r\n var values = rowOrValues;\r\n var dateIdx = this._columns.getDateColumnIndexes();\r\n if (dateIdx.length > 0) {\r\n for (var _i = 0, dateIdx_1 = dateIdx; _i < dateIdx_1.length; _i++) {\r\n var idx = dateIdx_1[_i];\r\n if (values[idx]) {\r\n values[idx] = this.mapDate(values[idx], this._columns.get(idx).type);\r\n }\r\n }\r\n }\r\n newRow = new DataRow(this._columns, values);\r\n }\r\n else {\r\n newRow = this.createRow(rowOrValues);\r\n }\r\n this.cachedRows.push(newRow);\r\n var cachedTotal = this.getCachedCount();\r\n if (cachedTotal > this.total) {\r\n this.total = cachedTotal;\r\n }\r\n return newRow;\r\n };\r\n EasyDataTable.prototype.getCachedRows = function () {\r\n return this.cachedRows;\r\n };\r\n EasyDataTable.prototype.totalIsKnown = function () {\r\n if (this.elasticChunks) {\r\n var count = this.getCachedCount();\r\n return count === this.total;\r\n }\r\n return !this.needTotal;\r\n };\r\n EasyDataTable.prototype.fireUpdated = function () {\r\n if (this.onUpdate) {\r\n this.onUpdate(this);\r\n }\r\n };\r\n return EasyDataTable;\r\n}());\r\nexport { EasyDataTable };\r\n//# sourceMappingURL=easy_data_table.js.map","/**\r\n * EasyData representation of GUID.\r\n */\r\nvar EasyGuid = /** @class */ (function () {\r\n function EasyGuid() {\r\n }\r\n /**\r\n * Generates new GUID.\r\n * @returns The string representation of GUID.\r\n */\r\n EasyGuid.newGuid = function () {\r\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\r\n var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n return v.toString(16);\r\n });\r\n };\r\n return EasyGuid;\r\n}());\r\nexport { EasyGuid };\r\n//# sourceMappingURL=easy_guid.js.map","import { EasyGuid } from '../utils/easy_guid';\r\n/**\r\n * The representation of event emitter.\r\n */\r\nvar EventEmitter = /** @class */ (function () {\r\n /**\r\n * The default constructor.\r\n * @param source The source.\r\n */\r\n function EventEmitter(source) {\r\n this.silentMode = 0;\r\n this.events = new Array();\r\n this.source = source;\r\n }\r\n /**\r\n * Subscries to the event.\r\n * @param eventType The event type.\r\n * @param callback The callback.\r\n * @returns The subscribtion ID.\r\n */\r\n EventEmitter.prototype.subscribe = function (eventType, callback) {\r\n var event = this.getEventRecByType(eventType);\r\n var eventCallback = {\r\n id: EasyGuid.newGuid(),\r\n callback: callback\r\n };\r\n if (event) {\r\n event.eventCallbacks.push(eventCallback);\r\n }\r\n else {\r\n event = {\r\n type: eventType,\r\n eventCallbacks: new Array(eventCallback)\r\n };\r\n this.events.push(event);\r\n }\r\n return eventCallback.id;\r\n };\r\n /**\r\n * Unsubsribes from the event.\r\n * @param eventType The event type.\r\n * @param callbackId The subscribtion ID.\r\n */\r\n EventEmitter.prototype.unsubscribe = function (eventType, callbackId) {\r\n var event = this.getEventRecByType(eventType);\r\n if (event) {\r\n var index = -1;\r\n for (index = 0; index < event.eventCallbacks.length; index++) {\r\n if (event.eventCallbacks[index].id === callbackId) {\r\n break;\r\n }\r\n }\r\n if (index >= 0) {\r\n event.eventCallbacks.splice(index, 1);\r\n }\r\n }\r\n };\r\n /**\r\n * Fires the event.\r\n * @param eventType The event type.\r\n * @param data The event data.\r\n * @param postpone The postpone.\r\n * @param force To fire force. If value is `true`, ignores silent mode.\r\n */\r\n EventEmitter.prototype.fire = function (eventType, data, postpone, force) {\r\n if (postpone === void 0) { postpone = 0; }\r\n if (force === void 0) { force = false; }\r\n if (this.silentMode && !force) {\r\n return;\r\n }\r\n var eventRec = this.getEventRecByType(eventType);\r\n if (eventRec) {\r\n var eqevent_1 = {\r\n type: eventType,\r\n source: this.source,\r\n data: data\r\n };\r\n var emitAllFunc = function () {\r\n for (var _i = 0, _a = eventRec.eventCallbacks; _i < _a.length; _i++) {\r\n var callback = _a[_i];\r\n callback.callback(eqevent_1);\r\n }\r\n };\r\n if (postpone > 0) {\r\n setTimeout(emitAllFunc, postpone);\r\n }\r\n else {\r\n emitAllFunc();\r\n }\r\n }\r\n };\r\n /**\r\n * Enters to silent mode.\r\n */\r\n EventEmitter.prototype.enterSilentMode = function () {\r\n this.silentMode++;\r\n };\r\n /**\r\n * Exits from silent mode.\r\n */\r\n EventEmitter.prototype.exitSilentMode = function () {\r\n if (this.silentMode) {\r\n this.silentMode--;\r\n }\r\n };\r\n /**\r\n * Checks if emitter is in silent mode.\r\n * @return `true`, if silent mode is enable.\r\n */\r\n EventEmitter.prototype.isSilent = function () {\r\n return this.silentMode > 0;\r\n };\r\n EventEmitter.prototype.getEventRecByType = function (eventType) {\r\n for (var _i = 0, _a = this.events; _i < _a.length; _i++) {\r\n var event_1 = _a[_i];\r\n if (event_1.type == eventType) {\r\n return event_1;\r\n }\r\n }\r\n return null;\r\n };\r\n return EventEmitter;\r\n}());\r\nexport { EventEmitter };\r\n//# sourceMappingURL=event_emitter.js.map","import { i18n } from './i18n';\r\ni18n.resetLocales();\r\n//# sourceMappingURL=load_default_locale_settings.js.map","//types\r\nexport * from './types/data_type';\r\nexport * from './types/entity_attr_kind';\r\nexport * from './types/editor_tag';\r\n//http\r\nexport * from './http/http_method';\r\nexport * from './http/http_request';\r\nexport * from './http/http_client';\r\n//meta data\r\nexport * from './meta/meta_data';\r\nexport * from './meta/meta_entity';\r\nexport * from './meta/value_editor';\r\nexport * from './data/aggr_settings';\r\nexport * from './data/data_column';\r\nexport * from './data/data_row';\r\nexport * from './data/easy_data_table';\r\n//event\r\nexport * from './event/event_emitter';\r\n//i18n\r\nexport * from './i18n/i18n';\r\n//utils\r\nexport * from './utils/easy_guid';\r\nexport * from './utils/string_utils';\r\nexport * from './utils/utils';\r\nexport * from './utils/liquid';\r\nimport './i18n/load_default_locale_settings';\r\nif (typeof Object.values !== 'function') {\r\n Object.values = function (obj) {\r\n return Object.keys(obj).map(function (key) { return obj[key]; });\r\n };\r\n}\r\nif (typeof Math.trunc !== 'function') {\r\n Math.trunc = function (x) {\r\n if (isNaN(x)) {\r\n return NaN;\r\n }\r\n if (x > 0) {\r\n return Math.floor(x);\r\n }\r\n return Math.ceil(x);\r\n };\r\n}\r\n//# sourceMappingURL=public_api.js.map","import { \r\n DataLoader, DataRow, \r\n EasyDataTable, utils as dataUtils \r\n} from '@easydata/core';\r\n\r\nimport { DataFilter } from './data_filter';\r\n\r\nexport class TextDataFilter implements DataFilter {\r\n private filterValue = '';\r\n\r\n //turns off client-side search\r\n //for test purposes\r\n private justServerSide = false;\r\n\r\n constructor (\r\n private loader: DataLoader, \r\n private sourceTable: EasyDataTable, \r\n private sourceId: string,\r\n private isLookup = false) {\r\n }\r\n\r\n public getValue() {\r\n return this.filterValue;\r\n }\r\n \r\n public apply(value: string): Promise<EasyDataTable> {\r\n this.filterValue = value;\r\n\r\n if (this.filterValue) {\r\n return this.applyCore();\r\n }\r\n else {\r\n return this.clear();\r\n }\r\n }\r\n\r\n public clear(): Promise<EasyDataTable> {\r\n this.filterValue = '';\r\n return Promise.resolve(this.sourceTable);\r\n }\r\n\r\n private applyCore(): Promise<EasyDataTable> {\r\n if (this.sourceTable.getTotal() == this.sourceTable.getCachedCount() && !this.justServerSide) {\r\n return this.applyInMemoryFilter();\r\n }\r\n else {\r\n const filters = [\r\n { class: \"__substring\", value: this.filterValue }\r\n ]\r\n return this.loader.loadChunk({ \r\n offset: 0, \r\n limit: this.sourceTable.chunkSize, \r\n needTotal: true, \r\n filters: filters,\r\n sourceId: this.sourceId,\r\n lookup: this.isLookup\r\n } as any)\r\n .then(data => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n loader: {\r\n loadChunk: (params) => this.loader\r\n .loadChunk({ ...params, filters: filters, sourceId: this.sourceId, lookup: this.isLookup } as any)\r\n }\r\n });\r\n\r\n for (const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n }\r\n\r\n filteredTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n filteredTable.addRow(row);\r\n }\r\n\r\n return filteredTable;\r\n })\r\n }\r\n }\r\n\r\n private applyInMemoryFilter(): Promise<EasyDataTable> {\r\n return new Promise((resolve, reject) => {\r\n const filteredTable = new EasyDataTable({\r\n chunkSize: this.sourceTable.chunkSize,\r\n inMemory: true\r\n });\r\n\r\n for(const col of this.sourceTable.columns.getItems()) {\r\n filteredTable.columns.add(col);\r\n } \r\n \r\n const words = this.filterValue.split('||').map(w => w.trim().toLowerCase());\r\n const suitableColumns = this.sourceTable.columns.getItems()\r\n .filter(col => dataUtils.isNumericType(col.type) \r\n || dataUtils.getStringDataTypes().indexOf(col.type) >= 0)\r\n const hasEnterance = (row: DataRow) => {\r\n for (const col of suitableColumns) {\r\n const value = row.getValue(col.id);\r\n if (value) {\r\n const normalized = value.toString().toLowerCase();\r\n\r\n for(const word of words) {\r\n if (normalized.indexOf(word) >= 0) {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n for (const row of this.sourceTable.getCachedRows()) {\r\n if (hasEnterance(row)) {\r\n filteredTable.addRow(row); \r\n }\r\n }\r\n\r\n filteredTable.setTotal(filteredTable.getCachedCount());\r\n\r\n resolve(filteredTable);\r\n });\r\n } \r\n}","import { browserUtils } from './browser_utils';\r\n/**\r\n * Wraps all the elements inside \"parent\" by \"wrapper\" element\r\n * @param parent The element to add wrapper to.\r\n * @param wrapper The element that will wrap child elements.\r\n */\r\nexport function wrapInner(parent, wrapper) {\r\n parent.appendChild(wrapper);\r\n while (parent.firstChild !== wrapper) {\r\n wrapper.appendChild(parent.firstChild);\r\n }\r\n}\r\n/**\r\n * Creates ands adds a new [[HTMLElement]] to \"parent\"\r\n * @param parent The element to add new element to.\r\n * @param tag Html tag of the new element.\r\n * @param options The options. In particular, options.cssClass sets the new element class.\r\n * @returns New element.\r\n */\r\nexport function addElement(parent, tag, options) {\r\n var element = document.createElement(tag);\r\n var opts = options || {};\r\n if (opts.cssClass) {\r\n element.className = opts.cssClass;\r\n }\r\n parent.appendChild(element);\r\n return element;\r\n}\r\n/**\r\n * Adds css class to the html element.\r\n * @param element The element to add css class to.\r\n * @param className The name of the css class to be added.\r\n */\r\nexport function addCssClass(element, className) {\r\n element.className = (element.className)\r\n ? element.className + ' ' + className\r\n : className;\r\n}\r\n/**\r\n * Hides the html element.\r\n * @param element The element to be hidden.\r\n */\r\nexport function hideElement(element) {\r\n element.style.display = 'none';\r\n}\r\n/**\r\n * Shows the html element.\r\n * @param element The element to be shown.\r\n * @param display The value of \"display\" style to be set. Default value is \"block\".\r\n */\r\nexport function showElement(element, display) {\r\n if (!display) {\r\n display = '';\r\n }\r\n element.style.display = display;\r\n}\r\n/**\r\n * Hides the \"first\" element and shows the \"second\".\r\n * @param first The element to be hidden.\r\n * @param second The element to be shown.\r\n * @param options The options. The following options are applied:\r\n * - display - the value of \"display\" style to be set. Default value is \"block\"\r\n * - duration - the duration of fading in and out\r\n * - complete - the callback to be called when toggle is complete\r\n */\r\nexport function toggleVisibility(first, second, options) {\r\n if (!options) {\r\n options = {};\r\n }\r\n if (!options.display) {\r\n options.display = '';\r\n }\r\n if (!options.duration) {\r\n options.duration = 200;\r\n }\r\n //TODO: later we need to make it fading in and out\r\n hideElement(first);\r\n showElement(second, options.display);\r\n if (options.complete) {\r\n options.complete();\r\n }\r\n}\r\n/**\r\n * Checks if element is visible\r\n * @param element The element to check.\r\n * @returns `true` if visible, otherwise - `false`.\r\n */\r\nexport function isVisible(element) {\r\n return element.style.display != 'none'\r\n && element.offsetWidth != 0\r\n && element.offsetHeight != 0;\r\n}\r\nexport function createBrowserEvent(eventName) {\r\n var event;\r\n if (typeof (Event) === 'function') {\r\n event = new Event(eventName);\r\n }\r\n else {\r\n event = document.createEvent('Event');\r\n event.initEvent(eventName, true, true);\r\n }\r\n return event;\r\n}\r\nexport function getViewportSize() {\r\n var width = Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0);\r\n var height = Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0);\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n}\r\nexport function getDocSize() {\r\n if (browserUtils.IsIE())\r\n return getWinSize();\r\n var width = Math.max(document.documentElement.clientWidth, document.body.clientWidth || 0);\r\n var height = Math.max(document.documentElement.clientHeight, document.body.clientHeight || 0);\r\n return {\r\n width: width,\r\n height: height\r\n };\r\n}\r\nexport function getScrollPos() {\r\n var body = document.body;\r\n var docElem = document.documentElement;\r\n return {\r\n top: window.pageYOffset || docElem.scrollTop || body.scrollTop,\r\n left: window.pageXOffset || docElem.scrollLeft || body.scrollLeft\r\n };\r\n}\r\nexport function getElementAbsolutePos(element) {\r\n var res = { x: 0, y: 0 };\r\n if (element !== null) {\r\n var position = offset(element);\r\n res = { x: position.left, y: position.top };\r\n }\r\n return res;\r\n}\r\nfunction offset(element) {\r\n var defaultBoundingClientRect = { top: 0, right: 0, bottom: 0, left: 0, width: 0, height: 0 };\r\n var box;\r\n try {\r\n box = element.getBoundingClientRect();\r\n }\r\n catch (_a) {\r\n box = defaultBoundingClientRect;\r\n }\r\n var body = document.body;\r\n var docElem = document.documentElement;\r\n var scollPos = getScrollPos();\r\n var scrollTop = scollPos.top;\r\n var scrollLeft = scollPos.left;\r\n var clientTop = docElem.clientTop || body.clientTop || 0;\r\n var clientLeft = docElem.clientLeft || body.clientLeft || 0;\r\n var top = box.top + scrollTop - clientTop;\r\n var left = box.left + scrollLeft - clientLeft;\r\n return { top: Math.round(top), left: Math.round(left) };\r\n}\r\nexport function getWinSize() {\r\n return {\r\n width: window.innerWidth,\r\n height: window.innerHeight\r\n };\r\n}\r\nexport function slideDown(target, duration, callback) {\r\n target.style.removeProperty('display');\r\n var display = window.getComputedStyle(target).display;\r\n if (display === 'none')\r\n display = 'block';\r\n target.style.display = display;\r\n var height = target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0 + 'px';\r\n target.style.paddingTop = 0 + 'px';\r\n target.style.paddingBottom = 0 + 'px';\r\n target.style.marginTop = 0 + 'px';\r\n target.style.marginBottom = 0 + 'px';\r\n target.offsetHeight;\r\n target.style.boxSizing = 'border-box';\r\n target.style.transitionProperty = \"height, margin, padding\";\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.height = height + 'px';\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n window.setTimeout(function () {\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n target.style.removeProperty('box-sizing');\r\n if (callback) {\r\n callback();\r\n }\r\n }, duration);\r\n}\r\nexport function slideUp(target, duration, callback) {\r\n target.style.transitionProperty = 'height, margin, padding';\r\n target.style.transitionDuration = duration + 'ms';\r\n target.style.boxSizing = 'border-box';\r\n target.style.height = target.offsetHeight + 'px';\r\n target.offsetHeight;\r\n target.style.overflow = 'hidden';\r\n target.style.height = 0 + 'px';\r\n target.style.paddingTop = 0 + 'px';\r\n target.style.paddingBottom = 0 + 'px';\r\n target.style.marginTop = 0 + 'px';\r\n target.style.marginBottom = 0 + 'px';\r\n window.setTimeout(function () {\r\n target.style.display = 'none';\r\n target.style.removeProperty('height');\r\n target.style.removeProperty('padding-top');\r\n target.style.removeProperty('padding-bottom');\r\n target.style.removeProperty('margin-top');\r\n target.style.removeProperty('margin-bottom');\r\n target.style.removeProperty('overflow');\r\n target.style.removeProperty('transition-duration');\r\n target.style.removeProperty('transition-property');\r\n target.style.removeProperty('box-sizing');\r\n if (callback) {\r\n callback();\r\n }\r\n }, duration);\r\n}\r\nexport var eqCssPrefix = 'eqjs';\r\nexport var eqCssMobile = 'eqjs-mobile';\r\n//# sourceMappingURL=ui-utils.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { mask } from './mask';\r\nvar DomElementBuilder = /** @class */ (function () {\r\n function DomElementBuilder(tag, parent) {\r\n if (typeof tag === \"string\") {\r\n this.element = document.createElement(tag);\r\n }\r\n else {\r\n this.element = tag;\r\n }\r\n if (parent && this.element.parentElement !== parent) {\r\n parent.appendChild(this.element);\r\n }\r\n }\r\n DomElementBuilder.prototype.addChild = function (tag, childBuilder) {\r\n var builder = domel(tag, this.element);\r\n if (childBuilder) {\r\n childBuilder(builder);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.addChildElement = function (element) {\r\n if (element) {\r\n this.element.appendChild(element);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.attr = function (attrId, attrValue) {\r\n this.element.setAttribute(attrId, attrValue);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.id = function (value) {\r\n return this.attr(\"id\", value);\r\n };\r\n DomElementBuilder.prototype.focus = function () {\r\n this.element.focus();\r\n return this;\r\n };\r\n DomElementBuilder.prototype.title = function (value) {\r\n return this.attr('title', value);\r\n };\r\n DomElementBuilder.prototype.data = function (dataId, dataValue) {\r\n if (dataValue === void 0) { dataValue = null; }\r\n if (dataValue === null) {\r\n this.element.removeAttribute('data-' + dataId);\r\n return this;\r\n }\r\n else {\r\n return this.attr('data-' + dataId, dataValue);\r\n }\r\n };\r\n DomElementBuilder.prototype.show = function () {\r\n return this.removeStyle('display');\r\n };\r\n DomElementBuilder.prototype.hide = function (toHide) {\r\n if (toHide === void 0) { toHide = true; }\r\n return (toHide) ? this.setStyle('display', 'none') : this;\r\n };\r\n DomElementBuilder.prototype.visible = function (isVisible) {\r\n if (isVisible === void 0) { isVisible = true; }\r\n return isVisible ? this.setStyle('visibility', 'visible') : this.setStyle('visibility', 'hidden');\r\n };\r\n DomElementBuilder.prototype.isVisible = function () {\r\n return !!(this.element.offsetWidth || this.element.offsetHeight || this.element.getClientRects().length);\r\n };\r\n DomElementBuilder.prototype.addClass = function (className) {\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n if (className) {\r\n var fullList = __spreadArrays(className.trim().split(\" \"), classNames);\r\n for (var i = 0; i < fullList.length; i++)\r\n this.element.classList.add(fullList[i]);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.removeClass = function (className) {\r\n var classNames = [];\r\n for (var _i = 1; _i < arguments.length; _i++) {\r\n classNames[_i - 1] = arguments[_i];\r\n }\r\n if (className) {\r\n var fullList = __spreadArrays(className.trim().split(\" \"), classNames);\r\n for (var i = 0; i < fullList.length; i++)\r\n this.element.classList.remove(fullList[i]);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.toggleClass = function (className, force) {\r\n if (force === void 0) { force = undefined; }\r\n if (className) {\r\n this.element.classList.toggle(className, force);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.on = function (eventType, listener) {\r\n var eventTypes = eventType.split(' ');\r\n for (var i = 0; i < eventTypes.length; i++) {\r\n this.element.addEventListener(eventTypes[i], listener);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.off = function (eventType, listener) {\r\n var eventTypes = eventType.split(' ');\r\n for (var i = 0; i < eventTypes.length; i++) {\r\n this.element.removeEventListener(eventTypes[i], listener);\r\n }\r\n return this;\r\n };\r\n DomElementBuilder.prototype.setStyle = function (styleId, styleValue) {\r\n this.element.style.setProperty(styleId, styleValue);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.removeStyle = function (styleId) {\r\n this.element.style.removeProperty(styleId);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.text = function (text) {\r\n this.element.innerText = text;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.html = function (html) {\r\n this.element.innerHTML = html;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.clear = function () {\r\n var oldElem = this.element;\r\n this.element = document.createElement(this.element.tagName);\r\n oldElem.replaceWith(this.element);\r\n };\r\n DomElementBuilder.prototype.addText = function (text) {\r\n var textEl = document.createTextNode(text);\r\n this.element.appendChild(textEl);\r\n return this;\r\n };\r\n DomElementBuilder.prototype.addHtml = function (html) {\r\n this.element.innerHTML += html;\r\n return this;\r\n };\r\n DomElementBuilder.prototype.toDOM = function () {\r\n return this.element;\r\n };\r\n DomElementBuilder.prototype.appendTo = function (parent) {\r\n if (parent) {\r\n parent.appendChild(this.element);\r\n }\r\n return this;\r\n };\r\n return DomElementBuilder;\r\n}());\r\nexport { DomElementBuilder };\r\nvar DomTextAreaElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomTextAreaElementBuilder, _super);\r\n function DomTextAreaElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"textarea\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomTextAreaElementBuilder.prototype.name = function (value) {\r\n this.element.name = value;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.rows = function (rows) {\r\n this.element.rows = rows;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.cols = function (cols) {\r\n this.element.cols = cols;\r\n return this;\r\n };\r\n DomTextAreaElementBuilder.prototype.value = function (value) {\r\n this.element.value = value;\r\n return this;\r\n };\r\n return DomTextAreaElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomTextAreaElementBuilder };\r\nvar DomInputElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomInputElementBuilder, _super);\r\n function DomInputElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"input\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomInputElementBuilder.prototype.name = function (value) {\r\n this.element.name = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.type = function (value) {\r\n this.element.type = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.size = function (value) {\r\n this.element.size = value;\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.value = function (value) {\r\n if (value instanceof Date) {\r\n this.element.valueAsDate = value;\r\n }\r\n else if (typeof value === \"number\") {\r\n this.element.valueAsNumber = value;\r\n }\r\n else {\r\n this.element.value = value;\r\n }\r\n return this;\r\n };\r\n DomInputElementBuilder.prototype.mask = function (maskPattern) {\r\n mask(this.element, maskPattern);\r\n return this;\r\n };\r\n return DomInputElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomInputElementBuilder };\r\nvar DomSelectElementBuilder = /** @class */ (function (_super) {\r\n __extends(DomSelectElementBuilder, _super);\r\n function DomSelectElementBuilder(element, parent) {\r\n var _this = this;\r\n if (element) {\r\n _this = _super.call(this, element, parent) || this;\r\n }\r\n else {\r\n _this = _super.call(this, \"select\", parent) || this;\r\n }\r\n return _this;\r\n }\r\n DomSelectElementBuilder.prototype.addOption = function (value) {\r\n var option = document.createElement('option');\r\n if (typeof value === \"string\") {\r\n option.value = value;\r\n option.innerHTML = value;\r\n }\r\n else {\r\n option.value = value.value;\r\n option.innerHTML = value.title || value.value;\r\n option.selected = value.selected || false;\r\n }\r\n this.element.appendChild(option);\r\n return this;\r\n };\r\n DomSelectElementBuilder.prototype.value = function (value) {\r\n this.element.value = value;\r\n return this;\r\n };\r\n return DomSelectElementBuilder;\r\n}(DomElementBuilder));\r\nexport { DomSelectElementBuilder };\r\nexport function domel(tag, parent) {\r\n if (tag === \"div\" || tag instanceof HTMLDivElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n if (tag === \"span\" || tag instanceof HTMLSpanElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"a\" || tag instanceof HTMLAnchorElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"button\" || tag instanceof HTMLButtonElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"img\" || tag instanceof HTMLImageElement) {\r\n return new DomElementBuilder(tag, parent);\r\n }\r\n else if (tag === \"input\" || tag instanceof HTMLInputElement) {\r\n return new DomInputElementBuilder(tag instanceof HTMLInputElement ? tag : null, parent);\r\n }\r\n else if (tag === \"textarea\" || tag instanceof HTMLTextAreaElement) {\r\n return new DomTextAreaElementBuilder(tag instanceof HTMLTextAreaElement ? tag : null, parent);\r\n }\r\n else if (tag === \"select\" || tag instanceof HTMLSelectElement) {\r\n return new DomSelectElementBuilder(tag instanceof HTMLSelectElement ? tag : null, parent);\r\n }\r\n return new DomElementBuilder(tag, parent);\r\n}\r\n//# sourceMappingURL=dom_elem_builder.js.map","export function mask(input, maskPattern) {\r\n var d = { 9: '[0-9]', a: '[a-z]' };\r\n var mask = maskPattern.split('');\r\n var keyDownHandler = function (e) {\r\n // backspace key or delete key\r\n if (e.keyCode === 8 || e.keyCode === 46) {\r\n e.preventDefault();\r\n var mskd = [];\r\n var startSelection = input.selectionStart;\r\n if (startSelection == 0)\r\n return;\r\n var selection = startSelection;\r\n var onlyLodash = true;\r\n for (var index = mask.length - 1; index >= 0; index--) {\r\n var el = mask[index];\r\n if (d[el]) {\r\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\r\n if (t && index != startSelection - 1) {\r\n onlyLodash = false;\r\n }\r\n if (index === startSelection - 1)\r\n selection--;\r\n mskd.push(t && index != startSelection - 1\r\n ? input.value.charAt(index)\r\n : '_');\r\n }\r\n else {\r\n if (index === selection - 1)\r\n selection--;\r\n if (startSelection - 1 === index)\r\n startSelection--;\r\n mskd.push(el);\r\n }\r\n }\r\n input.value = !onlyLodash ? mskd.reverse().join('') : '';\r\n input.selectionStart = input.selectionEnd = selection < 0 ? 0 : selection;\r\n var event_1 = document.createEvent('Event');\r\n event_1.initEvent('input', true, true);\r\n input.dispatchEvent(event_1);\r\n }\r\n };\r\n var keyPressHandler = function (e) {\r\n var char = String.fromCharCode(e.charCode);\r\n if (char) {\r\n e.preventDefault();\r\n var mskd_1 = [];\r\n var selectionStart_1 = input.selectionStart;\r\n var selection_1 = selectionStart_1;\r\n mask.forEach(function (el, index) {\r\n if (d[el]) {\r\n var ch = (index != selectionStart_1)\r\n ? input.value.charAt(index)\r\n : char;\r\n var t = new RegExp(d[el], 'i').test(ch);\r\n mskd_1.push(t ? ch : '_');\r\n if (t && selectionStart_1 === index)\r\n selection_1++;\r\n }\r\n else {\r\n mskd_1.push(el);\r\n if (selection_1 === index)\r\n selection_1++;\r\n if (selectionStart_1 === index)\r\n selectionStart_1++;\r\n }\r\n });\r\n input.value = mskd_1.join('');\r\n input.selectionStart = input.selectionEnd = selection_1;\r\n var event_2 = document.createEvent('Event');\r\n event_2.initEvent('input', true, true);\r\n input.dispatchEvent(event_2);\r\n }\r\n };\r\n var inputHandler = function (e) {\r\n if (e.type === 'focus' && input.value !== '')\r\n return;\r\n var mskd = [];\r\n var startSelection = input.selectionStart;\r\n mask.forEach(function (el, index) {\r\n if (d[el]) {\r\n var t = new RegExp(d[el], 'i').test(input.value.charAt(index));\r\n mskd.push(t ? input.value.charAt(index) : '_');\r\n }\r\n else {\r\n mskd.push(el);\r\n }\r\n });\r\n input.value = mskd.join('');\r\n input.selectionStart = input.selectionEnd = startSelection;\r\n };\r\n input.addEventListener('keydown', keyDownHandler);\r\n input.addEventListener('keypress', keyPressHandler);\r\n input.addEventListener('input', inputHandler);\r\n input.addEventListener('focus', inputHandler);\r\n}\r\n//# sourceMappingURL=mask.js.map","import { utils } from '@easydata/core';\r\nimport { getElementAbsolutePos } from './ui-utils';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nvar touchEventIsDefined = typeof TouchEvent !== 'undefined';\r\nexport var DropEffect;\r\n(function (DropEffect) {\r\n DropEffect[\"None\"] = \"none\";\r\n DropEffect[\"Allow\"] = \"allow\";\r\n DropEffect[\"Forbid\"] = \"forbid\";\r\n})(DropEffect || (DropEffect = {}));\r\nvar EqDragEvent = /** @class */ (function () {\r\n function EqDragEvent(item, dragImage, sourceEvent) {\r\n this.dropEffect = DropEffect.Allow;\r\n this.pageX = 0;\r\n this.pageY = 0;\r\n this.item = item;\r\n this.dragImage = dragImage;\r\n this.data = item.data;\r\n this.sourceEvent = sourceEvent;\r\n if (sourceEvent && sourceEvent instanceof MouseEvent) {\r\n this.pageX = sourceEvent.pageX,\r\n this.pageY = sourceEvent.pageY;\r\n }\r\n if (sourceEvent && touchEventIsDefined && sourceEvent instanceof TouchEvent\r\n && sourceEvent.touches[0]) {\r\n this.pageX = sourceEvent.touches[0].pageX,\r\n this.pageY = sourceEvent.touches[0].pageY;\r\n }\r\n }\r\n return EqDragEvent;\r\n}());\r\nexport { EqDragEvent };\r\nvar Position = /** @class */ (function () {\r\n function Position(ev) {\r\n if (ev && ev instanceof MouseEvent) {\r\n this.x = ev.pageX,\r\n this.y = ev.pageY;\r\n }\r\n if (ev && touchEventIsDefined && ev instanceof TouchEvent && ev.touches[0]) {\r\n this.x = ev.touches[0].pageX,\r\n this.y = ev.touches[0].pageY;\r\n }\r\n }\r\n return Position;\r\n}());\r\nvar DragManager = /** @class */ (function () {\r\n function DragManager() {\r\n this.delta = 5;\r\n this.draggableItem = null;\r\n this.dragImage = null;\r\n this.finishedSuccessfully = false;\r\n this.mouseDownPosition = null;\r\n this.containerDescriptors = [];\r\n this.containerDescriptorIndex = -1;\r\n this.dropEffect = DropEffect.None;\r\n this.classPrefix = 'eqjs-drop';\r\n this.DRAG_DISABLED_ATTR = 'drag-disabled';\r\n }\r\n DragManager.prototype.registerDraggableItem = function (descriptor) {\r\n var _this = this;\r\n var element = descriptor.element;\r\n if (!element) {\r\n throw Error(\"Element in draggle item is null or undefined\");\r\n }\r\n element.ondragstart = function () {\r\n return false;\r\n };\r\n var detectDragging = function (ev) {\r\n if (element.hasAttribute(_this.DRAG_DISABLED_ATTR)) {\r\n return;\r\n }\r\n ev.preventDefault();\r\n if (ev instanceof MouseEvent) {\r\n ev.stopPropagation();\r\n }\r\n var cursorPosition = new Position(ev);\r\n if (Math.abs(cursorPosition.x - _this.mouseDownPosition.x) > _this.delta\r\n || Math.abs(cursorPosition.y - _this.mouseDownPosition.y) > _this.delta) {\r\n startDragging(ev);\r\n }\r\n };\r\n var mouseMoveEventListener = function (ev) {\r\n _this.mouseMoveDragListener(ev);\r\n };\r\n var startDragging = function (ev) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n element.removeEventListener('mousemove', detectDragging);\r\n element.removeEventListener('touchmove', detectDragging);\r\n _this.finishedSuccessfully = false;\r\n if (descriptor.beforeDragStart)\r\n descriptor.beforeDragStart();\r\n _this.dragImage = domel('div')\r\n .setStyle('position', 'absolute')\r\n .setStyle('z-index', '65530')\r\n .toDOM();\r\n document.body.appendChild(_this.dragImage);\r\n _this.dragImage.appendChild(element.cloneNode(true));\r\n if (descriptor.renderer) {\r\n descriptor.renderer(_this.dragImage);\r\n }\r\n _this.dropEffect = DropEffect.None;\r\n _this.updateCusror(_this.dropEffect);\r\n _this.updateImageClass(_this.dropEffect);\r\n _this.draggableItem = {\r\n element: element,\r\n scope: descriptor.scope,\r\n data: descriptor.data\r\n };\r\n _this.updateDragItemPosition(ev);\r\n var event = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n event.dropEffect = _this.dropEffect;\r\n if (descriptor.onDragStart) {\r\n descriptor.onDragStart(event);\r\n }\r\n if (_this.dropEffect !== event.dropEffect) {\r\n _this.dropEffect = event.dropEffect;\r\n _this.updateImageClass(_this.dropEffect);\r\n }\r\n document.addEventListener('mousemove', mouseMoveEventListener, true);\r\n document.addEventListener('touchmove', mouseMoveEventListener, true);\r\n };\r\n var mouseDownListener = function (ev) {\r\n if (touchEventIsDefined && ev instanceof TouchEvent) {\r\n ev.preventDefault();\r\n }\r\n _this.mouseDownPosition = new Position(ev);\r\n element.addEventListener('mousemove', detectDragging);\r\n element.addEventListener('touchmove', detectDragging);\r\n document.addEventListener('mouseup', mouseUpListener);\r\n document.addEventListener('touchend', mouseUpListener);\r\n };\r\n element.addEventListener('mousedown', mouseDownListener);\r\n element.addEventListener('touchstart', mouseDownListener);\r\n var mouseUpListener = function (ev) {\r\n _this.mouseDownPosition = null;\r\n element.removeEventListener('mousemove', detectDragging);\r\n element.removeEventListener('touchmove', detectDragging);\r\n document.removeEventListener('mousemove', mouseMoveEventListener, true);\r\n document.removeEventListener('touchmove', mouseMoveEventListener, true);\r\n if (_this.draggableItem) {\r\n endDraggind(ev);\r\n }\r\n };\r\n var endDraggind = function (ev) {\r\n try {\r\n if (_this.containerDescriptorIndex >= 0) {\r\n var dropContDesc = _this.containerDescriptors[_this.containerDescriptorIndex];\r\n var container = {\r\n element: dropContDesc.element,\r\n scopes: dropContDesc.scopes,\r\n data: dropContDesc.data\r\n };\r\n var event_1 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n try {\r\n if (container.scopes.indexOf(_this.draggableItem.scope) >= 0\r\n && _this.dropEffect === DropEffect.Allow) {\r\n _this.finishedSuccessfully = true;\r\n if (dropContDesc.onDrop) {\r\n dropContDesc.onDrop(container, event_1);\r\n }\r\n }\r\n }\r\n finally {\r\n if (dropContDesc.onDragLeave) {\r\n dropContDesc.onDragLeave(container, event_1);\r\n }\r\n }\r\n }\r\n }\r\n finally {\r\n try {\r\n var event_2 = new EqDragEvent(_this.draggableItem, _this.dragImage, ev);\r\n event_2.data.finishedSuccessfully = _this.finishedSuccessfully;\r\n if (descriptor.onDragEnd) {\r\n descriptor.onDragEnd(event_2);\r\n }\r\n }\r\n finally {\r\n _this.draggableItem = null;\r\n if (_this.dragImage && _this.dragImage.parentElement) {\r\n _this.dragImage.parentElement.removeChild(_this.dragImage);\r\n }\r\n _this.dragImage = null;\r\n _this.finishedSuccessfully = false;\r\n document.removeEventListener('mouseup', mouseUpListener);\r\n document.removeEventListener('touchend', mouseUpListener);\r\n }\r\n }\r\n };\r\n };\r\n DragManager.prototype.registerDropContainer = function (descriptor) {\r\n var element = descriptor.element;\r\n if (!element) {\r\n throw Error(\"Element in drop container is null or undefined\");\r\n }\r\n this.containerDescriptors.push(descriptor);\r\n };\r\n DragManager.prototype.removeDropContainer = function (descriptorOrSlot) {\r\n var descs = this.containerDescriptors\r\n .filter(function (desc) { return desc === descriptorOrSlot\r\n || desc.element == descriptorOrSlot; });\r\n if (descs) {\r\n for (var _i = 0, descs_1 = descs; _i < descs_1.length; _i++) {\r\n var desc = descs_1[_i];\r\n utils.removeArrayItem(this.containerDescriptors, desc);\r\n }\r\n }\r\n };\r\n DragManager.prototype.mouseMoveDragListener = function (ev) {\r\n if (ev instanceof MouseEvent) {\r\n ev.preventDefault();\r\n }\r\n ev.stopPropagation();\r\n this.updateDragItemPosition(ev);\r\n if (this.containerDescriptorIndex == -1) {\r\n for (var i = 0; i < this.containerDescriptors.length; i++) {\r\n var descriptor = this.containerDescriptors[i];\r\n if (this.detectDragEnterEvent(descriptor.element, ev)) {\r\n this.containerDescriptorIndex = i;\r\n break;\r\n }\r\n }\r\n if (this.containerDescriptorIndex >= 0) {\r\n this.dragEnterEvent(ev);\r\n }\r\n }\r\n else {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n if (this.detectDragLeaveEvent(descriptor.element, ev)) {\r\n this.dragLeaveEvent(ev);\r\n this.containerDescriptorIndex = -1;\r\n }\r\n }\r\n if (this.containerDescriptorIndex >= 0) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_3 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_3.dropEffect = this.dropEffect;\r\n if (descriptor.onDragOver) {\r\n descriptor.onDragOver(container, event_3);\r\n }\r\n }\r\n }\r\n };\r\n DragManager.prototype.updateCusror = function (dropEffect) {\r\n switch (dropEffect) {\r\n case DropEffect.Allow:\r\n this.setCursorStyle(this.dragImage, 'grabbing');\r\n break;\r\n case DropEffect.Forbid:\r\n this.setCursorStyle(this.dragImage, 'no-drop');\r\n break;\r\n default:\r\n this.setCursorStyle(this.dragImage, 'grabbing');\r\n break;\r\n }\r\n };\r\n DragManager.prototype.updateImageClass = function (dropEffect) {\r\n this.dragImage.classList.remove(this.classPrefix + \"-allow\");\r\n this.dragImage.classList.remove(this.classPrefix + \"-forbid\");\r\n this.dragImage.classList.remove(this.classPrefix + \"-none\");\r\n switch (dropEffect) {\r\n case DropEffect.Allow:\r\n this.dragImage.classList.add(this.classPrefix + \"-allow\");\r\n break;\r\n case DropEffect.None:\r\n this.dragImage.classList.add(this.classPrefix + \"-none\");\r\n break;\r\n case DropEffect.Forbid:\r\n this.dragImage.classList.add(this.classPrefix + \"-forbid\");\r\n break;\r\n default:\r\n this.dragImage.classList.add(this.classPrefix + \"-none\");\r\n break;\r\n }\r\n };\r\n DragManager.prototype.setCursorStyle = function (element, cursor) {\r\n if (element) {\r\n element.style.cursor = cursor;\r\n for (var i = 0; i < element.children.length; i++) {\r\n this.setCursorStyle(element.children[i], cursor);\r\n }\r\n }\r\n };\r\n DragManager.prototype.updateDragItemPosition = function (ev) {\r\n if (this.dragImage) {\r\n var pos = new Position(ev);\r\n this.dragImage.style.top = (pos.y - this.dragImage.offsetHeight / 2) + 'px';\r\n this.dragImage.style.left = (pos.x - this.dragImage.offsetWidth / 2) + 'px';\r\n }\r\n };\r\n DragManager.prototype.dragEnterEvent = function (ev) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_4 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_4.dropEffect = DropEffect.Allow;\r\n if (descriptor.onDragEnter) {\r\n descriptor.onDragEnter(container, event_4);\r\n }\r\n this.dropEffect = event_4.dropEffect;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n else {\r\n if (this.dropEffect !== DropEffect.Forbid) {\r\n this.dropEffect = DropEffect.None;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n }\r\n };\r\n DragManager.prototype.dragLeaveEvent = function (ev) {\r\n var descriptor = this.containerDescriptors[this.containerDescriptorIndex];\r\n var container = {\r\n element: descriptor.element,\r\n scopes: descriptor.scopes,\r\n data: descriptor.data\r\n };\r\n if (container.scopes.indexOf(this.draggableItem.scope) >= 0) {\r\n var event_5 = new EqDragEvent(this.draggableItem, this.dragImage, ev);\r\n event_5.dropEffect = DropEffect.None;\r\n if (descriptor.onDragLeave) {\r\n descriptor.onDragLeave(container, event_5);\r\n }\r\n this.dropEffect = event_5.dropEffect;\r\n this.updateCusror(this.dropEffect);\r\n this.updateImageClass(this.dropEffect);\r\n }\r\n };\r\n DragManager.prototype.detectDragEnterEvent = function (container, ev) {\r\n var containerPos = getElementAbsolutePos(container);\r\n var pos = new Position(ev);\r\n if (pos.y < containerPos.y || pos.y > containerPos.y + container.offsetHeight) {\r\n return false;\r\n }\r\n if (pos.x < containerPos.x || pos.x > containerPos.x + container.offsetWidth) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n DragManager.prototype.detectDragLeaveEvent = function (container, ev) {\r\n var containerPos = getElementAbsolutePos(container);\r\n var pos = new Position(ev);\r\n if (pos.y > containerPos.y && pos.y < containerPos.y + container.offsetHeight\r\n && pos.x > containerPos.x && pos.x < containerPos.x + container.offsetWidth) {\r\n return false;\r\n }\r\n return true;\r\n };\r\n return DragManager;\r\n}());\r\nexport { DragManager };\r\n//global variable\r\nexport var eqDragManager = new DragManager();\r\n//# sourceMappingURL=drag_manager.js.map","export var AutoResizeColumns;\r\n(function (AutoResizeColumns) {\r\n AutoResizeColumns[AutoResizeColumns[\"Always\"] = 0] = \"Always\";\r\n AutoResizeColumns[AutoResizeColumns[\"Once\"] = 1] = \"Once\";\r\n AutoResizeColumns[AutoResizeColumns[\"Never\"] = 2] = \"Never\";\r\n})(AutoResizeColumns || (AutoResizeColumns = {}));\r\n//# sourceMappingURL=easy_grid_options.js.map","import { i18n, DataType } from '@easydata/core';\r\nimport { GridColumnAlign } from './easy_grid_columns';\r\nvar cssPrefix = \"keg\";\r\nexport var DFMT_REGEX = /{0:(.*?)}/g;\r\nexport var CellRendererType;\r\n(function (CellRendererType) {\r\n CellRendererType[CellRendererType[\"STRING\"] = 1] = \"STRING\";\r\n CellRendererType[CellRendererType[\"NUMBER\"] = 2] = \"NUMBER\";\r\n CellRendererType[CellRendererType[\"DATETIME\"] = 3] = \"DATETIME\";\r\n CellRendererType[CellRendererType[\"BOOL\"] = 4] = \"BOOL\";\r\n})(CellRendererType || (CellRendererType = {}));\r\nvar StringCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var text = value ? value.toString().replace(/\\n/g, '\\u21B5 ') : '';\r\n cellValueElement.innerText = text;\r\n cellValueElement.title = text;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-left\");\r\n }\r\n};\r\nvar NumberCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var strValue = (value || '').toString();\r\n if (typeof value == 'number') {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n strValue = value.toLocaleString();\r\n }\r\n }\r\n cellValueElement.innerText = strValue;\r\n cellValueElement.title = strValue;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar DateTimeCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n var isDate = Object.prototype.toString.call(value) === '[object Date]';\r\n var strValue = (value || '').toString();\r\n if (isDate) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.dateTimeToStr(value, column.type, $1);\r\n });\r\n }\r\n else {\r\n var locale = i18n.getCurrentLocale();\r\n var timeOptions = { hour: 'numeric', minute: 'numeric', second: 'numeric' };\r\n switch (column.type) {\r\n case DataType.Date:\r\n strValue = value.toLocaleDateString(locale);\r\n break;\r\n case DataType.Time:\r\n strValue = value.toLocaleTimeString(locale, timeOptions);\r\n break;\r\n case DataType.DateTime:\r\n strValue = value.toLocaleDateString(locale) + \" \" + value.toLocaleTimeString(locale, timeOptions);\r\n break;\r\n }\r\n }\r\n }\r\n cellValueElement.innerText = strValue;\r\n cellValueElement.title = strValue;\r\n if (column.align == GridColumnAlign.NONE) {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar BoolCellRendererDefault = function (value, column, cellValueElement, rowElement) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n var strValue = column.dataColumn.displayFormat.replace(DFMT_REGEX, function (_, $1) {\r\n return i18n.booleanToStr(value, $1);\r\n });\r\n return StringCellRendererDefault(strValue, column, cellValueElement, rowElement);\r\n }\r\n else {\r\n cellValueElement.classList.add(cssPrefix + \"-cell-value-bool\");\r\n cellValueElement.classList.add(cssPrefix + \"-\" + (value ? 'cell-value-true' : 'cell-value-false'));\r\n }\r\n};\r\nvar GridCellRendererStore = /** @class */ (function () {\r\n function GridCellRendererStore(options) {\r\n this.renderers = {};\r\n this.defaultRenderers = {};\r\n this.registerRenderer('StringDefault', StringCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.STRING, StringCellRendererDefault);\r\n this.registerRenderer('NumberDefault', NumberCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.NUMBER, NumberCellRendererDefault);\r\n this.registerRenderer('DateTimeDefault', DateTimeCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.DATETIME, DateTimeCellRendererDefault);\r\n this.registerRenderer('BoolDefault', BoolCellRendererDefault);\r\n this.setDefaultRenderer(CellRendererType.BOOL, BoolCellRendererDefault);\r\n }\r\n GridCellRendererStore.prototype.getDefaultRenderer = function (columnType) {\r\n var cellType = this.getCellType(columnType);\r\n return this.defaultRenderers[CellRendererType[cellType]];\r\n };\r\n GridCellRendererStore.prototype.getDefaultRendererByType = function (rendererType) {\r\n return this.defaultRenderers[CellRendererType[rendererType]];\r\n };\r\n GridCellRendererStore.prototype.setDefaultRenderer = function (cellType, renderer) {\r\n if (renderer) {\r\n this.defaultRenderers[CellRendererType[cellType]] = renderer;\r\n }\r\n };\r\n GridCellRendererStore.prototype.getRenderer = function (name) {\r\n return this.renderers[name];\r\n };\r\n GridCellRendererStore.prototype.registerRenderer = function (name, renderer) {\r\n this.renderers[name] = renderer;\r\n };\r\n GridCellRendererStore.prototype.getCellType = function (dataType) {\r\n switch (dataType) {\r\n case DataType.Autoinc:\r\n case DataType.Byte:\r\n case DataType.Word:\r\n case DataType.Currency:\r\n case DataType.Float:\r\n case DataType.Int32:\r\n case DataType.Int64:\r\n return CellRendererType.NUMBER;\r\n case DataType.Date:\r\n case DataType.DateTime:\r\n case DataType.Time:\r\n return CellRendererType.DATETIME;\r\n case DataType.Bool:\r\n return CellRendererType.BOOL;\r\n default:\r\n return CellRendererType.STRING;\r\n }\r\n };\r\n return GridCellRendererStore;\r\n}());\r\nexport { GridCellRendererStore };\r\n//# sourceMappingURL=easy_grid_cell_renderer.js.map","import { utils, ColumnAlignment } from '@easydata/core';\r\nimport { CellRendererType } from \"./easy_grid_cell_renderer\";\r\nvar DEFAULT_WIDTH_STRING = 250;\r\nvar ROW_NUM_WIDTH = 60;\r\nexport var GridColumnAlign;\r\n(function (GridColumnAlign) {\r\n GridColumnAlign[GridColumnAlign[\"NONE\"] = 1] = \"NONE\";\r\n GridColumnAlign[GridColumnAlign[\"LEFT\"] = 2] = \"LEFT\";\r\n GridColumnAlign[GridColumnAlign[\"CENTER\"] = 3] = \"CENTER\";\r\n GridColumnAlign[GridColumnAlign[\"RIGHT\"] = 4] = \"RIGHT\";\r\n})(GridColumnAlign || (GridColumnAlign = {}));\r\nfunction MapAlignment(alignment) {\r\n switch (alignment) {\r\n case ColumnAlignment.Left:\r\n return GridColumnAlign.LEFT;\r\n case ColumnAlignment.Center:\r\n return GridColumnAlign.CENTER;\r\n case ColumnAlignment.Right:\r\n return GridColumnAlign.RIGHT;\r\n default:\r\n return GridColumnAlign.NONE;\r\n }\r\n}\r\nvar GridColumn = /** @class */ (function () {\r\n function GridColumn(column, grid, isRowNum) {\r\n if (isRowNum === void 0) { isRowNum = false; }\r\n this._label = null;\r\n this._description = null;\r\n //public left: number;\r\n this.align = GridColumnAlign.NONE;\r\n this.isVisible = true;\r\n this.isRowNum = false;\r\n this.dataColumn = column;\r\n this.grid = grid;\r\n var widthOptions = grid.options.columnWidths || {};\r\n if (column) {\r\n if (column.style.alignment) {\r\n this.align = MapAlignment(column.style.alignment);\r\n }\r\n this.width = (widthOptions && widthOptions[this.type]) ? widthOptions[this.type].default : DEFAULT_WIDTH_STRING;\r\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);\r\n this._description = column.description;\r\n }\r\n else if (isRowNum) {\r\n this.isRowNum = true;\r\n this.width = (widthOptions && widthOptions.rowNumColumn) ? widthOptions.rowNumColumn.default : ROW_NUM_WIDTH;\r\n this._label = '';\r\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRendererByType(CellRendererType.NUMBER);\r\n }\r\n if (grid && grid.options && grid.options.onGetCellRenderer) {\r\n this.cellRenderer = grid.options.onGetCellRenderer(this, this.cellRenderer) || this.cellRenderer;\r\n }\r\n }\r\n Object.defineProperty(GridColumn.prototype, \"label\", {\r\n get: function () {\r\n return this._label ? this._label : this.isRowNum ? '' : this.dataColumn.label;\r\n },\r\n set: function (value) {\r\n this._label = this.label;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n ;\r\n Object.defineProperty(GridColumn.prototype, \"description\", {\r\n /** Get column description. */\r\n get: function () {\r\n return this._description;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(GridColumn.prototype, \"type\", {\r\n get: function () {\r\n return this.dataColumn ? this.dataColumn.type : null;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n return GridColumn;\r\n}());\r\nexport { GridColumn };\r\nvar GridColumnList = /** @class */ (function () {\r\n function GridColumnList(columnList, grid) {\r\n this.items = [];\r\n this.grid = grid;\r\n this.sync(columnList);\r\n }\r\n GridColumnList.prototype.sync = function (columnList, hasRowNumCol) {\r\n if (hasRowNumCol === void 0) { hasRowNumCol = true; }\r\n this.clear();\r\n var rowNumCol = new GridColumn(null, this.grid, true);\r\n this.add(rowNumCol);\r\n if (!hasRowNumCol) {\r\n rowNumCol.isVisible = false;\r\n }\r\n if (columnList) {\r\n for (var _i = 0, _a = columnList.getItems(); _i < _a.length; _i++) {\r\n var column = _a[_i];\r\n var col = new GridColumn(column, this.grid);\r\n if (this.grid.options.onSyncGridColumn) {\r\n this.grid.options.onSyncGridColumn(col);\r\n }\r\n this.add(col);\r\n }\r\n }\r\n };\r\n Object.defineProperty(GridColumnList.prototype, \"count\", {\r\n get: function () {\r\n return this.items.length;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n GridColumnList.prototype.add = function (col) {\r\n var index = this.items.length;\r\n this.items.push(col);\r\n return index;\r\n };\r\n GridColumnList.prototype.put = function (index, col) {\r\n if (index >= 0 && index < this.items.length) {\r\n this.items[index] = col;\r\n }\r\n };\r\n GridColumnList.prototype.move = function (col, newIndex) {\r\n var oldIndex = this.items.indexOf(col);\r\n if (oldIndex >= 0 && oldIndex != newIndex)\r\n utils.moveArrayItem(this.items, oldIndex, newIndex);\r\n };\r\n GridColumnList.prototype.get = function (index) {\r\n if (index >= 0 && index < this.items.length) {\r\n return this.items[index];\r\n }\r\n else {\r\n return null;\r\n }\r\n };\r\n // public getIndex(name: string) : number {\r\n // return this.mapper[name];\r\n // }\r\n GridColumnList.prototype.getItems = function () {\r\n return this.items;\r\n };\r\n GridColumnList.prototype.removeAt = function (index) {\r\n var col = this.get(index);\r\n this.items.splice(index, 1);\r\n //delete this.mapper[col.name];\r\n };\r\n GridColumnList.prototype.clear = function () {\r\n this.items = [];\r\n //this.mapper = {};\r\n };\r\n return GridColumnList;\r\n}());\r\nexport { GridColumnList };\r\n//# sourceMappingURL=easy_grid_columns.js.map","export var DialogFooterAlignment;\r\n(function (DialogFooterAlignment) {\r\n DialogFooterAlignment[DialogFooterAlignment[\"Left\"] = 1] = \"Left\";\r\n DialogFooterAlignment[DialogFooterAlignment[\"Center\"] = 2] = \"Center\";\r\n DialogFooterAlignment[DialogFooterAlignment[\"Right\"] = 3] = \"Right\";\r\n})(DialogFooterAlignment || (DialogFooterAlignment = {}));\r\n//# sourceMappingURL=dialog_service.js.map","var __assign = (this && this.__assign) || function () {\r\n __assign = Object.assign || function(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\r\n t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n};\r\nvar __spreadArrays = (this && this.__spreadArrays) || function () {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\nimport { EventEmitter, DataRow, utils, i18n, DataType } from '@easydata/core';\r\nimport { eqDragManager, DropEffect } from '../utils/drag_manager';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { getElementAbsolutePos, eqCssPrefix } from '../utils/ui-utils';\r\nimport { AutoResizeColumns } from './easy_grid_options';\r\nimport { GridColumnList, GridColumnAlign } from './easy_grid_columns';\r\nimport { GridCellRendererStore } from './easy_grid_cell_renderer';\r\nvar DEFAULT_ROW_HEIGHT = 36;\r\nvar DEFAULT_ROW_COUNT = 15;\r\n/** Represents a grid widget with columns rows, paging, custom rendering and more */\r\nvar EasyGrid = /** @class */ (function () {\r\n /** Creates and initializes all internal properties of the grid object */\r\n function EasyGrid(options) {\r\n this.cssPrefix = \"keg\";\r\n this.pagination = { page: 1, pageSize: 30, total: 0 };\r\n this.paginationOptions = {\r\n maxButtonCount: 10,\r\n useBootstrap: false //true\r\n };\r\n this.defaultDataGridOptions = {\r\n slot: null,\r\n dataTable: null,\r\n fixHeightOnFirstRender: false,\r\n syncGridColumns: true,\r\n useRowNumeration: true,\r\n allowDragDrop: false,\r\n aggregates: {\r\n settings: null,\r\n calculator: null\r\n },\r\n paging: {\r\n enabled: true,\r\n pageSize: 30,\r\n pageSizeItems: [20, 30, 50, 100, 200]\r\n },\r\n columnWidths: {\r\n autoResize: AutoResizeColumns.Always,\r\n stringColumns: {\r\n min: 100,\r\n max: 500,\r\n default: 250\r\n },\r\n numberColumns: {\r\n min: 60,\r\n default: 120\r\n },\r\n boolColumns: {\r\n min: 50,\r\n default: 80\r\n },\r\n dateColumns: {\r\n min: 80,\r\n default: 200\r\n },\r\n otherColumns: {\r\n min: 100,\r\n max: 500,\r\n default: 250\r\n },\r\n rowNumColumn: {\r\n min: 40,\r\n default: 60\r\n }\r\n },\r\n showPlusButton: false,\r\n viewportRowsCount: null,\r\n showActiveRow: true\r\n };\r\n this.rowsOnPagePromise = null;\r\n this.containerInitialHeight = 0;\r\n this.firstRender = true;\r\n this.prevRowTotals = null;\r\n this.landingIndex = -1;\r\n this.landingSlot = domel('div')\r\n .addClass(this.cssPrefix + \"-col-landing-slot\")\r\n .addChildElement(domel('div')\r\n .toDOM())\r\n .toDOM();\r\n this._activeRowIndex = -1;\r\n if (options && options.paging) {\r\n options.paging = utils.assign(this.defaultDataGridOptions.paging, options.paging);\r\n }\r\n this.options = this.mergeOptions(options);\r\n this.processColumnWidthsOptions();\r\n if (!this.options.slot)\r\n throw Error('\"slot\" parameter is required to initialize EasyDataGrid');\r\n if (!this.options.dataTable)\r\n throw Error('\"dataTable\" parameter is required to initialize EasyDataGrid');\r\n this.dataTable = options.dataTable;\r\n this.eventEmitter = new EventEmitter(this);\r\n this.cellRendererStore = new GridCellRendererStore(options);\r\n this.columns = new GridColumnList(this.dataTable.columns, this);\r\n this.setSlot(this.options.slot);\r\n this.init(this.options);\r\n }\r\n EasyGrid.prototype.mergeOptions = function (options) {\r\n var colWidthOptions = utils.assignDeep({}, this.defaultDataGridOptions.columnWidths, options.columnWidths);\r\n var pagingOptions = utils.assignDeep({}, this.defaultDataGridOptions.paging, options.paging);\r\n var result = utils.assign({}, this.defaultDataGridOptions, options);\r\n result.columnWidths = colWidthOptions;\r\n result.paging = pagingOptions;\r\n return result;\r\n };\r\n EasyGrid.prototype.processColumnWidthsOptions = function () {\r\n var widthOptions = this.options.columnWidths;\r\n if (!widthOptions)\r\n return;\r\n //string columns\r\n utils.getStringDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.stringColumns), widthOptions[dataType]);\r\n });\r\n //numeric columns\r\n utils.getNumericDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.numberColumns), widthOptions[dataType]);\r\n });\r\n //bool columns\r\n widthOptions[DataType.Bool] = __assign(__assign({}, widthOptions.boolColumns), widthOptions[DataType.Bool]);\r\n //date columns\r\n utils.getDateDataTypes().forEach(function (dataType) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.dateColumns), widthOptions[dataType]);\r\n });\r\n //other columns\r\n var knownTypes = __spreadArrays(utils.getStringDataTypes(), utils.getNumericDataTypes(), utils.getDateDataTypes(), [\r\n DataType.Bool\r\n ]);\r\n utils.getAllDataTypes().forEach(function (dataType) {\r\n if (!(dataType in knownTypes)) {\r\n widthOptions[dataType] = __assign(__assign({}, widthOptions.otherColumns), widthOptions[dataType]);\r\n }\r\n });\r\n widthOptions[DataType.Unknown] = widthOptions.otherColumns;\r\n };\r\n EasyGrid.prototype.setSlot = function (slot) {\r\n if (typeof slot === 'string') {\r\n if (slot.length) {\r\n if (slot[0] === '#') {\r\n this.slot = document.getElementById(slot.substring(1));\r\n }\r\n else if (slot[0] === '.') {\r\n var result = document.getElementsByClassName(slot.substring(1));\r\n if (result.length)\r\n this.slot = result[0];\r\n }\r\n else {\r\n throw Error('Unrecognized slot parameter ' +\r\n '(Must be id, class or HTMLElement): ' + slot);\r\n }\r\n }\r\n }\r\n else {\r\n this.slot = slot;\r\n }\r\n };\r\n /** Initializes grid widget according to the options passed in the parameter */\r\n EasyGrid.prototype.init = function (options) {\r\n var _this = this;\r\n if (options.onInit) {\r\n this.addEventListener('init', options.onInit);\r\n }\r\n if (options.onRowClick) {\r\n this.addEventListener('rowClick', options.onRowClick);\r\n }\r\n if (options.onRowDbClick) {\r\n this.addEventListener('rowDbClick', options.onRowDbClick);\r\n }\r\n if (options.onPlusButtonClick) {\r\n this.addEventListener('plusButtonClick', options.onPlusButtonClick);\r\n }\r\n if (options.onColumnChanged) {\r\n this.addEventListener('columnChanged', options.onColumnChanged);\r\n }\r\n if (options.onColumnDeleted) {\r\n this.addEventListener('columnDeleted', options.onColumnDeleted);\r\n }\r\n if (options.onColumnMoved) {\r\n this.addEventListener('columnMoved', options.onColumnMoved);\r\n }\r\n if (options.onPageChanged) {\r\n this.addEventListener('pageChanged', options.onPageChanged);\r\n }\r\n if (options.onActiveRowChanged) {\r\n this.addEventListener('activeRowChanged', options.onActiveRowChanged);\r\n }\r\n this.addEventListener('pageChanged', function (ev) { return _this.activeRowIndex = -1; });\r\n utils.assignDeep(this.paginationOptions, options.pagination);\r\n this.pagination.pageSize = this.options.paging.pageSize\r\n || this.pagination.pageSize;\r\n if (this.options.allowDragDrop) {\r\n eqDragManager.registerDropContainer({\r\n element: this.slot,\r\n scopes: [\"gridColumnMove\"],\r\n onDragEnter: function (_, ev) {\r\n _this.slot.classList.add(eqCssPrefix + \"-drophover\");\r\n _this.showLandingSlot(ev.pageX, ev.pageY);\r\n },\r\n onDragOver: function (_, ev) {\r\n _this.showLandingSlot(ev.pageX, ev.pageY);\r\n },\r\n onDragLeave: function (_, ev) {\r\n ev.dropEffect = DropEffect.Forbid;\r\n _this.slot.classList.remove(eqCssPrefix + \"-drophover\");\r\n _this.hideLandingSlot();\r\n },\r\n onDrop: function (_, ev) {\r\n _this.dataTable.columns.move(ev.data.column, _this.landingIndex);\r\n _this.refresh();\r\n _this.fireEvent({\r\n type: 'columnMoved',\r\n columnId: ev.data.column.id,\r\n newIndex: _this.landingIndex\r\n });\r\n }\r\n });\r\n }\r\n this.refresh();\r\n this.fireEvent('init');\r\n };\r\n /** Fires a grid event. You can pass either an event type\r\n * (like 'init', 'rowClick', 'pageChanged', etc )\r\n * or a ready-to-use grid event object\r\n * */\r\n EasyGrid.prototype.fireEvent = function (event) {\r\n if (typeof event === \"string\") {\r\n this.eventEmitter.fire(event);\r\n }\r\n else {\r\n this.eventEmitter.fire(event.type, event);\r\n }\r\n };\r\n /** Allows to set the data (represented by a EasyDataTable object)\r\n * or to replace the existing one associated with the grid */\r\n EasyGrid.prototype.setData = function (data) {\r\n this.dataTable = data;\r\n this.clear();\r\n this.refresh();\r\n };\r\n /** Returns the EasyDataTable object associated with the grid via `setData()` call */\r\n EasyGrid.prototype.getData = function () {\r\n return this.dataTable;\r\n };\r\n /** Gets the list of grid columns */\r\n EasyGrid.prototype.getColumns = function () {\r\n return this.columns;\r\n };\r\n /** This function is called when the grid is destroyed */\r\n EasyGrid.prototype.destroy = function () {\r\n this.slot.innerHTML = \"\";\r\n };\r\n /** Clears the current DOM object and re-renders everything from the scratch */\r\n EasyGrid.prototype.refresh = function () {\r\n this.clearDOM();\r\n this.render();\r\n };\r\n EasyGrid.prototype.clearDOM = function () {\r\n this.slot.innerHTML = '';\r\n };\r\n /** Clears all DOM object in the grid and return it to its initial state */\r\n EasyGrid.prototype.clear = function () {\r\n this.pagination.page = 1;\r\n this.clearDOM();\r\n };\r\n /** Renders the grid */\r\n EasyGrid.prototype.render = function () {\r\n var _this = this;\r\n if (!this.hasData() && !this.options.showPlusButton)\r\n return;\r\n this.containerInitialHeight = this.slot.clientHeight;\r\n this.rootDiv = document.createElement('div');\r\n this.rootDiv.style.width = '100%';\r\n this.rootDiv.classList.add(this.cssPrefix + \"-root\");\r\n this.columns.sync(this.dataTable.columns, this.options.useRowNumeration);\r\n this.renderHeader();\r\n this.rootDiv.appendChild(this.headerDiv);\r\n this.renderBody();\r\n this.rootDiv.appendChild(this.bodyDiv);\r\n this.renderFooter();\r\n this.rootDiv.appendChild(this.footerDiv);\r\n var gridContainer = document.createElement('div');\r\n gridContainer.classList.add(this.cssPrefix + \"-container\");\r\n gridContainer.appendChild(this.rootDiv);\r\n this.slot.appendChild(gridContainer);\r\n var needAutoResize = this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\r\n if (this.rowsOnPagePromise) {\r\n this.rowsOnPagePromise\r\n .then(function () { return _this.updateHeight(); })\r\n .then(function () {\r\n _this.firstRender = false;\r\n _this.rowsOnPagePromise = null;\r\n });\r\n }\r\n else {\r\n setTimeout(function () {\r\n _this.updateHeight()\r\n .then(function () {\r\n _this.firstRender = false;\r\n if (needAutoResize) {\r\n _this.resizeColumns();\r\n }\r\n });\r\n }, 100);\r\n }\r\n };\r\n EasyGrid.prototype.updateHeight = function () {\r\n var _this = this;\r\n return new Promise(function (resolve) {\r\n if (_this.options.viewportRowsCount) {\r\n var firstRow = _this.bodyCellContainerDiv.firstElementChild;\r\n var rowHeight = firstRow ? firstRow.offsetHeight : DEFAULT_ROW_HEIGHT;\r\n var rowCount = _this.options.viewportRowsCount; // || DEFAULT_ROW_COUNT;\r\n var viewportHeight_1 = rowHeight * rowCount;\r\n domel(_this.bodyViewportDiv)\r\n .setStyle('height', viewportHeight_1 + \"px\");\r\n setTimeout(function () {\r\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\r\n viewportHeight_1 = viewportHeight_1 + sbHeight;\r\n domel(_this.bodyViewportDiv)\r\n .setStyle('height', viewportHeight_1 + \"px\");\r\n resolve();\r\n }, 100);\r\n return;\r\n }\r\n else if (_this.containerInitialHeight > 0) {\r\n // comment for now since it does not work in all cases\r\n // const bodyHeight = this.containerInitialHeight - this.headerDiv.offsetHeight - this.footerDiv.offsetHeight;\r\n // domel(this.bodyDiv)\r\n // .setStyle('height', `${bodyHeight}px`);\r\n }\r\n resolve();\r\n })\r\n .then(function () {\r\n if (_this.options.fixHeightOnFirstRender && _this.firstRender) {\r\n _this.slot.style.height = _this.slot.offsetHeight + \"px\";\r\n }\r\n });\r\n };\r\n EasyGrid.prototype.getContainerWidth = function () {\r\n return this.columns.getItems()\r\n .filter(function (col) { return col.isVisible; })\r\n .map(function (col) { return col.width; })\r\n .reduce(function (sum, current) { return sum + current; });\r\n };\r\n EasyGrid.prototype.renderHeader = function () {\r\n var _this = this;\r\n this.headerDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-header\")\r\n .toDOM();\r\n this.headerViewportDiv = domel('div', this.headerDiv)\r\n .addClass(this.cssPrefix + \"-header-viewport\")\r\n .toDOM();\r\n this.headerCellContainerDiv = domel('div', this.headerViewportDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-container\")\r\n .toDOM();\r\n this.headerRowDiv = domel('div', this.headerCellContainerDiv)\r\n .addClass(this.cssPrefix + \"-header-row\")\r\n .toDOM();\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var hd = _this.renderColumnHeader(column, index);\r\n _this.headerRowDiv.appendChild(hd);\r\n if (column.isRowNum) {\r\n domel(hd)\r\n .addChildElement(_this.renderHeaderButtons());\r\n }\r\n });\r\n var containerWidth = this.getContainerWidth();\r\n domel(this.headerCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n };\r\n EasyGrid.prototype.hasData = function () {\r\n return this.dataTable.columns.count > 0;\r\n };\r\n EasyGrid.prototype.renderColumnHeader = function (column, index) {\r\n var _this = this;\r\n var colBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-header-cell\")\r\n .data('col-idx', \"\" + index)\r\n .setStyle('width', column.width + \"px\");\r\n if (column.dataColumn) {\r\n colBuilder\r\n .data('col-id', \"\" + column.dataColumn.id);\r\n }\r\n var colDiv = colBuilder.toDOM();\r\n domel('div', colDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-resize\");\r\n if (!column.isRowNum) {\r\n domel('div', colDiv)\r\n .addClass(this.cssPrefix + \"-header-cell-label\")\r\n .text(column.label);\r\n }\r\n if (column.description) {\r\n domel('div', colDiv)\r\n .addClass('question-mark')\r\n .title(column.description);\r\n }\r\n if (this.options.allowDragDrop) {\r\n eqDragManager.registerDraggableItem({\r\n element: colDiv,\r\n scope: \"gridColumnMove\",\r\n data: { column: column },\r\n renderer: function (dragImage) {\r\n dragImage.innerHTML = '';\r\n var attrLabel = document.createElement('div');\r\n attrLabel.innerText = column.label;\r\n dragImage.classList.add(_this.cssPrefix + \"-sortable-helper\");\r\n dragImage.appendChild(attrLabel);\r\n },\r\n onDragStart: function (ev) {\r\n ev.dropEffect = DropEffect.Allow;\r\n }\r\n });\r\n }\r\n return colDiv;\r\n };\r\n EasyGrid.prototype.renderBody = function () {\r\n var _this = this;\r\n this.bodyDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-body\")\r\n .toDOM();\r\n this.bodyViewportDiv = domel('div', this.bodyDiv)\r\n .addClass(this.cssPrefix + \"-body-viewport\")\r\n .attr('tabIndex', '0')\r\n .toDOM();\r\n this.bodyCellContainerDiv = domel('div', this.bodyViewportDiv)\r\n .addClass(this.cssPrefix + \"-cell-container\")\r\n .toDOM();\r\n var showAggrs = this.canShowAggregates();\r\n if (this.dataTable) {\r\n this.showProgress();\r\n this.rowsOnPagePromise = this.getRowsToRender()\r\n .then(function (rows) {\r\n _this.pagination.total = _this.dataTable.getTotal();\r\n _this.hideProgress();\r\n //prevent double rendering (bad solution, we have to figure out how to avoid this behavior properly)\r\n _this.bodyCellContainerDiv.innerHTML = '';\r\n _this.prevRowTotals = null;\r\n var rowsToRender = 0;\r\n if (rows.length) {\r\n var groups_1 = showAggrs\r\n ? _this.options.aggregates.settings.getGroups()\r\n : [];\r\n rowsToRender = (rows.length < _this.pagination.pageSize)\r\n ? rows.length\r\n : _this.pagination.pageSize;\r\n rows.forEach(function (row, index) {\r\n if (showAggrs)\r\n _this.updateTotalsState(groups_1, row);\r\n //we don't actually render the last row\r\n if (index < rowsToRender) {\r\n var tr = _this.renderRow(row, index);\r\n _this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n });\r\n var showGrandTotalsOnEachPage = _this.options.aggregates && _this.options.aggregates.showGrandTotalsOnEachPage;\r\n if (showAggrs && (_this.isLastPage() || showGrandTotalsOnEachPage)) {\r\n var row = new DataRow(_this.dataTable.columns, new Array(_this.dataTable.columns.count));\r\n _this.updateTotalsState(groups_1, row, true);\r\n }\r\n }\r\n var needAutoResize = _this.options.columnWidths.autoResize !== AutoResizeColumns.Never;\r\n if (needAutoResize) {\r\n _this.resizeColumns();\r\n }\r\n else {\r\n var containerWidth = _this.getContainerWidth();\r\n domel(_this.bodyCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n }\r\n return rowsToRender;\r\n })\r\n .catch(function (error) { console.error(error); return 0; });\r\n }\r\n this.bodyViewportDiv.addEventListener('scroll', function (ev) {\r\n domel(_this.headerViewportDiv)\r\n .setStyle('margin-left', \"-\" + _this.bodyViewportDiv.scrollLeft + \"px\");\r\n });\r\n this.bodyViewportDiv.addEventListener('keydown', this.onViewportKeydown.bind(this));\r\n };\r\n EasyGrid.prototype.isLastPage = function () {\r\n if (this.dataTable.elasticChunks) {\r\n return this.dataTable.totalIsKnown()\r\n && (this.pagination.page * this.pagination.pageSize) >= this.pagination.total;\r\n }\r\n return this.pagination.page * this.pagination.pageSize >= this.pagination.total;\r\n };\r\n EasyGrid.prototype.canShowAggregates = function () {\r\n if (!this.options || !this.options.aggregates || !this.options.aggregates.settings)\r\n return false;\r\n var aggrSettings = this.options.aggregates.settings;\r\n var result = (aggrSettings.hasAggregates() || aggrSettings.hasRecordCount())\r\n && (aggrSettings.hasGroups() || aggrSettings.hasGrandTotals());\r\n return result;\r\n };\r\n EasyGrid.prototype.updateTotalsState = function (groups, newRow, isLast) {\r\n if (isLast === void 0) { isLast = false; }\r\n var aggrSettings = this.options.aggregates.settings;\r\n if (this.prevRowTotals && aggrSettings.hasGroups()) {\r\n var changeLevel = -1;\r\n for (var level = 1; level <= groups.length; level++) {\r\n var group = groups[level - 1];\r\n for (var _i = 0, _a = group.columns; _i < _a.length; _i++) {\r\n var col = _a[_i];\r\n if (!aggrSettings.compareValues(this.prevRowTotals.getValue(col), newRow.getValue(col))) {\r\n changeLevel = level;\r\n break;\r\n }\r\n }\r\n if (changeLevel !== -1)\r\n break;\r\n }\r\n if (changeLevel !== -1) {\r\n for (var level = groups.length; level >= changeLevel; level--) {\r\n var row = new DataRow(this.dataTable.columns, this.prevRowTotals.toArray());\r\n var tr = this.renderTotalsRow(level, row);\r\n this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n }\r\n }\r\n if (isLast && aggrSettings.hasGrandTotals() && aggrSettings.hasAggregates()) {\r\n var tr = this.renderTotalsRow(0, newRow);\r\n this.bodyCellContainerDiv.appendChild(tr);\r\n }\r\n this.prevRowTotals = newRow;\r\n };\r\n EasyGrid.prototype.applyGroupColumnTemplate = function (template, value, count) {\r\n var result = template.replace(/{{\\s*GroupValue\\s*}}/g, value ? \"\" + value : '-');\r\n result = result.replace(/{{\\s*GroupCount\\s*}}/g, count ? \"\" + count : '-');\r\n return result;\r\n };\r\n EasyGrid.prototype.renderTotalsRow = function (level, row) {\r\n var _this = this;\r\n var aggrSettings = this.options.aggregates.settings;\r\n var group = (level > 0)\r\n ? aggrSettings.getGroups()[level - 1]\r\n : { columns: [], aggregates: aggrSettings.getAggregates() };\r\n var rowBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-row\")\r\n .addClass(this.cssPrefix + \"-row-totals\")\r\n .addClass(this.cssPrefix + \"-totals-lv\" + level)\r\n .data('totals-level', \"\" + level)\r\n .attr('tabindex', '-1');\r\n var rowElement = rowBuilder.toDOM();\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var val = '';\r\n var colIndex = !column.isRowNum\r\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\r\n : -1;\r\n if (!column.isRowNum && column.dataColumn) {\r\n if (group.columns.indexOf(column.dataColumn.id) >= 0) {\r\n val = row.getValue(colIndex);\r\n }\r\n ;\r\n }\r\n if (colIndex == _this.dataTable.columns.count - 1) {\r\n val = '. . . . . .';\r\n }\r\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\r\n });\r\n var aggrContainer = this.options.aggregates.calculator.getAggrContainer();\r\n var aggrCols = aggrSettings.getAggregates().map(function (c) { return c.colId; });\r\n var key = aggrSettings.buildGroupKey(group, row);\r\n aggrContainer.getAggregateData(level, key)\r\n .then(function (values) {\r\n for (var _i = 0, aggrCols_1 = aggrCols; _i < aggrCols_1.length; _i++) {\r\n var aggrColId = aggrCols_1[_i];\r\n row.setValue(aggrColId, values[aggrColId]);\r\n }\r\n rowElement.innerHTML = '';\r\n _this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var val = '';\r\n var colIndex = !column.isRowNum\r\n ? _this.dataTable.columns.getIndex(column.dataColumn.id)\r\n : -1;\r\n if (!column.isRowNum) {\r\n var isLastGroupColumn = false;\r\n if (column.dataColumn) {\r\n var groupColIndex = group.columns.indexOf(column.dataColumn.id);\r\n var aggrColIndex = aggrCols.indexOf(column.dataColumn.id);\r\n if (level > 0) {\r\n isLastGroupColumn = groupColIndex == group.columns.length - 1;\r\n }\r\n else {\r\n //if it's a grand total row consider first column as the last group column\r\n isLastGroupColumn = colIndex == 0;\r\n }\r\n if (groupColIndex >= 0 || aggrColIndex >= 0) {\r\n val = row.getValue(colIndex);\r\n }\r\n ;\r\n }\r\n var groupFooterTemplate = '';\r\n if (level > 0) {\r\n groupFooterTemplate = column.dataColumn.groupFooterColumnTemplate;\r\n //set the default template for the last grouping column\r\n if (!groupFooterTemplate && aggrSettings.hasRecordCount() && isLastGroupColumn) {\r\n groupFooterTemplate = '{{GroupValue}} ({{GroupCount}})';\r\n }\r\n }\r\n if (groupFooterTemplate) {\r\n var cellDiv_1 = _this.renderCell(column, index, val, rowElement);\r\n var innerCell = cellDiv_1.firstChild;\r\n val = innerCell.innerHTML;\r\n val = _this.applyGroupColumnTemplate(groupFooterTemplate, val, values[aggrSettings.COUNT_FIELD_NAME]);\r\n }\r\n }\r\n var cellDiv = _this.renderCell(column, index, val, rowElement);\r\n rowElement.appendChild(cellDiv);\r\n });\r\n })\r\n .catch(function (error) { return console.error(error); });\r\n return rowElement;\r\n };\r\n EasyGrid.prototype.onViewportKeydown = function (ev) {\r\n if (this.options.showActiveRow) {\r\n var rowCount = this.bodyCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-row\").length;\r\n var newValue = void 0;\r\n switch (ev.key) {\r\n case 'ArrowLeft':\r\n break;\r\n case 'ArrowRight':\r\n break;\r\n case 'ArrowUp':\r\n ev.preventDefault();\r\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? rowCount - 1 : this.activeRowIndex - 1;\r\n this.activeRowIndex = newValue >= 0 ? newValue : 0;\r\n break;\r\n case 'ArrowDown':\r\n ev.preventDefault();\r\n newValue = this.activeRowIndex < 0 || this.activeRowIndex >= rowCount ? 0 : this.activeRowIndex + 1;\r\n this.activeRowIndex = newValue < rowCount ? newValue : rowCount - 1;\r\n break;\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.ensureRowVisibility = function (rowOrIndex) {\r\n var row = typeof rowOrIndex === 'number'\r\n ? this.getDataRow(rowOrIndex)\r\n : rowOrIndex;\r\n if (row) {\r\n var rowRect = row.getBoundingClientRect();\r\n var viewportRect = this.bodyViewportDiv.getBoundingClientRect();\r\n var rowTop = rowRect.top - viewportRect.top;\r\n var rowBottom = rowRect.bottom - viewportRect.top;\r\n var viewportHeight = this.bodyViewportDiv.clientHeight;\r\n var windowHeight = window.innerHeight || document.documentElement.clientHeight;\r\n if (rowTop > 0 &&\r\n rowBottom <= viewportHeight &&\r\n rowRect.top > 0 &&\r\n rowRect.bottom < windowHeight) {\r\n return;\r\n }\r\n if (rowTop < 0) {\r\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowTop;\r\n }\r\n else if (rowBottom > viewportHeight) {\r\n this.bodyViewportDiv.scrollTop = this.bodyViewportDiv.scrollTop + rowBottom - viewportHeight;\r\n }\r\n rowRect = row.getBoundingClientRect();\r\n if (rowRect.top < 0) {\r\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.top;\r\n }\r\n else if (rowRect.bottom > windowHeight) {\r\n document.documentElement.scrollTop = document.documentElement.scrollTop + rowRect.bottom - windowHeight;\r\n }\r\n }\r\n };\r\n /** Returns a promise with the list of the rows to render on one page.\r\n * The list contains pageSize+1 row to make it possible\r\n * to render the totals row (if it appears to be on the edge between pages)\r\n */\r\n EasyGrid.prototype.getRowsToRender = function () {\r\n if (this.options.paging.enabled === false) {\r\n return Promise.resolve(this.dataTable.getCachedRows());\r\n }\r\n return this.dataTable.getRows({\r\n offset: (this.pagination.page - 1) * this.pagination.pageSize,\r\n limit: this.pagination.pageSize + 1\r\n })\r\n .catch(function (error) {\r\n console.error(error);\r\n return [];\r\n });\r\n };\r\n EasyGrid.prototype.renderFooter = function () {\r\n var _this = this;\r\n this.footerDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-footer\")\r\n .toDOM();\r\n if (this.rowsOnPagePromise) {\r\n this.rowsOnPagePromise.then(function (count) {\r\n _this.footerDiv.innerHTML = '';\r\n _this.footerPaginateDiv = _this.renderPageNavigator();\r\n _this.footerDiv.appendChild(_this.footerPaginateDiv);\r\n var pageInfoBlock = _this.renderPageInfoBlock(count);\r\n _this.footerDiv.appendChild(pageInfoBlock);\r\n });\r\n }\r\n };\r\n EasyGrid.prototype.renderPageInfoBlock = function (count) {\r\n var pageInfoDiv = domel('div')\r\n .addClass(this.cssPrefix + \"-page-info\")\r\n .toDOM();\r\n var rowCount = this.dataTable.getTotal();\r\n if (rowCount > 0) {\r\n var fistPageRecordNum = count\r\n ? (this.pagination.page - 1) * this.pagination.pageSize + 1\r\n : 0;\r\n var lastPageRecordNum = count\r\n ? fistPageRecordNum + count - 1\r\n : 0;\r\n var totalStr = this.dataTable.getTotal().toString();\r\n if (this.dataTable.elasticChunks) {\r\n var count_1 = this.dataTable.getCachedCount();\r\n var total = this.dataTable.getTotal();\r\n if (count_1 !== total)\r\n totalStr = '?';\r\n }\r\n pageInfoDiv.innerHTML = i18n.getText('GridPageInfo')\r\n .replace('{FirstPageRecordNum}', \"<span>\" + fistPageRecordNum.toString() + \"</span>\")\r\n .replace('{LastPageRecordNum}', \"<span>\" + lastPageRecordNum.toString() + \"</span>\")\r\n .replace('{Total}', \"<span>\" + totalStr + \"</span>\");\r\n }\r\n return pageInfoDiv;\r\n };\r\n EasyGrid.prototype.showProgress = function () {\r\n };\r\n EasyGrid.prototype.hideProgress = function () {\r\n };\r\n EasyGrid.prototype.getLocalIndexByGlobal = function (index) {\r\n if (this.pagination) {\r\n return index % this.pagination.pageSize;\r\n }\r\n else {\r\n return index;\r\n }\r\n };\r\n EasyGrid.prototype.getGlobalIndexByLocal = function (index) {\r\n if (this.pagination) {\r\n return (this.pagination.page - 1) * this.pagination.pageSize + index;\r\n }\r\n else {\r\n return index;\r\n }\r\n };\r\n EasyGrid.prototype.renderRow = function (row, index) {\r\n var _this = this;\r\n var indexGlobal = this.getGlobalIndexByLocal(index);\r\n var rowBuilder = domel('div')\r\n .addClass(this.cssPrefix + \"-row\")\r\n .addClass(this.cssPrefix + \"-row-\" + (index % 2 == 1 ? 'odd' : 'even'))\r\n .data('row-idx', \"\" + indexGlobal)\r\n .attr('tabindex', '-1')\r\n .on('click', function (ev) {\r\n _this.activeRowIndex = index;\r\n _this.fireEvent({\r\n type: 'rowClick',\r\n row: row,\r\n rowIndex: index,\r\n sourceEvent: ev\r\n });\r\n })\r\n .on('dblclick', function (ev) {\r\n _this.fireEvent({\r\n type: 'rowDbClick',\r\n row: row,\r\n rowIndex: index,\r\n sourceEvent: ev\r\n });\r\n });\r\n if (index == 0) {\r\n rowBuilder.addClass(this.cssPrefix + \"-row-first\");\r\n }\r\n var rowElement = rowBuilder.toDOM();\r\n if (this.options.showActiveRow && index == this.activeRowIndex) {\r\n rowBuilder.addClass(this.cssPrefix + \"-row-active\");\r\n }\r\n this.columns.getItems().forEach(function (column, index) {\r\n if (!column.isVisible) {\r\n return;\r\n }\r\n var colindex = column.isRowNum ? -1 : _this.dataTable.columns.getIndex(column.dataColumn.id);\r\n var val = column.isRowNum ? indexGlobal + 1 : row.getValue(colindex);\r\n rowElement.appendChild(_this.renderCell(column, index, val, rowElement));\r\n });\r\n return rowElement;\r\n };\r\n EasyGrid.prototype.renderCell = function (column, colIndex, value, rowElement) {\r\n var builder = domel('div')\r\n .addClass(this.cssPrefix + \"-cell\")\r\n .data('col-idx', \"\" + colIndex)\r\n .attr('tabindex', '-1')\r\n .setStyle('width', column.width + \"px\");\r\n if (column.align == GridColumnAlign.LEFT) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-left\");\r\n }\r\n else if (column.align == GridColumnAlign.RIGHT) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-right\");\r\n }\r\n else if (column.align == GridColumnAlign.CENTER) {\r\n builder.addClass(this.cssPrefix + \"-cell-align-center\");\r\n }\r\n var cellElement = builder.toDOM();\r\n var valueCell = cellElement.appendChild(domel('div')\r\n .addClass(this.cssPrefix + \"-cell-value\")\r\n .toDOM());\r\n if (column.cellRenderer) {\r\n column.cellRenderer(value, column, valueCell, rowElement);\r\n }\r\n return cellElement;\r\n };\r\n /** Sets current grid pages (if paging is used) */\r\n EasyGrid.prototype.setPage = function (page) {\r\n this.pagination.page = page;\r\n this.fireEvent({ type: \"pageChanged\", page: page });\r\n this.refresh();\r\n this.bodyViewportDiv.focus();\r\n };\r\n EasyGrid.prototype.renderPageNavigator = function () {\r\n var _this = this;\r\n var paginateDiv = document.createElement('div');\r\n paginateDiv.className = this.cssPrefix + \"-pagination-wrapper\";\r\n var rowCount = this.dataTable.getTotal();\r\n if (this.options.paging && this.options.paging.enabled && rowCount > 0) {\r\n var prefix_1 = this.paginationOptions.useBootstrap ? '' : this.cssPrefix + \"-\";\r\n var buttonClickHandler_1 = function (ev) {\r\n var element = ev.target;\r\n if (element.hasAttribute('data-page')) {\r\n var page = parseInt(element.getAttribute('data-page'));\r\n _this.setPage(page);\r\n }\r\n };\r\n var renderPageCell = function (pageIndex, content, disabled, extreme, active) {\r\n var li = document.createElement('li');\r\n li.className = prefix_1 + \"page-item\";\r\n if (!extreme) {\r\n if (active) {\r\n li.className += ' active';\r\n }\r\n var a_1 = document.createElement('a');\r\n a_1.setAttribute('href', 'javascript:void(0)');\r\n a_1.innerHTML = content || pageIndex.toString();\r\n a_1.setAttribute(\"data-page\", \"\" + pageIndex);\r\n a_1.className = prefix_1 + \"page-link\";\r\n a_1.addEventListener(\"click\", buttonClickHandler_1);\r\n li.appendChild(a_1);\r\n return li;\r\n }\r\n var a = document.createElement('span');\r\n a.setAttribute('aria-hidden', 'true');\r\n a.className = prefix_1 + \"page-link\";\r\n if (disabled) {\r\n li.className += ' disabled';\r\n }\r\n else {\r\n if (_this.paginationOptions.useBootstrap) {\r\n a = document.createElement('a');\r\n a.setAttribute('href', 'javascript:void(0)');\r\n a.setAttribute(\"data-page\", \"\" + pageIndex);\r\n }\r\n else {\r\n var newA = document.createElement('a');\r\n newA.setAttribute('href', 'javascript:void(0)');\r\n newA.setAttribute('data-page', \"\" + pageIndex);\r\n a = newA;\r\n }\r\n a.className = prefix_1 + \"page-link\";\r\n a.addEventListener(\"click\", buttonClickHandler_1);\r\n }\r\n a.innerHTML = content;\r\n li.appendChild(a);\r\n return li;\r\n };\r\n if (this.dataTable.elasticChunks) {\r\n var pageIndex = this.pagination.page || 1;\r\n var ul = document.createElement('ul');\r\n ul.className = prefix_1 + \"pagination\";\r\n var cell = renderPageCell(pageIndex - 1, '&laquo;', pageIndex == 1, true, false);\r\n ul.appendChild(cell);\r\n cell = renderPageCell(pageIndex + 1, '&raquo;', this.isLastPage(), true, false);\r\n ul.appendChild(cell);\r\n paginateDiv.appendChild(ul);\r\n }\r\n else {\r\n if (this.pagination.total > this.pagination.pageSize) {\r\n var pageIndex = this.pagination.page || 1;\r\n var pageCount = Math.ceil(this.pagination.total / this.pagination.pageSize) || 1;\r\n var maxButtonCount = this.paginationOptions.maxButtonCount || 10;\r\n var zeroBasedIndex = pageIndex - 1;\r\n var firstPageIndex = zeroBasedIndex - (zeroBasedIndex % maxButtonCount) + 1;\r\n var lastPageIndex = firstPageIndex + maxButtonCount - 1;\r\n if (lastPageIndex > pageCount) {\r\n lastPageIndex = pageCount;\r\n }\r\n var ul = document.createElement('ul');\r\n ul.className = prefix_1 + \"pagination\";\r\n var cell = renderPageCell(firstPageIndex - 1, '&laquo;', firstPageIndex == 1, true, false);\r\n ul.appendChild(cell);\r\n for (var i = firstPageIndex; i <= lastPageIndex; i++) {\r\n cell = renderPageCell(i, i.toString(), false, false, i == pageIndex);\r\n ul.appendChild(cell);\r\n }\r\n cell = renderPageCell(lastPageIndex + 1, '&raquo;', lastPageIndex == pageCount, true, false);\r\n ul.appendChild(cell);\r\n paginateDiv.appendChild(ul);\r\n }\r\n }\r\n if (this.options.paging.allowPageSizeChange) {\r\n var selectChangeHandler = function (ev) {\r\n var newValue = parseInt(ev.target.value);\r\n _this.pagination.pageSize = newValue;\r\n _this.pagination.page = 1;\r\n _this.refresh();\r\n };\r\n var pageSizes = document.createElement('div');\r\n pageSizes.className = this.cssPrefix + \"-page-sizes\";\r\n var selectSize = document.createElement('div');\r\n selectSize.className = \"kfrm-select \" + this.cssPrefix + \"-page-sizes-select\";\r\n pageSizes.appendChild(selectSize);\r\n var sel_1 = document.createElement('select');\r\n var selOptions = this.options.paging.pageSizeItems || [];\r\n var selSet = new Set(selOptions);\r\n selSet.add(this.options.paging.pageSize || 20);\r\n Array.from(selSet).forEach(function (el) {\r\n var option = document.createElement(\"option\");\r\n option.value = el.toString();\r\n option.text = el.toString();\r\n sel_1.appendChild(option);\r\n });\r\n sel_1.value = (this.pagination.pageSize || 20).toString();\r\n selectSize.appendChild(sel_1);\r\n sel_1.addEventListener('change', selectChangeHandler);\r\n var labelDiv = document.createElement('div');\r\n labelDiv.className = this.cssPrefix + \"-page-sizes-label\";\r\n pageSizes.appendChild(labelDiv);\r\n var label = document.createElement('span');\r\n label.innerText = i18n.getText('GridItemsPerPage');\r\n labelDiv.appendChild(label);\r\n paginateDiv.appendChild(pageSizes);\r\n }\r\n }\r\n return paginateDiv;\r\n };\r\n EasyGrid.prototype.addEventListener = function (eventType, handler) {\r\n return this.eventEmitter.subscribe(eventType, function (event) { return handler(event.data); });\r\n };\r\n EasyGrid.prototype.removeEventListener = function (eventType, handlerId) {\r\n this.eventEmitter.unsubscribe(eventType, handlerId);\r\n };\r\n EasyGrid.prototype.renderHeaderButtons = function () {\r\n var _this = this;\r\n if (this.options.showPlusButton) {\r\n return domel('div')\r\n .addClass(this.cssPrefix + \"-header-btn-plus\")\r\n .title(this.options.plusButtonTitle || 'Add')\r\n .addChild('a', function (builder) { return builder\r\n .attr('href', 'javascript:void(0)')\r\n .on('click', function (e) {\r\n e.preventDefault();\r\n _this.fireEvent({\r\n type: 'plusButtonClick',\r\n sourceEvent: e\r\n });\r\n }); })\r\n .toDOM();\r\n }\r\n return domel('span')\r\n .addText('#')\r\n .toDOM();\r\n };\r\n EasyGrid.prototype.showLandingSlot = function (pageX, pageY) {\r\n var colElems = this.headerRowDiv.querySelectorAll(\"[class*=\" + this.cssPrefix + \"-table-col]\");\r\n var cols = [];\r\n for (var i = 1; i < colElems.length; i++) {\r\n var rowElem = colElems[i];\r\n if (rowElem.style.display === 'none')\r\n continue;\r\n cols.push(rowElem);\r\n }\r\n if (cols.length === 0) {\r\n this.landingIndex = 0;\r\n this.headerRowDiv.appendChild(this.landingSlot);\r\n return;\r\n }\r\n var landingPos = getElementAbsolutePos(this.landingSlot);\r\n if (pageX >= landingPos.x && pageX <= landingPos.x + this.landingSlot.offsetWidth) {\r\n return;\r\n }\r\n var newLandingIndex = this.landingIndex;\r\n for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\r\n var col = cols_1[_i];\r\n var colPos = getElementAbsolutePos(col);\r\n var width = col.offsetWidth;\r\n if (pageX > colPos.x && pageX < colPos.x + width) {\r\n // -1 as we don't need to count add button here\r\n newLandingIndex = parseInt(col.getAttribute('data-col-idx')) - 1;\r\n }\r\n }\r\n if (newLandingIndex != this.landingIndex) {\r\n this.landingIndex = newLandingIndex;\r\n if (this.landingIndex < cols.length) {\r\n this.headerRowDiv.insertBefore(this.landingSlot, cols[this.landingIndex]);\r\n }\r\n else {\r\n this.headerRowDiv.appendChild(this.landingSlot);\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.hideLandingSlot = function () {\r\n var _this = this;\r\n this.landingIndex = -1;\r\n setTimeout(function () {\r\n if (_this.landingSlot.parentElement) {\r\n _this.landingSlot.parentElement.removeChild(_this.landingSlot);\r\n }\r\n }, 10);\r\n };\r\n Object.defineProperty(EasyGrid.prototype, \"activeRowIndex\", {\r\n get: function () {\r\n return this._activeRowIndex;\r\n },\r\n set: function (value) {\r\n if (value !== this._activeRowIndex) {\r\n var oldValue = this._activeRowIndex;\r\n this._activeRowIndex = value;\r\n this.updateActiveRow();\r\n this.fireEvent({\r\n type: 'activeRowChanged',\r\n oldValue: oldValue,\r\n newValue: this.activeRowIndex,\r\n rowIndex: this.getGlobalIndexByLocal(this.activeRowIndex)\r\n });\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n EasyGrid.prototype.updateActiveRow = function () {\r\n var _this = this;\r\n if (this.options.showActiveRow) {\r\n var rows = this.bodyCellContainerDiv.querySelectorAll(\"[class*=\" + this.cssPrefix + \"-row-active]\");\r\n rows.forEach(function (el) { el.classList.remove(_this.cssPrefix + \"-row-active\"); });\r\n var activeRow = this.getActiveRow();\r\n if (activeRow) {\r\n activeRow.classList.add(this.cssPrefix + \"-row-active\");\r\n this.ensureRowVisibility(this.activeRowIndex);\r\n }\r\n }\r\n };\r\n EasyGrid.prototype.getActiveRow = function () {\r\n return this.getDataRow(this.activeRowIndex);\r\n };\r\n EasyGrid.prototype.getDataRow = function (index) {\r\n var rows = Array.from(this.bodyCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-row:not(.\" + this.cssPrefix + \"-row-totals)\"));\r\n if (index >= 0 && index < rows.length)\r\n return rows[index];\r\n return null;\r\n };\r\n /** Makes the grid focused for keyboard events */\r\n EasyGrid.prototype.focus = function () {\r\n this.bodyViewportDiv.focus();\r\n };\r\n /** Resizes columns according to the data they represent */\r\n EasyGrid.prototype.resizeColumns = function () {\r\n if (this.options.columnWidths.autoResize === AutoResizeColumns.Never)\r\n return;\r\n var containerWidth = this.bodyCellContainerDiv.style.width;\r\n this.bodyCellContainerDiv.style.visibility = 'hidden';\r\n this.bodyCellContainerDiv.style.width = '1px';\r\n //this.headerRowDiv.style.visibility = 'hidden';\r\n this.headerRowDiv.style.width = '1px';\r\n var sumWidth = 0;\r\n var columns = this.columns.getItems();\r\n var headerCells = this.headerCellContainerDiv.querySelectorAll(\".\" + this.cssPrefix + \"-header-cell\");\r\n var headerIdx = 0;\r\n var _loop_1 = function (idx) {\r\n var column = columns[idx];\r\n if (!column.isVisible)\r\n return \"continue\";\r\n var calculatedWidth = this_1.options.columnWidths.autoResize !== AutoResizeColumns.Always && column.dataColumn\r\n ? column.dataColumn.calculatedWidth\r\n : 0;\r\n var cellValues = this_1.bodyCellContainerDiv.querySelectorAll(\".\" + this_1.cssPrefix + \"-cell[data-col-idx=\\\"\" + idx + \"\\\"] > .\" + this_1.cssPrefix + \"-cell-value\");\r\n var maxWidth = 0;\r\n if (calculatedWidth > 0) {\r\n sumWidth += calculatedWidth;\r\n column.width = calculatedWidth;\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = calculatedWidth + \"px\";\r\n });\r\n headerCells[headerIdx].style.width = calculatedWidth + \"px\";\r\n }\r\n else {\r\n if (cellValues.length == 0) {\r\n headerCells[headerIdx].style.width = null;\r\n headerCells[headerIdx].style.whiteSpace = 'nowrap';\r\n }\r\n maxWidth = headerCells[headerIdx].offsetWidth;\r\n if (cellValues.length > 0) {\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = null;\r\n var width = value.parentElement.offsetWidth;\r\n if (width > maxWidth) {\r\n maxWidth = width;\r\n }\r\n });\r\n maxWidth += 3;\r\n var maxOption = column.isRowNum\r\n ? this_1.options.columnWidths.rowNumColumn.max || 500\r\n : this_1.options.columnWidths[column.dataColumn.type].max || 2000;\r\n var minOption = column.isRowNum\r\n ? this_1.options.columnWidths.rowNumColumn.min || 0\r\n : this_1.options.columnWidths[column.dataColumn.type].min || 20;\r\n if (maxWidth > maxOption) {\r\n maxWidth = maxOption;\r\n }\r\n if (maxWidth < minOption) {\r\n maxWidth = minOption;\r\n }\r\n if (utils.isNumericType(column.type)) {\r\n //increase the calculated width in 1.3 times for numeric columns\r\n maxWidth = Math.round(maxWidth * 1.3);\r\n }\r\n sumWidth += maxWidth;\r\n column.width = maxWidth;\r\n cellValues.forEach(function (value) {\r\n value.parentElement.style.width = maxWidth + \"px\";\r\n });\r\n headerCells[headerIdx].style.width = maxWidth + \"px\";\r\n if (column.dataColumn) {\r\n column.dataColumn.calculatedWidth = maxWidth;\r\n }\r\n }\r\n else {\r\n sumWidth += maxWidth;\r\n }\r\n }\r\n headerIdx++;\r\n };\r\n var this_1 = this;\r\n for (var idx = 0; idx < this.columns.count; idx++) {\r\n _loop_1(idx);\r\n }\r\n if (sumWidth > 0) {\r\n this.bodyCellContainerDiv.style.width = sumWidth + \"px\";\r\n this.headerCellContainerDiv.style.width = sumWidth + \"px\";\r\n }\r\n else {\r\n this.bodyCellContainerDiv.style.width = containerWidth;\r\n this.headerCellContainerDiv.style.width = containerWidth;\r\n }\r\n this.bodyCellContainerDiv.style.visibility = null;\r\n this.headerRowDiv.removeAttribute('style');\r\n };\r\n return EasyGrid;\r\n}());\r\nexport { EasyGrid };\r\n//# sourceMappingURL=easy_grid.js.map","var Calendar = /** @class */ (function () {\r\n function Calendar(slot, options) {\r\n this.slot = slot;\r\n this.options = options || {};\r\n if (!this.options.yearRange) {\r\n this.options.yearRange = 'c-10:c+10';\r\n }\r\n }\r\n Object.defineProperty(Calendar.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp-cal';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Calendar.prototype.setDate = function (date) {\r\n this.currentDate = new Date(date);\r\n };\r\n Calendar.prototype.getDate = function () {\r\n return new Date(this.currentDate);\r\n };\r\n Calendar.prototype.dateChanged = function (apply) {\r\n if (this.options.onDateChanged) {\r\n this.options.onDateChanged(this.currentDate, apply);\r\n }\r\n };\r\n return Calendar;\r\n}());\r\nexport { Calendar };\r\n//# sourceMappingURL=calendar.js.map","import { getElementAbsolutePos } from '../utils/ui-utils';\r\nvar DateTimePicker = /** @class */ (function () {\r\n function DateTimePicker(options) {\r\n this.calendar = null;\r\n this.timePicker = null;\r\n this.options = options;\r\n this.render();\r\n }\r\n Object.defineProperty(DateTimePicker.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n DateTimePicker.prototype.setDateTime = function (dateTime) {\r\n this.currentDateTime = new Date(dateTime);\r\n if (this.calendar) {\r\n this.calendar.setDate(this.currentDateTime);\r\n }\r\n if (this.timePicker) {\r\n this.timePicker.setTime(this.currentDateTime);\r\n }\r\n };\r\n DateTimePicker.prototype.getDateTime = function () {\r\n return new Date(this.currentDateTime);\r\n };\r\n DateTimePicker.prototype.render = function () {\r\n var _this = this;\r\n if (this.options.showCalendar) {\r\n this.calendar = this.createCalendar({\r\n yearRange: this.options.yearRange,\r\n showDateTimeInput: this.options.showDateTimeInput,\r\n timePickerIsUsed: this.options.showTimePicker,\r\n oneClickDateSelection: this.options.oneClickDateSelection,\r\n onDateChanged: function (date, apply) {\r\n _this.currentDateTime = date;\r\n if (_this.timePicker) {\r\n _this.timePicker.setTime(_this.currentDateTime);\r\n }\r\n if (_this.options.showTimePicker) {\r\n _this.dateTimeChanged();\r\n }\r\n if (apply) {\r\n _this.apply(_this.currentDateTime);\r\n }\r\n }\r\n });\r\n if (this.calendar)\r\n this.calendar.render();\r\n }\r\n if (this.options.showTimePicker) {\r\n this.timePicker = this.createTimePicker({\r\n onTimeChanged: function (time) {\r\n _this.currentDateTime.setHours(time.getHours());\r\n _this.currentDateTime.setMinutes(time.getMinutes());\r\n if (_this.calendar) {\r\n _this.calendar.setDate(_this.currentDateTime);\r\n }\r\n _this.dateTimeChanged();\r\n }\r\n });\r\n if (this.timePicker)\r\n this.timePicker.render();\r\n }\r\n this.setDateTime(new Date());\r\n };\r\n DateTimePicker.prototype.createCalendar = function (options) {\r\n return null;\r\n };\r\n DateTimePicker.prototype.createTimePicker = function (options) {\r\n return null;\r\n };\r\n DateTimePicker.prototype.show = function (anchor) {\r\n if (this.options.beforeShow) {\r\n this.options.beforeShow();\r\n }\r\n var pos = getElementAbsolutePos(anchor || document.body);\r\n this.slot.style.top = pos.y + anchor.clientHeight + 'px';\r\n this.slot.style.left = pos.x + 'px';\r\n };\r\n DateTimePicker.prototype.apply = function (date) {\r\n if (this.options.onApply) {\r\n this.options.onApply(date);\r\n }\r\n this.destroy();\r\n };\r\n DateTimePicker.prototype.cancel = function () {\r\n if (this.options.onCancel) {\r\n this.options.onCancel();\r\n }\r\n this.destroy();\r\n };\r\n DateTimePicker.prototype.destroy = function () {\r\n if (this.slot && this.slot.parentElement) {\r\n this.slot.parentElement.removeChild(this.slot);\r\n }\r\n };\r\n DateTimePicker.prototype.dateTimeChanged = function () {\r\n if (this.options.onDateTimeChanged) {\r\n this.options.onDateTimeChanged(this.currentDateTime);\r\n }\r\n };\r\n return DateTimePicker;\r\n}());\r\nexport { DateTimePicker };\r\n//# sourceMappingURL=date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { Calendar } from './calendar';\r\nvar DefaultCalendar = /** @class */ (function (_super) {\r\n __extends(DefaultCalendar, _super);\r\n function DefaultCalendar(slot, options) {\r\n var _this = _super.call(this, slot, options) || this;\r\n _this.daysOfWeek = [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"];\r\n _this.months = [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"];\r\n _this.calendarBody = null;\r\n _this.isManualInputChanging = false;\r\n for (var i = 0; i < _this.daysOfWeek.length; i++) {\r\n _this.daysOfWeek[i] = i18n.getShortWeekDayName(i + 1);\r\n }\r\n for (var i = 0; i < _this.months.length; i++) {\r\n _this.months[i] = i18n.getLongMonthName(i + 1);\r\n }\r\n return _this;\r\n }\r\n DefaultCalendar.prototype.setDate = function (date) {\r\n _super.prototype.setDate.call(this, date);\r\n this.selectedMonth = this.currentDate.getMonth();\r\n this.selectedYear = this.currentDate.getFullYear();\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.render = function () {\r\n var _this = this;\r\n var header = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-header\");\r\n if (this.options.showDateTimeInput) {\r\n header\r\n .addChildElement(this.renderManualDateInput());\r\n }\r\n else {\r\n header\r\n .addChild('span', function (builder) { return _this.headerTextElem = builder.toDOM(); });\r\n }\r\n domel(this.slot)\r\n .addChildElement(this.renderCalendarButtons());\r\n this.calendarBody = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-body\")\r\n .toDOM();\r\n };\r\n DefaultCalendar.prototype.getInputDateFormat = function () {\r\n var settings = i18n.getLocaleSettings();\r\n return (this.options.timePickerIsUsed)\r\n ? settings.editDateFormat + \" \" + settings.editTimeFormat\r\n : settings.editDateFormat;\r\n };\r\n DefaultCalendar.prototype.renderManualDateInput = function () {\r\n var _this = this;\r\n var format = this.getInputDateFormat();\r\n var builder = domel('input')\r\n .attr('placeholder', format)\r\n .addClass(this.cssPrefix + \"-header-input\");\r\n builder\r\n .mask(format.replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99'))\r\n .on('input', function (ev) {\r\n builder.removeClass('error');\r\n try {\r\n _this.isManualInputChanging = true;\r\n var newDate = dataUtils.strToDateTime(_this.manualInputElem.value, format);\r\n _this.currentDate = newDate;\r\n _this.jump(_this.currentDate.getFullYear(), _this.currentDate.getMonth());\r\n _this.dateChanged(false);\r\n }\r\n catch (e) {\r\n builder.addClass('error');\r\n }\r\n finally {\r\n _this.isManualInputChanging = false;\r\n }\r\n })\r\n .on('keydown', function (ev) {\r\n if (ev.keyCode === 13) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (_this.manualInputElem.className.indexOf('error') < 0\r\n && !_this.isManualInputChanging)\r\n _this.dateChanged(true);\r\n }\r\n })\r\n .on('focus', function () {\r\n setTimeout(function () {\r\n _this.manualInputElem.selectionStart = 0;\r\n _this.manualInputElem.selectionEnd = 0;\r\n }, 50);\r\n });\r\n this.manualInputElem = builder.toDOM();\r\n return this.manualInputElem;\r\n };\r\n DefaultCalendar.prototype.updateDisplayedDateValue = function () {\r\n if (this.manualInputElem) {\r\n if (!this.isManualInputChanging) {\r\n var format = this.getInputDateFormat();\r\n this.manualInputElem.value = dataUtils.dateTimeToStr(this.currentDate, format);\r\n this.manualInputElem.focus();\r\n }\r\n }\r\n else if (this.headerTextElem) {\r\n var locale = i18n.getCurrentLocale();\r\n this.headerTextElem.innerText = this.currentDate.toLocaleString(locale == 'en' ? undefined : locale, {\r\n year: 'numeric',\r\n month: 'long',\r\n day: 'numeric',\r\n });\r\n }\r\n };\r\n DefaultCalendar.prototype.renderCalendarButtons = function () {\r\n var _this = this;\r\n var builder = domel('nav')\r\n .addClass(this.cssPrefix + \"-nav\")\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-prev\")\r\n .on('click', function () {\r\n _this.prev();\r\n })\r\n .addChild('span', function (builder) { return builder.html('&lsaquo;'); }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-selectors\")\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-month\")\r\n .addChild('select', function (builder) {\r\n builder\r\n .on('change', function () {\r\n _this.jump(_this.selectedYear, parseInt(_this.selectMonthElem.value));\r\n });\r\n var _loop_1 = function (i) {\r\n builder.addChild('option', function (builder) { return builder\r\n .attr('value', i.toString())\r\n .text(_this.months[i]); });\r\n };\r\n for (var i = 0; i < _this.months.length; i++) {\r\n _loop_1(i);\r\n }\r\n _this.selectMonthElem = builder.toDOM();\r\n }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-year\")\r\n .addChild('select', function (builder) { return _this.selectYearElem = builder\r\n .on('change', function () {\r\n _this.jump(parseInt(_this.selectYearElem.value), _this.selectedMonth);\r\n })\r\n .toDOM(); }); }); })\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-nav-next\")\r\n .on('click', function () {\r\n _this.next();\r\n })\r\n .addChild('span', function (builder) { return builder.html('&rsaquo;'); }); });\r\n return builder.toDOM();\r\n };\r\n DefaultCalendar.prototype.prev = function () {\r\n this.selectedYear = (this.selectedMonth === 0) ? this.selectedYear - 1 : this.selectedYear;\r\n this.selectedMonth = (this.selectedMonth === 0) ? 11 : this.selectedMonth - 1;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.next = function () {\r\n this.selectedYear = (this.selectedMonth === 11) ? this.selectedYear + 1 : this.selectedYear;\r\n this.selectedMonth = (this.selectedMonth + 1) % 12;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.rerenderSelectYear = function () {\r\n var match = /c-(\\d*):c\\+(\\d*)/g.exec(this.options.yearRange);\r\n var minusYear = 0;\r\n var plusYear = 1;\r\n if (match !== null) {\r\n minusYear = parseInt(match[1]);\r\n plusYear = parseInt(match[2]);\r\n }\r\n this.selectYearElem.innerHTML = '';\r\n for (var i = 0; i <= minusYear + plusYear; i++) {\r\n var op = document.createElement(\"option\");\r\n var year = this.selectedYear - minusYear + i;\r\n op.value = year.toString();\r\n op.innerText = year.toString();\r\n this.selectYearElem.appendChild(op);\r\n }\r\n };\r\n DefaultCalendar.prototype.jump = function (year, month) {\r\n this.selectedYear = year;\r\n this.selectedMonth = month;\r\n this.rerenderMonth();\r\n };\r\n DefaultCalendar.prototype.rerenderMonth = function () {\r\n var _this = this;\r\n //header text\r\n this.updateDisplayedDateValue();\r\n this.rerenderSelectYear();\r\n var firstDay = (new Date(this.selectedYear, this.selectedMonth)).getDay();\r\n var daysInMonth = new Date(this.selectedYear, this.selectedMonth + 1, 0).getDate();\r\n this.calendarBody.innerHTML = \"\";\r\n this.selectYearElem.value = this.selectedYear.toString();\r\n this.selectMonthElem.value = this.selectedMonth.toString();\r\n this.daysOfWeek.forEach(function (day, idx) {\r\n domel('div', _this.calendarBody)\r\n .addClass(_this.cssPrefix + \"-weekday\")\r\n .addClass(idx == 0 || idx == 6 ? _this.cssPrefix + \"-weekend\" : '')\r\n .text(day);\r\n });\r\n // Add empty cells before first day\r\n for (var i = 0; i < firstDay; i++) {\r\n domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day-empty\");\r\n }\r\n // Add all month days\r\n var today = new Date();\r\n for (var day = 1; day <= daysInMonth; day++) {\r\n var builder = domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day\")\r\n .attr('data-date', day.toString())\r\n .text(day.toString())\r\n .on('click', function (e) {\r\n _this.currentDate.setFullYear(_this.selectedYear);\r\n _this.currentDate.setMonth(_this.selectedMonth);\r\n _this.currentDate.setDate(parseInt(e.target.getAttribute('data-date')));\r\n _this.dateChanged(_this.options.oneClickDateSelection);\r\n });\r\n if (day === today.getDate() && this.selectedYear === today.getFullYear() && this.selectedMonth === today.getMonth()) {\r\n builder.addClass(this.cssPrefix + \"-day-current\");\r\n }\r\n if (day === this.currentDate.getDate() && this.selectedYear === this.currentDate.getFullYear() && this.selectedMonth === this.currentDate.getMonth()) {\r\n builder.addClass(this.cssPrefix + \"-day-selected\");\r\n }\r\n var dayOfWeek = (firstDay + day - 1) % 7;\r\n if (dayOfWeek == 0 || dayOfWeek == 6) {\r\n builder.addClass(this.cssPrefix + \"-weekend\");\r\n }\r\n }\r\n // Add empty cells after last day\r\n var cellsDrawnInLastRow = (firstDay + daysInMonth) % 7;\r\n var cellsToDraw = cellsDrawnInLastRow == 0 ? 0 : 7 - cellsDrawnInLastRow;\r\n for (var i = 0; i < cellsToDraw; i++) {\r\n domel('div', this.calendarBody)\r\n .addClass(this.cssPrefix + \"-day-empty\");\r\n }\r\n };\r\n DefaultCalendar.prototype.dateChanged = function (apply) {\r\n _super.prototype.dateChanged.call(this, apply);\r\n this.rerenderMonth();\r\n };\r\n return DefaultCalendar;\r\n}(Calendar));\r\nexport { DefaultCalendar };\r\n//# sourceMappingURL=default_calendar.js.map","var TimePicker = /** @class */ (function () {\r\n function TimePicker(slot, options) {\r\n this.slot = slot;\r\n this.options = options || {};\r\n }\r\n Object.defineProperty(TimePicker.prototype, \"cssPrefix\", {\r\n get: function () {\r\n return 'kdtp-tp';\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n TimePicker.prototype.setTime = function (time) {\r\n this.currentTime = new Date(time);\r\n };\r\n TimePicker.prototype.getTime = function () {\r\n return new Date(this.currentTime);\r\n };\r\n TimePicker.prototype.timeChanged = function () {\r\n if (this.options.onTimeChanged) {\r\n this.options.onTimeChanged(this.currentTime);\r\n }\r\n };\r\n return TimePicker;\r\n}());\r\nexport { TimePicker };\r\n//# sourceMappingURL=time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { TimePicker } from './time_picker';\r\nvar DefaultTimePicker = /** @class */ (function (_super) {\r\n __extends(DefaultTimePicker, _super);\r\n function DefaultTimePicker() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DefaultTimePicker.prototype.setTime = function (time) {\r\n _super.prototype.setTime.call(this, time);\r\n this.updateDisplayedTime();\r\n this.hoursInput.valueAsNumber = time.getHours();\r\n this.minutesInput.valueAsNumber = time.getMinutes();\r\n };\r\n DefaultTimePicker.prototype.render = function () {\r\n var _this = this;\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-time\")\r\n .addChild('span', function (builder) { return _this.timeText = builder.toDOM(); })\r\n .toDOM();\r\n var slidersBuilder = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-sliders\");\r\n slidersBuilder\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-time-row\")\r\n .title('Hours')\r\n .addChild('input', function (builder) { return _this.hoursInput = builder\r\n .addClass(_this.cssPrefix + \"-input-hours\")\r\n .type('range')\r\n .attr('min', '0')\r\n .attr('max', '23')\r\n .attr('step', '1')\r\n .on('input', function (e) {\r\n _this.currentTime.setHours(_this.hoursInput.valueAsNumber);\r\n _this.updateDisplayedTime();\r\n _this.timeChanged();\r\n })\r\n .toDOM(); }); });\r\n slidersBuilder\r\n .addChild('div', function (builder) { return builder\r\n .addClass(_this.cssPrefix + \"-time-row\")\r\n .title('Minutes')\r\n .addChild('input', function (builder) { return _this.minutesInput = builder\r\n .addClass(_this.cssPrefix + \"-input-minutes\")\r\n .type('range')\r\n .attr('min', '0')\r\n .attr('max', '59')\r\n .attr('step', '1')\r\n .on('input', function (e) {\r\n _this.currentTime.setMinutes(_this.minutesInput.valueAsNumber);\r\n _this.updateDisplayedTime();\r\n _this.timeChanged();\r\n })\r\n .toDOM(); }); });\r\n return this.slot;\r\n };\r\n DefaultTimePicker.prototype.updateDisplayedTime = function () {\r\n var locale = i18n.getCurrentLocale();\r\n var timeToDraw = this.currentTime.toLocaleString(locale == 'en' ? undefined : locale, {\r\n hour: \"numeric\",\r\n minute: \"numeric\"\r\n });\r\n this.timeText.innerText = timeToDraw;\r\n };\r\n return DefaultTimePicker;\r\n}(TimePicker));\r\nexport { DefaultTimePicker };\r\n//# sourceMappingURL=default_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n } from '@easydata/core';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nimport { DateTimePicker } from './date_time_picker';\r\nimport { DefaultCalendar } from './default_calendar';\r\nimport { DefaultTimePicker } from './default_time_picker';\r\nimport { getElementAbsolutePos } from '../utils/ui-utils';\r\nvar DefaultDateTimePicker = /** @class */ (function (_super) {\r\n __extends(DefaultDateTimePicker, _super);\r\n function DefaultDateTimePicker() {\r\n return _super !== null && _super.apply(this, arguments) || this;\r\n }\r\n DefaultDateTimePicker.prototype.render = function () {\r\n var _this = this;\r\n var sb = domel('div', document.body)\r\n .addClass(\"\" + this.cssPrefix)\r\n .attr('tabIndex', '0')\r\n .setStyle('position', 'absolute')\r\n .setStyle('top', '-1000px')\r\n .setStyle('left', '-1000px')\r\n .on('keydown', function (ev) {\r\n if (ev.keyCode === 27) { // ESC is pressed\r\n _this.cancel();\r\n }\r\n else if (ev.keyCode === 13) { // Enter is pressed\r\n _this.apply(_this.getDateTime());\r\n }\r\n return false;\r\n });\r\n if (this.options.zIndex) {\r\n sb.setStyle('z-index', \"\" + this.options.zIndex);\r\n }\r\n this.slot = sb.toDOM();\r\n _super.prototype.render.call(this);\r\n this.renderButtons();\r\n this.globalMouseDownHandler = function (e) {\r\n var event = window.event || e;\r\n var o = event.srcElement || event.target;\r\n var isOutside = !_this.slot.contains(event.target);\r\n if (isOutside) {\r\n document.removeEventListener('mousedown', _this.globalMouseDownHandler, true);\r\n _this.cancel();\r\n }\r\n return true;\r\n };\r\n };\r\n DefaultDateTimePicker.prototype.renderButtons = function () {\r\n var _this = this;\r\n var builder = domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-buttons\")\r\n .addChild('button', function (b) { return _this.nowButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-now\")\r\n .text(i18n.getText('ButtonNow'))\r\n .on('click', function () {\r\n _this.setDateTime(new Date());\r\n _this.dateTimeChanged();\r\n return false;\r\n })\r\n .toDOM(); });\r\n if (this.options.showTimePicker || !this.options.oneClickDateSelection) {\r\n builder.addChild('button', function (b) { return _this.submitButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-apply\")\r\n .text(i18n.getText('ButtonApply'))\r\n .on('click', function () {\r\n _this.apply(_this.getDateTime());\r\n return false;\r\n })\r\n .toDOM(); });\r\n }\r\n builder.addChild('button', function (b) { return _this.submitButton = b\r\n .addClass(_this.cssPrefix + \"-button \" + _this.cssPrefix + \"-button-cancel\")\r\n .text(i18n.getText('ButtonCancel'))\r\n .on('click', function () {\r\n _this.cancel();\r\n return false;\r\n })\r\n .toDOM(); });\r\n };\r\n DefaultDateTimePicker.prototype.createCalendar = function (options) {\r\n this.calendarSlot =\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-cal\")\r\n .toDOM();\r\n return new DefaultCalendar(this.calendarSlot, options);\r\n };\r\n DefaultDateTimePicker.prototype.createTimePicker = function (options) {\r\n this.timePickerSlot =\r\n domel('div', this.slot)\r\n .addClass(this.cssPrefix + \"-tp\")\r\n .toDOM();\r\n return new DefaultTimePicker(this.timePickerSlot, options);\r\n };\r\n DefaultDateTimePicker.prototype.show = function (anchor) {\r\n var _this = this;\r\n if (this.options.showDateTimeInput) {\r\n if (this.options.beforeShow) {\r\n this.options.beforeShow();\r\n }\r\n var anchorPos = getElementAbsolutePos(anchor || document.body);\r\n var parentPos = getElementAbsolutePos(anchor ? anchor.parentElement || anchor : document.body);\r\n this.slot.style.top = parentPos.y + 'px';\r\n this.slot.style.left = anchorPos.x + 'px';\r\n }\r\n else {\r\n _super.prototype.show.call(this, anchor);\r\n this.slot.focus();\r\n }\r\n setTimeout(function () {\r\n document.addEventListener('mousedown', _this.globalMouseDownHandler, true);\r\n }, 1);\r\n };\r\n return DefaultDateTimePicker;\r\n}(DateTimePicker));\r\nexport { DefaultDateTimePicker };\r\n//# sourceMappingURL=default_date_time_picker.js.map","var __extends = (this && this.__extends) || (function () {\r\n var extendStatics = function (d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n };\r\n return function (d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n };\r\n})();\r\nimport { i18n, utils, liquid } from '@easydata/core';\r\nimport { DialogFooterAlignment } from './dialog_service';\r\nimport { domel } from '../utils/dom_elem_builder';\r\nvar cssPrefix = \"kdlg\";\r\nvar DefaultDialogService = /** @class */ (function () {\r\n function DefaultDialogService() {\r\n }\r\n DefaultDialogService.prototype.openConfirm = function (title, content, callback) {\r\n var _this = this;\r\n var template = \"<div id=\\\"\" + cssPrefix + \"-dialog-confirm\\\">\" + content + \"</div>\";\r\n var options = {\r\n title: title,\r\n closable: false,\r\n submitable: true,\r\n cancelable: true,\r\n body: template\r\n };\r\n if (callback) {\r\n options.onSubmit = function () {\r\n callback(true);\r\n };\r\n options.onCancel = function () {\r\n callback(false);\r\n };\r\n this.open(options);\r\n return;\r\n }\r\n return new Promise(function (resolve) {\r\n options.onSubmit = function () {\r\n resolve(true);\r\n };\r\n options.onCancel = function () {\r\n resolve(false);\r\n };\r\n _this.open(options);\r\n });\r\n };\r\n DefaultDialogService.prototype.openPrompt = function (title, content, defVal, callback) {\r\n var _this = this;\r\n var template = \"<div id=\\\"\" + cssPrefix + \"-dialog-form\\\" class=\\\"kfrm-form\\\">\\n <div class=\\\"kfrm-fields label-above\\\">\\n <label for=\\\"\" + cssPrefix + \"-dialog-form-input\\\" id=\\\"\" + cssPrefix + \"-dialog-form-content\\\">\" + content + \"</label>\\n <input type=\\\"text\\\" name=\\\"\" + cssPrefix + \"-dialog-form-input\\\" id=\\\"\" + cssPrefix + \"-dialog-form-input\\\" />\\n </div>\\n </div>\";\r\n var options = {\r\n title: title,\r\n submitable: true,\r\n closable: true,\r\n cancelable: true,\r\n submitOnEnter: true,\r\n body: template,\r\n arrangeParents: false,\r\n beforeOpen: function () {\r\n var input = document.getElementById(cssPrefix + \"-dialog-form-input\");\r\n if (defVal) {\r\n input.value = defVal;\r\n }\r\n input.focus();\r\n }\r\n };\r\n var processInput = function (callback) {\r\n var input = document.getElementById(cssPrefix + \"-dialog-form-input\");\r\n var result = input.value;\r\n if (result && result.replace(/\\s/g, '').length > 0) {\r\n callback(result);\r\n return true;\r\n }\r\n input.classList.add('eqjs-invalid');\r\n return false;\r\n };\r\n if (callback) {\r\n options.onSubmit = function () {\r\n return processInput(callback);\r\n };\r\n options.onCancel = function () {\r\n callback(\"\");\r\n };\r\n this.open(options);\r\n return;\r\n }\r\n return new Promise(function (resolve) {\r\n options.onSubmit = function () {\r\n return processInput(resolve);\r\n };\r\n options.onCancel = function () {\r\n resolve(\"\");\r\n };\r\n _this.open(options);\r\n });\r\n };\r\n DefaultDialogService.prototype.open = function (options, data) {\r\n var _this = this;\r\n var dialog = new DefaultDialog(options, data);\r\n var onDestroy = options.onDestroy;\r\n options.onDestroy = function (dlg) {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy(dlg);\r\n };\r\n dialog.open();\r\n this.track(dialog);\r\n return dialog;\r\n };\r\n DefaultDialogService.prototype.createSet = function (options) {\r\n return new DefaultDialogSet(options, this);\r\n };\r\n DefaultDialogService.prototype.untrack = function (dlg) {\r\n var index = DefaultDialogService.openDialogs.indexOf(dlg);\r\n if (index >= 0) {\r\n DefaultDialogService.openDialogs.splice(index, 1);\r\n }\r\n };\r\n DefaultDialogService.prototype.track = function (dlg) {\r\n DefaultDialogService.openDialogs.push(dlg);\r\n };\r\n DefaultDialogService.prototype.openProgress = function (options) {\r\n var _this = this;\r\n var dialog = new DefaultProgressDialog(options);\r\n var onDestroy = options.onDestroy;\r\n options.onDestroy = function (dlg) {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy(dlg);\r\n };\r\n dialog.open();\r\n this.track(dialog);\r\n return dialog;\r\n };\r\n DefaultDialogService.prototype.getAllDialogs = function () {\r\n return Array.from(DefaultDialogService.openDialogs);\r\n };\r\n DefaultDialogService.prototype.closeAllDialogs = function () {\r\n for (var _i = 0, _a = Array.from(DefaultDialogService.openDialogs); _i < _a.length; _i++) {\r\n var dialog = _a[_i];\r\n dialog.close();\r\n }\r\n };\r\n DefaultDialogService.openDialogs = [];\r\n return DefaultDialogService;\r\n}());\r\nexport { DefaultDialogService };\r\nvar DefaultDialog = /** @class */ (function () {\r\n function DefaultDialog(options, data) {\r\n var _this = this;\r\n this.options = options;\r\n this.submitHandler = function (token) {\r\n if (_this.options.onSubmit && _this.options.onSubmit(_this, token) === false) {\r\n return false;\r\n }\r\n _this.destroy();\r\n return true;\r\n };\r\n this.cancelHandler = function () {\r\n if (_this.options.onCancel) {\r\n _this.options.onCancel(_this);\r\n }\r\n _this.destroy();\r\n };\r\n this.keydownHandler = function (ev) {\r\n if (ev.keyCode == 13 && _this.isActiveDialog()) {\r\n ev.preventDefault();\r\n ev.stopPropagation();\r\n if (_this.submitHandler()) {\r\n window.removeEventListener('keydown', _this.keydownHandler, false);\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n this.dialogId = utils.generateId('dlg');\r\n this.data = data;\r\n this.slot =\r\n domel('div', document.body)\r\n .attr('tab-index', '-1')\r\n .data('dialog-id', this.dialogId)\r\n .addClass(cssPrefix + \"-modal\", 'is-active')\r\n .focus()\r\n .addChild('div', function (b) { return b\r\n .addClass('kdlg-modal-background'); })\r\n .addChild('div', function (b) { return _this.windowElement = b\r\n .addClass(cssPrefix + \"-modal-window\")\r\n .addChild('header', function (b) {\r\n _this.headerElement = b\r\n .addClass(cssPrefix + \"-header\")\r\n .addChild('p', function (b) { return b\r\n .addClass(cssPrefix + \"-header-title\")\r\n .addText(options.title); })\r\n .toDOM();\r\n if (options.closable !== false)\r\n b.addChild('button', function (b) { return b\r\n .addClass(cssPrefix + \"-modal-close\")\r\n .on('click', function () {\r\n _this.cancelHandler();\r\n })\r\n .focus(); });\r\n })\r\n .addChild('div', function (b) {\r\n b.addClass(cssPrefix + \"-alert-container\");\r\n _this.alertElement = b.toDOM();\r\n })\r\n .addChild('section', function (b) {\r\n _this.bodyElement = b\r\n .addClass(cssPrefix + \"-body\")\r\n .toDOM();\r\n if (typeof options.body === 'string') {\r\n var html = liquid.renderLiquidTemplate(options.body, data);\r\n b.addHtml(html);\r\n }\r\n else {\r\n b.addChildElement(options.body);\r\n }\r\n })\r\n .addChild('footer', function (b) {\r\n var alignClass = null;\r\n if (options.footerAlignment && options.footerAlignment == DialogFooterAlignment.Center) {\r\n alignClass = 'align-center';\r\n }\r\n else {\r\n alignClass = 'align-right';\r\n }\r\n _this.footerElement = b\r\n .addClass(cssPrefix + \"-footer\")\r\n .toDOM();\r\n b.addClass(alignClass);\r\n if (options.submitable === false)\r\n return;\r\n b.addChild('button', function (bb) {\r\n bb.id(_this.dialogId + '-btn-submit')\r\n .addClass('kfrm-button', 'is-info')\r\n .addText(options.submitButtonText || i18n.getText('ButtonOK'));\r\n if (options.recaptchaSiteKey) {\r\n bb.data('sitekey', options.recaptchaSiteKey);\r\n bb.addClass('g-recaptcha');\r\n bb.on('click', function (e) {\r\n if (grecaptcha) {\r\n grecaptcha.ready(function () {\r\n grecaptcha.execute(options.recaptchaSiteKey, { action: 'submit' })\r\n .then(function (token) {\r\n _this.submitHandler(token);\r\n });\r\n });\r\n }\r\n else {\r\n _this.submitHandler();\r\n }\r\n });\r\n }\r\n else {\r\n bb.on('click', function (e) {\r\n _this.submitHandler();\r\n });\r\n }\r\n bb.focus();\r\n });\r\n if (options.cancelable !== false)\r\n b.addChild('button', function (bb) { return bb\r\n .id(_this.dialogId + '-btn-cancel')\r\n .addClass('kfrm-button')\r\n .addText(options.cancelButtonText || i18n.getText('ButtonCancel'))\r\n .on('click', function (e) {\r\n _this.cancelHandler();\r\n }); });\r\n })\r\n .toDOM(); })\r\n .toDOM();\r\n }\r\n DefaultDialog.prototype.getData = function () {\r\n return this.data;\r\n };\r\n DefaultDialog.prototype.getRootElement = function () {\r\n return this.slot;\r\n };\r\n DefaultDialog.prototype.getSubmitButtonElement = function () {\r\n return document.getElementById(this.dialogId + '-btn-submit');\r\n };\r\n DefaultDialog.prototype.getCancelButtonElement = function () {\r\n return document.getElementById(this.dialogId + '-btn-cancel');\r\n };\r\n DefaultDialog.prototype.open = function () {\r\n var _this = this;\r\n if (this.options.beforeOpen) {\r\n this.options.beforeOpen(this);\r\n }\r\n domel(this.slot).show();\r\n if (this.options.arrangeParents) {\r\n this.arrangeParents(true);\r\n }\r\n var windowDiv = this.slot\r\n .querySelector(\".\" + cssPrefix + \"-modal-window\");\r\n if (this.options.height) {\r\n windowDiv.style.height = typeof this.options.height === 'string'\r\n ? this.options.height\r\n : this.options.height + \"px\";\r\n }\r\n if (this.options.width) {\r\n windowDiv.style.width = typeof this.options.width === 'string'\r\n ? this.options.width\r\n : this.options.width + \"px\";\r\n }\r\n if (this.options.submitOnEnter) {\r\n window.addEventListener('keydown', this.keydownHandler, false);\r\n }\r\n //clear alert on change in any input element \r\n this.slot.querySelectorAll('input')\r\n .forEach(function (element) {\r\n return element.addEventListener('input', function () {\r\n _this.clearAlert();\r\n if (_this.options.onInput) {\r\n _this.options.onInput(_this);\r\n }\r\n });\r\n });\r\n if (this.options.onShow) {\r\n this.options.onShow(this);\r\n }\r\n };\r\n DefaultDialog.prototype.submit = function () {\r\n this.submitHandler();\r\n };\r\n DefaultDialog.prototype.cancel = function () {\r\n this.cancelHandler();\r\n };\r\n DefaultDialog.prototype.close = function () {\r\n this.destroy();\r\n };\r\n DefaultDialog.prototype.disableButtons = function () {\r\n var buttons = this.slot.querySelectorAll('button');\r\n buttons.forEach(function (button) { return button.disabled = true; });\r\n };\r\n DefaultDialog.prototype.enableButtons = function () {\r\n var buttons = this.slot.querySelectorAll('button');\r\n buttons.forEach(function (button) { return button.disabled = false; });\r\n };\r\n DefaultDialog.prototype.showAlert = function (text, reason, replace) {\r\n var alert = domel('div')\r\n .addClass(cssPrefix + \"-alert \" + (reason || ''))\r\n .addChild('span', function (b) { return b\r\n .addClass(cssPrefix + \"-alert-closebtn\")\r\n .text('×')\r\n .on('click', function (ev) {\r\n var alert = ev.target.parentElement;\r\n alert.parentElement.removeChild(alert);\r\n }); })\r\n .addText(text)\r\n .toDOM();\r\n if (replace === true) {\r\n this.clearAlert();\r\n }\r\n this.alertElement.appendChild(alert);\r\n };\r\n DefaultDialog.prototype.clearAlert = function () {\r\n this.alertElement.innerHTML = '';\r\n };\r\n DefaultDialog.prototype.destroy = function () {\r\n var elem = document.querySelectorAll(\"[data-dialog-id=\\\"\" + this.dialogId + \"\\\"]\");\r\n if (elem.length <= 0)\r\n return;\r\n if (this.options.arrangeParents) {\r\n this.arrangeParents(false);\r\n }\r\n document.body.removeChild(this.slot);\r\n if (this.options.submitOnEnter) {\r\n window.removeEventListener('keydown', this.keydownHandler, false);\r\n }\r\n if (this.options.onDestroy) {\r\n this.options.onDestroy(this);\r\n }\r\n };\r\n DefaultDialog.prototype.isActiveDialog = function () {\r\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal');\r\n return windowDivs[windowDivs.length - 1] === this.slot;\r\n };\r\n DefaultDialog.prototype.arrangeParents = function (turnOn) {\r\n var windowDivs = document.documentElement.querySelectorAll('.kdlg-modal-window');\r\n for (var i = 0; i < windowDivs.length - 1; i++) {\r\n if (turnOn) {\r\n var offset = i == 0 ? 20 : i * 40 + 20;\r\n domel(windowDivs[i])\r\n .setStyle('margin-top', offset + \"px\")\r\n .setStyle('margin-left', offset + \"px\");\r\n }\r\n else {\r\n domel(windowDivs[i])\r\n .removeStyle('margin-top')\r\n .removeStyle('margin-left');\r\n }\r\n }\r\n };\r\n return DefaultDialog;\r\n}());\r\nexport { DefaultDialog };\r\nvar DefaultProgressDialog = /** @class */ (function (_super) {\r\n __extends(DefaultProgressDialog, _super);\r\n function DefaultProgressDialog(options, data) {\r\n var _this = this;\r\n var contentElement;\r\n var progressElement;\r\n var body = domel('div')\r\n .addChild('div', function (b) { return contentElement = b\r\n .text(options.content || '')\r\n .toDOM(); })\r\n .addChild('div', function (b) {\r\n b\r\n .addClass(cssPrefix + \"-progress-line\")\r\n .addChild('div', function (b) {\r\n progressElement = b\r\n .addClass('fill')\r\n .toDOM();\r\n if (options.determinated) {\r\n b.setStyle('width', '0%');\r\n }\r\n else {\r\n b.addClass('indeterminate');\r\n }\r\n });\r\n })\r\n .toDOM();\r\n _this = _super.call(this, {\r\n title: options.title,\r\n body: body,\r\n beforeOpen: options.beforeOpen,\r\n onSubmit: options.onSubmit,\r\n width: options.width,\r\n height: options.height,\r\n submitable: false,\r\n cancelable: false,\r\n closable: false,\r\n onDestroy: options.onDestroy\r\n }, data) || this;\r\n _this.contentElement = contentElement;\r\n _this.progressElement = progressElement;\r\n return _this;\r\n }\r\n DefaultProgressDialog.prototype.updateContent = function (content) {\r\n this.contentElement.innerText = content;\r\n };\r\n DefaultProgressDialog.prototype.updateProgress = function (progress) {\r\n var _this = this;\r\n progress = this.in01(progress);\r\n this.progressElement.style.width = progress * 100 + \"%\";\r\n if (progress === 1) {\r\n // postpone for 0.5s for smooth closing\r\n setTimeout(function () {\r\n _this.submit();\r\n }, 500);\r\n }\r\n };\r\n DefaultProgressDialog.prototype.in01 = function (num) {\r\n if (num > 1)\r\n return 1;\r\n if (num < 0)\r\n return 0;\r\n return num;\r\n };\r\n return DefaultProgressDialog;\r\n}(DefaultDialog));\r\nexport { DefaultProgressDialog };\r\nvar DefaultDialogSet = /** @class */ (function () {\r\n function DefaultDialogSet(options, dialogService) {\r\n this.options = options;\r\n this.dialogService = dialogService;\r\n this.currentDialog = null;\r\n this.currentIndex = 0;\r\n this.options = options;\r\n this.dialogService = dialogService;\r\n }\r\n DefaultDialogSet.prototype.getCurrent = function () {\r\n return this.currentDialog;\r\n };\r\n DefaultDialogSet.prototype.openNext = function (data) {\r\n return this.open(this.currentIndex + 1, data);\r\n };\r\n DefaultDialogSet.prototype.openPrev = function (data) {\r\n return this.open(this.currentIndex - 1, data);\r\n };\r\n DefaultDialogSet.prototype.open = function (page, data) {\r\n if (page < 0) {\r\n this.currentIndex = 0;\r\n }\r\n else if (page >= this.options.length) {\r\n this.currentIndex = this.options.length - 1;\r\n }\r\n else {\r\n this.currentIndex = page;\r\n }\r\n if (this.currentDialog) {\r\n try {\r\n this.currentDialog.close();\r\n }\r\n catch (e) { }\r\n }\r\n var dlgOptions = this.options[this.currentIndex];\r\n this.currentDialog = this.dialogService.open(dlgOptions, data);\r\n return this.currentDialog;\r\n };\r\n DefaultDialogSet.prototype.close = function () {\r\n if (this.currentDialog) {\r\n this.currentDialog.close();\r\n this.currentDialog = null;\r\n }\r\n };\r\n return DefaultDialogSet;\r\n}());\r\nexport { DefaultDialogSet };\r\n//# sourceMappingURL=default_dialog_service.js.map","import { i18n } from '@easydata/core';\r\nfunction addEasyDataUITexts() {\r\n i18n.updateDefaultTexts({\r\n GridPageInfo: '{FirstPageRecordNum} - {LastPageRecordNum} of {Total} records',\r\n GridItemsPerPage: 'items per page',\r\n ButtonOK: \"OK\",\r\n ButtonCancel: \"Cancel\",\r\n ButtonApply: 'Apply',\r\n ButtonNow: 'Now',\r\n LblTotal: 'Total'\r\n });\r\n}\r\naddEasyDataUITexts();\r\n//# sourceMappingURL=text_resources.js.map","// grid\r\nexport * from './grid/easy_grid';\r\nexport * from './grid/easy_grid_options';\r\nexport * from './grid/easy_grid_columns';\r\nexport * from './grid/easy_grid_cell_renderer';\r\n//datetimepicker\r\nexport * from './datetimepicker/calendar';\r\nexport * from './datetimepicker/date_time_picker';\r\nexport * from './datetimepicker/default_calendar';\r\nexport * from './datetimepicker/default_date_time_picker';\r\nexport * from './datetimepicker/default_time_picker';\r\nexport * from './datetimepicker/time_picker';\r\n// utils\r\nexport * from './utils/browser_utils';\r\nexport * from './utils/dom_elem_builder';\r\nexport * from './utils/drag_manager';\r\nexport * from './utils/mask';\r\nexport * from './utils/ui-utils';\r\n//dialogs\r\nexport * from './dialogs/default_dialog_service';\r\nexport * from './dialogs/dialog_service';\r\nimport './i18n/text_resources';\r\nimport { DefaultDialogService } from './dialogs/default_dialog_service';\r\n// export dialogs to use outside of context as global\r\nvar dialogs = new DefaultDialogService();\r\nexport { dialogs };\r\n//# sourceMappingURL=public_api.js.map","import { i18n } from '@easydata/core';\r\nimport { DataType } from '@easydata/core';\r\n\r\nconst internalDateFormat = 'yyyy-MM-dd';\r\nconst internalTimeFormat = 'HH:mm';\r\n\r\nexport const getInternalDateTimeFormat = (dtype: DataType): string => {\r\n if (dtype == DataType.Date)\r\n return internalDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return internalTimeFormat;\r\n\r\n return `${internalDateFormat}T${internalTimeFormat}`;\r\n}\r\n\r\nexport const getEditDateTimeFormat = (dtype: DataType): string => {\r\n const settings = i18n.getLocaleSettings();\r\n if (dtype == DataType.Date)\r\n return settings.editDateFormat;\r\n\r\n if (dtype == DataType.Time)\r\n return settings.editTimeFormat;\r\n\r\n return `${settings.editDateFormat} ${settings.editTimeFormat}`;\r\n}\r\n\r\nexport const setLocation = (path: string) => {\r\n const state = window.history.state;\r\n history.pushState(state, document.title, path)\r\n window.dispatchEvent(new Event('ed_set_location'));\r\n}","import { MetaEntityAttr } from '@easydata/core';\r\n\r\nexport interface ValidationResult {\r\n successed: boolean;\r\n messages?: string[];\r\n}\r\n\r\nexport abstract class Validator {\r\n\r\n public name: string;\r\n\r\n public abstract validate(attr: MetaEntityAttr, value: any): ValidationResult;\r\n \r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nimport { getEditDateTimeFormat } from '../utils/utils';\r\n\r\nexport class DateTimeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'DateTime';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n\r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n try {\r\n const editFormat = getEditDateTimeFormat(attr.dataType);\r\n const newDate = dataUtils.strToDateTime(value, editFormat);\r\n }\r\n catch {\r\n return {\r\n successed: false,\r\n messages: [i18n.getText('DateTimeError')]\r\n }\r\n }\r\n }\r\n\r\n \r\n return { successed: true };\r\n }\r\n}","import { \r\n DataType, utils as dataUtils, \r\n MetaEntityAttr, \r\n} from '@easydata/core';\r\n\r\nimport { domel } from '@easydata/ui';\r\n\r\nimport { DataContext } from '../main/data_context';\r\n\r\nimport { ValidationResult, Validator } from '../validators/validator';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\nimport { DateTimeValidator } from '../validators/datetime_validator';\r\n\r\nexport class EntityEditForm {\r\n private errorsDiv: HTMLElement;\r\n\r\n private html: HTMLElement;\r\n\r\n constructor(private context: DataContext) { \r\n }\r\n\r\n private validators: Validator[] = [ new DateTimeValidator() ];\r\n\r\n public getHtml() {\r\n return this.html;\r\n }\r\n\r\n private setHtmlInt(html: HTMLElement) {\r\n this.html = html;\r\n this.errorsDiv = this.html.querySelector('.errors-block');\r\n }\r\n\r\n public validate(): boolean {\r\n this.clearErrors();\r\n\r\n const inputs = Array.from(this.html.querySelectorAll<HTMLInputElement | HTMLSelectElement>('input, select'));\r\n let isValid = true;\r\n for(const input of inputs) {\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox')\r\n continue;\r\n\r\n const result = this.validateValue(attr, input.value);\r\n if (!result.successed) {\r\n if (isValid) {\r\n domel(this.errorsDiv)\r\n .addChild('ul');\r\n }\r\n\r\n isValid = false;\r\n\r\n for(const message of result.messages) {\r\n this.errorsDiv.firstElementChild.innerHTML += `<li>${attr.caption}: ${message}</li>`;\r\n }\r\n }\r\n \r\n this.markInputValid(input, result.successed);\r\n }\r\n\r\n return isValid;\r\n }\r\n\r\n public getData(): Promise<any> {\r\n return new Promise((resolve, reject) => {\r\n const filePromises: Promise<any>[] = [];\r\n const inputs = Array.from(this.html\r\n .querySelectorAll<HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement>('input, select, textarea'));\r\n\r\n let obj = {};\r\n for (const input of inputs) {\r\n const property = input.name.substring(input.name.lastIndexOf('.') + 1);\r\n const attr = this.context.getMetaData().getAttributeById(input.name);\r\n\r\n if (input.type === 'checkbox') {\r\n obj[property] = (input as HTMLInputElement).checked;\r\n }\r\n else if (input.type === 'file') {\r\n filePromises.push(this.fileToBase64((input as HTMLInputElement).files[0])\r\n .then(content => obj[property] = content));\r\n }\r\n else {\r\n obj[property] = this.mapValue(attr.dataType, input.value);\r\n }\r\n }\r\n\r\n Promise.all(filePromises)\r\n .then(() => resolve(obj))\r\n .catch((e) => reject(e));\r\n });\r\n }\r\n\r\n private fileToBase64(file: File): Promise<string> {\r\n return new Promise<string>((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => {\r\n const result = reader.result.toString();\r\n resolve(result.substring(result.indexOf(',') + 1));\r\n } \r\n reader.onerror = error => reject(error);\r\n })\r\n }\r\n\r\n public useValidator(...validator: Validator[]) {\r\n this.useValidators(validator);\r\n }\r\n\r\n public useValidators(validators: Validator[]) {\r\n this.validators = this.validators.concat(validators);\r\n }\r\n\r\n private mapValue(type: DataType, value: string) {\r\n if (dataUtils.getDateDataTypes().indexOf(type) >= 0) {\r\n if (type !== DataType.Time && value && value.length) {\r\n const editFormat = crudUtils.getEditDateTimeFormat(type);\r\n const internalFormat = crudUtils.getInternalDateTimeFormat(type);\r\n\r\n const date = dataUtils.strToDateTime(value, editFormat);\r\n return dataUtils.dateTimeToStr(date, internalFormat)\r\n } \r\n\r\n return value && value.length ? value : null;\r\n }\r\n\r\n if (dataUtils.isIntType(type))\r\n return parseInt(value);\r\n\r\n if (dataUtils.isNumericType(type))\r\n return parseFloat(value);\r\n\r\n return value;\r\n }\r\n\r\n private clearErrors() {\r\n this.errorsDiv.innerHTML = '';\r\n\r\n this.html.querySelectorAll('input, select').forEach(el => {\r\n el.classList.remove('is-valid');\r\n el.classList.remove('is-invalid');\r\n });\r\n }\r\n\r\n private markInputValid(input: HTMLElement, valid: boolean) {\r\n input.classList.add(valid ? 'is-valid' : 'is-invalid');\r\n }\r\n\r\n private validateValue(attr: MetaEntityAttr, value: any): ValidationResult {\r\n const result = { successed: true, messages: []}\r\n for(const validator of this.validators) {\r\n const res = validator.validate(attr, value);\r\n if (!res.successed) {\r\n result.successed = false;\r\n result.messages = result.messages.concat(res.messages);\r\n }\r\n }\r\n\r\n return result;\r\n } \r\n}\r\n","import { i18n, utils as dataUtils } from '@easydata/core';\r\nimport { \r\n browserUtils, CellRendererType,\r\n domel, EasyGrid, \r\n GridCellRenderer, GridColumn, DFMT_REGEX\r\n} from '@easydata/ui';\r\nimport { DataFilter } from '../filter/data_filter';\r\n\r\nexport interface TextFilterWidgetOptions {\r\n focus?: boolean,\r\n instantMode?: boolean;\r\n instantTimeout?: number\r\n}\r\n\r\nexport class TextFilterWidget {\r\n private options = {\r\n focus: false,\r\n instantMode: false,\r\n instantTimeout: 1000\r\n }\r\n\r\n constructor(\r\n private slot: HTMLElement, \r\n private grid: EasyGrid, \r\n private filter: DataFilter,\r\n options?: TextFilterWidgetOptions) {\r\n\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n const stringDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.STRING);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.STRING, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(stringDefRenderer, value, column, cellElement, rowElement));\r\n\r\n const numDefRenderer = this.grid.cellRendererStore\r\n .getDefaultRendererByType(CellRendererType.NUMBER);\r\n this.grid.cellRendererStore\r\n .setDefaultRenderer(CellRendererType.NUMBER, (value, column, cellElement, rowElement) => \r\n this.highlightCellRenderer(numDefRenderer, value, column, cellElement, rowElement));\r\n\r\n this.render();\r\n }\r\n\r\n private filterInput: HTMLInputElement;\r\n\r\n private render() { \r\n const horizClass = browserUtils.IsIE() \r\n ? 'kfrm-fields-ie is-horizontal' \r\n : 'kfrm-fields is-horizontal';\r\n\r\n const isEdgeOrIE = browserUtils.IsIE() || browserUtils.IsEdge();\r\n \r\n domel(this.slot)\r\n .addClass(horizClass)\r\n .addChild('div', b => {\r\n b\r\n .addClass('control')\r\n .addChild('input', b => { \r\n this.filterInput = b.toDOM();\r\n b \r\n .attr('placeholder', i18n.getText('SearchInputPlaceholder'))\r\n .type('text')\r\n\r\n b.on('keydown', this.inputKeydownHandler.bind(this))\r\n\r\n if (this.options.instantMode) {\r\n b.on('keyup', this.inputKeyupHandler.bind(this));\r\n }\r\n });\r\n\r\n if (!isEdgeOrIE) {\r\n b \r\n .addClass('has-icons-right')\r\n .addChild('span', b => {\r\n b\r\n .addClass('icon')\r\n .addClass('is-right')\r\n .addClass('is-clickable')\r\n .html('&#x1F5D9;')\r\n .on('click', this.clearButtonClickHander.bind(this));\r\n });\r\n }\r\n });\r\n\r\n if (!this.options.instantMode) {\r\n domel(this.slot)\r\n .addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .addText(i18n.getText('SearchBtn'))\r\n .on('click', this.searchButtonClickHandler.bind(this))\r\n );\r\n }\r\n\r\n if (this.options.focus) {\r\n this.filterInput.focus();\r\n }\r\n }\r\n\r\n private applyFilterTimeout: any;\r\n\r\n private inputKeydownHandler(ev: Event) {\r\n if ((ev as KeyboardEvent).keyCode == 13) {\r\n this.applyFilter(true);\r\n }\r\n }\r\n\r\n private inputKeyupHandler() {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n this.applyFilterTimeout = setTimeout(() => {\r\n this.applyFilter(true);\r\n }, this.options.instantTimeout);\r\n }\r\n\r\n private clearButtonClickHander() {\r\n this.filterInput.value = '';\r\n this.filterInput.focus();\r\n\r\n this.applyFilter(true);\r\n }\r\n\r\n private searchButtonClickHandler() {\r\n this.applyFilter(true);\r\n }\r\n\r\n public applyFilter(checkChange : boolean) : boolean {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n const filterValue = this.filter.getValue();\r\n if (!checkChange || filterValue != this.filterInput.value) {\r\n this.filter.apply(this.filterInput.value)\r\n .then(data => {\r\n this.grid.setData(data);\r\n });\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private highlightCellRenderer(defaultRenderer: GridCellRenderer, value: any, column: GridColumn, cellElement: HTMLElement, rowElement: HTMLElement) { \r\n if (dataUtils.isNumericType(column.type) \r\n || dataUtils.getStringDataTypes().indexOf(column.type) >= 0) \r\n {\r\n if (value) {\r\n if (column.dataColumn && column.dataColumn.displayFormat\r\n && DFMT_REGEX.test(column.dataColumn.displayFormat)) {\r\n value = column.dataColumn.displayFormat.replace(DFMT_REGEX, (_, $1) => {\r\n return i18n.numberToStr(value, $1);\r\n });\r\n }\r\n else {\r\n value = value.toLocaleString();\r\n }\r\n\r\n \r\n const result = this.highlightText(value.toString());\r\n if (result instanceof HTMLElement) {\r\n cellElement.title = value;\r\n cellElement.appendChild(result);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n defaultRenderer(value, column, cellElement, rowElement);\r\n }\r\n\r\n private highlightText(content: string): HTMLElement | string{\r\n const normalizedContent = content.toLowerCase();\r\n const filterValue = this.filter.getValue().toString();\r\n if (filterValue && filterValue.length > 0 && content && content.length > 0) {\r\n \r\n const indexInMas = [];\r\n const words = filterValue.split('||').map(w => w.trim().toLowerCase());\r\n for(let i = 0; i < words.length; i++) {\r\n let pos = 0;\r\n const lowerWord = words[i];\r\n if (!lowerWord.length)\r\n continue;\r\n if (lowerWord === normalizedContent) {\r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content;\r\n \r\n return highlightSpan;\r\n }\r\n while (pos < content.length - 1) {\r\n const index = normalizedContent.indexOf(lowerWord, pos);\r\n if (index >= 0) {\r\n indexInMas.push({index: index, length: words[i].length});\r\n pos = index + lowerWord.length;\r\n } else {\r\n pos++;\r\n }\r\n }\r\n }\r\n \r\n if (indexInMas.length > 0) {\r\n \r\n //sort array item by index\r\n indexInMas.sort((item1, item2) => {\r\n \r\n if (item1.index > item2.index) {\r\n return 1;\r\n } \r\n else if (item1.index == item2.index2) {\r\n return 0;\r\n } \r\n else {\r\n return -1;\r\n }\r\n \r\n });\r\n \r\n //remove intersecting gaps\r\n for(let i = 0; i < indexInMas.length - 1;) {\r\n const delta = indexInMas[i + 1].index - (indexInMas[i].index + indexInMas[i].length);\r\n if (delta < 0) {\r\n const addDelta = indexInMas[i + 1].length + delta;\r\n if (addDelta > 0) {\r\n indexInMas[i].length += addDelta;\r\n }\r\n indexInMas.splice(i + 1, 1);\r\n } else {\r\n i++;\r\n }\r\n }\r\n \r\n const div = document.createElement('div');\r\n for (let i = 0; i < indexInMas.length; i++) {\r\n if (i === 0) {\r\n const text = document.createTextNode(content.substring(0, indexInMas[i].index));\r\n div.appendChild(text);\r\n }\r\n \r\n const highlightSpan = document.createElement('span');\r\n highlightSpan.style.backgroundColor = 'yellow';\r\n highlightSpan.innerText = content.substring(indexInMas[i].index,\r\n indexInMas[i].index + indexInMas[i].length)\r\n \r\n div.appendChild(highlightSpan);\r\n\r\n const text = (i < indexInMas.length - 1) \r\n ? document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length, indexInMas[i + 1].index))\r\n : document.createTextNode(content.substring(indexInMas[i].index\r\n + indexInMas[i].length));\r\n\r\n div.appendChild(text);\r\n }\r\n \r\n return div;\r\n }\r\n }\r\n\r\n return content;\r\n }\r\n}","import { \r\n DataRow, DataType, EasyDataTable, \r\n EditorTag, EntityAttrKind, i18n, \r\n MetaEntityAttr, utils as dataUtils,\r\n ValueEditor\r\n} from '@easydata/core';\r\n\r\nimport { \r\n browserUtils, DateTimePickerOptions, \r\n DefaultDateTimePicker, DefaultDialogService, \r\n domel, DomElementBuilder, EasyGrid \r\n} from '@easydata/ui';\r\n\r\nimport * as crudUtils from '../utils/utils';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityEditForm } from './entity_edit_form';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nconst isIE = browserUtils.IsIE();\r\n\r\nexport type FormBuildParams = {\r\n values?: DataRow,\r\n isEditForm?: boolean;\r\n};\r\n\r\nexport class EntityEditFormBuilder {\r\n private form: EntityEditForm;\r\n\r\n constructor(private context: DataContext, private params?: FormBuildParams) {\r\n this.params = params || {};\r\n this.reset();\r\n }\r\n\r\n public reset() {\r\n this.form = new EntityEditForm(this.context);\r\n }\r\n\r\n private setupLookupField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, value: any): void {\r\n const lookupEntity = this.context.getMetaData().getRootEntity()\r\n .subEntities.filter(ent => ent.id == attr.lookupEntity)[0];\r\n const dataAttr = this.context.getMetaData().getAttributeById(attr.dataAttr);\r\n\r\n if (!dataAttr) return;\r\n\r\n readOnly = readOnly || !dataAttr.isEditable;\r\n\r\n value = this.params.values\r\n ? this.params.values.getValue(dataAttr.id)\r\n : undefined;\r\n\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n let inputEl: HTMLInputElement;\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n b.attr('readonly', '');\r\n\r\n b.name(dataAttr.id)\r\n b.type(this.resolveInputType(dataAttr.dataType));\r\n\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString() : '');\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText('NavigationBtnTitle'))\r\n .addText('...')\r\n .on('click', (ev) => {\r\n const lookupTable = new EasyDataTable({\r\n loader: {\r\n loadChunk: (chunkParams) => this.context.getDataLoader()\r\n .loadChunk({ ...chunkParams, id: lookupEntity.id } as any)\r\n }\r\n });\r\n\r\n this.context.getDataLoader()\r\n .loadChunk({ offset: 0, limit: 1000, needTotal: true, sourceId: lookupEntity.id } as any)\r\n .then(data => {\r\n for (const col of data.table.columns.getItems()) {\r\n const attrs = lookupEntity.attributes.filter(attr =>\r\n attr.id == col.id && (attr.isPrimaryKey || attr.showInLookup));\r\n\r\n if (attrs.length) {\r\n lookupTable.columns.add(col);\r\n }\r\n }\r\n\r\n lookupTable.setTotal(data.total);\r\n\r\n for (const row of data.table.getCachedRows()) {\r\n lookupTable.addRow(row);\r\n }\r\n\r\n const ds = new DefaultDialogService();\r\n let gridSlot: HTMLElement = null;\r\n\r\n let selectedSlot: HTMLElement = null;\r\n\r\n let widgetSlot: HTMLElement;\r\n const slot = domel('div')\r\n .addClass(`kfrm-form`)\r\n .addChild('div', b => b\r\n .addClass(`kfrm-field`)\r\n .addChild('label', b => b\r\n .addText(i18n.getText('LookupSelectedItem'))\r\n .toDOM()\r\n )\r\n .addChild('div', b => selectedSlot = b\r\n .addText('None')\r\n .toDOM()\r\n )\r\n )\r\n .addChild('div', b => widgetSlot = b.toDOM())\r\n .addChild('div', b => b\r\n .addClass('kfrm-control')\r\n .addChild('div', b => gridSlot = b.toDOM())\r\n )\r\n .toDOM();\r\n\r\n let selectedValue = inputEl.value;\r\n\r\n const getValue = (row: DataRow | any, colId: string) => {\r\n\r\n if (row instanceof DataRow) {\r\n return row.getValue(colId);\r\n }\r\n\r\n const property = colId.substring(colId.lastIndexOf('.') + 1);\r\n return row[property]\r\n }\r\n\r\n const updateSelectedValue = (row: DataRow | any) => {\r\n selectedSlot.innerHTML = lookupTable.columns\r\n .getItems()\r\n .map(col => {\r\n return `<b>${col.label}:</b> ${getValue(row, col.id)}`\r\n })\r\n .join(', ');\r\n }\r\n\r\n if (selectedValue) {\r\n const attr = lookupEntity.getFirstPrimaryAttr();\r\n const key = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n this.context.fetchRecord({[key]: selectedValue}, lookupEntity.id)\r\n .then(data => {\r\n if (data.entity) {\r\n updateSelectedValue(data.entity);\r\n }\r\n })\r\n .catch(error => {\r\n console.error(error);\r\n });\r\n }\r\n\r\n const lookupGrid = new EasyGrid({\r\n slot: gridSlot,\r\n dataTable: lookupTable,\r\n fixHeightOnFirstRender: true,\r\n paging: {\r\n pageSize: 10\r\n },\r\n onActiveRowChanged: (ev) => {\r\n lookupGrid.getData().getRow(ev.rowIndex)\r\n .then((row) => {\r\n selectedValue = row.getValue(attr.lookupDataAttr);\r\n updateSelectedValue(row);\r\n });\r\n }\r\n });\r\n\r\n ds.open({\r\n title: i18n.getText('LookupDlgCaption')\r\n .replace('{entity}', lookupEntity.caption),\r\n body: slot,\r\n arrangeParents: true,\r\n beforeOpen: () => {\r\n const dataFilter = this.context.createFilter(lookupEntity.id, lookupGrid.getData(), true);\r\n new TextFilterWidget(widgetSlot, lookupGrid, dataFilter,\r\n { instantMode: true, focus: true });\r\n },\r\n onSubmit: () => {\r\n inputEl.value = selectedValue;\r\n return true;\r\n },\r\n onDestroy: () => {\r\n lookupGrid.destroy();\r\n // return focus on button\r\n b.toDOM().focus();\r\n }\r\n });\r\n });\r\n })\r\n );\r\n });\r\n }\r\n\r\n private setupDateTimeField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden: boolean) {\r\n const horizClass = isIE\r\n ? 'kfrm-fields-ie is-horizontal'\r\n : 'kfrm-fields is-horizontal';\r\n\r\n const editFormat = crudUtils.getEditDateTimeFormat(attr.dataType);\r\n\r\n let inputEl: HTMLInputElement;\r\n let btnEl: HTMLButtonElement;\r\n\r\n const mask = editFormat\r\n .replace('yyyy', '9999')\r\n .replace('MM', '99')\r\n .replace('dd', '99')\r\n .replace('HH', '99')\r\n .replace('mm', '99')\r\n .replace('ss', '99')\r\n\r\n domel(parent)\r\n .addChild('div', b => {\r\n b\r\n .addClass(horizClass)\r\n .addChild('input', b => {\r\n inputEl = b.toDOM();\r\n\r\n b.name(attr.id)\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n else {\r\n b.mask(mask)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .on('input', ev => {\r\n b.removeClass('is-invalid');\r\n try {\r\n const newDate = dataUtils.strToDateTime(inputEl.value, editFormat);\r\n }\r\n catch (e) {\r\n b.addClass('is-invalid');\r\n }\r\n finally {\r\n\r\n }\r\n })\r\n .on('blur', ev => {\r\n if (inputEl.value === mask.replace(/[9]/g, '_')) {\r\n inputEl.value = '';\r\n }\r\n });\r\n }\r\n\r\n b.value((dataUtils.IsDefinedAndNotNull(value)\r\n ? dataUtils.dateTimeToStr(value, editFormat)\r\n : ''))\r\n });\r\n\r\n if (!readOnly)\r\n b.addChild('button', b => btnEl = b\r\n .addClass('kfrm-button')\r\n .attr('title', i18n.getText(attr.dataType !== DataType.Time\r\n ? 'CalendarBtnTitle'\r\n : 'TimerBtnTitle'))\r\n .addChild('i', b => b.addClass(attr.dataType !== DataType.Time\r\n ? 'ed-calendar-icon'\r\n : 'ed-timer-icon'))\r\n .on('click', (ev) => {\r\n\r\n let value: Date;\r\n try {\r\n value = inputEl.value.length\r\n ? attr.dataType !== DataType.Time\r\n ? dataUtils.strToDateTime(inputEl.value, editFormat)\r\n : dataUtils.strToTime(inputEl.value)\r\n : new Date(new Date().setSeconds(0));\r\n }\r\n catch {\r\n value = new Date(new Date().setSeconds(0));\r\n }\r\n\r\n const pickerOptions: DateTimePickerOptions = {\r\n zIndex: 9999999999,\r\n showCalendar: attr.dataType !== DataType.Time,\r\n showTimePicker: attr.dataType !== DataType.Date,\r\n onApply: (dateTime: Date) => {\r\n dateTime.setSeconds(0);\r\n dateTime.setMilliseconds(0);\r\n\r\n inputEl.value = dataUtils.dateTimeToStr(dateTime, editFormat);\r\n\r\n }\r\n };\r\n\r\n const dtp = new DefaultDateTimePicker(pickerOptions);\r\n dtp.setDateTime(value);\r\n dtp.show(ev.target as HTMLElement);\r\n\r\n }).toDOM()\r\n );\r\n });\r\n }\r\n\r\n private setupListField(parent: HTMLElement, attr: MetaEntityAttr, value: any, values: any, readOnly: boolean) {\r\n domel(parent)\r\n .addChild('div', b => b\r\n .addClass('kfrm-select full-width')\r\n .addChild('select', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n b.attr('name', attr.id)\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n if (values) {\r\n for (let i = 0; i < values.length; i++) {\r\n const val = values[i];\r\n b.addOption({\r\n value: val.id,\r\n title: val.text,\r\n selected: i === 0\r\n });\r\n }\r\n }\r\n b.value(value);\r\n })\r\n );\r\n }\r\n\r\n private setupFileField(parent: HTMLElement, attr: MetaEntityAttr, readOnly: boolean, accept: string) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n b.attr('accept', accept);\r\n });\r\n }\r\n\r\n private setupTextField(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean, hidden : boolean) {\r\n domel(parent)\r\n .addChild('input', b => {\r\n if (readOnly) {\r\n b.attr('readonly', '');\r\n }\r\n b.type(hidden ? 'hidden' : this.resolveInputType(attr.dataType));\r\n\r\n b.name(attr.id)\r\n .type(this.resolveInputType(attr.dataType));\r\n\r\n if (attr.dataType == DataType.Bool) {\r\n if (value)\r\n b.attr('checked', '');\r\n } \r\n else {\r\n b.on('keypress', (ev) => this.applySumbit(ev as KeyboardEvent))\r\n .value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n }\r\n });\r\n }\r\n\r\n private setupTextArea(parent: HTMLElement, attr: MetaEntityAttr, value: any, readOnly: boolean) {\r\n // feature: modify size in value editor ??\r\n domel(parent)\r\n .addChild('textarea', b => {\r\n if (readOnly)\r\n b.attr('readonly', '');\r\n \r\n b.attr('name', attr.id)\r\n b.setStyle('height', `120px`)\r\n b.value(dataUtils.IsDefinedAndNotNull(value)\r\n ? value.toString()\r\n : '');\r\n });\r\n }\r\n\r\n private addFormField(parent: HTMLElement, attr: MetaEntityAttr) {\r\n const value = (this.params.values && attr.kind !== EntityAttrKind.Lookup)\r\n ? this.params.values.getValue(attr.id)\r\n : !this.params.isEditForm\r\n ? attr.defaultValue\r\n : undefined;\r\n\r\n const editor = this.resolveEditor(attr);\r\n\r\n const readOnly = this.params.isEditForm && (attr.isPrimaryKey || !attr.isEditable);\r\n const required = !attr.isNullable;\r\n \r\n if (isIE) {\r\n parent = domel('div', parent)\r\n .addClass('kfrm-field-ie')\r\n .toDOM();\r\n }\r\n\r\n domel(parent)\r\n .addChild('label', b => {\r\n b.attr('for', attr.id);\r\n b.addHtml(`${attr.caption} ${required ? '<sup style=\"color: red\">*</sup>' : ''}: `);\r\n\r\n if (attr.description) {\r\n b.addChild('div', b => b\r\n .attr('title', attr.description)\r\n .addClass('question-mark')\r\n .setStyle('vertical-align', 'middle')\r\n .setStyle('display', 'inline-block')\r\n );\r\n }\r\n });\r\n \r\n const hidden = attr.isPrimaryKey;\r\n \r\n if (attr.kind === EntityAttrKind.Lookup) {\r\n this.setupLookupField(parent, attr, readOnly, value);\r\n return;\r\n }\r\n\r\n switch (editor.tag) {\r\n case EditorTag.DateTime:\r\n this.setupDateTimeField(parent, attr, value, readOnly, hidden);\r\n break;\r\n\r\n case EditorTag.List:\r\n this.setupListField(parent, attr, value, editor.values, readOnly);\r\n break;\r\n\r\n case EditorTag.File:\r\n this.setupFileField(parent, attr, readOnly, editor.accept);\r\n break;\r\n\r\n case EditorTag.Edit:\r\n default:\r\n if (editor.multiline) {\r\n this.setupTextArea(parent, attr, value, readOnly);\r\n }\r\n else {\r\n this.setupTextField(parent, attr, value, readOnly, hidden);\r\n }\r\n break;\r\n }\r\n }\r\n\r\n private resolveInputType(dataType: DataType): string {\r\n if (dataType === DataType.Bool)\r\n return 'checkbox';\r\n\r\n if (dataType === DataType.Blob)\r\n return 'file';\r\n\r\n return 'text';\r\n }\r\n\r\n private resolveEditor(attr: MetaEntityAttr): ValueEditor {\r\n let editor = attr.defaultEditor || new ValueEditor();\r\n if (editor.tag == EditorTag.Unknown) {\r\n if (dataUtils.getDateDataTypes().indexOf(attr.dataType) >= 0) {\r\n editor.tag = EditorTag.DateTime;\r\n }\r\n else {\r\n editor.tag = EditorTag.Edit;\r\n }\r\n }\r\n\r\n return editor;\r\n }\r\n\r\n private applySumbit(ev: KeyboardEvent): boolean {\r\n if (ev.keyCode === 13) {\r\n this.sumbitCallback && this.sumbitCallback();\r\n return false;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n private sumbitCallback: () => void;\r\n\r\n public onSubmit(sumbitCallback: () => void) {\r\n this.sumbitCallback = sumbitCallback;\r\n return this;\r\n }\r\n\r\n public build(): EntityEditForm {\r\n let fb: DomElementBuilder<HTMLDivElement>;\r\n const formHtml =\r\n domel('div')\r\n .addClass('kfrm-form')\r\n .addChild('div', b => b\r\n .addClass(`errors-block`)\r\n .toDOM()\r\n )\r\n .addChild('div', b => {\r\n b.addClass(`${isIE\r\n ? 'kfrm-fields-ie col-ie-1-4 label-align-right'\r\n : 'kfrm-fields col-a-1 label-align-right'}`);\r\n\r\n fb = b;\r\n })\r\n .toDOM();\r\n\r\n this.form['setHtmlInt'](formHtml);\r\n\r\n for (const attr of this.context.getActiveEntity().attributes) { \r\n if (!this.params.isEditForm && !attr.showOnCreate)\r\n continue;\r\n\r\n if (!attr.isPrimaryKey && this.params.isEditForm && !attr.showOnEdit) {\r\n continue;\r\n }\r\n\r\n this.addFormField(fb.toDOM(), attr)\r\n }\r\n\r\n return this.form;\r\n }\r\n}","export class ProgressBar {\r\n\r\n constructor(private slot: HTMLElement) {\r\n this.hide();\r\n this.slot.classList.add('ed-progress-bar');\r\n }\r\n\r\n public show() {\r\n this.slot.style.removeProperty('display');\r\n }\r\n\r\n public hide() {\r\n this.slot.style.display = 'none';\r\n }\r\n}","import { \r\n DataChunkDescriptor, \r\n DataLoader, EasyDataTable \r\n} from '@easydata/core';\r\n\r\nimport { DataContext } from './data_context';\r\n\r\nexport class EasyDataServerLoader implements DataLoader {\r\n constructor(protected context: DataContext) {\r\n\r\n }\r\n\r\n loadChunk(params: DataChunkDescriptor | any) {\r\n const url = this.context.resolveEndpoint('FetchDataset', \r\n { sourceId: params.sourceId || this.context.getActiveEntity().id });\r\n delete params.sourceId;\r\n\r\n this.context.startProcess();\r\n const http = this.context.getHttpClient();\r\n return http.post(url, params)\r\n .then((result) => {\r\n\r\n const dataTable = new EasyDataTable({\r\n chunkSize: 1000\r\n });\r\n\r\n const resultSet = result.resultSet;\r\n for(const col of resultSet.cols) {\r\n dataTable.columns.add(col);\r\n }\r\n\r\n for(const row of resultSet.rows) {\r\n dataTable.addRow(row);\r\n }\r\n \r\n let totalRecords = 0;\r\n if (result.meta && result.meta.totalRecords) {\r\n totalRecords = result.meta.totalRecords; \r\n }\r\n\r\n return {\r\n table: dataTable,\r\n total: totalRecords,\r\n hasNext: !params.needTotal \r\n || params.offset + params.limit < totalRecords\r\n }\r\n \r\n })\r\n .finally(() => {\r\n this.context.endProcess();\r\n });\r\n }\r\n\r\n}","import { \r\n HttpClient, MetaData,\r\n MetaEntity, combinePath, \r\n EasyDataTable, EasyDataTableOptions,\r\n DataLoader\r\n} from '@easydata/core';\r\nimport { DataFilter } from '../filter/data_filter';\r\nimport { TextDataFilter } from '../filter/text_data_filter';\r\n\r\nimport { EasyDataServerLoader } from './easy_data_server_loader';\r\n\r\ntype EasyDataEndpointKey = \r\n 'GetMetaData' |\r\n 'FetchDataset' | \r\n 'FetchRecord' |\r\n 'CreateRecord' |\r\n 'UpdateRecord' |\r\n 'DeleteRecord' ;\r\n\r\n\r\ninterface CompoundRecordKey { \r\n [key: string]: string \r\n}\r\n \r\nexport interface EasyDataContextOptions {\r\n metaDataId?: string;\r\n endpoint?: string;\r\n dataTable?: EasyDataTableOptions,\r\n onProcessStart?: () => void;\r\n onProcessEnd?: () => void;\r\n}\r\n\r\nexport class DataContext {\r\n private endpoints: Map<string, string> = new Map<string, string>();\r\n\r\n private http: HttpClient;\r\n\r\n private model: MetaData;\r\n\r\n private data: EasyDataTable;\r\n\r\n private dataLoader: EasyDataServerLoader;\r\n\r\n private activeEntity: MetaEntity;\r\n\r\n private options: EasyDataContextOptions;\r\n\r\n constructor(options?: EasyDataContextOptions) {\r\n this.options = options || {};\r\n\r\n this.http = new HttpClient();\r\n this.model = new MetaData();\r\n this.model.id = options.metaDataId || '__default';\r\n\r\n this.dataLoader = new EasyDataServerLoader(this);\r\n const dataTableOptions = {\r\n loader: this.dataLoader,\r\n ...options.dataTable\r\n };\r\n\r\n this.data = new EasyDataTable(dataTableOptions);\r\n\r\n this.setDefaultEndpoints(this.options.endpoint || '/api/easydata');\r\n }\r\n\r\n public getActiveEntity() {\r\n return this.activeEntity;\r\n }\r\n\r\n public setActiveSource(entityId: string) {\r\n this.activeEntity = this.model.getRootEntity().subEntities\r\n .filter(e => e.id == entityId)[0];\r\n }\r\n\r\n public getMetaData(): MetaData {\r\n return this.model;\r\n }\r\n\r\n public getData() {\r\n return this.data;\r\n }\r\n\r\n public getDataLoader(): DataLoader {\r\n return this.dataLoader;\r\n }\r\n\r\n public createFilter(): DataFilter\r\n public createFilter(sourceId: string, data: EasyDataTable, isLookup?: boolean): DataFilter\r\n public createFilter(sourceId?: string, data?: EasyDataTable, isLookup?: boolean): DataFilter {\r\n return new TextDataFilter(\r\n this.dataLoader, \r\n data || this.getData(), \r\n sourceId || this.activeEntity.id, \r\n isLookup);\r\n }\r\n\r\n public loadMetaData(): Promise<MetaData> {\r\n const url = this.resolveEndpoint('GetMetaData');\r\n this.startProcess();\r\n return this.http.get(url) \r\n .then(result => {\r\n if (result.model) {\r\n this.model.loadFromData(result.model);\r\n }\r\n\r\n return this.model;\r\n })\r\n .catch(error => { \r\n console.error(`Error: ${error.message}. Source: ${error.sourceError}`);\r\n return null;\r\n })\r\n .finally(() => {\r\n this.endProcess();\r\n });\r\n }\r\n\r\n public getHttpClient() {\r\n return this.http;\r\n }\r\n\r\n public fetchDataset() {\r\n this.data.clear();\r\n return this.dataLoader.loadChunk({offset: 0, limit: this.data.chunkSize, needTotal: true})\r\n .then(result => { \r\n for(const col of result.table.columns.getItems()) {\r\n this.data.columns.add(col);\r\n }\r\n\r\n this.data.setTotal(result.total);\r\n\r\n for(const row of result.table.getCachedRows()) {\r\n this.data.addRow(row);\r\n }\r\n\r\n return this.data;\r\n })\r\n }\r\n\r\n public fetchRecord(keys : CompoundRecordKey, sourceId?: string) {\r\n const url = this.resolveEndpoint('FetchRecord', { sourceId: sourceId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.get(url, { queryParams: keys})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public createRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('CreateRecord', \r\n { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public updateRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('UpdateRecord', { sourceId: sourceId || this.activeEntity.id });\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' })\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public deleteRecord(obj: any, sourceId?: string) {\r\n const url = this.resolveEndpoint('DeleteRecord', { sourceId: sourceId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json'})\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public setEndpoint(key: EasyDataEndpointKey, value: string) : void\r\n public setEndpoint(key: EasyDataEndpointKey | string, value: string) : void {\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey, value: string): void\r\n public setEnpointIfNotExist(key: EasyDataEndpointKey | string, value: string): void {\r\n if (!this.endpoints.has(key))\r\n this.endpoints.set(key, value);\r\n }\r\n\r\n private endpointVarsRegex = /\\{.*?\\}/g;\r\n\r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey, options?: any): string \r\n public resolveEndpoint(endpointKey: EasyDataEndpointKey | string, options?: any) : string {\r\n options = options || {};\r\n\r\n let result = this.endpoints.get(endpointKey);\r\n if (!result) {\r\n throw endpointKey + ' endpoint is not defined'; \r\n }\r\n\r\n let matches = result.match(this.endpointVarsRegex);\r\n if (matches) {\r\n for (let match of matches) {\r\n let opt = match.substring(1, match.length - 1);\r\n let optVal = options[opt];\r\n if (!optVal) {\r\n if (opt == 'modelId') {\r\n optVal = this.model.getId();\r\n }\r\n else if (opt == 'sourceId') {\r\n optVal = this.activeEntity.id;\r\n }\r\n else {\r\n throw `Parameter [${opt}] is not defined`;\r\n }\r\n }\r\n \r\n result = result.replace(match, optVal);\r\n }\r\n }\r\n \r\n return result;\r\n }\r\n\r\n public startProcess() {\r\n if (this.options.onProcessStart)\r\n this.options.onProcessStart();\r\n }\r\n\r\n public endProcess() {\r\n if (this.options.onProcessEnd)\r\n this.options.onProcessEnd();\r\n }\r\n\r\n private setDefaultEndpoints(endpointBase : string) {\r\n this.setEnpointIfNotExist('GetMetaData', combinePath(endpointBase, 'models/{modelId}'));\r\n this.setEnpointIfNotExist('FetchDataset', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('FetchRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/fetch'));\r\n this.setEnpointIfNotExist('CreateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/create'));\r\n this.setEnpointIfNotExist('UpdateRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/update'));\r\n this.setEnpointIfNotExist('DeleteRecord', combinePath(endpointBase, 'models/{modelId}/sources/{sourceId}/delete'));\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from './validator';\r\n\r\nexport class TypeValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Type';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!dataUtils.IsDefinedAndNotNull(value) || value == '')\r\n return { successed: true };\r\n\r\n if (dataUtils.isNumericType(attr.dataType)) {\r\n if (!dataUtils.isNumeric(value))\r\n return { \r\n successed: false, \r\n messages: [ i18n.getText('NumberError') ]\r\n };\r\n\r\n\r\n if (dataUtils.isIntType(attr.dataType) \r\n && !Number.isInteger(Number.parseFloat(value))) {\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('IntNumberError') ]\r\n }\r\n }\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { MetaEntityAttr, i18n, utils as dataUtils } from '@easydata/core';\r\nimport { ValidationResult, Validator } from \"./validator\";\r\n\r\nexport class RequiredValidator extends Validator {\r\n\r\n constructor() {\r\n super();\r\n this.name = 'Required';\r\n }\r\n\r\n public validate(attr: MetaEntityAttr, value: any): ValidationResult {\r\n \r\n if (!attr.isNullable && (\r\n !dataUtils.IsDefinedAndNotNull(value)\r\n || value === ''))\r\n\r\n return {\r\n successed: false,\r\n messages: [ i18n.getText('RequiredError') ]\r\n }\r\n\r\n return { successed: true };\r\n }\r\n}","import { DataRow, i18n, utils as dataUtils } from '@easydata/core';\r\n\r\nimport { \r\n DefaultDialogService, \r\n DialogService, domel, EasyGrid, \r\n GridCellRenderer, GridColumn, RowClickEvent \r\n} from '@easydata/ui';\r\n\r\nimport { EntityEditFormBuilder } from '../form/entity_form_builder';\r\nimport { TextFilterWidget } from '../widgets/text_filter_widget';\r\n\r\nimport { DataContext } from '../main/data_context';\r\nimport { RequiredValidator } from '../validators/required_validator';\r\nimport { TypeValidator } from '../validators/type_validator';\r\nimport { Validator } from '../validators/validator';\r\nimport { EasyDataViewOptions } from './options';\r\nimport { setLocation } from '../utils/utils';\r\n\r\nexport class EntityDataView {\r\n private options: EasyDataViewOptions = {\r\n showFilterBox: true,\r\n showBackToEntities: true\r\n }\r\n\r\n private dlg: DialogService;\r\n\r\n private grid: EasyGrid;\r\n\r\n private filterWidget : TextFilterWidget;\r\n\r\n private defaultValidators: Validator[] = [ new RequiredValidator(), new TypeValidator()];\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string,\r\n options: EasyDataViewOptions) \r\n {\r\n this.options = dataUtils.assignDeep(this.options, options || {});\r\n\r\n this.dlg = new DefaultDialogService();\r\n\r\n const ent = this.context.getActiveEntity();\r\n if (!ent) {\r\n throw \"Can't find active entity for \" + window.location.pathname;\r\n }\r\n \r\n this.slot.innerHTML += `<h1>${ent.captionPlural || ent.caption}</h1>`;\r\n if (this.options.showBackToEntities) {\r\n domel(this.slot)\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(`← ${i18n.getText('BackToEntities')}`)\r\n .on('click', (e) => {\r\n e.preventDefault();\r\n setLocation(this.basePath);\r\n })\r\n );\r\n }\r\n\r\n this.renderGrid();\r\n }\r\n\r\n private syncGridColumnHandler(column: GridColumn) {\r\n if (column.dataColumn) {\r\n const attr = this.context.getMetaData().getAttributeById(column.dataColumn.id);\r\n if (attr) {\r\n column.isVisible = attr.showOnView;\r\n }\r\n }\r\n }\r\n\r\n private renderGrid() {\r\n this.context.fetchDataset()\r\n .then(result => {\r\n const gridSlot = document.createElement('div');\r\n this.slot.appendChild(gridSlot);\r\n gridSlot.id = 'Grid';\r\n this.grid = new EasyGrid(dataUtils.assignDeep({\r\n slot: gridSlot,\r\n dataTable: result,\r\n paging: {\r\n pageSize: 15,\r\n allowPageSizeChange: true,\r\n pageSizeItems: [15, 30, 50, 100, 200]\r\n },\r\n showPlusButton: this.context.getActiveEntity().isEditable,\r\n plusButtonTitle: i18n.getText('AddRecordBtnTitle'),\r\n showActiveRow: false,\r\n onPlusButtonClick: this.addClickHandler.bind(this),\r\n onGetCellRenderer: this.manageCellRenderer.bind(this),\r\n onRowDbClick: this.rowDbClickHandler.bind(this),\r\n onSyncGridColumn: this.syncGridColumnHandler.bind(this)\r\n }, this.options.grid || {}));\r\n\r\n if (this.options.showFilterBox) {\r\n let filterWidgetSlot: HTMLElement;\r\n const filterBarDiv = domel('div')\r\n .addClass(`kfrm-form`)\r\n .setStyle('margin', '10px 0px')\r\n .addChild('div', b => \r\n filterWidgetSlot = b.toDOM()\r\n ).toDOM();\r\n \r\n this.slot.insertBefore(filterBarDiv, gridSlot);\r\n \r\n const dataFilter = this.context.createFilter();\r\n this.filterWidget = new TextFilterWidget(filterWidgetSlot, this.grid, dataFilter); \r\n }\r\n });\r\n }\r\n\r\n private manageCellRenderer(column: GridColumn, defaultRenderer: GridCellRenderer) {\r\n if (column.isRowNum) {\r\n column.width = 110;\r\n return (value: any, column: GridColumn, cell: HTMLElement, rowEl: HTMLElement) => {\r\n const b = domel('div', cell)\r\n .addClass(`keg-cell-value`);\r\n \r\n if (this.context.getActiveEntity().isEditable) {\r\n b.addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('EditBtn'))\r\n .on('click', (ev) => this.editClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n )\r\n .addChild('span', b => b.text(' | '))\r\n .addChild('a', b => b\r\n .attr('href', 'javascript:void(0)')\r\n .text(i18n.getText('DeleteBtn'))\r\n .on('click', (ev) => \r\n this.deleteClickHandler(ev as MouseEvent, \r\n parseInt(rowEl.getAttribute('data-row-idx'))))\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private addClickHandler() {\r\n const activeEntity = this.context.getActiveEntity();\r\n const form = new EntityEditFormBuilder(this.context)\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n\r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('AddDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n \r\n form.getData()\r\n .then(obj => this.context.createRecord(obj))\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n });\r\n }\r\n\r\n private editClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n this.showEditForm(row);\r\n }\r\n })\r\n }\r\n\r\n private showEditForm(row: DataRow) {\r\n const activeEntity = this.context.getActiveEntity();\r\n\r\n const form = new EntityEditFormBuilder(this.context, { isEditForm: true, values: row })\r\n .onSubmit(() => dlg.submit())\r\n .build();\r\n \r\n form.useValidators(this.defaultValidators);\r\n\r\n const dlg = this.dlg.open({\r\n title: i18n.getText('EditDlgCaption')\r\n .replace('{entity}', activeEntity.caption),\r\n body: form.getHtml(),\r\n onSubmit: () => {\r\n if (!form.validate())\r\n return false;\r\n\r\n form.getData()\r\n .then(obj => this.context.updateRecord(obj))\r\n .then(() => { \r\n return this.refreshData();\r\n }) \r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n\r\n private rowDbClickHandler(ev: RowClickEvent) {\r\n if (this.context.getActiveEntity().isEditable) {\r\n this.showEditForm(ev.row);\r\n }\r\n }\r\n\r\n private deleteClickHandler(ev: MouseEvent, rowIndex: number) {\r\n this.grid.getData().getRow(rowIndex)\r\n .then(row => {\r\n if (row) {\r\n const activeEntity = this.context.getActiveEntity();\r\n const keyAttrs = activeEntity.getPrimaryAttrs();\r\n const keyVals = keyAttrs.map(attr => row.getValue(attr.id));\r\n const keys = keyAttrs.reduce((val, attr, index) => { \r\n const property = attr.id.substring(attr.id.lastIndexOf('.') + 1);\r\n val[property] = keyVals[index];\r\n return val; \r\n }, {});\r\n this.dlg.openConfirm(\r\n i18n.getText('DeleteDlgCaption')\r\n .replace('{entity}', activeEntity.caption), \r\n i18n.getText('DeleteDlgMessage')\r\n .replace('{recordId}', Object.keys(keys)\r\n .map(key => `${key}:${keys[key]}`).join(';')), \r\n )\r\n .then((result) => {\r\n if (result) {\r\n this.context.deleteRecord(keys)\r\n .then(() => {\r\n return this.refreshData();\r\n })\r\n .catch((error) => {\r\n this.processError(error);\r\n });\r\n }\r\n })\r\n }\r\n });\r\n }\r\n\r\n private processError(error) {\r\n this.dlg.open({\r\n title: 'Ooops, something went wrong',\r\n body: error.message,\r\n closable: true,\r\n cancelable: false\r\n });\r\n }\r\n\r\n private refreshData(): Promise<void> {\r\n return this.context.fetchDataset()\r\n .then(() => {\r\n let processed = false;\r\n if (this.filterWidget) { \r\n processed = this.filterWidget.applyFilter(false);\r\n }\r\n\r\n if (!processed) {\r\n this.grid.refresh();\r\n }\r\n });\r\n }\r\n}","import { i18n, MetaData } from '@easydata/core';\r\nimport { domel } from '@easydata/ui';\r\nimport { setLocation } from '../utils/utils';\r\nimport { DataContext } from '../main/data_context';\r\n\r\nexport class RootDataView {\r\n private metaData: MetaData;\r\n\r\n constructor (\r\n private slot: HTMLElement, \r\n private context: DataContext, \r\n private basePath: string) {\r\n\r\n this.metaData = this.context.getMetaData();\r\n this.slot.innerHTML += `<h1>${i18n.getText('RootViewTitle')}</h1>`;\r\n\r\n this.renderEntitySelector();\r\n }\r\n\r\n private renderEntitySelector() {\r\n const entities = this.metaData.getRootEntity().subEntities;\r\n if (this.slot) {\r\n domel(this.slot)\r\n .addChild('div', b => b\r\n .addClass('ed-root')\r\n .addChild('div', b => b\r\n .addClass('ed-menu-description')\r\n .addText(i18n.getText(!this.metaData.isEmpty() ? 'EntityMenuDesc' : 'ModelIsEmpty'))\r\n )\r\n .addChild('ul', b => {\r\n b.addClass('ed-entity-menu');\r\n entities.forEach(ent => {\r\n b.addChild('li', b => {\r\n b.addClass('ed-entity-item')\r\n .on('click', () => {\r\n setLocation(`${this.basePath}/${decodeURIComponent(ent.id)}`);\r\n })\r\n .addChild('div', b => {\r\n b.addClass('ed-entity-item-caption')\r\n .addText(ent.captionPlural || ent.caption);\r\n });\r\n\r\n if (ent.description) {\r\n b.addChild('div', b => {\r\n b.addClass('ed-entity-item-descr')\r\n .addText(`${ent.description}`);\r\n });\r\n }\r\n });\r\n });\r\n })\r\n );\r\n }\r\n }\r\n}","import { utils as dataUtils } from '@easydata/core';\r\n\r\nimport { ProgressBar } from '../widgets/progress_bar';\r\nimport { DataContext } from '../main/data_context';\r\nimport { EntityDataView } from './entity_data_view';\r\nimport { EasyDataViewDispatcherOptions } from './options';\r\nimport { RootDataView } from './root_data_view';\r\n\r\nexport class EasyDataViewDispatcher {\r\n private context: DataContext;\r\n private basePath: string;\r\n\r\n private container: HTMLElement;\r\n\r\n private options: EasyDataViewDispatcherOptions = {\r\n container: '#EasyDataContainer',\r\n basePath: 'easydata' \r\n };\r\n\r\n constructor(options?: EasyDataViewDispatcherOptions) {\r\n this.options = dataUtils.assign(this.options, options || {});\r\n\r\n if (this.options.rootEntity) {\r\n this.options.showBackToEntities = false;\r\n this.basePath = '/';\r\n }\r\n else {\r\n this.basePath = this.normalizeBasePath(this.options.basePath);\r\n }\r\n\r\n this.setContainer(this.options.container);\r\n\r\n const progressBarSlot = document.createElement('div');\r\n const bar = new ProgressBar(progressBarSlot); \r\n \r\n const parent = this.container.parentElement;\r\n parent.insertBefore(progressBarSlot, parent.firstElementChild);\r\n \r\n this.context = new DataContext({\r\n endpoint: this.options.endpoint,\r\n dataTable: this.options.dataTable,\r\n onProcessStart: () => bar.show(),\r\n onProcessEnd: () => bar.hide()\r\n });\r\n\r\n }\r\n \r\n private normalizeBasePath(basePath: string): string {\r\n basePath = this.trimSlashes(basePath);\r\n const fullPath = decodeURIComponent(window.location.pathname);\r\n const idx = fullPath.toLocaleLowerCase().indexOf(basePath);\r\n return idx >= 0 ? fullPath.substring(0, idx + basePath.length) : '/';\r\n }\r\n\r\n private trimSlashes(path: string): string {\r\n return path.replace(/^\\/|\\/$/g, '')\r\n }\r\n\r\n private setContainer(container: HTMLElement | string) {\r\n if (!container) {\r\n throw 'Container is undefined';\r\n }\r\n\r\n if (typeof container === 'string') {\r\n if (container.length){\r\n if (container[0] === '.') {\r\n const result = document.getElementsByClassName(container.substring(1));\r\n if (result.length) \r\n this.container = result[0] as HTMLElement;\r\n }\r\n else {\r\n if (container[0] === '#') {\r\n container = container.substring(1);\r\n }\r\n this.container = document.getElementById(container);\r\n }\r\n if (!this.container) {\r\n throw Error('Unrecognized `container` parameter: ' + container + '\\n' \r\n + 'It must be an element ID, a class name (starting with .) or an HTMLElement object itself.');\r\n }\r\n }\r\n }\r\n else {\r\n this.container = container;\r\n }\r\n }\r\n\r\n private getActiveSourceId(): string | null {\r\n if (this.options.rootEntity) \r\n return this.options.rootEntity;\r\n\r\n const path = decodeURIComponent(window.location.pathname);\r\n const idIndex = this.basePath.length + 1;\r\n return idIndex < path.length ? path.substring(idIndex) : null;\r\n }\r\n\r\n run(): Promise<void> { \r\n this.attach();\r\n\r\n return this.context.loadMetaData()\r\n .then(() => {\r\n this.setActiveView();\r\n })\r\n .catch(error => console.error(error))\r\n }\r\n\r\n private setActiveView() {\r\n this.clear();\r\n\r\n const sourceId = this.getActiveSourceId();\r\n if (sourceId) {\r\n this.context.setActiveSource(sourceId);\r\n window['EDView'] = new EntityDataView(this.container, this.context,\r\n this.basePath, this.options);\r\n }\r\n else {\r\n window['EDView'] = new RootDataView(this.container, this.context, this.basePath);\r\n }\r\n }\r\n\r\n private clear() {\r\n this.container.innerHTML = '';\r\n this.context.getData().clear();\r\n }\r\n\r\n private onSetLocation = () => {\r\n this.setActiveView();\r\n }\r\n\r\n private attach = () => {\r\n window.addEventListener('ed_set_location', this.onSetLocation);\r\n window.addEventListener('popstate', this.onSetLocation);\r\n }\r\n\r\n detach() {\r\n window.removeEventListener('ed_set_location', this.onSetLocation);\r\n window.removeEventListener('popstate', this.onSetLocation);\r\n }\r\n}","import { i18n } from '@easydata/core';\r\n\r\n\r\nfunction addEasyDataCRUDTexts() {\r\n i18n.updateDefaultTexts({\r\n RequiredError: 'Value is required.',\r\n NumberError: 'Value should be a number',\r\n IntNumberError: 'Value should be an integer number',\r\n DateTimeError: 'Invalid date or time value',\r\n LookupSelectedItem: 'Selected item: ',\r\n LookupDlgCaption: 'Select {entity}',\r\n None: 'None',\r\n NavigationBtnTitle: 'Navigation values',\r\n CalendarBtnTitle: 'Open calendar',\r\n TimerBtnTitle: 'Open timer',\r\n AddBtnTitle: 'Add',\r\n AddRecordBtnTitle: 'Add record',\r\n EditBtn: 'Edit',\r\n DeleteBtn: 'Delete',\r\n SelectLink: '[ select ]',\r\n AddDlgCaption: 'Create {entity}',\r\n EditDlgCaption: 'Edit {entity}',\r\n DeleteDlgCaption: 'Delete {entity}',\r\n DeleteDlgMessage: 'Are you sure you want to remove this record: {{recordId}}?',\r\n EntityMenuDesc: 'Click on an entity to view/edit its content',\r\n BackToEntities: 'Back to entities',\r\n SearchBtn: 'Search',\r\n SearchInputPlaceholder: 'Search...',\r\n RootViewTitle: 'Entities',\r\n ModelIsEmpty: 'No entity was found.'\r\n });\r\n}\r\n\r\naddEasyDataCRUDTexts();"],"sourceRoot":""}