@easydata/crud 1.4.1 → 1.4.3

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","getNumberFromatOptions","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","options","send","Get","post","Post","put","Put","delete","Delete","contentType","XMLHttpRequest","desc","beforeEachRequest","onRequest","dataToSend","JSON","stringify","Promise","resolve","reject","responseType","onreadystatechange","responseContentType","getResponseHeader","decodeArrayBuffer","response","responseText","responseObj","parse","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","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","configurable","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","cellElement","rowElement","cssPrefix","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","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","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","defVal","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","onerror","useValidator","useValidators","validator","internalFormat","valid","instantMode","instantTimeout","stringDefRenderer","highlightCellRenderer","numDefRenderer","horizClass","isEdgeOrIE","filterInput","inputKeydownHandler","inputKeyupHandler","clearButtonClickHander","searchButtonClickHandler","applyFilter","applyFilterTimeout","clearTimeout","defaultRenderer","highlightText","normalizedContent","insertValue1","insertValue2","indexInMas","lowerWord","item1","item2","addDelta","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","resolveEditor","isEditForm","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","showBackToEntities","defaultValidators","location","pathname","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBar","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","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, getNumberFromatOptions(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 getNumberFromatOptions(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 };\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 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 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.onreadystatechange = function () {\r\n if (xhr.readyState != 4) {\r\n return;\r\n }\r\n var responseContentType = xhr.getResponseHeader('Content-Type') || '';\r\n var status = xhr.status;\r\n if (status >= 400) {\r\n var rtPromise = (xhr.responseType === 'arraybuffer'\r\n || 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 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 return;\r\n }\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 resolve(responseObj);\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 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.isIntType(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\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 \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 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\nimport { domel } from '../utils/dom_elem_builder';\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, cellElement, rowElement) {\r\n var text = value ? value.toString().replace(/\\n/g, '\\u21B5 ') : '';\r\n var builder = domel('div', cellElement)\r\n .addClass(cssPrefix + \"-cell-value\")\r\n .addHtml(text)\r\n .title(value || '');\r\n if (column.align == GridColumnAlign.NONE) {\r\n builder.addClass(cssPrefix + \"-cell-value-align-left\");\r\n }\r\n};\r\nvar NumberCellRendererDefault = function (value, column, cellElement, 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 var builder = domel('div', cellElement)\r\n .addClass(cssPrefix + \"-cell-value\")\r\n .addHtml(strValue)\r\n .title(strValue);\r\n if (column.align == GridColumnAlign.NONE) {\r\n builder.addClass(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar DateTimeCellRendererDefault = function (value, column, cellElement, 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 var builder = domel('div', cellElement)\r\n .addClass(cssPrefix + \"-cell-value\")\r\n .addHtml(strValue)\r\n .title(strValue);\r\n if (column.align == GridColumnAlign.NONE) {\r\n builder.addClass(cssPrefix + \"-cell-value-align-right\");\r\n }\r\n};\r\nvar BoolCellRendererDefault = function (value, column, cellElement, 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, cellElement, rowElement);\r\n }\r\n else {\r\n domel('div', cellElement)\r\n .addClass(cssPrefix + \"-cell-value\")\r\n .addClass(cssPrefix + \"-cell-value-bool\")\r\n .addClass(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\nvar EasyGrid = /** @class */ (function () {\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 };\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 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 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 EasyGrid.prototype.setData = function (data) {\r\n this.dataTable = data;\r\n this.clear();\r\n this.refresh();\r\n };\r\n EasyGrid.prototype.getData = function () {\r\n return this.dataTable;\r\n };\r\n EasyGrid.prototype.getColumns = function () {\r\n return this.columns;\r\n };\r\n EasyGrid.prototype.destroy = function () {\r\n this.slot.innerHTML = \"\";\r\n };\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 EasyGrid.prototype.clear = function () {\r\n this.pagination.page = 1;\r\n this.clearDOM();\r\n };\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.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 if (column.cellRenderer) {\r\n column.cellRenderer(value, column, builder.toDOM(), rowElement);\r\n }\r\n return builder.toDOM();\r\n };\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 EasyGrid.prototype.focus = function () {\r\n this.bodyViewportDiv.focus();\r\n };\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\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 \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();\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();\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();\r\n }\r\n\r\n private searchButtonClickHandler() {\r\n this.applyFilter();\r\n }\r\n\r\n private applyFilter() {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n const filterValue = this.filter.getValue();\r\n if (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 }\r\n }\r\n\r\n private highlightCellRenderer(defaultRenderer: GridCellRenderer, value: any, column: GridColumn, cellElement: HTMLElement, rowElement: HTMLElement) { \r\n if (dataUtils.isIntType(column.type) \r\n || dataUtils.getStringDataTypes().indexOf(column.type) >= 0) {\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 value = this.highlightText(value.toString());\r\n }\r\n }\r\n\r\n defaultRenderer(value, column, cellElement, rowElement);\r\n }\r\n\r\n private highlightText(content: string): 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 const insertValue1 = `<span style='background-color: yellow'>`;\r\n const insertValue2 = `</span>`;\r\n \r\n let 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 let lowerWord = words[i];\r\n if (!lowerWord.length)\r\n continue;\r\n if (lowerWord === normalizedContent) {\r\n return insertValue1 + content + insertValue2;\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 let result = '';\r\n for (let i = 0; i < indexInMas.length; i++) {\r\n if (i === 0) {\r\n result += content.substring(0, indexInMas[i].index);\r\n }\r\n \r\n result += insertValue1 \r\n + content.substring(indexInMas[i].index, \r\n indexInMas[i].index + indexInMas[i].length) \r\n + insertValue2;\r\n \r\n if (i < indexInMas.length - 1) {\r\n result += content.substring(indexInMas[i].index \r\n + indexInMas[i].length, indexInMas[i + 1].index);\r\n } else {\r\n result += content.substring(indexInMas[i].index \r\n + indexInMas[i].length);\r\n }\r\n \r\n }\r\n \r\n content = result;\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 })\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 let value = this.params.values && attr.kind !== EntityAttrKind.Lookup\r\n ? this.params.values.getValue(attr.id)\r\n : undefined;\r\n\r\n const editor = this.resolveEditor(attr);\r\n\r\n let 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\r\n private options: EasyDataViewOptions = {\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 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 let widgetSlot: HTMLElement;\r\n const filterBar = domel('div')\r\n .addClass(`kfrm-form`)\r\n .setStyle('margin', '10px 0px')\r\n .addChild('div', b => \r\n widgetSlot = b.toDOM()\r\n ).toDOM();\r\n \r\n this.slot.insertBefore(filterBar, gridSlot);\r\n\r\n const dataFilter = this.context.createFilter();\r\n new TextFilterWidget(widgetSlot, this.grid, dataFilter);\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.context.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.context.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 this.grid.refresh();\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\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 \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","getNumberFromatOptions","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","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","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","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","configurable","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","defaultRenderer","highlightText","normalizedContent","insertValue1","insertValue2","indexInMas","lowerWord","item1","item2","addDelta","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","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","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, getNumberFromatOptions(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 getNumberFromatOptions(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 };\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 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 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 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 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 this.defaultValue = 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.innerHTML = 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.innerHTML = 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.innerHTML = 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\nvar EasyGrid = /** @class */ (function () {\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 };\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 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 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 EasyGrid.prototype.setData = function (data) {\r\n this.dataTable = data;\r\n this.clear();\r\n this.refresh();\r\n };\r\n EasyGrid.prototype.getData = function () {\r\n return this.dataTable;\r\n };\r\n EasyGrid.prototype.getColumns = function () {\r\n return this.columns;\r\n };\r\n EasyGrid.prototype.destroy = function () {\r\n this.slot.innerHTML = \"\";\r\n };\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 EasyGrid.prototype.clear = function () {\r\n this.pagination.page = 1;\r\n this.clearDOM();\r\n };\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.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 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 EasyGrid.prototype.focus = function () {\r\n this.bodyViewportDiv.focus();\r\n };\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\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 \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();\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();\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();\r\n }\r\n\r\n private searchButtonClickHandler() {\r\n this.applyFilter();\r\n }\r\n\r\n private applyFilter() {\r\n if (this.applyFilterTimeout) {\r\n clearTimeout(this.applyFilterTimeout);\r\n }\r\n\r\n const filterValue = this.filter.getValue();\r\n if (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 }\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 value = this.highlightText(value.toString());\r\n }\r\n }\r\n\r\n defaultRenderer(value, column, cellElement, rowElement);\r\n }\r\n\r\n private highlightText(content: string): 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 const insertValue1 = `<span style='background-color: yellow'>`;\r\n const insertValue2 = `</span>`;\r\n \r\n let 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 let lowerWord = words[i];\r\n if (!lowerWord.length)\r\n continue;\r\n if (lowerWord === normalizedContent) {\r\n return insertValue1 + content + insertValue2;\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 let result = '';\r\n for (let i = 0; i < indexInMas.length; i++) {\r\n if (i === 0) {\r\n result += content.substring(0, indexInMas[i].index);\r\n }\r\n \r\n result += insertValue1 \r\n + content.substring(indexInMas[i].index, \r\n indexInMas[i].index + indexInMas[i].length) \r\n + insertValue2;\r\n \r\n if (i < indexInMas.length - 1) {\r\n result += content.substring(indexInMas[i].index \r\n + indexInMas[i].length, indexInMas[i + 1].index);\r\n } else {\r\n result += content.substring(indexInMas[i].index \r\n + indexInMas[i].length);\r\n }\r\n \r\n }\r\n \r\n content = result;\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 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 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.context.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.context.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 this.grid.refresh();\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":""}