{"version":3,"file":"UIHelpers.js","sourceRoot":"","sources":["../../TS/UIHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["import { IJSModule } from \"./IJSModule.js\";\r\n\r\nenum NotificationButtonPosition {\r\n Right,\r\n Bottom,\r\n Left\r\n}\r\n\r\nexport class UIHelpers implements IJSModule {\r\n public serviceName: string;\r\n\r\n private resizeObserver: ResizeObserver;\r\n\r\n private userActivitySubscribers: UserActivitySubscriptionInfo[] = [];\r\n private userActivityHandledEvents: string[] = [];\r\n\r\n private clickOutsideSubscriptions: ClickOutsideSubscriptions;\r\n\r\n public initialize(): boolean {\r\n this.serviceName = 'UIHelpers';\r\n\r\n window['PlatformHelpers'] = this;\r\n\r\n this.resizeObserver = new ResizeObserver(entries => {\r\n entries.forEach((entry: any) => {\r\n if (entry.target.handleResize) {\r\n entry.target.handleResize(entry);\r\n }\r\n });\r\n });\r\n\r\n this.clickOutsideSubscriptions = {};\r\n\r\n return true;\r\n }\r\n\r\n public getElementTextValue(id: string): string {\r\n let el = (document.getElementById(id) as HTMLInputElement);\r\n\r\n return el != null && el != undefined ? el.value : \"\";\r\n }\r\n\r\n public setElementTextValue(id: string, value: string): void {\r\n let el = (document.getElementById(id) as HTMLInputElement);\r\n\r\n el.value = value;\r\n }\r\n\r\n public getElementHeight(id: string): number {\r\n let el = document.getElementById(id);\r\n\r\n return el != null && el != undefined ? el.offsetHeight : 0;\r\n }\r\n\r\n public getElementWidth(id: string): number {\r\n let el = document.getElementById(id);\r\n\r\n return el != null && el != undefined ? el.offsetWidth : 0;\r\n }\r\n\r\n public getElementGap(id: string): number {\r\n let el = document.getElementById(id);\r\n\r\n if (el == null || el == undefined) {\r\n return 0;\r\n }\r\n\r\n let style = getComputedStyle(el);\r\n\r\n if (style == null || style == undefined) {\r\n return 0;\r\n }\r\n\r\n if (style.gap == null || style.gap == undefined) {\r\n return 0;\r\n }\r\n\r\n return parseInt(style.gap);\r\n }\r\n\r\n public removeTabIndex(selector: string): void {\r\n let el = document.querySelector(selector);\r\n\r\n if (el != null && el != undefined) {\r\n el.removeAttribute('tabindex');\r\n }\r\n }\r\n\r\n public preventDefaultKeyEvents(id: string, eventTypes: string[], keys: string[]): void {\r\n let el = document.getElementById(id);\r\n\r\n if (el != null && eventTypes != null && eventTypes.length > 0 && keys != null && keys.length > 0) {\r\n let preventFunc = (e: KeyboardEvent) => {\r\n if (keys.some(k => k == e.key)) {\r\n e.preventDefault();\r\n }\r\n };\r\n\r\n eventTypes.forEach(evtType => el.addEventListener(evtType, preventFunc, false))\r\n }\r\n }\r\n\r\n public fitText(text: string, fontSize: number, width: number, height: number, padding: number = 0) {\r\n let calcFontSize = fontSize || 10;\r\n\r\n let styleStr = (fontSize: number) => 'position: absolute;visibility:hidden;font-size:' + fontSize + 'px;padding:' + padding + 'px;';\r\n\r\n let tmpNode = document.createElement('span');\r\n tmpNode.textContent = text;\r\n tmpNode.setAttribute('style', styleStr(calcFontSize));\r\n document.body.appendChild(tmpNode);\r\n\r\n let tmpNodeWidth = tmpNode.offsetWidth;\r\n let tmpNodeHeight = tmpNode.offsetHeight;\r\n\r\n let fontSizeStep = tmpNodeWidth < width && tmpNodeHeight < height ? 1 : -1;\r\n\r\n do {\r\n tmpNode.setAttribute('style', styleStr(calcFontSize));\r\n tmpNodeWidth = tmpNode.offsetWidth;\r\n tmpNodeHeight = tmpNode.offsetHeight;\r\n calcFontSize += fontSizeStep;\r\n } while (fontSizeStep < 0 ? (tmpNodeHeight > height || tmpNodeWidth > width) : (tmpNodeHeight <= height && tmpNodeWidth <= width));\r\n\r\n document.body.removeChild(tmpNode);\r\n\r\n if (tmpNodeHeight > height || tmpNodeWidth > width) {\r\n calcFontSize--;\r\n }\r\n\r\n return calcFontSize;\r\n }\r\n\r\n public scrollToNextTelerikRow(containerSelector: string, elementIndex: number, partial: boolean, scrollElementsCount: number) {\r\n let container = document ? document.querySelectorAll(containerSelector)[0] as HTMLElement : null;\r\n\r\n let renderedRowAttr = 'data-render-row-index';\r\n\r\n let el = container ? container.querySelectorAll('[' + renderedRowAttr + '=\"' + (elementIndex + 1) + '\"]')[0] as HTMLElement : null;\r\n let isRendered = el != null && el != undefined;\r\n let prev = false;\r\n\r\n if (!el) {\r\n let renderedRows = container ? container.querySelectorAll('[' + renderedRowAttr + ']') : null;\r\n\r\n if (renderedRows && renderedRows.length > 0) {\r\n let firstEl = renderedRows[0] as HTMLElement;\r\n let lastEl = renderedRows[renderedRows.length - 1] as HTMLElement;\r\n\r\n let minNdx = parseInt(firstEl.getAttribute(renderedRowAttr));\r\n let maxNdx = parseInt(lastEl.getAttribute(renderedRowAttr));\r\n\r\n prev = Math.abs(elementIndex - minNdx) < Math.abs(elementIndex - maxNdx);\r\n el = prev ? firstEl : lastEl;\r\n elementIndex = prev ? minNdx : maxNdx;\r\n }\r\n }\r\n\r\n let getScrollToElement = (el: HTMLElement, prev: boolean) => {\r\n let num = scrollElementsCount || 1;\r\n let scrollTo = el;\r\n\r\n while (num > 0) {\r\n num--;\r\n\r\n let tmp = (prev ? scrollTo.previousElementSibling : scrollTo.nextElementSibling) as HTMLElement;\r\n\r\n if (!tmp) {\r\n break;\r\n }\r\n\r\n scrollTo = tmp;\r\n }\r\n\r\n return scrollTo;\r\n };\r\n\r\n if (container && el) {\r\n //Get container properties\r\n let cTop = container.scrollTop;\r\n let cBottom = cTop + container.clientHeight;\r\n\r\n //Get element properties\r\n let eHeight = el.clientHeight;\r\n let eTop = eHeight * elementIndex;\r\n let eBottom = eTop + eHeight;\r\n\r\n //Check if in view\r\n let isTotal = (eTop >= cTop && eBottom <= cBottom);\r\n\r\n let isPartial = partial && (\r\n (eTop < cTop && eBottom > cTop) ||\r\n (eBottom > cBottom && eTop < cBottom)\r\n );\r\n\r\n if (!isTotal && !isPartial) {\r\n prev = cBottom > eBottom;\r\n }\r\n\r\n //VM - Telerik adds additional row stubs above rendered rows even it's the 1st row. So we have to check is row rendered as well\r\n if (!isRendered || (!isTotal && !isPartial)) {\r\n let scrollToEl = getScrollToElement(el, prev);\r\n scrollToEl.scrollIntoView({ block: \"nearest\" });\r\n }\r\n\r\n return isTotal || isPartial;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getElementOffset(id: string, posX: number, posY: number): [number, number] {\r\n let elPos = document.getElementById(id).getBoundingClientRect();\r\n\r\n let x = Math.round(posX - elPos.x);\r\n let y = Math.round(posY - elPos.y);\r\n\r\n return [x, y];\r\n }\r\n\r\n public setElementPosition(id: string, posX: number, posY: number): void {\r\n let el = document.getElementById(id);\r\n let html = document.documentElement;\r\n\r\n //if the element is at the top or bottom of the page (Y position max or min for current page size)\r\n if (((html.clientHeight - posY - el.clientHeight) <= 0) || ((html.clientHeight - posY) >= html.clientHeight)) {\r\n if (((html.clientWidth - posX - el.clientWidth) < 0) || ((html.clientWidth - posX) >= html.clientWidth)) {\r\n //X position does not changed, so return\r\n return;\r\n }\r\n else {\r\n //if the element is at the top or bottom of the page, but X position changed\r\n el.style.left = posX + \"px\";\r\n return;\r\n }\r\n }\r\n\r\n //if element is at the right or left borders of the page (X position max or min for current page size)\r\n if (((html.clientWidth - posX - el.clientWidth) < 0) || ((html.clientWidth - posX) >= html.clientWidth)) {\r\n if (((html.clientHeight - posY - el.clientHeight) <= 0) || ((html.clientHeight - posY) >= html.clientHeight)) {\r\n //Y position does not changed, so return\r\n return;\r\n }\r\n else {\r\n //if element is at the right or left borders of the page, but Y position changed\r\n el.style.top = posY + \"px\";\r\n return;\r\n }\r\n }\r\n\r\n //set position\r\n if (el != null) {\r\n el.style.left = posX + \"px\";\r\n el.style.top = posY + \"px\";\r\n }\r\n }\r\n\r\n public setNotificationButtonPosition(id: string, slideoutId: string, posX: number, posY: number): NotificationButtonPosition {\r\n // el - notification slideout button\r\n let el = document.getElementById(id);\r\n let html = document.documentElement;\r\n\r\n if (el != null && html != null) {\r\n // slideout - notification slideout widget\r\n let slideout = document.getElementById(slideoutId);\r\n\r\n // if element at the right side of the screen\r\n if ((html.clientWidth - posX - el.clientWidth) <= 0) {\r\n this.setNotificationSlideoutPos(el, html, slideout, html.clientWidth - el.clientWidth - slideout.clientWidth);\r\n\r\n if ((html.clientHeight - posY - el.clientHeight) <= 0) {\r\n //set max X and Y position\r\n el.style.top = html.clientHeight - el.clientHeight + \"px\";\r\n }\r\n else if ((html.clientHeight - posY) >= html.clientHeight) {\r\n // do not change Y position when el out of top side of the screen\r\n }\r\n else {\r\n //only change Y position when element at the rigth side of the screen\r\n el.style.top = posY + \"px\";\r\n }\r\n\r\n el.style.left = html.clientWidth - el.clientWidth + \"px\";\r\n\r\n return NotificationButtonPosition.Right;\r\n }\r\n else if ((html.clientWidth - posX) >= html.clientWidth) {\r\n this.setNotificationSlideoutPos(el, html, slideout, 0);\r\n\r\n if ((html.clientHeight - posY - el.clientHeight) <= 0) {\r\n // el out of bottom side of the screen\r\n el.style.top = html.clientHeight - el.clientHeight + \"px\";\r\n }\r\n else if ((html.clientHeight - posY) >= html.clientHeight) {\r\n // do not change Y position when el out of top side of the screen\r\n }\r\n else {\r\n el.style.top = posY + \"px\";\r\n }\r\n\r\n el.style.left = 0 + \"px\";\r\n\r\n return NotificationButtonPosition.Left;\r\n }\r\n\r\n // drag Left - Right at bottom side\r\n if (((html.clientHeight - posY - el.clientHeight) <= 0) || (parseInt(el.style.top) + el.clientHeight == html.clientHeight)) {\r\n if (((html.clientWidth - posX - el.clientWidth) < 0) || ((html.clientWidth - posX) >= html.clientWidth - slideout.clientWidth)) {\r\n // do not change Notification Slideout Position\r\n }\r\n else {\r\n this.setNotificationSlideoutPos(el, html, slideout, posX - slideout.clientWidth);\r\n }\r\n\r\n el.style.top = html.clientHeight - el.clientHeight + \"px\";\r\n el.style.left = posX + \"px\";\r\n\r\n return NotificationButtonPosition.Bottom;\r\n }\r\n\r\n // drag Top - Bottom at right side\r\n if (((html.clientWidth - posX - el.clientWidth) <= 0) || (parseInt(el.style.left) + el.clientWidth == html.clientWidth)) {\r\n this.setNotificationSlideoutPos(el, html, slideout, html.clientWidth - el.clientWidth - slideout.clientWidth);\r\n\r\n if ((html.clientHeight - posY) >= html.clientHeight) {\r\n\r\n el.style.top = 0 + \"px\";\r\n\r\n return NotificationButtonPosition.Right;\r\n }\r\n\r\n el.style.top = posY + \"px\";\r\n el.style.left = html.clientWidth - el.clientWidth + \"px\";\r\n\r\n return NotificationButtonPosition.Right;\r\n }\r\n\r\n // drag Top - Bottom at left side\r\n if (((html.clientWidth - posX) >= html.clientWidth) || (parseInt(el.style.left) == 0)) {\r\n this.setNotificationSlideoutPos(el, html, slideout, 0);\r\n\r\n if ((html.clientHeight - posY) >= html.clientHeight) {\r\n el.style.top = 0 + \"px\";\r\n\r\n return NotificationButtonPosition.Left;\r\n }\r\n\r\n el.style.top = posY + \"px\";\r\n el.style.left = 0 + \"px\";\r\n\r\n return NotificationButtonPosition.Left;\r\n }\r\n }\r\n\r\n return NotificationButtonPosition.Bottom;\r\n }\r\n\r\n private setNotificationSlideoutPos(el: HTMLElement, html: HTMLElement, slideout: HTMLElement, posX: number): void {\r\n if (slideout != null) {\r\n //change X position for notification slideout to be near the notification slideout button\r\n slideout.style.left = posX + \"px\";\r\n // notification slideout default height in hide mode\r\n slideout.style.top = slideout.clientHeight + (slideout.clientHeight - html.clientHeight) + \"px\";\r\n }\r\n }\r\n\r\n public getPossibleFooterState(id: string): number {\r\n let el = document.getElementById(id);\r\n\r\n if (el != null && el.scrollWidth > el.clientWidth) {\r\n return 2;\r\n }\r\n\r\n return 1;\r\n }\r\n\r\n public isTouchDevice(): boolean {\r\n return (('ontouchstart' in window) || (navigator.maxTouchPoints > 0));\r\n }\r\n\r\n public setModalCustomClass(classes: string[]) {\r\n let modalElements = document.getElementsByClassName(\"k-dialog-wrapper\");\r\n\r\n if (modalElements.length > 0) {\r\n let modal = modalElements[0];\r\n\r\n for (let i = 0; i < classes.length; i++) {\r\n modal.classList.add(classes[i]);\r\n }\r\n }\r\n }\r\n\r\n public initSearchInputFocus(inputId: string): boolean {\r\n let element = document.getElementById(inputId);\r\n\r\n if (element != null && element != undefined && navigator != null && navigator != undefined && ((navigator.platform == 'MacIntel' && navigator.maxTouchPoints > 0) || navigator.platform == 'iPad') && window.innerWidth > window.innerHeight) {\r\n element.removeEventListener('focus', (event) => this.onFocus(event, element));\r\n element.addEventListener('focus', (event) => this.onFocus(event, element));\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public disposeSearchInputFocus(inputId: string): void {\r\n let element = document.getElementById(inputId);\r\n\r\n if (element != null && element != undefined) {\r\n element.removeEventListener('focus', (event) => this.onFocus(event, element));\r\n }\r\n }\r\n\r\n private onFocus(event: FocusEvent, element: HTMLElement): void {\r\n if (element != null && element != undefined && window.innerWidth > window.innerHeight) {\r\n let elementTop = element.getBoundingClientRect().top;\r\n\r\n window.scrollTo(0, elementTop - 16);\r\n }\r\n }\r\n\r\n private getInput(id: string): HTMLInputElement {\r\n let element = document.getElementById(id);\r\n let input = null;\r\n\r\n if (element != null && element != undefined) {\r\n if (element instanceof HTMLInputElement && element.type == 'text') {\r\n input = element;\r\n }\r\n else {\r\n let inputs = element.getElementsByTagName('input');\r\n if (inputs != null && inputs != undefined && inputs.length > 0) {\r\n input = inputs[0];\r\n }\r\n }\r\n }\r\n\r\n return input;\r\n }\r\n\r\n public selectInput(id: string): void {\r\n let input = this.getInput(id);\r\n\r\n if (input != null) {\r\n input.select();\r\n }\r\n }\r\n\r\n public focusAndSelectInput(id: string): void {\r\n this.focusInput(id, true);\r\n }\r\n\r\n public focusInput(id: string, selectText: boolean = false, timeoutMS: number = 0): void {\r\n let input = this.getInput(id);\r\n\r\n if (input != null) {\r\n let focusIt = () => {\r\n input.focus();\r\n\r\n if (selectText) {\r\n input.select();\r\n }\r\n };\r\n\r\n if (timeoutMS > 0) {\r\n setTimeout(focusIt, timeoutMS);\r\n } else {\r\n focusIt();\r\n }\r\n }\r\n }\r\n\r\n public blurInput(id: string, timeoutMS: number = 0): void {\r\n let input = this.getInput(id);\r\n\r\n if (input != null) {\r\n let blurIt = () => input.blur();\r\n\r\n if (timeoutMS > 0) {\r\n setTimeout(blurIt, timeoutMS);\r\n } else {\r\n blurIt();\r\n }\r\n }\r\n }\r\n\r\n public setInputDisabledState(id: string, isDisabled = true, timeoutMS: number = 0): void {\r\n let input = this.getInput(id);\r\n\r\n if (input != null) {\r\n let setDisable = () => input.disabled = isDisabled;\r\n if (timeoutMS > 0) {\r\n setTimeout(setDisable, timeoutMS);\r\n } else {\r\n setDisable();\r\n }\r\n }\r\n }\r\n\r\n public clearInput(id: string, timeoutMS: number = 0): void {\r\n let input = this.getInput(id);\r\n\r\n if (input != null) {\r\n let clearIt = () => input.value = '';\r\n\r\n if (timeoutMS > 0) {\r\n setTimeout(clearIt, timeoutMS);\r\n } else {\r\n clearIt();\r\n }\r\n }\r\n }\r\n\r\n public getSelectionCoordinates(): number[] {\r\n let rect = window.getSelection().getRangeAt(0).getBoundingClientRect();\r\n\r\n // VM - workaround getSelection bug: https://bugzilla.mozilla.org/show_bug.cgi?id=235937\r\n if (rect == null || rect == undefined || (rect.width == 0 && rect.height == 0)) {\r\n let node = window.getSelection().focusNode as HTMLElement;\r\n if (node != null && node != undefined) {\r\n rect = node.getBoundingClientRect();\r\n }\r\n }\r\n\r\n if (rect != null && rect != undefined) {\r\n return [Math.ceil(rect.top), Math.ceil(rect.left), Math.ceil(rect.height), Math.ceil(rect.width)];\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public getElementBoundingRect(containerId: string): number[] {\r\n let element = document.getElementById(containerId);\r\n\r\n if (element != null && element != undefined) {\r\n let rect = element.getBoundingClientRect();\r\n\r\n return [Math.ceil(rect.top), Math.ceil(rect.left), Math.ceil(rect.height), Math.ceil(rect.width)]\r\n }\r\n }\r\n\r\n public getMaxCountToShow(id: string): number {\r\n let container = document.getElementById(id);\r\n\r\n let items = document.getElementsByClassName(\"select-attribute-block__item\");\r\n\r\n let buttonsCount = 0;\r\n let horizontalCount = 0;\r\n\r\n let button = document.getElementById(\"btn_block\");\r\n if (button != null) {\r\n buttonsCount = 2;\r\n\r\n if (button.getBoundingClientRect().top != items[0].getBoundingClientRect().top) {\r\n horizontalCount = 1; //when we have next or skip button in attributes and all attributes under this button\r\n }\r\n else {\r\n horizontalCount = 2; //when we have next or skip button in attributes and some attributes near this button(on one line)\r\n }\r\n }\r\n else {\r\n horizontalCount = 1; //when we don't have next or skip button in attribute block\r\n buttonsCount = 1;\r\n }\r\n\r\n let heightBetweenItems = 0;\r\n for (let i = 0; i < items.length; i++) {\r\n if (i == 0) {\r\n continue;\r\n }\r\n else if ((items.item(i) as HTMLElement).offsetTop == (items.item(i - 1) as HTMLElement).offsetTop) {\r\n horizontalCount++;\r\n }\r\n else {\r\n heightBetweenItems = (items.item(i) as HTMLElement).offsetTop - (items.item(i - 1) as HTMLElement).clientHeight - (items.item(i - 1) as HTMLElement).offsetTop;\r\n break;\r\n }\r\n }\r\n\r\n let verticalCount = Math.floor(container.clientHeight / (heightBetweenItems + items[0].clientHeight));\r\n\r\n let totalCount = verticalCount * horizontalCount;\r\n\r\n return totalCount - buttonsCount; // 2 items if it has next or skip button, else 1 item \r\n }\r\n\r\n public initElementClickEvent(id: string) {\r\n document.getElementById(id).click();\r\n }\r\n\r\n public openUrlBlank(url: string): void {\r\n window.open(url, '_blank');\r\n }\r\n\r\n public scrollToElement(elementId: string, isSmooth: boolean = true) {\r\n let element = document.getElementById(elementId);\r\n\r\n if (element) {\r\n element.scrollIntoView({\r\n behavior: isSmooth ? 'smooth' : 'auto'\r\n });\r\n }\r\n }\r\n\r\n public setClassForParentTelerikAnimationContainer(innerElementId: string, classes: string[]): boolean {\r\n let element = document.getElementById(innerElementId);\r\n\r\n if (element) {\r\n let container = element.closest(\".telerik-blazor.k-animation-container\");\r\n\r\n if (container && !classes.every((c) => container.classList.contains(c))) {\r\n for (let i = 0; i < classes.length; i++) {\r\n container.classList.add(classes[i]);\r\n }\r\n\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n }\r\n\r\n public getDashboardOrder(id: string): number {\r\n let element = document.getElementById(id)\r\n\r\n if (element != null && element != undefined) {\r\n let item = element.closest(\".k-tilelayout-item\")\r\n let order = (item as HTMLElement).style.order\r\n\r\n return Number(order);\r\n }\r\n\r\n return null;\r\n }\r\n\r\n public subscribeOnContainerResize(componentInstanceObj: any, containerId: string, callbackName: string, debounceMS: number = 50) {\r\n if (componentInstanceObj != null && componentInstanceObj != undefined && callbackName.length > 0 && this.resizeObserver != null && this.resizeObserver != undefined) {\r\n let container = document.getElementById(containerId) as any;\r\n\r\n if (container != null && container != undefined) {\r\n container.handleResize = () => {\r\n componentInstanceObj.invokeMethodAsync(callbackName);\r\n }\r\n\r\n this.resizeObserver.observe(container);\r\n }\r\n }\r\n }\r\n\r\n public subscribeOnContainerResizeX(componentInstanceObj: any, containerId: string, callbackName: string, debounceMS: number = 250) {\r\n if (componentInstanceObj != null && componentInstanceObj != undefined && callbackName.length > 0 && this.resizeObserver != null && this.resizeObserver != undefined) {\r\n let container = document.getElementById(containerId) as any;\r\n\r\n console.log(\"SUBSCRIBE X\");\r\n console.log(container);\r\n\r\n if (container != null && container != undefined) {\r\n container.handleResize = this.debounceAsync(async () => { await componentInstanceObj.invokeMethodAsync(callbackName); }, debounceMS);\r\n\r\n this.resizeObserver.observe(container);\r\n }\r\n }\r\n }\r\n\r\n public subscribeOnContainerResizeY(containerId: string, handler: () => Promise, debounceMS: number = 100) {\r\n if (handler != null && handler != undefined && this.resizeObserver != null && this.resizeObserver != undefined) {\r\n let container = document.getElementById(containerId) as any;\r\n\r\n if (container != null && container != undefined) {\r\n //console.log(\"SUBSCRIBE Y\");\r\n //console.log(container);\r\n\r\n container.handleResize = this.debounceAsync(async () => { await handler(); }, debounceMS);\r\n\r\n this.resizeObserver.observe(container);\r\n }\r\n else {\r\n // console.log(\"SUBSCRIBE Y - CONTAINER NOT FOUND\");\r\n }\r\n }\r\n }\r\n\r\n public unsubscribeOnContainerResize(containerId: string) {\r\n if (this.resizeObserver != null && this.resizeObserver != undefined) {\r\n let container = document.getElementById(containerId) as any;\r\n\r\n if (container != null && container != undefined) {\r\n this.resizeObserver.unobserve(container);\r\n }\r\n }\r\n }\r\n\r\n public setIframeInnerHtml(elementId: string, innerHtml: string) {\r\n let element = document.getElementById(elementId) as HTMLIFrameElement;\r\n\r\n if (element) {\r\n element.contentWindow.document.open();\r\n element.contentWindow.document.write(innerHtml);\r\n element.contentWindow.document.close();\r\n\r\n element.style.width = '100%';\r\n element.style.height = element.contentWindow.document.documentElement.scrollHeight + 'px';\r\n }\r\n }\r\n\r\n public getIframeLocation(elementId: string): string {\r\n let element = document.getElementById(elementId) as HTMLIFrameElement;\r\n\r\n let href = \"\";\r\n\r\n try {\r\n href = element ? element.contentWindow.location.href : \"\";\r\n }\r\n catch {\r\n //console.log('Location access is denied');\r\n }\r\n\r\n return href;\r\n }\r\n\r\n public hideElementsByClass(containerId: string, hideClass: string) {\r\n let container = document.getElementById(containerId) as any;\r\n\r\n if (container != null && container != undefined) {\r\n let elements = container.getElementsByClassName(hideClass);\r\n\r\n if (elements != null && elements != undefined && elements.length > 0) {\r\n for (let i = 0; i < elements.length; i++) {\r\n elements[i].style.visibility = 'hidden';\r\n }\r\n }\r\n }\r\n }\r\n\r\n public pickupSelectedRowsHighlight() {\r\n const tbody = document.querySelector('tbody');\r\n if (tbody) {\r\n const checkboxes = tbody.querySelectorAll('input[type=\"checkbox\"]');\r\n checkboxes.forEach(checkbox => {\r\n const isChecked = checkbox.getAttribute('aria-checked') === 'true';\r\n const closestTr = checkbox.closest('tr');\r\n\r\n if (isChecked) {\r\n closestTr.classList.add('highlightSelectedRow');\r\n } else {\r\n closestTr.classList.remove('highlightSelectedRow');\r\n }\r\n });\r\n }\r\n }\r\n\r\n public pickupScanRowsHighlight(orderId: string) {\r\n const tbody = document.querySelector('tbody');\r\n let flag = false; // Flag to indicate if \"Remove\" was found in orderId\r\n\r\n if (orderId.startsWith(\"Remove\")) {\r\n orderId = orderId.replace(\"Remove\", \"\");\r\n flag = true;\r\n }\r\n\r\n if (tbody) {\r\n let tds: NodeListOf = tbody.querySelectorAll('td');\r\n tds.forEach(td => {\r\n let divs: NodeListOf = td.querySelectorAll('div');\r\n divs.forEach(div => {\r\n if (div.innerText.trim() === orderId) {\r\n const closestTr = td.closest('tr');\r\n if (flag) {\r\n closestTr.classList.remove('highlightScanRow');\r\n }\r\n else {\r\n closestTr.classList.add('highlightScanRow');\r\n }\r\n }\r\n });\r\n });\r\n }\r\n }\r\n\r\n public subscribeOnUserActivity(id: string, componentInstanceObj: any, callbackName: string, eventsToHandle: string[] = null, debounceMS: number = 3000) {\r\n if (id == null || id.length == 0 || callbackName == null || callbackName.length == 0 || componentInstanceObj == null) {\r\n return;\r\n }\r\n\r\n if (this.userActivitySubscribers == null) {\r\n this.userActivitySubscribers = [];\r\n this.userActivityHandledEvents = [];\r\n }\r\n\r\n if (this.userActivitySubscribers.every(x => x.ID != id)) {\r\n this.userActivitySubscribers.push({ ID: id });\r\n }\r\n\r\n let subscriber = this.userActivitySubscribers.find(x => x.ID == id);\r\n subscriber.EventsToHandle = eventsToHandle != null && eventsToHandle.length > 0 ? eventsToHandle : ['mousedown', 'keypress', 'scroll', 'touchstart'];\r\n subscriber.Callback = this.debounceAsync(async () => await componentInstanceObj.invokeMethodAsync(callbackName), debounceMS);\r\n\r\n this.subscribeOnListedEvents();\r\n }\r\n\r\n private subscribeOnListedEvents() {\r\n this.userActivityHandledEvents.forEach(name => this.userActivitySubscribersCallbackHandler, true); // VM - remove old listeners 1st \r\n\r\n this.userActivityHandledEvents = this.userActivitySubscribers\r\n .reduce((a, b) => a.concat(b.EventsToHandle), [])\r\n .filter((value, index, self) => self.indexOf(value) === index);\r\n\r\n this.userActivityHandledEvents.forEach(name => document.addEventListener(name, this.userActivitySubscribersCallbackHandler, true));\r\n }\r\n\r\n private userActivitySubscribersCallbackHandler(e: Event) {\r\n // VM - need to use global object for 2 reasons: \r\n // 1 - as far as the current method is used as event listener we do not have an access to the PlatformHelpers object via THIS. \r\n // 2 - we can't put the object as an argument because to add arguments we would have to add a COPY of the method as the listener (anonymous func/bind etc.) and in this case we will not be able to REMOVE the listener because the original object will gone\r\n let self = window['PlatformHelpers'];\r\n if (self.userActivitySubscribers == null) {\r\n return;\r\n }\r\n\r\n let subscribers = self.userActivitySubscribers.filter(s => s.EventsToHandle.some(n => n == e.type));\r\n\r\n subscribers.forEach(async s => await s.Callback());\r\n }\r\n\r\n public unsubscribeOnUserActivity(id: string) {\r\n if (this.userActivitySubscribers == null) {\r\n return;\r\n }\r\n\r\n let subscriber = this.userActivitySubscribers.find(x => x.ID == id);\r\n\r\n if (subscriber != null && subscriber != undefined) {\r\n const ndx = this.userActivitySubscribers.indexOf(subscriber);\r\n this.userActivitySubscribers.splice(ndx, 1);\r\n }\r\n\r\n this.subscribeOnListedEvents();\r\n }\r\n\r\n public forceReload() {\r\n location.reload();\r\n }\r\n\r\n public tryToRecoverApp() {\r\n // VM - commented code is not helpful because BNI_Persistence cookie has plenty of different paths. But 'document.cookie' returns only names so there are no ability to find the cookie with '/_blazor' path. Setting of the expiration time removes only one cookie (with path '/') from the list and after that 'document.cookie' does not return BNI_Persistence cookie anymore. But we have an ability to set cookie with the same name and path which will rewrite the cookie. At the same time, if we are adding the expiration time in past it removes the cookie immediately.\r\n //let cookieNames = document.cookie.split(/=[^;]*(?:;\\s*|$)/);\r\n //for (let i = 0; i < cookieNames.length; i++) {\r\n // if (/^BNI_persistence/.test(cookieNames[i])) {\r\n // document.cookie = cookieNames[i] + '=; expires=Thu, 01 Jan 1970 00:00:00 GMT;';\r\n // }\r\n //}\r\n document.cookie = 'BNI_persistence=;expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/_blazor';\r\n\r\n this.forceReload();\r\n }\r\n\r\n public getFilePreviewSrc(bytes: Uint8Array, type: string): string {\r\n let src = '';\r\n\r\n if (bytes != null && bytes.length > 0 && type != null && type.length > 0) {\r\n let blob = new Blob([bytes], { type: type });\r\n src = URL.createObjectURL(blob);\r\n }\r\n\r\n return src;\r\n }\r\n\r\n public resizeTextToFitContainer(elementId: string, elementContainerId: string) {\r\n let txtEl = document.getElementById(elementId);\r\n let container = document.getElementById(elementContainerId);\r\n\r\n if (txtEl != null && txtEl != undefined && container != null && container != undefined) {\r\n txtEl.style.fontSize = null; // font size resetting to default because new message can be smaller than previous\r\n\r\n let checkTxtSize = () => {\r\n let fontSize = window.getComputedStyle(txtEl).fontSize;\r\n txtEl.style.fontSize = (parseInt(fontSize) - 1) + 'px';\r\n\r\n if (txtEl.clientWidth >= container.clientWidth) {\r\n checkTxtSize();\r\n }\r\n }\r\n\r\n checkTxtSize();\r\n }\r\n }\r\n\r\n /* CJ - ATTRIBUTED TO https://www.meziantou.net/debouncing-throttling-javascript-events-in-a-blazor-application.htm */\r\n private debounceAsync(handler: () => Promise, debounceMS: number) {\r\n let timer;\r\n let first: boolean = true;\r\n\r\n return async () => {\r\n if (first) {\r\n // console.log(\"DEBOUNCEASYNC FIRST\");\r\n\r\n first = false;\r\n await handler();\r\n }\r\n else {\r\n clearTimeout(timer);\r\n\r\n timer = setTimeout(async () => {\r\n // console.log(\"DEBOUNCEASYNC\");\r\n\r\n await handler();\r\n }, debounceMS);\r\n }\r\n }\r\n }\r\n\r\n public subscribeOnClickOutside(elementId: string, componentInstanceObj: any) {\r\n let element = document.getElementById(elementId);\r\n\r\n if (element != null && element != undefined) {\r\n var s = (event: MouseEvent) => this.handleOnClickOutside(event, element, componentInstanceObj);\r\n\r\n this.clickOutsideSubscriptions[elementId] = s;\r\n window.addEventListener(\"click\", s);\r\n }\r\n }\r\n\r\n private handleOnClickOutside(event: MouseEvent, element: HTMLElement, componentInstanceObj: any) {\r\n if (!event.composedPath().includes(element)) {\r\n componentInstanceObj.invokeMethodAsync('OnClickOutside');\r\n }\r\n }\r\n\r\n public unsubscribeOnClickOutside(elementId: string) {\r\n let subscription = this.clickOutsideSubscriptions[elementId];\r\n\r\n if (subscription) {\r\n window.removeEventListener('click', subscription);\r\n }\r\n }\r\n\r\n public showDebugMessage(msg: string) {\r\n console.log(msg);\r\n }\r\n\r\n public copyToClipboard(text: string) {\r\n navigator.clipboard.writeText(text);\r\n }\r\n\r\n public clearContainerHTML(elementId: string) {\r\n let element = document.getElementById(elementId);\r\n\r\n if (element != null && element != undefined) {\r\n element.innerHTML = '';\r\n }\r\n }\r\n\r\n ////////////////////////////\r\n // TODO: VM - debug code. Delete it after the Routes test component will not be needed\r\n public setRouteDebugData(routeId: string, chunkStatus: string, pointsCount: number, pointsStr: string) {\r\n let element = document.getElementById(routeId + '_data');\r\n\r\n if (element != null && element != undefined) {\r\n element.innerHTML += '
' + '(' + pointsCount + ')' + ' - ' + chunkStatus + '
';\r\n }\r\n }\r\n ////////////////////////////\r\n\r\n public autoScrollTelerikGrid(containerSelector: string, elementIndex: number, partial: boolean, scrollElementsCount: number, ignoreFirstRowAsHeader: boolean = false, isPrevious: boolean = false)\r\n {\r\n let container = document ? document.querySelectorAll(containerSelector)[0] as HTMLElement : null;\r\n\r\n let renderedRowAttr = 'data-render-row-index';\r\n\r\n let el = container ? container.querySelectorAll('[' + renderedRowAttr + '=\"' + (elementIndex + 1) + '\"]')[0] as HTMLElement : null;\r\n let isRendered = el != null && el != undefined;\r\n let prev = false;\r\n\r\n if (!el)\r\n {\r\n let renderedRows = container ? container.querySelectorAll('[' + renderedRowAttr + ']') : null;\r\n\r\n if (renderedRows && renderedRows.length > 0)\r\n {\r\n let firstEl;\r\n\r\n if (ignoreFirstRowAsHeader == false || renderedRows.length == 1)\r\n {\r\n firstEl = renderedRows[0] as HTMLElement;\r\n }\r\n else\r\n {\r\n firstEl = renderedRows[1] as HTMLElement;\r\n }\r\n\r\n let lastEl = renderedRows[renderedRows.length - 1] as HTMLElement;\r\n\r\n let minNdx = parseInt(firstEl.getAttribute(renderedRowAttr));\r\n let maxNdx = parseInt(lastEl.getAttribute(renderedRowAttr));\r\n\r\n if (isPrevious == false)\r\n {\r\n prev = Math.abs(elementIndex - minNdx) < Math.abs(elementIndex - maxNdx);\r\n }\r\n else\r\n {\r\n prev = true;\r\n }\r\n el = prev ? firstEl : lastEl;\r\n elementIndex = prev ? minNdx : maxNdx;\r\n }\r\n }\r\n\r\n let getScrollToElement = (el: HTMLElement, prev: boolean) =>\r\n {\r\n let num = scrollElementsCount || 1;\r\n let scrollTo = el;\r\n\r\n while (num > 0)\r\n {\r\n num--;\r\n\r\n let tmp = (prev ? scrollTo.previousElementSibling : scrollTo.nextElementSibling) as HTMLElement;\r\n\r\n if (!tmp)\r\n {\r\n break;\r\n }\r\n\r\n scrollTo = tmp;\r\n }\r\n\r\n return scrollTo;\r\n };\r\n\r\n if (container && el)\r\n {\r\n //Get container properties\r\n let cTop = container.scrollTop;\r\n let cBottom = cTop + container.clientHeight;\r\n\r\n //Get element properties\r\n let eHeight = el.clientHeight;\r\n let eTop = eHeight * elementIndex;\r\n let eBottom = eTop + eHeight;\r\n\r\n //Check if in view\r\n let isTotal = (eTop >= cTop && eBottom <= cBottom);\r\n\r\n let isPartial = partial && (\r\n (eTop < cTop && eBottom > cTop) ||\r\n (eBottom > cBottom && eTop < cBottom)\r\n );\r\n\r\n if (!isTotal && !isPartial && !isPrevious)\r\n {\r\n prev = cBottom > eBottom;\r\n }\r\n\r\n //VM - Telerik adds additional row stubs above rendered rows even it's the 1st row. So we have to check is row rendered as well\r\n if (!isRendered || (!isTotal && !isPartial))\r\n {\r\n let scrollToEl = getScrollToElement(el, prev);\r\n scrollToEl.scrollIntoView({ block: \"nearest\" });\r\n }\r\n }\r\n\r\n return elementIndex;\r\n }\r\n\r\n public toggleGridForAutoScroll(parentId: string, addClass: boolean)\r\n {\r\n let parentElement = document.getElementById(parentId) as any;\r\n let gridElements = parentElement.getElementsByClassName(\"k-grid-container\");\r\n\r\n if (gridElements != null && gridElements != undefined)\r\n {\r\n for (let i = 0; i < gridElements.length; i++)\r\n {\r\n if (addClass == true)\r\n {\r\n gridElements[i].classList.add(\"k-grid-container-autoScroll-Enabled\")\r\n }\r\n else\r\n {\r\n gridElements[i].classList.remove(\"k-grid-container-autoScroll-Enabled\")\r\n }\r\n }\r\n }\r\n }\r\n}\r\n\r\nclass UserActivitySubscriptionInfo {\r\n public ID: string;\r\n public ComponentInstanceObj: any;\r\n public CallbackName: string;\r\n public EventsToHandle: string[];\r\n public DebounceMS: number;\r\n public Callback: any;\r\n}\r\n\r\ninterface ClickOutsideSubscriptions {\r\n [key: string]: (event: MouseEvent) => void;\r\n}"]}