@easydata/crud 1.3.6-rc01 → 1.4.0-beta01

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_calculator.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_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/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","getDateDataTypes","getStringDataTypes","String","Memo","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","Array","isArray","createArrayFrom","set","getPrototypeOf","collection","collection_1","item","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","MetaEntityAttr","size","isPrimaryKey","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","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","aggr","needAggrCalculation","saveToData","ugt","urc","csg","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","DataColumnList","_dateColumnIdx","configurable","add","colOrDesc","col","updateDateColumnIdx","getItems","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","toArray","getValue","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","chunkMap","total","loader","needTotal","chunkSize","elasticChunks","_columns","colDesc","rows","rowData","row","createRow","addRow","getRows","params","fromIndex","count","pageSize","page","offset","limit","endIndex","lbChunk","ubChunk","allChunksCached","resultArr","firstChunkOffset","loadChunk","chunks","table","getCachedChunks","chunks_1","chunk","count_1","getCachedCount","getRow","getTotal","setTotal","getCachedRows","dataOrRow","dateIdx","column","mapDate","rowOrValue","newRow","dateIdx_1","lastChunk","getLastChunk","createChunk","cachedTotal","getLastChunkIndex","reduce","acc","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","x","NaN","ceil","sourceTable","entityId","isLookup","filterValue","justServerSide","applyCore","class","filters","lookup","filteredTable","applyInMemoryFilter","words","w","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","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","CellRendererType","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","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","Autoinc","Bool","GridColumn","grid","isRowNum","_label","alignment","Left","LEFT","Center","CENTER","Right","RIGHT","MapAlignment","coltype","cellRendererStore","cellRenderer","onGetCellRenderer","GridColumnList","columnList","sync","hasRowNumCol","rowNumCol","onSyncGridColumn","EasyGrid","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","calculator","paging","enabled","pageSizeItems","addColumns","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","compareValues","strictCompare","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","eventEmitter","setSlot","init","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onAddColumnClick","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","updateHeight","firstRow","bodyCellContainerDiv","firstElementChild","bodyHeight_1","sbHeight","bodyViewportDiv","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderAddColumnButton","containerWidth","sum","current","colBuilder","colDiv","attrLabel","value1","value2","caseInsensitiveCompare","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","groups_1","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onVieportKeydown","aggrSettings","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","template","group","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","buildGroupKey","aggrCols_1","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","firstChild","cellDiv","caseInsensitive","keyVal","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","addColumnsTitle","colElems","rowElem","display","landingPos","newLandingIndex","cols_1","colPos","insertBefore","updateActiveRow","activeRow","getActiveRow","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","_loop_1","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","onDestroy","untrack","dlg","track","openDialogs","openProgress","getAllDialogs","closeAllDialogs","close","DefaultDialog","submitHandler","cancelHandler","keydownHandler","isActiveDialog","windowElement","headerElement","bodyElement","alertElement","footerElement","submitButtonText","cancelButtonText","getRootElement","windowDiv","querySelector","submit","disableButtons","button","enableButtons","showAlert","reason","alert","clearAlert","windowDivs","turnOn","DefaultProgressDialog","contentElement","progressElement","determinated","updateContent","updateProgress","progress","in01","num","GridPageInfo","GridItemsPerPage","ButtonApply","ButtonNow","LblTotal","internalDateFormat","internalTimeFormat","getEditDateTimeFormat","setLocation","path","state","history","replaceState","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","getEntity","lookupGrid","dataFilter","createFilter","setupDateTimeField","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","setDefaultEndpoints","endpoint","activeEntity","setActiveEntity","loadMetaData","sourceError","getEntities","updateEntity","deleteEntity","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","isInteger","basePath","showBackToEntities","defaultValidators","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBar","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","metaData","renderEntitySelector","entities","decodeURIComponent","onSetLocation","setActiveView","pretiffyPath","location","pathname","setContainer","progressBarSlot","bar","ProgressBar","getBasePath","getActiveEntityId","decodedUrl","href","splitIndex","typeName","toLocaleLowerCase","optBasePathIndex","run","activeEntityId","detach","RequiredError","NumberError","IntNumberError","DateTimeError","LookupSelectedItem","LookupDlgCaption","NavigationBtnTitle","CalendarBtnTitle","TimerBtnTitle","AddBtnTitle","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);\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];\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];\r\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64];\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') {\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({}, 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 >= 300 || status < 200) {\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 }\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 //!!!!!!!!!check on \"out of index\"\r\n this.items[index] = col;\r\n this.updateDateColumnIdx();\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 //!!!!!!!!!check on \"out of index\"\r\n return this.items[index];\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 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 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, aggregates: null }, 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({}, 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 return AggregationSettings;\r\n}());\r\nexport { AggregationSettings };\r\n//# sourceMappingURL=aggr_calculator.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 // object keeps number keys sorted\r\n this.chunkMap = {};\r\n this.total = 0;\r\n this.loader = null;\r\n this.needTotal = true;\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 this._columns = new DataColumnList();\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.chunkMap = {};\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.chunkMap = {};\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 var lbChunk = Math.trunc(fromIndex / this._chunkSize);\r\n var ubChunk = Math.trunc((endIndex - 1) / this._chunkSize);\r\n var allChunksCached = true;\r\n for (var i = lbChunk; i <= ubChunk; i++) {\r\n if (!this.chunkMap[i]) {\r\n allChunksCached = false;\r\n break;\r\n }\r\n }\r\n if (allChunksCached) {\r\n var resultArr = [];\r\n for (var i = lbChunk; i <= ubChunk; i++) {\r\n resultArr = resultArr.concat(this.chunkMap[i].rows);\r\n }\r\n var firstChunkOffset = this.chunkMap[lbChunk].offset;\r\n return Promise.resolve(resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset));\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 limit = this._chunkSize * (ubChunk - lbChunk + 1);\r\n if (this.elasticChunks)\r\n limit++;\r\n return this.loader.loadChunk({\r\n offset: lbChunk * this._chunkSize,\r\n limit: limit,\r\n needTotal: needTotal\r\n })\r\n .then(function (result) {\r\n var chunks = result.table.getCachedChunks();\r\n if (needTotal) {\r\n _this.total = result.total;\r\n if (endIndex > _this.total) {\r\n endIndex = _this.total;\r\n }\r\n }\r\n var index = lbChunk;\r\n for (var _i = 0, chunks_1 = chunks; _i < chunks_1.length; _i++) {\r\n var chunk = chunks_1[_i];\r\n _this.chunkMap[index] = {\r\n offset: index * _this._chunkSize,\r\n rows: chunk.rows\r\n };\r\n index++;\r\n }\r\n if (_this.elasticChunks) {\r\n var count_1 = result.table.getCachedCount();\r\n if (count_1 > 0) {\r\n var chunk = _this.chunkMap[index - 1];\r\n if (count_1 === limit) {\r\n chunk.rows.splice(chunk.rows.length - 1, 1);\r\n if (chunk.rows.length == 0) {\r\n delete _this.chunkMap[index - 1];\r\n }\r\n }\r\n if (count_1 < limit) {\r\n _this.total = _this.getCachedCount();\r\n }\r\n }\r\n }\r\n var resultArr = [];\r\n for (var i = lbChunk; i <= ubChunk; i++) {\r\n resultArr = resultArr.concat(_this.chunkMap[i].rows);\r\n }\r\n var firstChunkOffset = _this.chunkMap[lbChunk].offset;\r\n return resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset);\r\n });\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 this.chunkMap = {};\r\n };\r\n EasyDataTable.prototype.getCachedCount = function () {\r\n return this.getCachedRows().length;\r\n };\r\n EasyDataTable.prototype.clear = function () {\r\n this.columns.clear();\r\n this.chunkMap = {};\r\n this.total = 0;\r\n this.needTotal = !this._elasticChunks;\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 (rowOrValue) {\r\n var newRow;\r\n if (Array.isArray(rowOrValue)) {\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 (rowOrValue[idx]) {\r\n rowOrValue[idx] = this.mapDate(rowOrValue[idx], this._columns.get(idx).type);\r\n }\r\n }\r\n }\r\n newRow = new DataRow(this._columns, rowOrValue);\r\n }\r\n else {\r\n newRow = this.createRow(rowOrValue);\r\n }\r\n var lastChunk = this.getLastChunk();\r\n if (!lastChunk || lastChunk.rows.length >= this._chunkSize) {\r\n lastChunk = this.createChunk();\r\n }\r\n lastChunk.rows.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.createChunk = function (index) {\r\n if (typeof index == 'undefined') {\r\n index = this.getLastChunkIndex() + 1;\r\n }\r\n var chunk = { offset: index * this._chunkSize, rows: [] };\r\n this.chunkMap[index] = chunk;\r\n return chunk;\r\n };\r\n EasyDataTable.prototype.getLastChunkIndex = function () {\r\n var keys = Object.keys(this.chunkMap);\r\n return keys.length > 0\r\n ? parseInt(keys[keys.length - 1])\r\n : -1;\r\n };\r\n EasyDataTable.prototype.getLastChunk = function () {\r\n var index = this.getLastChunkIndex();\r\n return index > -1\r\n ? this.chunkMap[index]\r\n : null;\r\n };\r\n EasyDataTable.prototype.getCachedRows = function () {\r\n return this.getCachedChunks()\r\n .reduce(function (acc, v) { return acc.concat(v.rows); }, []);\r\n };\r\n EasyDataTable.prototype.getCachedChunks = function () {\r\n return Object.values(this.chunkMap);\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 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\n//data\r\nexport * from './data/aggr_calculator';\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\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\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 entityId: 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\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 entityId: this.entityId,\r\n lookup: this.isLookup\r\n } as any)\r\n .then(data => {\r\n\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, entityId: this.entityId, 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\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 });\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 hasEnterance = (row: DataRow) => {\r\n for (const col of this.sourceTable.columns.getItems()) {\r\n if (dataUtils.isIntType(col.type) \r\n || dataUtils.getStringDataTypes().indexOf(col.type) >= 0) {\r\n const value = row.getValue(col.id);\r\n if (value) {\r\n const normalized = value.toString()\r\n .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\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 if (filteredTable.getCachedCount() == 0)\r\n filteredTable.setTotal(0);\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\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 = className.trim().split(\" \").concat(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 = className.trim().split(\" \").concat(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","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 = 150;\r\nvar DEFAULT_WIDTH_NUMBER = 120;\r\nvar DEFAULT_WIDTH_DATE = 200;\r\nvar DEFAULT_WIDTH_BOOL = 80;\r\nvar DEFAULT_WIDTH_STRING = 250;\r\nvar MIN_WIDTH_STRING = 100;\r\nvar MAX_WIDTH_STRING = 500;\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 //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 if (column) {\r\n if (column.style.alignment) {\r\n this.align = MapAlignment(column.style.alignment);\r\n }\r\n var coltype = column.type;\r\n var cellType = this.grid.cellRendererStore.getCellType(coltype);\r\n switch (cellType) {\r\n case CellRendererType.NUMBER:\r\n this.width = DEFAULT_WIDTH_NUMBER;\r\n break;\r\n case CellRendererType.DATETIME:\r\n this.width = DEFAULT_WIDTH_DATE;\r\n break;\r\n case CellRendererType.BOOL:\r\n this.width = DEFAULT_WIDTH_BOOL;\r\n break;\r\n default:\r\n this.width = DEFAULT_WIDTH_STRING;\r\n }\r\n this.cellRenderer = this.grid.cellRendererStore.getDefaultRenderer(column.type);\r\n }\r\n else if (isRowNum) {\r\n this.isRowNum = true;\r\n this.width = 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, \"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 if (hasRowNumCol) {\r\n var rowNumCol = new GridColumn(null, this.grid, true);\r\n this.add(rowNumCol);\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","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\nimport { EventEmitter, DataRow, utils, i18n } 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 { 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 addColumns: 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.compareValues = this.strictCompare;\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 = __assign({}, this.defaultDataGridOptions, options);\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.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.onAddColumnClick) {\r\n this.addEventListener('addColumnClick', options.onAddColumnClick);\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.addColumns)\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 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 _this.firstRender = false;\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 bodyHeight_1 = rowHeight * rowCount;\r\n domel(_this.bodyDiv)\r\n .setStyle('height', bodyHeight_1 + \"px\");\r\n setTimeout(function () {\r\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\r\n bodyHeight_1 = bodyHeight_1 + sbHeight;\r\n domel(_this.bodyDiv)\r\n .setStyle('height', bodyHeight_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.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.renderAddColumnButton());\r\n }\r\n });\r\n var containerWidth = this.columns.getItems().map(function (column) { return column.width; }).reduce(function (sum, current) { return sum + current; });\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 + 1))\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 (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.strictCompare = function (value1, value2) {\r\n return value1 !== value2;\r\n };\r\n EasyGrid.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 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 this.compareValues = this.caseInsensitiveCompare;\r\n if (showAggrs && this.options.aggregates.settings.caseSensitiveGroups) {\r\n this.compareValues = this.strictCompare;\r\n }\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 if (rows.length) {\r\n var groups_1 = showAggrs\r\n ? _this.options.aggregates.settings.getGroups()\r\n : [];\r\n rows.forEach(function (row, index) {\r\n if (showAggrs)\r\n _this.updateTotalsState(groups_1, row);\r\n var tr = _this.renderRow(row, index);\r\n _this.bodyCellContainerDiv.appendChild(tr);\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 containerWidth = _this.columns.getItems()\r\n .map(function (column) { return column.width; }).reduce(function (sum, current) { return sum + current; });\r\n domel(_this.bodyCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n return rows.length;\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.onVieportKeydown.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 (this.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 = this.buildGroupKey(group, row);\r\n aggrContainer.getAggregates(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, colIndex, 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, colIndex, 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.buildGroupKey = function (group, row) {\r\n var aggrSettings = this.options.aggregates.settings;\r\n var caseInsensitive = aggrSettings && !aggrSettings.caseSensitiveGroups;\r\n var result = {};\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) {\r\n keyVal = keyVal.toLowerCase();\r\n }\r\n result[colId] = keyVal;\r\n }\r\n return result;\r\n };\r\n EasyGrid.prototype.onVieportKeydown = 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 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 page: this.pagination.page,\r\n pageSize: this.pagination.pageSize\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 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 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) {\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, colindex, 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 if (this.options.paging && this.options.paging.enabled) {\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.renderAddColumnButton = function () {\r\n var _this = this;\r\n if (this.options.addColumns) {\r\n return domel('div')\r\n .addClass(this.cssPrefix + \"-addrow\")\r\n .title(this.options.addColumnsTitle || 'Add column')\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: 'addColumnClick',\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 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 } from '@easydata/core';\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) {\r\n var _this = this;\r\n var onDestroy = options.onDestroy;\r\n options.onDestroy = function () {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy();\r\n };\r\n var dlg = new DefaultDialog(options);\r\n dlg.open();\r\n this.track(dlg);\r\n return dlg;\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 onDestroy = options.onDestroy;\r\n options.onDestroy = function () {\r\n _this.untrack(dlg);\r\n onDestroy && onDestroy();\r\n };\r\n var dlg = new DefaultProgressDialog(options);\r\n dlg.open();\r\n this.track(dlg);\r\n return dlg;\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) {\r\n var _this = this;\r\n this.options = options;\r\n this.submitHandler = function () {\r\n if (_this.options.onSubmit && _this.options.onSubmit() === 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();\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 var id = utils.generateId('dlg');\r\n this.slot =\r\n domel('div', document.body)\r\n .attr('tab-index', '-1')\r\n .data('dialog-id', id)\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('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 b.addHtml(options.body);\r\n }\r\n else {\r\n b.addChildElement(options.body);\r\n }\r\n })\r\n .addChild('div', function (b) { return _this.alertElement = b\r\n .addClass(cssPrefix + \"-alert-container\")\r\n .toDOM(); })\r\n .addChild('footer', function (b) {\r\n _this.footerElement = b\r\n .addClass(cssPrefix + \"-footer\", 'align-right')\r\n .toDOM();\r\n if (options.submitable === false)\r\n return;\r\n b.addChild('button', function (b) { return b\r\n .addClass('kfrm-button', 'is-info')\r\n .addText(options.submitButtonText || i18n.getText('ButtonOK'))\r\n .on('click', function (e) {\r\n _this.submitHandler();\r\n })\r\n .focus(); });\r\n if (options.cancelable !== false)\r\n b.addChild('button', function (builder) { return builder\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.getRootElement = function () {\r\n return this.slot;\r\n };\r\n DefaultDialog.prototype.open = function () {\r\n if (this.options.beforeOpen) {\r\n this.options.beforeOpen();\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 };\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 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();\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) {\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 }) || 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\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_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\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.replaceState(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 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\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) {\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 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\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, entityId: lookupEntity.id } as any)\r\n .then(data => {\r\n\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 this.context.getEntity(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, readOnly: boolean, value: any) {\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 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.name(attr.id)\r\n b.type(this.resolveInputType(attr.dataType));\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, readOnly: boolean, values: any, value: any) {\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, readOnly: boolean, value: any) {\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 if (attr.dataType == DataType.Bool) {\r\n if (value)\r\n b.attr('checked', '');\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, readOnly: boolean, value: any) {\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 \r\n b.setStyle('height', `120px`)\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 => b\r\n .attr('for', attr.id)\r\n .addHtml(`${attr.caption} ${required ? '<sup style=\"color: red\">*</sup>' : ''}: `)\r\n );\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, readOnly, value);\r\n break;\r\n\r\n case EditorTag.List:\r\n this.setupListField(parent, attr, readOnly, editor.values, value);\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, readOnly, value);\r\n }\r\n else {\r\n this.setupTextField(parent, attr, readOnly, value);\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) {\r\n if (!attr.showOnEdit)\r\n continue;\r\n }\r\n else {\r\n if (!attr.showOnCreate)\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}\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\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('GetEntities', \r\n { entityId: params.entityId || this.context.getActiveEntity().id });\r\n delete params.entityId;\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, \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 'GetEntities' | \r\n 'GetEntity' |\r\n 'CreateEntity' |\r\n 'UpdateEntity' |\r\n 'DeleteEntity' ;\r\n\r\nexport interface EasyDataContextOptions {\r\n metaDataId?: string;\r\n endpoint?: string;\r\n onProcessStart?: () => void;\r\n onProcessEnd?: () => void;\r\n}\r\n\r\nexport class DataContext {\r\n\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 this.data = new EasyDataTable({\r\n loader: this.dataLoader\r\n });\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 setActiveEntity(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(entityId: string, data: EasyDataTable, isLookup?: boolean): DataFilter\r\n public createFilter(entityId?: string, data?: EasyDataTable, isLookup?: boolean): DataFilter {\r\n return new TextDataFilter(\r\n this.dataLoader, \r\n data || this.getData(), \r\n entityId || 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 getEntities() {\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 getEntity(id: string, entityId?: string) {\r\n const url = this.resolveEndpoint('GetEntity', { id, \r\n entityId: entityId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.get(url).getPromise()\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public createEntity(obj: any, entityId?: string) {\r\n const url = this.resolveEndpoint('CreateEntity', \r\n { entityId: entityId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' }).getPromise().finally(() => this.endProcess());\r\n }\r\n\r\n public updateEntity(id: string, obj, entityId?: string) {\r\n const url = this.resolveEndpoint('UpdateEntity', { id, \r\n entityId: entityId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' }).getPromise().finally(() => this.endProcess());\r\n }\r\n\r\n public deleteEntity(id: string, entityId?: string) {\r\n const url = this.resolveEndpoint('DeleteEntity', { id, \r\n entityId: entityId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, null).getPromise().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\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 == 'entityId') {\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('GetEntities', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/fetch'));\r\n this.setEnpointIfNotExist('GetEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/fetch/{id}'));\r\n this.setEnpointIfNotExist('CreateEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/create'));\r\n this.setEnpointIfNotExist('UpdateEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/update/{id}'));\r\n this.setEnpointIfNotExist('DeleteEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/delete/{id}'));\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 options = options || {}\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 \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.getEntities()\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 addColumns: true,\r\n addColumnsTitle: i18n.getText('AddBtnTitle'),\r\n showActiveRow: false,\r\n onAddColumnClick: 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\r\n if (!form.validate())\r\n return false;\r\n \r\n form.getData()\r\n .then(obj => this.context.createEntity(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 const keyAttrs = activeEntity.attributes.filter(attr => attr.isPrimaryKey);\r\n const keys = keyAttrs.map(attr => row.getValue(attr.id));\r\n\r\n if (!form.validate())\r\n return false;\r\n\r\n form.getData()\r\n .then(obj => this.context.updateEntity(keys.join(':'), 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.attributes.filter(attr => attr.isPrimaryKey);\r\n const keys = keyAttrs.map(attr => row.getValue(attr.id));\r\n const entityId = keyAttrs.map((attr, index) => `${attr.id}:${keys[index]}`).join(';');\r\n this.dlg.openConfirm(\r\n i18n.getText('DeleteDlgCaption')\r\n .replace('{entity}', activeEntity.caption), \r\n i18n.getText('DeleteDlgMessage')\r\n .replace('{entityId}', entityId), \r\n )\r\n .then((result) => {\r\n if (result) {\r\n\r\n //pass entityId in future\r\n this.context.deleteEntity(keys.join(':'))\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.getEntities()\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\r\n private context: DataContext;\r\n private basePath: string;\r\n\r\n private container: HTMLElement;\r\n\r\n private options?: EasyDataViewDispatcherOptions = { basePath: 'easydata' };\r\n\r\n constructor(options?: EasyDataViewDispatcherOptions) {\r\n options = options || {};\r\n\r\n this.options = dataUtils.assign(this.options, options);\r\n\r\n this.options.basePath = (!this.options.rootEntity)\r\n ? this.pretiffyPath(this.options.basePath)\r\n : this.pretiffyPath(window.location.pathname);\r\n\r\n if (this.options.rootEntity)\r\n this.options.showBackToEntities = false;\r\n\r\n this.setContainer(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: options.endpoint,\r\n onProcessStart: () => bar.show(),\r\n onProcessEnd: () => bar.hide()\r\n });\r\n\r\n this.basePath = this.getBasePath();\r\n }\r\n\r\n private pretiffyPath(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 this.container = document.getElementById('EasyDataContainer');\r\n return;\r\n }\r\n\r\n if (typeof container === 'string') {\r\n if (container.length){\r\n if (container[0] === '#') {\r\n this.container = document.getElementById(container.substring(1));\r\n }\r\n else 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 throw Error('Unrecognized container parameter ' + \r\n '(Must be an element ID, a class name or HTMLElement object itself): ' + container);\r\n }\r\n }\r\n }\r\n else {\r\n this.container = container;\r\n }\r\n }\r\n\r\n private getActiveEntityId(): string | null {\r\n if (this.options.rootEntity) \r\n return this.options.rootEntity;\r\n\r\n const decodedUrl = decodeURIComponent(window.location.href);\r\n const splitIndex = decodedUrl.lastIndexOf('/');\r\n const typeName = decodedUrl.substring(splitIndex + 1);\r\n\r\n return typeName && typeName.toLocaleLowerCase() !== this.options.basePath\r\n ? typeName\r\n : null;\r\n }\r\n\r\n private getBasePath(): string {\r\n const decodedUrl = decodeURIComponent(window.location.href);\r\n const optBasePathIndex = decodedUrl.toLocaleLowerCase().indexOf(this.options.basePath);\r\n return decodedUrl.substring(0, optBasePathIndex + this.options.basePath.length);\r\n }\r\n\r\n run(): Promise<void> {\r\n window.addEventListener('ed_set_location', this.onSetLocation);\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 activeEntityId = this.getActiveEntityId();\r\n if (activeEntityId) {\r\n this.context.setActiveEntity(activeEntityId);\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 detach() {\r\n window.removeEventListener('ed_set_location', 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 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 shure about removing this entity: [{entityId}]?',\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_calculator.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_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","getDateDataTypes","getStringDataTypes","String","Memo","_numericTypes","Byte","Word","Int32","Int64","Float","Currency","_intTypes","assignDeepCore","hashSet","target","sources","sources_1","source","sourceVal","has","Array","isArray","createArrayFrom","set","getPrototypeOf","collection","collection_1","item","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","MetaEntityAttr","size","isPrimaryKey","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","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","aggr","needAggrCalculation","saveToData","ugt","urc","csg","liquid","label","originAttrId","isAggr","groupFooterColumnTemplate","gfct","DataColumnList","_dateColumnIdx","configurable","add","colOrDesc","col","updateDateColumnIdx","getItems","move","newIndex","oldIndex","getIndex","getDateColumnIndexes","removeAt","removeDate","DataRow","toArray","getValue","colIdOrIndex","RangeError","setValue","EasyDataTable","_chunkSize","_elasticChunks","chunkMap","total","loader","needTotal","chunkSize","elasticChunks","_columns","colDesc","rows","rowData","row","createRow","addRow","getRows","params","fromIndex","count","pageSize","page","offset","limit","endIndex","lbChunk","ubChunk","allChunksCached","resultArr","firstChunkOffset","loadChunk","chunks","table","getCachedChunks","chunks_1","chunk","count_1","getCachedCount","getRow","getTotal","setTotal","getCachedRows","dataOrRow","dateIdx","column","mapDate","rowOrValue","newRow","dateIdx_1","lastChunk","getLastChunk","createChunk","cachedTotal","getLastChunkIndex","reduce","acc","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","entityId","isLookup","filterValue","justServerSide","applyCore","class","filters","lookup","filteredTable","applyInMemoryFilter","words","w","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","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","CellRendererType","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","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","Autoinc","Bool","DialogFooterAlignment","GridColumn","grid","isRowNum","_label","_description","alignment","Left","LEFT","Center","CENTER","Right","RIGHT","MapAlignment","coltype","cellRendererStore","cellRenderer","onGetCellRenderer","GridColumnList","columnList","sync","hasRowNumCol","rowNumCol","onSyncGridColumn","EasyGrid","pagination","paginationOptions","maxButtonCount","useBootstrap","defaultDataGridOptions","slot","dataTable","fixHeightOnFirstRender","syncGridColumns","useRowNumeration","allowDragDrop","calculator","paging","enabled","pageSizeItems","addColumns","viewportRowsCount","showActiveRow","rowsOnPagePromise","containerInitialHeight","firstRender","compareValues","strictCompare","prevRowTotals","landingIndex","landingSlot","_activeRowIndex","eventEmitter","setSlot","init","getElementById","getElementsByClassName","onInit","onRowClick","onRowDbClick","onAddColumnClick","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","updateHeight","firstRow","bodyCellContainerDiv","firstElementChild","bodyHeight_1","sbHeight","bodyViewportDiv","getContainerWidth","sum","current","headerViewportDiv","headerCellContainerDiv","headerRowDiv","hd","renderColumnHeader","renderAddColumnButton","containerWidth","colBuilder","colDiv","attrLabel","value1","value2","caseInsensitiveCompare","showAggrs","canShowAggregates","showProgress","getRowsToRender","hideProgress","groups_1","updateTotalsState","tr","renderRow","showGrandTotalsOnEachPage","isLastPage","onVieportKeydown","aggrSettings","isLast","changeLevel","level","renderTotalsRow","applyGroupColumnTemplate","group","colIndex","renderCell","aggrContainer","getAggrContainer","aggrCols","buildGroupKey","aggrCols_1","aggrColId","isLastGroupColumn","groupColIndex","aggrColIndex","groupFooterTemplate","firstChild","cellDiv","caseInsensitive","keyVal","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","addColumnsTitle","colElems","rowElem","display","landingPos","newLandingIndex","cols_1","colPos","insertBefore","updateActiveRow","activeRow","getActiveRow","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","_loop_1","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","replaceState","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","getEntity","lookupGrid","dataFilter","createFilter","setupDateTimeField","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","setDefaultEndpoints","endpoint","activeEntity","setActiveEntity","loadMetaData","sourceError","getEntities","updateEntity","deleteEntity","setEndpoint","setEnpointIfNotExist","endpointKey","opt","optVal","onProcessStart","onProcessEnd","endpointBase","isInteger","basePath","showBackToEntities","defaultValidators","renderGrid","syncGridColumnHandler","addClickHandler","manageCellRenderer","rowDbClickHandler","filterBar","rowEl","editClickHandler","deleteClickHandler","refreshData","processError","showEditForm","keyAttrs","metaData","renderEntitySelector","entities","decodeURIComponent","onSetLocation","setActiveView","pretiffyPath","location","pathname","setContainer","progressBarSlot","bar","ProgressBar","getBasePath","getActiveEntityId","decodedUrl","href","splitIndex","typeName","toLocaleLowerCase","optBasePathIndex","run","activeEntityId","detach","RequiredError","NumberError","IntNumberError","DateTimeError","LookupSelectedItem","LookupDlgCaption","NavigationBtnTitle","CalendarBtnTitle","TimerBtnTitle","AddBtnTitle","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);\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];\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];\r\n var _intTypes = [DataType.Byte, DataType.Word, DataType.Int32, DataType.Int64];\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') {\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({}, 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 }\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 //!!!!!!!!!check on \"out of index\"\r\n this.items[index] = col;\r\n this.updateDateColumnIdx();\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 //!!!!!!!!!check on \"out of index\"\r\n return this.items[index];\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 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 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, aggregates: null }, 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({}, 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 return AggregationSettings;\r\n}());\r\nexport { AggregationSettings };\r\n//# sourceMappingURL=aggr_calculator.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 // object keeps number keys sorted\r\n this.chunkMap = {};\r\n this.total = 0;\r\n this.loader = null;\r\n this.needTotal = true;\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 this._columns = new DataColumnList();\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.chunkMap = {};\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.chunkMap = {};\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 var lbChunk = Math.trunc(fromIndex / this._chunkSize);\r\n var ubChunk = Math.trunc((endIndex - 1) / this._chunkSize);\r\n var allChunksCached = true;\r\n for (var i = lbChunk; i <= ubChunk; i++) {\r\n if (!this.chunkMap[i]) {\r\n allChunksCached = false;\r\n break;\r\n }\r\n }\r\n if (allChunksCached) {\r\n var resultArr = [];\r\n for (var i = lbChunk; i <= ubChunk; i++) {\r\n resultArr = resultArr.concat(this.chunkMap[i].rows);\r\n }\r\n var firstChunkOffset = this.chunkMap[lbChunk].offset;\r\n return Promise.resolve(resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset));\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 limit = this._chunkSize * (ubChunk - lbChunk + 1);\r\n if (this.elasticChunks)\r\n limit++;\r\n return this.loader.loadChunk({\r\n offset: lbChunk * this._chunkSize,\r\n limit: limit,\r\n needTotal: needTotal\r\n })\r\n .then(function (result) {\r\n var chunks = result.table.getCachedChunks();\r\n if (needTotal) {\r\n _this.total = result.total;\r\n if (endIndex > _this.total) {\r\n endIndex = _this.total;\r\n }\r\n }\r\n var index = lbChunk;\r\n for (var _i = 0, chunks_1 = chunks; _i < chunks_1.length; _i++) {\r\n var chunk = chunks_1[_i];\r\n _this.chunkMap[index] = {\r\n offset: index * _this._chunkSize,\r\n rows: chunk.rows\r\n };\r\n index++;\r\n }\r\n if (_this.elasticChunks) {\r\n var count_1 = result.table.getCachedCount();\r\n if (count_1 > 0) {\r\n var chunk = _this.chunkMap[index - 1];\r\n if (count_1 === limit) {\r\n chunk.rows.splice(chunk.rows.length - 1, 1);\r\n if (chunk.rows.length == 0) {\r\n delete _this.chunkMap[index - 1];\r\n }\r\n }\r\n if (count_1 < limit) {\r\n _this.total = _this.getCachedCount();\r\n }\r\n }\r\n }\r\n var resultArr = [];\r\n for (var i = lbChunk; i <= ubChunk; i++) {\r\n resultArr = resultArr.concat(_this.chunkMap[i].rows);\r\n }\r\n var firstChunkOffset = _this.chunkMap[lbChunk].offset;\r\n return resultArr.slice(fromIndex - firstChunkOffset, endIndex - firstChunkOffset);\r\n });\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 this.chunkMap = {};\r\n };\r\n EasyDataTable.prototype.getCachedCount = function () {\r\n return this.getCachedRows().length;\r\n };\r\n EasyDataTable.prototype.clear = function () {\r\n this.columns.clear();\r\n this.chunkMap = {};\r\n this.total = 0;\r\n this.needTotal = !this._elasticChunks;\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 (rowOrValue) {\r\n var newRow;\r\n if (Array.isArray(rowOrValue)) {\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 (rowOrValue[idx]) {\r\n rowOrValue[idx] = this.mapDate(rowOrValue[idx], this._columns.get(idx).type);\r\n }\r\n }\r\n }\r\n newRow = new DataRow(this._columns, rowOrValue);\r\n }\r\n else {\r\n newRow = this.createRow(rowOrValue);\r\n }\r\n var lastChunk = this.getLastChunk();\r\n if (!lastChunk || lastChunk.rows.length >= this._chunkSize) {\r\n lastChunk = this.createChunk();\r\n }\r\n lastChunk.rows.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.createChunk = function (index) {\r\n if (typeof index == 'undefined') {\r\n index = this.getLastChunkIndex() + 1;\r\n }\r\n var chunk = { offset: index * this._chunkSize, rows: [] };\r\n this.chunkMap[index] = chunk;\r\n return chunk;\r\n };\r\n EasyDataTable.prototype.getLastChunkIndex = function () {\r\n var keys = Object.keys(this.chunkMap);\r\n return keys.length > 0\r\n ? parseInt(keys[keys.length - 1])\r\n : -1;\r\n };\r\n EasyDataTable.prototype.getLastChunk = function () {\r\n var index = this.getLastChunkIndex();\r\n return index > -1\r\n ? this.chunkMap[index]\r\n : null;\r\n };\r\n EasyDataTable.prototype.getCachedRows = function () {\r\n return this.getCachedChunks()\r\n .reduce(function (acc, v) { return acc.concat(v.rows); }, []);\r\n };\r\n EasyDataTable.prototype.getCachedChunks = function () {\r\n return Object.values(this.chunkMap);\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 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\n//data\r\nexport * from './data/aggr_calculator';\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\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 entityId: 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\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 entityId: this.entityId,\r\n lookup: this.isLookup\r\n } as any)\r\n .then(data => {\r\n\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, entityId: this.entityId, 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\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 });\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 hasEnterance = (row: DataRow) => {\r\n for (const col of this.sourceTable.columns.getItems()) {\r\n if (dataUtils.isIntType(col.type) \r\n || dataUtils.getStringDataTypes().indexOf(col.type) >= 0) {\r\n const value = row.getValue(col.id);\r\n if (value) {\r\n const normalized = value.toString()\r\n .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\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 if (filteredTable.getCachedCount() == 0)\r\n filteredTable.setTotal(0);\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\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 = className.trim().split(\" \").concat(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 = className.trim().split(\" \").concat(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","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 = 150;\r\nvar DEFAULT_WIDTH_NUMBER = 120;\r\nvar DEFAULT_WIDTH_DATE = 200;\r\nvar DEFAULT_WIDTH_BOOL = 80;\r\nvar DEFAULT_WIDTH_STRING = 250;\r\nvar MIN_WIDTH_STRING = 100;\r\nvar MAX_WIDTH_STRING = 500;\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 if (column) {\r\n if (column.style.alignment) {\r\n this.align = MapAlignment(column.style.alignment);\r\n }\r\n var coltype = column.type;\r\n var cellType = this.grid.cellRendererStore.getCellType(coltype);\r\n switch (cellType) {\r\n case CellRendererType.NUMBER:\r\n this.width = DEFAULT_WIDTH_NUMBER;\r\n break;\r\n case CellRendererType.DATETIME:\r\n this.width = DEFAULT_WIDTH_DATE;\r\n break;\r\n case CellRendererType.BOOL:\r\n this.width = DEFAULT_WIDTH_BOOL;\r\n break;\r\n default:\r\n this.width = DEFAULT_WIDTH_STRING;\r\n }\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 = 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 if (hasRowNumCol) {\r\n var rowNumCol = new GridColumn(null, this.grid, true);\r\n this.add(rowNumCol);\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\nimport { EventEmitter, DataRow, utils, i18n } 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 { 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 addColumns: 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.compareValues = this.strictCompare;\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 = __assign({}, this.defaultDataGridOptions, options);\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.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.onAddColumnClick) {\r\n this.addEventListener('addColumnClick', options.onAddColumnClick);\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.addColumns)\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 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 _this.firstRender = false;\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 bodyHeight_1 = rowHeight * rowCount;\r\n domel(_this.bodyDiv)\r\n .setStyle('height', bodyHeight_1 + \"px\");\r\n setTimeout(function () {\r\n var sbHeight = _this.bodyViewportDiv.offsetHeight - _this.bodyViewportDiv.clientHeight;\r\n bodyHeight_1 = bodyHeight_1 + sbHeight;\r\n domel(_this.bodyDiv)\r\n .setStyle('height', bodyHeight_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.renderAddColumnButton());\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 + 1))\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.strictCompare = function (value1, value2) {\r\n return value1 !== value2;\r\n };\r\n EasyGrid.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 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 this.compareValues = this.caseInsensitiveCompare;\r\n if (showAggrs && this.options.aggregates.settings.caseSensitiveGroups) {\r\n this.compareValues = this.strictCompare;\r\n }\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 if (rows.length) {\r\n var groups_1 = showAggrs\r\n ? _this.options.aggregates.settings.getGroups()\r\n : [];\r\n rows.forEach(function (row, index) {\r\n if (showAggrs)\r\n _this.updateTotalsState(groups_1, row);\r\n var tr = _this.renderRow(row, index);\r\n _this.bodyCellContainerDiv.appendChild(tr);\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 containerWidth = _this.getContainerWidth();\r\n domel(_this.bodyCellContainerDiv)\r\n .setStyle('width', containerWidth + \"px\");\r\n return rows.length;\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.onVieportKeydown.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 (this.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 = this.buildGroupKey(group, row);\r\n aggrContainer.getAggregates(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, colIndex, 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, colIndex, 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.buildGroupKey = function (group, row) {\r\n var aggrSettings = this.options.aggregates.settings;\r\n var caseInsensitive = aggrSettings && !aggrSettings.caseSensitiveGroups;\r\n var result = {};\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 return result;\r\n };\r\n EasyGrid.prototype.onVieportKeydown = 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 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 page: this.pagination.page,\r\n pageSize: this.pagination.pageSize\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 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 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) {\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, colindex, 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 if (this.options.paging && this.options.paging.enabled) {\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.renderAddColumnButton = function () {\r\n var _this = this;\r\n if (this.options.addColumns) {\r\n return domel('div')\r\n .addClass(this.cssPrefix + \"-addrow\")\r\n .title(this.options.addColumnsTitle || 'Add column')\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: 'addColumnClick',\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 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_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.replaceState(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 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\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) {\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 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\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, entityId: lookupEntity.id } as any)\r\n .then(data => {\r\n\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 this.context.getEntity(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, readOnly: boolean, value: any) {\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 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.name(attr.id)\r\n b.type(this.resolveInputType(attr.dataType));\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, readOnly: boolean, values: any, value: any) {\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, readOnly: boolean, value: any) {\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 if (attr.dataType == DataType.Bool) {\r\n if (value)\r\n b.attr('checked', '');\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, readOnly: boolean, value: any) {\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 \r\n b.setStyle('height', `120px`)\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 );\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, readOnly, value);\r\n break;\r\n\r\n case EditorTag.List:\r\n this.setupListField(parent, attr, readOnly, editor.values, value);\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, readOnly, value);\r\n }\r\n else {\r\n this.setupTextField(parent, attr, readOnly, value);\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) {\r\n if (!attr.showOnEdit)\r\n continue;\r\n }\r\n else {\r\n if (!attr.showOnCreate)\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\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('GetEntities', \r\n { entityId: params.entityId || this.context.getActiveEntity().id });\r\n delete params.entityId;\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, \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 'GetEntities' | \r\n 'GetEntity' |\r\n 'CreateEntity' |\r\n 'UpdateEntity' |\r\n 'DeleteEntity' ;\r\n\r\nexport interface EasyDataContextOptions {\r\n metaDataId?: string;\r\n endpoint?: string;\r\n onProcessStart?: () => void;\r\n onProcessEnd?: () => void;\r\n}\r\n\r\nexport class DataContext {\r\n\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 this.data = new EasyDataTable({\r\n loader: this.dataLoader\r\n });\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 setActiveEntity(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(entityId: string, data: EasyDataTable, isLookup?: boolean): DataFilter\r\n public createFilter(entityId?: string, data?: EasyDataTable, isLookup?: boolean): DataFilter {\r\n return new TextDataFilter(\r\n this.dataLoader, \r\n data || this.getData(), \r\n entityId || 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 getEntities() {\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 getEntity(id: string, entityId?: string) {\r\n const url = this.resolveEndpoint('GetEntity', { id, \r\n entityId: entityId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.get(url).getPromise()\r\n .finally(() => this.endProcess());\r\n }\r\n\r\n public createEntity(obj: any, entityId?: string) {\r\n const url = this.resolveEndpoint('CreateEntity', \r\n { entityId: entityId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' }).getPromise().finally(() => this.endProcess());\r\n }\r\n\r\n public updateEntity(id: string, obj, entityId?: string) {\r\n const url = this.resolveEndpoint('UpdateEntity', { id, \r\n entityId: entityId || this.activeEntity.id });\r\n \r\n this.startProcess();\r\n return this.http.post(url, obj, { dataType: 'json' }).getPromise().finally(() => this.endProcess());\r\n }\r\n\r\n public deleteEntity(id: string, entityId?: string) {\r\n const url = this.resolveEndpoint('DeleteEntity', { id, \r\n entityId: entityId || this.activeEntity.id });\r\n\r\n this.startProcess();\r\n return this.http.post(url, null).getPromise().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\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 == 'entityId') {\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('GetEntities', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/fetch'));\r\n this.setEnpointIfNotExist('GetEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/fetch/{id}'));\r\n this.setEnpointIfNotExist('CreateEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/create'));\r\n this.setEnpointIfNotExist('UpdateEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/update/{id}'));\r\n this.setEnpointIfNotExist('DeleteEntity', combinePath(endpointBase, 'models/{modelId}/crud/{entityId}/delete/{id}'));\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 options = options || {}\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 \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.getEntities()\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 addColumns: true,\r\n addColumnsTitle: i18n.getText('AddBtnTitle'),\r\n showActiveRow: false,\r\n onAddColumnClick: 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\r\n if (!form.validate())\r\n return false;\r\n \r\n form.getData()\r\n .then(obj => this.context.createEntity(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 const keyAttrs = activeEntity.attributes.filter(attr => attr.isPrimaryKey);\r\n const keys = keyAttrs.map(attr => row.getValue(attr.id));\r\n\r\n if (!form.validate())\r\n return false;\r\n\r\n form.getData()\r\n .then(obj => this.context.updateEntity(keys.join(':'), 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.attributes.filter(attr => attr.isPrimaryKey);\r\n const keys = keyAttrs.map(attr => row.getValue(attr.id));\r\n const entityId = keyAttrs.map((attr, index) => `${attr.id}:${keys[index]}`).join(';');\r\n this.dlg.openConfirm(\r\n i18n.getText('DeleteDlgCaption')\r\n .replace('{entity}', activeEntity.caption), \r\n i18n.getText('DeleteDlgMessage')\r\n .replace('{entityId}', entityId), \r\n )\r\n .then((result) => {\r\n if (result) {\r\n\r\n //pass entityId in future\r\n this.context.deleteEntity(keys.join(':'))\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.getEntities()\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\r\n private context: DataContext;\r\n private basePath: string;\r\n\r\n private container: HTMLElement;\r\n\r\n private options?: EasyDataViewDispatcherOptions = { basePath: 'easydata' };\r\n\r\n constructor(options?: EasyDataViewDispatcherOptions) {\r\n options = options || {};\r\n\r\n this.options = dataUtils.assign(this.options, options);\r\n\r\n this.options.basePath = (!this.options.rootEntity)\r\n ? this.pretiffyPath(this.options.basePath)\r\n : this.pretiffyPath(window.location.pathname);\r\n\r\n if (this.options.rootEntity)\r\n this.options.showBackToEntities = false;\r\n\r\n this.setContainer(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: options.endpoint,\r\n onProcessStart: () => bar.show(),\r\n onProcessEnd: () => bar.hide()\r\n });\r\n\r\n this.basePath = this.getBasePath();\r\n }\r\n\r\n private pretiffyPath(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 this.container = document.getElementById('EasyDataContainer');\r\n return;\r\n }\r\n\r\n if (typeof container === 'string') {\r\n if (container.length){\r\n if (container[0] === '#') {\r\n this.container = document.getElementById(container.substring(1));\r\n }\r\n else 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 throw Error('Unrecognized container parameter ' + \r\n '(Must be an element ID, a class name or HTMLElement object itself): ' + container);\r\n }\r\n }\r\n }\r\n else {\r\n this.container = container;\r\n }\r\n }\r\n\r\n private getActiveEntityId(): string | null {\r\n if (this.options.rootEntity) \r\n return this.options.rootEntity;\r\n\r\n const decodedUrl = decodeURIComponent(window.location.href);\r\n const splitIndex = decodedUrl.lastIndexOf('/');\r\n const typeName = decodedUrl.substring(splitIndex + 1);\r\n\r\n return typeName && typeName.toLocaleLowerCase() !== this.options.basePath\r\n ? typeName\r\n : null;\r\n }\r\n\r\n private getBasePath(): string {\r\n const decodedUrl = decodeURIComponent(window.location.href);\r\n const optBasePathIndex = decodedUrl.toLocaleLowerCase().indexOf(this.options.basePath);\r\n return decodedUrl.substring(0, optBasePathIndex + this.options.basePath.length);\r\n }\r\n\r\n run(): Promise<void> {\r\n window.addEventListener('ed_set_location', this.onSetLocation);\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 activeEntityId = this.getActiveEntityId();\r\n if (activeEntityId) {\r\n this.context.setActiveEntity(activeEntityId);\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 detach() {\r\n window.removeEventListener('ed_set_location', 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 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 shure about removing this entity: [{entityId}]?',\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":""}