{"version":3,"sources":["ArrayExtensions.ts","ClickHandler.ts","DocumentExtensions.ts","Events.ts","Fido.ts","LocalService.ts","MathExtensions.ts","QueryElementExtensions.ts","Site.ts","SiteCard.ts","SiteCardMenu.ts","SiteContainer.ts","SiteContainerSide.ts","SiteHistory.ts","SiteKeyboard.ts","SiteLabel.ts","SiteNavigation.ts","SiteOverview.ts","SitePrint.ts","SiteStart.ts","Actions/SiteAction.ts","Actions/SiteActionClose.ts","Actions/SiteActionCloseRefresh.ts","Actions/SiteActionCopy.ts","Actions/SiteActionPost.ts","Actions/SiteActionPrint.ts","Actions/SiteActionRefresh.ts","Actions/SiteActionRequest.ts","Actions/SiteActionShareImage.ts","Actions/SiteActionShareUrl.ts","Actions/SiteActionSound.ts","Actions/SiteActionSubmit.ts","Actions/SiteActionUrl.ts","Actions/SiteActionWrapper.ts","Commands/SiteCardRequestCommand.ts","Commands/SiteContainerRequestCommand.ts","Helpers/SiteElementBind.ts","Helpers/SiteElementBindActionButton.ts","Helpers/SiteElementBindClass.ts","Helpers/SiteElementChart.ts","Helpers/SiteElementChat.ts","Helpers/SiteElementHtmlView.ts","Helpers/SiteElementImage.ts","Helpers/SiteElementImages.ts","Helpers/SiteElementMap.ts","Helpers/SiteElementNavigation.ts","Helpers/SiteElementProgress.ts","Helpers/SiteElementRoute.ts","Helpers/SiteElementSearch.ts","Helpers/SiteElementTimer.ts","Helpers/SiteElementViewFile.ts","Helpers/SiteHelperCollapsable.ts","Helpers/SiteHelperQuery2d.ts","Helpers/SiteLabelCalculator.ts","Helpers/SiteLabelCheckbox.ts","Helpers/SiteLabelCoordinates.ts","Helpers/SiteLabelDateTime.ts","Helpers/SiteLabelDecimal.ts","Helpers/SiteLabelDropdown.ts","Helpers/SiteLabelDropdownMulti.ts","Helpers/SiteLabelFido.ts","Helpers/SiteLabelInput.ts","Helpers/SiteLabelInputLanguage.ts","Helpers/SiteLabelMarkdown.ts","Helpers/SiteLabelSignature.ts","Helpers/SiteLabelUnit.ts","Helpers/SiteLabelUpload.ts","Helpers/SiteStatementFor.ts","Helpers/SiteStatementForeach.ts","Helpers/SiteStatementIf.ts","Navigators/SiteNavigationDesktop.ts","Navigators/SiteNavigationMobile.ts","Navigators/SiteNavigationNone.ts","Positioners/SiteCardPositionerDesktop.ts","Positioners/SiteCardPositionerMobile.ts","System/SiteButton.ts","System/SiteLink.ts","System/SiteLoader.ts","System/SiteMessages.ts","System/SiteModal.ts","System/SiteModel.ts","System/SiteSounds.ts","System/SiteStyle.ts"],"names":[],"mappings":"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","file":"../Site.js","sourcesContent":["interface Array {\n first(): T | null;\n last(): T | null;\n skip(number: number): Array;\n}\n\nArray.prototype.first = function() {\n if(this.length === 0)\n return null;\n \n return this[0];\n}\nArray.prototype.last = function() {\n if(this.length === 0)\n return null;\n \n return this[this.length - 1];\n}","class ClickHandler {\n private _click: ((e: TEvent) => any) | null = null;\n private _dblclick: ((e: TEvent) => any) | null = null;\n\n private _touchTime = 0;\n private _clickedTimes = 1;\n\n constructor() {\n }\n call(event: TEvent) {\n var currTouchTime = new Date().getTime();\n if ((currTouchTime - this._touchTime) < 800)\n this._clickedTimes += 1;\n else\n this._clickedTimes = 1;\n \n if (this._clickedTimes == 1 && this._click != null)\n this._click(event);\n if (this._clickedTimes == 2 && this._dblclick != null)\n this._dblclick(event);\n\n this._touchTime = currTouchTime;\n }\n click(func: (e: TEvent) => any) {\n this._click = func;\n return this;\n }\n dblclick(func: (e: TEvent) => any) {\n this._dblclick = func;\n return this;\n }\n}","// Make navigator show Share\ninterface Navigator {\n share(obj: any): void;\n}\n\n// Others\ninterface Document {\n createElementFromHTML(html: string): HTMLElement;\n}\nDocument.prototype.createElementFromHTML = function (html: string) {\n let template = this.createElement(\"template\");\n template.innerHTML = html;\n return template.content.children[0] as HTMLElement;\n}\n\ndeclare var EasyMDE: any;","class CancellableEvent {\n cancelled: boolean = false;\n}\nclass ObserverChangeEvent {\n id?: string;\n types: string[];\n\n constructor(id: string | undefined, types: string[]) {\n this.id = id;\n this.types = types;\n }\n}\nclass ObserverEvent {\n\n}\nclass ObserverPhotoEvent\n extends ObserverEvent {\n\n}\nclass ObserverBarcodeEvent\n extends ObserverEvent {\n\n}","class Fido {\n static coerceToArrayBuffer = function (thing: any) {\n if (typeof thing === \"string\") {\n // base64url to base64\n thing = thing.replace(/-/g, \"+\").replace(/_/g, \"/\");\n \n // base64 to Uint8Array\n var str = window.atob(thing);\n var bytes = new Uint8Array(str.length);\n for (var i = 0; i < str.length; i++) {\n bytes[i] = str.charCodeAt(i);\n }\n thing = bytes;\n }\n \n // Array to Uint8Array\n if (Array.isArray(thing)) {\n thing = new Uint8Array(thing);\n }\n \n // Uint8Array to ArrayBuffer\n if (thing instanceof Uint8Array) {\n thing = thing.buffer;\n }\n \n // error if none of the above worked\n if (!(thing instanceof ArrayBuffer)) {\n throw new TypeError(\"could not coerce to ArrayBuffer\");\n }\n \n return thing;\n };\n \n \n static coerceToBase64Url = function (thing: any) {\n // Array or ArrayBuffer to Uint8Array\n if (Array.isArray(thing)) {\n thing = Uint8Array.from(thing);\n }\n \n if (thing instanceof ArrayBuffer) {\n thing = new Uint8Array(thing);\n }\n \n // Uint8Array to base64\n if (thing instanceof Uint8Array) {\n var str = \"\";\n var len = thing.byteLength;\n \n for (var i = 0; i < len; i++) {\n str += String.fromCharCode(thing[i]);\n }\n thing = window.btoa(str);\n }\n \n if (typeof thing !== \"string\") {\n throw new Error(\"could not coerce to string\");\n }\n \n // base64 to base64url\n // NOTE: \"=\" at the end of challenge is optional, strip it off here\n thing = thing.replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=*$/g, \"\");\n \n return thing;\n };\n}","type MessageSorts = \"Hello\" | \"Image\" | \"Barcode\" | \"Ping\";\ninterface IMessage {\n sort: MessageSorts;\n}\nclass PingMessage \n implements IMessage {\n \n public sort: MessageSorts;\n\n constructor() {\n this.sort = \"Ping\";\n }\n}\nclass ImageMessage\n implements IMessage {\n\n public sort: MessageSorts;\n public fileName?: string;\n public image?: string;\n\n constructor() {\n this.sort = \"Image\";\n }\n}\nclass BarcodeMessage\n implements IMessage {\n\n public sort: MessageSorts;\n public barcode?: string;\n\n constructor() {\n this.sort = \"Barcode\";\n }\n}\nclass HelloMessage\n implements IMessage {\n\n public sort: MessageSorts;\n public message?: string;\n\n constructor() {\n this.sort = \"Hello\";\n }\n}\n\nclass LocalService {\n private _webSocket: WebSocket | undefined;\n private _pingTimeout: number | undefined;\n private readonly _trigger : IQueryTriggerEventAsync;\n\n constructor(trigger : IQueryTriggerEventAsync) {\n this._trigger = trigger;\n\n try {\n this.poll();\n } catch {\n console.log(\"Allow insecure content if on picture booth\");\n }\n }\n\n private poll() {\n let that = this;\n this._webSocket = new WebSocket(\"ws://local.easyflor.eu:37777/\");\n this._webSocket.onclose = function(event: CloseEvent) {\n window.setTimeout(() => that.poll(), 5000);\n console.log(\"WS: Connection closed. Will retry in 5 seconds.\");\n }\n this._webSocket.onmessage = function(event: MessageEvent) {\n try {\n let deserialized = QueryJSON.deserialize(event.data);\n if (deserialized != null) {\n let casted = QueryJSON.cast(that.getType(deserialized), deserialized);\n if (casted instanceof PingMessage)\n {\n that.pingReceived();\n }\n else\n {\n that._trigger.trigger(casted);\n }\n }\n } catch(e) {\n console.log(e);\n }\n }\n this._webSocket.onopen = function(event: Event) {\n console.log(\"WS: Connection opened.\");\n \n let test = new HelloMessage();\n test.message = \"1.0\";\n that.send(test);\n }\n }\n\n private pingReceived()\n {\n if (this._pingTimeout != null)\n window.clearTimeout(this._pingTimeout);\n this._pingTimeout = window.setTimeout(() => this.close(), 15 * 1000);\n }\n\n private getType(eventData: IMessage) {\n switch (eventData.sort) {\n default:\n return HelloMessage;\n case \"Ping\":\n return PingMessage;\n case \"Image\":\n return ImageMessage;\n case \"Barcode\":\n return BarcodeMessage;\n }\n }\n\n private send(message: any) {\n let toSend = JSON.stringify(message);\n\n if(this._webSocket != null)\n this._webSocket.send(toSend);\n }\n private close() {\n if(this._webSocket != null)\n this._webSocket.close();\n console.log(\"WS: Connection closing.\");\n }\n}","class MathBest {\n constructor(amount: number, set: number[]) {\n this.rest = amount;\n this.set = set;\n }\n\n rest: number;\n set: number[];\n output: {[k: number]: number} = {}\n}\ninterface Event {\n stop(): void;\n data: string | null;\n}\ninterface Math {\n gcf(a: number, b: number): number;\n lcm(a: number, b: number): number;\n getBest(input: MathBest): MathBest;\n roundPlaces(a: number, b: number): number;\n}\nEvent.prototype.stop = function() {\n this.preventDefault();\n this.stopPropagation();\n}\n///Greatest Common Factor\nMath.gcf = function(a: number, b: number) {\n while (b != 0) {\n let temp = b;\n b = a % b;\n a = temp;\n }\n return a;\n}\n///Least Common Multiple\nMath.lcm = function(a: number, b: number) {\n return (a / Math.gcf(a, b)) * b;\n}\nMath.getBest = function(input: MathBest) {\n input.output = input.output ? input.output : {};\n\n let divider = input.set.shift();\n if(divider === undefined)\n return input;\n \n let count = Math.floor(input.rest / divider);\n\n if (input.set.length > 0) {\n while (count >= 0) {\n let sub = Math.getBest(\n {\n rest: input.rest - (divider * count),\n output: input.output,\n set: input.set.slice(0)\n });\n if (sub.rest == 0) {\n input.rest = 0;\n break;\n }\n count--;\n }\n }\n else {\n input.rest = input.rest - (divider * count);\n }\n\n if (input.rest == 0) {\n input.output[divider] = count;\n }\n return input;\n}\nMath.roundPlaces = function(number: number, places: number) {\n const multiplier = Math.pow(10, places);\n return Math.round(number * multiplier + Number.EPSILON) / multiplier;\n}","interface QueryElement {\n scrollToY(targetY: number, speed: number, easing: (pos:number) => number): void;\n}\n\nQueryElement.prototype.scrollToY = function(\n targetY: number, \n speed: number, \n easing: (pos: number) => number) {\n \n let elem = this.get();\n let scrollTop = elem.scrollTop;\n\n let time = Math.max(.1, Math.min(Math.abs(scrollTop - targetY) / speed, .8));\n let currentTime = 0;\n \n function tick() {\n currentTime += 1 / 60;\n\n let p = currentTime / time;\n let t = easing(p);\n\n if (p < 1) {\n window.requestAnimationFrame(tick);\n elem.scrollTop = scrollTop + ((targetY - scrollTop) * t);\n } else {\n elem.scrollTop = targetY;\n }\n }\n\n tick();\n}\n\nclass Easing {\n static easeOutCubic(pos: number) {\n return (--pos)*pos*pos+1;\n }\n static easeOutQuad(pos: number) {\n return 1-(--pos)*pos*pos*pos;\n }\n static easeOutSine(pos: number) {\n return Math.sin(pos * (Math.PI / 2));\n }\n static easeInOutSine(pos: number) {\n return (-0.5 * (Math.cos(Math.PI * pos) - 1));\n }\n static easeInOutQuint(pos: number) {\n if ((pos /= 0.5) < 1) {\n return 0.5 * Math.pow(pos, 5);\n }\n return 0.5 * (Math.pow((pos - 2), 5) + 2);\n }\n}","/// \n/// \n/// \n/// \n/// \n\ntype Languages = 'nl' | 'de' | 'en';\n\ntype Icons = 'warning' | 'error' | 'info' | 'check' | 'clear' | \n 'first_page' | 'last_page' |\n 'chevron_left' | 'chevron_right' | \n 'backspace' | 'close' | 'send' | 'save' |\n 'apps' | 'view_comfy' | 'view_stream' | 'view_column' | 'compare' | 'cached' |\n 'arrow_back' | 'arrow_forward' | 'filter_list' | 'select_all' |\n 'add' | 'edit' | 'delete' | 'done' |\n 'keyboard_tab' | 'keyboard_return' | 'keyboard_capslock' | 'get_app' |\n 'more_vert' | 'swap_horiz' | 'rotate_right' |\n 'my_location';\n\ntype UserSettings = 'UseHelpers' | 'CalculatorUsePicker' | 'NoAutoPopout' | 'NoAutoTab' | 'NoNavigation' | 'UseAlternativeSalesUnitDisplay' | 'HideHtmlView';\ntype ControlMode = 'Read' | 'Write' | 'Hide';\n\ntype SiteResponseTypes = 'Message' | 'Card' | 'CardAction' | 'Modal' | 'Redirect' | 'Validation' | 'Multi';\ntype SiteResponseCardSizes = 'Normal' | 'Normal2' | 'Normal3' | 'Small' | 'Large';\ntype SiteResponseCardObserverSorts = 'Event' | 'Change';\ntype SiteResponseCardObserverEvents = 'Scan' | 'Photo';\ntype SiteTelephoneNumberSort = 'CallTo' | 'Tel' | 'Skype' | 'Dial' | 'FaceTime';\n\ntype LanguageValues = { [k in Languages]?: string | null }\ntype LanguageNames = { [k in Languages]?: string }\n\nclass SiteColorScheme {\n red: string = \"\";\n orange: string = \"\";\n green: string = \"\";\n blue: string = \"\";\n}\n\nclass SiteConfig {\n language: Languages = \"nl\";\n languageNames: LanguageNames = {};\n username: string = \"\";\n version: string = \"\";\n customer: string = \"\";\n settings: UserSettings[] = [];\n salesUnitOrder: SalesUnits[] = [];\n strings: { [k: string]: string } = {};\n colorScheme: SiteColorScheme = new SiteColorScheme();\n telephoneNumberSort: SiteTelephoneNumberSort | null = null;\n startPage: IActionInfo | null = null;\n startPageName: string = \"\";\n barcodeProfile: BarcodeProfiles = \"Profile1\";\n\n _languageEvent: QueryEventAsync;\n get languageEvent(){ return this._languageEvent.expose(); } \n\n constructor() {\n this._languageEvent = new QueryEventAsync();\n }\n\n setLanguage(language: Languages) {\n let oldLanguage = this.language;\n this.language = language;\n this._languageEvent.trigger(oldLanguage);\n }\n}\ninterface IMenuConfig {\n groups: ISiteStartSection[];\n}\n\ninterface ISiteResponse {\n type: SiteResponseTypes;\n}\ninterface ISiteResponseRedirectAction {\n actionInfo: IActionInfo;\n model: any;\n type: string;\n}\ninterface ISiteResponseRedirect\n extends ISiteResponse {\n\n action: ISiteResponseRedirectAction;\n\n}\ninterface ISiteResponseCardMetaData {\n info: any;\n controlMode: ControlMode;\n}\ninterface ISiteResponseCardAction\n extends ISiteResponse {\n \n action: IActionType;\n}\ninterface ISiteResponseMultiAction\n extends ISiteResponse {\n \n actions: ISiteResponse[];\n}\ninterface ISiteResponseCard \n extends ISiteResponse {\n \n options: {\n title?: string;\n size?: SiteResponseCardSizes;\n cardItems?: ISiteCardMenuItem[];\n backAction?: IActionType;\n }\n observers: ISiteResponseCardObserver[];\n view: string;\n model: any;\n metaData: any;\n}\n\ninterface ISiteResponseCardObserver {\n sort: SiteResponseCardObserverSorts;\n}\ninterface ISiteResponseCardObserverEvent\n extends ISiteResponseCardObserver {\n path: string;\n event: SiteResponseCardObserverEvents;\n action: IActionTypeRequest;\n}\ninterface ISiteResponseCardObserverChange\n extends ISiteResponseCardObserver {\n type: string;\n}\n\ninterface ISiteValidation {\n property: { [property: string]: string[] };\n message: string;\n}\ninterface ISiteResponseValidation\n extends ISiteResponse, ISiteValidation {\n}\ninterface ISiteResponseModal \n extends ISiteResponse {\n \n modal: ISiteModal;\n}\ninterface ISiteResponseMessage\n extends ISiteResponse, ISiteMessage {\n \n affectedTypes: string[];\n}\n\nclass Site \n extends QueryElement {\n \n private readonly _config: SiteConfig;\n private readonly _style: SiteStyle;\n private readonly _messages: SiteMessages;\n private readonly _modal: SiteModal;\n private readonly _localService: LocalService;\n private readonly _theme: IQueryElement;\n\n private readonly _start: SiteStart;\n private readonly _history: SiteHistory;\n private readonly _containerSide: SiteContainerSide;\n private readonly _sounds: SiteSounds;\n\n private readonly _overview: SiteOverview;\n private readonly __containers: IQueryElement;\n\n private _navigation?: SiteNavigation;\n\n private readonly _observer = new QueryEventAsync();\n private readonly _keyboard: SiteKeyboard;\n public get observer() { return this._observer.exposeTrigger(); };\n \n static mobileWidth: number = 605;\n static isMobile() {\n let body = QueryElement.get(document.body).position();\n if(body === null)\n return true;\n \n return body.width <= Site.mobileWidth;\n }\n static hasKeyboard() {\n return navigator.userAgent.match(/MC32/i);\n }\n static getSite() {\n let content = document.getElementById(\"content\");\n if (!content)\n throw \"Couldn't find Site element\";\n \n return QueryElement.get(content);\n }\n\n get Config() { return this._config; }\n\n constructor(element: HTMLElement, siteConfig: SiteConfig, menuConfig: IMenuConfig) {\n super(element);\n \n let head = new Query('head').first();\n let theme = new Query('#theme').first();\n let body = this.parent();\n let containers = this.query('#containers').first();\n\n let modal = this.query('#modal').create(a => new SiteModal(a));\n let messages = this.query('#messages').create(a => new SiteMessages(a));\n let start = this.query('#start').create(a => new SiteStart(a, this, menuConfig.groups));\n let overview = this.query('#overview').create(a => new SiteOverview(a, this));\n let sounds = body && body.query(\"#sounds\").create(a => new SiteSounds(a));\n\n let containerSide = body && body.query('#container-side').create(a => new SiteContainerSide(a, this));\n this.query('#version').all(a => a.setHtml(`${siteConfig.version} - ${siteConfig.username}`));\n\n if (head === null || containers === null || modal === null \n || messages === null || start === null || overview === null\n || containerSide === null || theme === null || sounds === null)\n throw \"Default element(s) not found!\";\n\n this._config = siteConfig;\n this.__containers = containers;\n this._style = new SiteStyle(head);\n this._localService = new LocalService(this.observer);\n this._history = new SiteHistory();\n this._containerSide = containerSide;\n this._theme = theme;\n\n this._modal = modal;\n this._messages = messages;\n this._start = start;\n this._overview = overview;\n this._sounds = sounds;\n this._keyboard = new SiteKeyboard(this, siteConfig.barcodeProfile);\n \n // Set title\n document.title = this._config.customer + \" :: EasyFlor\";\n \n // Add css\n let cssLines = [\n \".state-color-Green { background: \" + siteConfig.colorScheme.green + \" }\",\n \".state-color-Orange { background: \" + siteConfig.colorScheme.orange + \" }\",\n \".state-color-Red { background: \" + siteConfig.colorScheme.red + \"}\",\n \".state-color-Blue { background: \" + siteConfig.colorScheme.blue + \" }\",\n \".state-color-RedBlue { background: linear-gradient(to bottom, \" + siteConfig.colorScheme.red + \" 49%, #FFFFFF 50%, \" + siteConfig.colorScheme.blue + \" 51%) }\",\n \".state-color-GreenBlue { background: linear-gradient(to bottom, \" + siteConfig.colorScheme.green + \" 49%, #FFFFFF 50%, \" + siteConfig.colorScheme.blue + \" 51%) }\",\n \".state-color-OrangeBlue { background: linear-gradient(to bottom, \" + siteConfig.colorScheme.orange + \" 49%, #FFFFFF 50%, \" + siteConfig.colorScheme.blue + \" 51%) }\",\n \".state-color-GreenRed { background: linear-gradient(to bottom, \" + siteConfig.colorScheme.green + \" 49%, #FFFFFF 50%, \" + siteConfig.colorScheme.red + \" 51%) }\",\n \".state-color-GreenOrange { background: linear-gradient(to bottom, \" + siteConfig.colorScheme.green + \" 49%, #FFFFFF 50%, \" + siteConfig.colorScheme.orange + \" 51%) }\",\n \".state-color-OrangeRed { background: linear-gradient(to bottom, \" + siteConfig.colorScheme.orange + \" 49%, #FFFFFF 50%, \" + siteConfig.colorScheme.red + \" 51%) }\"\n ];\n for (let cssLine of cssLines)\n {\n this._style.addCss(cssLine);\n }\n // Set renderers\n if (this._config.settings.includes(\"UseAlternativeSalesUnitDisplay\"))\n QueryTemplateRenderers.appendOrOverwrite('salesUnit', new QueryTemplateRendererSalesUnitAlternative());\n \n if (this._config.settings.includes(\"HideHtmlView\"))\n this.showHideConfidential();\n\n this._history.historyEvent.on(async (a) => {\n this.back();\n });\n this.on(\"qts.functionKey\", (e: CustomEvent) => {\n this.getActiveContainers()\n .all(a => a.trigger(\"qts.functionKey\", false, e.detail));\n });\n this.on(\"qts.observer.event\", (e: CustomEvent) => {\n this.getActiveContainers()\n .all(a => a.trigger(\"qts.observer.event\", false, e.detail));\n });\n this.on(\"qts.observer.change\", (e: CustomEvent) => {\n this.getContainers()\n .all(a => a.trigger(\"qts.observer.change\", false, e.detail));\n });\n this._observer.on(async (a) => {\n this.trigger(\"qts.observer.event\", false, a);\n });\n\n window.onresize = () => this.resize();\n this.resize();\n }\n showHideConfidential() {\n if (this.containsClass(\"confidential-mode\")) {\n this.removeClass(\"confidential-mode\");\n } else {\n this.addClass(\"confidential-mode\");\n }\n }\n containerSide() {\n if (this.containsClass(\"container-side\")) {\n this.removeClass(\"container-side\");\n this._containerSide.close();\n } else {\n this.addClass(\"container-side\");\n this._containerSide.open();\n }\n this.resize();\n }\n switchTheme() {\n var attr = this._theme.getAttr(\"href\");\n if(attr && attr.endsWith(\"style-light.css\"))\n this._theme.setAttr(\"href\", \"/css/style-dark.css\");\n else\n this._theme.setAttr(\"href\", \"/css/style-light.css\");\n }\n playSound(sound: string) {\n this._sounds.play(sound);\n }\n back() {\n let activeContainers = this.getActiveContainers().all(a => a);\n \n for(let container of activeContainers)\n {\n if (container.hasFocus())\n return container.back();\n }\n\n let container = activeContainers.first();\n if (container != null) {\n return container.back();\n }\n }\n resize() {\n this.getActiveContainers()\n .all(container => container.resize());\n \n let navigator : typeof SiteNavigationMobile | typeof SiteNavigationDesktop | typeof SiteNavigationNone;\n if (this._config.settings.includes(\"NoNavigation\"))\n navigator = SiteNavigationNone;\n else if (Site.isMobile())\n navigator = SiteNavigationMobile;\n else\n navigator = SiteNavigationDesktop;\n \n // If we have another positioner, destruct and create new one\n if (!(this._navigation instanceof navigator)) {\n // Get current state and destruct\n let isActive = false;\n if (this._navigation !== undefined) {\n isActive = this._navigation.isActive();\n this._navigation.remove();\n }\n \n // Construct new one:\n this._navigation = new navigator(\n this\n ).appendTo(this);\n \n // Set old state\n if (isActive)\n this._navigation.makeActive(); \n }\n }\n \n getModals() {\n return this._modal.getModals();\n }\n showModal(card: ISiteCard, modal: ISiteModal) {\n return this._modal.show(card, modal);\n }\n \n addMessage(message: SiteMessage) {\n this._messages.add(message);\n return this;\n }\n\n async overview(append: boolean) {\n if(!append)\n await Promise.all(this.getActiveContainers()\n .all>(async a => { \n await this.makeContainerInactive(a) \n }\n ));\n \n this._overview.makeActive();\n\n this._start.makeActive();\n if(this._navigation)\n this._navigation.makeInactive();\n }\n toggleSplit() {\n this.__containers.toggleClass(\"split-rotate\");\n\n // And resize:\n this.resize();\n }\n isSplit() {\n let split = 0;\n this.getActiveContainers()\n .all(a => split++);\n\n return split > 1;\n }\n getHistory() {\n return this._history;\n }\n \n /// -- Container manager\n async createContainer(item: ISiteStartSectionItem) {\n let container = new SiteContainer(this, item)\n .appendTo(this.__containers);\n\n // Get instance number and register color\n let instance = Number(container.getAttr(\"data-instance\"));\n this._style.addColor(\n instance, \n item.color || \"#000\");\n \n // Register:\n await this._overview.register(container);\n\n return container;\n }\n async post(request: ISiteRequest): Promise {\n let printPage = window.open(\"\", \"_blank\", undefined, false);\n\n if (printPage) {\n printPage.document.open();\n printPage.document.writeln(\"\");\n printPage.document.writeln(\"Bezig met ophalen...\");\n\n // Do the request\n let queryRequest = await new QueryRequest(\n SiteAction.toLink(request.request),\n request.model ?\n {\n contentType: 'json',\n data: request.model,\n method: 'post'\n }\n : undefined\n ).request();\n \n printPage.document.close();\n printPage.document.open();\n\n let contentTypeInfo = queryRequest.headers.get(\"Content-Type\") || \"\";\n let contentDisposition = queryRequest.headers.get('Content-Disposition') || \"\";\n let contentType = contentTypeInfo.split(\";\")[0];\n \n if (queryRequest.status == 200) {\n switch (contentType) {\n default:\n printPage.close();\n break;\n case \"application/json\":\n case \"text/html\":\n printPage.document.write(await queryRequest.text());\n break;\n case \"application/download\":\n case \"image/jpeg\":\n let filenameRegex = /filename=\\\"(.*?)\\\"|filename=([^\\s;]*)/;\n let filenameMatches = filenameRegex.exec(contentDisposition);\n let a = document.createElement(\"a\");\n if (filenameMatches != null)\n a.download = filenameMatches[1] || filenameMatches[2];\n a.href = await QueryRequest.blobToBase64(await queryRequest.blob());\n a.click();\n\n printPage.close();\n break;\n case \"application/pdf\":\n printPage.document.write(\"\");\n break;\n }\n } else if (queryRequest.status == 404) {\n // 404 is no error, close the page\n printPage.close();\n }\n printPage.document.close();\n }\n \n return true;\n }\n\n async makeContainerActive(container: SiteContainer, append: boolean = true) {\n if(container.isActive())\n return;\n \n if(!append)\n await Promise.all(\n this.getActiveContainers()\n .all(a => this.makeContainerInactive(a))\n );\n \n this.trigger(\"qts.container\", false, container);\n\n // And at last call the container\n await container.makeActive();\n\n // Make navigation active\n if(this._navigation && !this._navigation.isActive()) {\n await this._overview.makeItemActiveByContainer(container);\n this._navigation.makeActive();\n }\n\n // And start inactive\n this._start.makeInactive();\n this._style.setColor(container.Config.color || \"#000\");\n \n // Now all containers are active, call resize to adjust their size\n this.resize();\n\n return this;\n }\n async makeContainerInactive(container: SiteContainer) {\n await this._overview.makeItemInactiveByContainer(container);\n if(await container.makeInactive()) {\n\n if(this._navigation && !this._navigation.isActive()) {\n this._overview.makeActive();\n }\n }\n\n return this;\n }\n async removeContainer(container: SiteContainer) {\n await this._overview.removeItemByContainer(container);\n await container.remove();\n let otherActive = this.getActiveContainers().first();\n \n // TODO: MakeContainerActive should call \n // CardActive to call a label to get focus\n if(otherActive !== null) \n this.resize();\n //await this.makeContainerActive(otherActive);\n else \n await this.overview(false);\n }\n private getContainers() {\n return this.query(\"#containers > .container\");\n }\n private getActiveContainers() {\n return this.query(\"#containers > .container.active\");\n }\n}\n\n\nfunction delay(ms: number) {\n return new Promise(function(resolve) {\n setTimeout(resolve, ms);\n });\n}\n\nfunction throwExpression(errorMessage: string): never {\n throw new Error(errorMessage);\n }","interface ISiteCard {\n\n Model: ISiteModel;\n ModelData: ISiteModel;\n Container: ISiteContainer;\n\n remove(): Promise;\n post(request: IActionTypePost): Promise;\n request(request: IActionTypeRequest): Promise;\n isActive(): boolean;\n isLarge(): boolean;\n isRemoved(): boolean;\n makeActive(): boolean;\n makeInactive(): void;\n keyPress(keyCodes: number[]): void;\n back(): Promise;\n\n refresh(): Promise;\n\n makeFocusableActive(focusable: ISiteFocusable): this;\n makePrevFocusableActive(focusable: ISiteFocusable): this;\n makeNextFocusableActive(focusable: ISiteFocusable): this;\n\n addValidation(path: string[], validation: ISiteValidation): void;\n clearValidation(): void;\n\n next(): T | null;\n prev(): T | null;\n containsClass(string: string): boolean;\n position(): ClientRect | null;\n style(): CSSStyleDeclaration | undefined;\n getAttr(attr: string): string | null;\n setAttr(attr: string, content: string): this;\n\n nextAll(func: (item: T) => boolean | void): this;\n trigger(val: string, bubble: boolean): this;\n}\n\nclass SiteCardRefreshEvent \n extends CancellableEvent {\n}\n\nclass SiteCard\n extends QueryElement\n implements ISiteCard {\n\n private _observerEvent: (e: CustomEvent) => any;\n private _observerChange: (e: CustomEvent) => any;\n\n private _request?: ISiteRequest;\n private _title: string;\n private _model: ISiteModel;\n private _modelData: ISiteModel;\n private _container: ISiteContainer;\n private _focusables: ISiteFocusable[] = [];\n private _keyPressTimer?: number;\n private _backAction?: IActionType;\n private _currentSize: string;\n private readonly _defaultSize: SiteResponseCardSizes;\n private readonly _labels: ISiteLabel[];\n\n get Title() { return this._title; }\n get Model() { return this._model; }\n get ModelData() { return this._modelData; }\n get SiteConfig() { return this._container.SiteConfig; }\n get Container() { return this._container; }\n\n constructor(container: ISiteContainer, html: string, response: ISiteResponseCard, request?: ISiteRequest) {\n super(document.createElementFromHTML(html));\n\n this._request = request;\n\n // Check if we got a model, else set an empty object\n if (response.model == null)\n response.model = {};\n if (response.metaData == null)\n response.metaData = {}; \n\n // Wrap when needed!\n this._model = hasInterface(response.model, \"ISiteModel\") ?\n response.model : new SiteModel(response.model);\n this._modelData = hasInterface(response.metaData, \"ISiteModel\") ?\n response.metaData : new SiteModel(response.metaData);\n this._title = response.options.title || \"\";\n\n this._container = container;\n\n this._backAction = response.options.backAction;\n\n this.prepend(new SiteCardMenu(this, response.options.cardItems || []))\n .on(\"click\", () => container.makeCardActive(this));\n \n this._defaultSize = response.options.size ?? \"Normal\";\n this._currentSize = this._defaultSize;\n this.setSize();\n\n this.query(\"h2\").first(a => {\n a.setHtml(this._title);\n a.on(\"click\", async () => await container.removeNextCards(this));\n });\n\n // Statements:\n this.query(\"div[data-type='foreach']\").createAll(a => new SiteStatementForeach(this, a));\n this.query(\"div[data-type='for']\").createAll(a => new SiteStatementFor(this, a));\n this.query(\"div[data-type='if']\").createAll(a => new SiteStatementIf(this, a));\n\n\n // Loop through all labels\n this.query(\"label>[data-type]\").all(a => {\n let parent = a && a.parent();\n if (parent !== null)\n {\n parent.setAttr(\"data-config\", a.getAttr(\"data-config\") || \"\");\n parent.setAttr(\"data-type\", a.getAttr(\"data-type\") || \"\");\n }\n });\n\n // Labels\n let labels: ISiteLabel[] = [];\n\n labels.push(...this.query(\"label[data-type='input']\").createAll(a => new SiteLabelInput(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='color']\").createAll(a => new SiteLabelInput(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='input-multi']\").createAll(a => new SiteLabelInputLanguage(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='dropdown']\").createAll(a => new SiteLabelDropdown(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='dropdown-multi']\").createAll(a => new SiteLabelDropdownMulti(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='checkbox']\").createAll(a => new SiteLabelCheckbox(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='datetime']\").createAll(a => new SiteLabelDateTime(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='fido']\").createAll(a => new SiteLabelFido(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='calculator']\").createAll(a => new SiteLabelCalculator(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='decimal']\").createAll(a => new SiteLabelDecimal(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='signature']\").createAll(a => new SiteLabelSignature(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='upload']\").createAll(a => new SiteLabelUpload(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='unit']\").createAll(a => new SiteLabelUnit(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='coordinates']\").createAll(a => new SiteLabelCoordinates(this, this.Model, this.ModelData, a)));\n labels.push(...this.query(\"label[data-type='markdown']\").createAll(a => new SiteLabelMarkdown(this, this.Model, this.ModelData, a)));\n this._labels = labels;\n \n for (let label of labels) {\n let input = label.getInput();\n if (input !== null)\n label.init(input);\n }\n\n // Static data\n this.query(\"[data-type='bind']\").createAll(a => new SiteElementBind(this, a));\n this.query(\"[data-type='bindClass']\").createAll(a => new SiteElementBindClass(this, a));\n this.query(\"[data-type='image']\").createAll(a => new SiteElementImage(this, a));\n this.query(\"[data-type='timer']\").createAll(a => new SiteElementTimer(this, a));\n this.query(\"[data-type='actionButton']\").createAll(a => new SiteElementBindActionButton(this, a));\n this.query(\"[data-type='action']\").createAll(a => new SiteActionButton(this, {\n action: this.Model.get(SiteModel.split(a.getAttribute(\"data-path\") || \"\"))\n }, a));\n this.query(\".clickable-images\").createAll(a => new SiteElementImages(this, a));\n this.query(\"a[target='action']\").createAll(a => new SiteLink(this, {\n action: a.getAttribute(\"href\") || \"\"\n }, a));\n \n // Elements\n this.query(\"[data-type='chart']\").createAll(a => new SiteElementChart(this, a));\n this.query(\"[data-type='route']\").createAll(a => new SiteElementRoute(this, a));\n this.query(\"[data-type='progress']\").createAll(a => new SiteElementProgress(this, a));\n this.query(\"[data-type='search']\").createAll(a => new SiteElementSearch(this, a));\n this.query(\"[data-type='navigation']\").createAll(a => new SiteElementNavigation(this, a));\n this.query(\"[data-type='html-view']\").createAll(a => new SiteElementHtmlView(this, a));\n this.query(\"[data-type='chat']\").createAll(a => new SiteElementChat(this, this.Model, a));\n \n // Views\n this.query(\"[data-type='view-file']\").createAll(a => new SiteElementViewFile(this, a));\n\n let x = 1;\n this._focusables = this.query(\"[data-instance][if-ISiteFocusable=true]\")\n .all(a => {\n let tabIndex = a.getAttr(\"data-tab-index\");\n if (tabIndex === null)\n a.setAttr(\"data-tab-index\", (x++).toString());\n \n return a;\n })\n .sort((a, b) => {\n let an = Number(a.getAttr('data-tab-index') || 0);\n let bn = Number(b.getAttr('data-tab-index') || 0);\n\n if (an === bn)\n return Number(a.getAttr('data-instance')) - Number(b.getAttr('data-instance'));\n else\n return an - bn;\n });\n \n this._observerEvent = this.on(\"qts.observer.event\", (e: CustomEvent) => {\n let details = e.detail as IMessage;\n let eventSort: SiteResponseCardObserverEvents | undefined;\n switch (details.sort) {\n case \"Barcode\":\n eventSort = \"Scan\";\n break;\n case \"Image\":\n eventSort = \"Photo\";\n break;\n }\n\n if (eventSort === undefined)\n return;\n \n let site = Site.getSite();\n // Close or execute modals when an event is triggered\n site.getModals().forEach((a) => {\n if (a instanceof SiteImageModal) {\n if (eventSort == \"Scan\")\n a.execute();\n }\n\n a.remove();\n // Close parent\n let parent = a.parent();\n parent && parent.remove();\n });\n \n for (let observer of response.observers.filter(\n a => a.sort == \"Event\"\n && (a).event == eventSort)\n ) {\n let event = observer;\n let model = this.Model.get(SiteModel.split(event.path));\n\n // Get last action:\n let currentAction = event.action;\n while (currentAction.nextAction) {\n currentAction = currentAction.nextAction as IActionTypeRequest;\n }\n\n if (eventSort == \"Scan\") {\n let barcodeDetails = details as BarcodeMessage;\n\n if (model === undefined || model[\"$type\"] === undefined) {\n currentAction.actionLink.model = {\n \"$type\": `DirectCode.Modules.MVC.Models.BarcodeEventModel, DirectCode.Session.MVC`,\n \"barcode\": barcodeDetails.barcode\n };\n }\n else {\n currentAction.actionLink.model = {\n \"$type\": `DirectCode.Modules.MVC.Models.BarcodeEventModel\\`1[[${model[\"$type\"]}]], DirectCode.Session.MVC`,\n \"model\": model,\n \"barcode\": barcodeDetails.barcode\n };\n }\n // Set ID if we had one\n if (request != null && request.request.id) {\n currentAction.actionLink.actionInfo.id = request.request.id\n }\n \n let action = SiteAction.create(this, event.action);\n action && action.execute();\n }\n\n if (eventSort == \"Photo\") {\n let imageDetails = details as ImageMessage;\n if (imageDetails.image == null)\n return;\n \n currentAction.actionLink.model = {\n \"$type\": `DirectCode.Modules.MVC.Models.ImageEventModel\\`1[[${model[\"$type\"]}]], DirectCode.Session.MVC`,\n \"model\": model,\n \"data\": imageDetails.image\n };\n\n site.showModal(this, {\n sort: \"Image\",\n image: imageDetails.image,\n action: event.action\n } as ISiteImageModal) as SiteImageModal;\n }\n }\n });\n this._observerChange = this.on(\"qts.observer.change\", async (e: CustomEvent) => {\n if(e.detail instanceof ObserverChangeEvent) {\n for(let observer of response.observers.filter(a => a.sort == \"Change\")) {\n let change = observer;\n \n if (e.detail.types.some(a => a == change.type)) {\n await this.refresh();\n break;\n }\n }\n }\n });\n }\n setSize(size?: SiteResponseCardSizes) {\n this.removeClass(\"card-small\");\n this.removeClass(\"card-large\");\n this.removeClass(\"card-normal2\");\n this.removeClass(\"card-normal3\");\n\n if (size == null)\n size = this._defaultSize;\n\n switch(size) {\n case \"Small\":\n this.addClass(\"card-small\");\n break;\n case \"Normal2\":\n this.addClass(\"card-normal2\");\n break;\n case \"Normal3\":\n this.addClass(\"card-normal3\");\n break;\n case \"Large\":\n this.addClass(\"card-large\");\n break;\n }\n\n if (size != this._currentSize) {\n this._currentSize = size;\n this._container.redraw();\n }\n }\n async back() {\n let actionType : IActionType = this._backAction ?? {\n type: \"Close\"\n };\n let action = SiteAction.create(this, actionType);\n await action?.execute();\n }\n\n async start() {\n this.trigger(\"qts.started\", false);\n\n if (!Site.isMobile()) {\n this.addClass(\"in-left\");\n await delay(200);\n this.removeClass(\"in-left\");\n }\n }\n async refresh() {\n let event = new SiteCardRefreshEvent();\n this.trigger(\"qts.refresh\", false, event);\n\n if(event.cancelled == true)\n return true;\n\n if(this._request)\n {\n let request = this._request;\n request.options = {\n override: true\n };\n \n await this.Container.request(this, request);\n return true;\n }\n \n return false;\n }\n async keyPress(keyCodes: number[]) {\n switch(keyCodes[0]) {\n case 17:\n if(keyCodes.length == 1) {\n this._keyPressTimer && window.clearTimeout(this._keyPressTimer);\n this._keyPressTimer = window.setTimeout(() => this.removeClass(\"key-show\"), 500);\n this.addClass(\"key-show\");\n } else {\n this.removeClass(\"key-show\");\n \n let toClick = this.query(`[data-key=\"CTRL+${String.fromCharCode(keyCodes[1])}\"]`).first();\n toClick && toClick.trigger(\"click\", true);\n }\n break;\n case 13:\n let toClick = this.query(`[data-key=\"ENTER\"]`).first();\n toClick && toClick.trigger(\"click\", true);\n break;\n }\n }\n post(request: IActionTypePost): Promise {\n let path = request.path && SiteModel.split(request.path) || [];\n let model = request.actionLink.model;\n\n if (request.setModel)\n model = this.Model.get(path);\n \n // Convert model, when not null or undefined\n if (model != null) {\n return this._container.post({\n request: request.actionLink.actionInfo,\n path: path,\n model: JSON.stringify(model) \n });\n }\n return this._container.post({\n request: request.actionLink.actionInfo\n });\n }\n request(request: IActionTypeRequest): Promise {\n return new SiteCardRequestCommand(this, request)\n .execute();\n }\n\n isLarge(): boolean {\n return this.containsClass(\"card-large\");\n }\n\n addValidation(path: string[], validation: ISiteValidation) {\n for (let property in validation.property) {\n this._focusables\n .filter(a => a.getAttr(\"if-ISiteLabel\"))\n .filter(a => (a).path.join(\".\") == path.concat(property).join(\".\"))\n .map(a => (a).setError(validation.property[property].first() || \"\"));\n }\n }\n clearValidation() {\n this._focusables\n .filter(a => a.getAttr(\"if-ISiteLabel\"))\n .filter(a => a.containsClass(\"error\"))\n .map(a => (a).clearError());\n }\n\n getActiveFocusable() {\n return this.query(\"[if-ISiteFocusable].active\")\n .first();\n }\n getInactiveFocusable() {\n return this.query(\"[if-ISiteFocusable].inactive\")\n .first();\n }\n isLastFocusable(focusable: ISiteFocusable) {\n return this._focusables.indexOf(focusable) + 1 == this._focusables.length;\n }\n makePrevFocusableActive(focusable: ISiteFocusable) : this {\n if (!focusable.containsClass(\"active\"))\n return this;\n\n let target = focusable; \n let index = this._focusables.indexOf(focusable);\n // Find prev item\n do {\n index -= 1;\n if (index < 0)\n index = this._focusables.length - 1;\n\n target = this._focusables[index];\n } while(!target.isVisible())\n\n return this.makeFocusableActive(target);\n }\n makeNextFocusableActive(focusable: ISiteFocusable): this {\n if (!focusable.containsClass(\"active\"))\n return this;\n\n let target = focusable;\n let index = this._focusables.indexOf(focusable);\n // Find next item\n do {\n index += 1;\n if (index > this._focusables.length - 1)\n index = 0;\n\n target = this._focusables[index];\n } while (!target.isVisible())\n\n return this.makeFocusableActive(target);\n }\n makeFocusableActive(focusable: ISiteFocusable) {\n if (focusable.containsClass(\"active\"))\n return this;\n\n // Make active focusable inactive:\n let activeFocusable = this.getActiveFocusable();\n activeFocusable && activeFocusable.makeInactive();\n\n // Make current label active\n this.trigger(\"qts.label\", false, focusable);\n focusable.makeActive();\n \n return this;\n }\n getLabel(path: string) {\n var splitPath = SiteModel.split(path);\n var label = this._labels.filter(a => SiteModel.equals(a.path, splitPath));\n if (label.length > 0)\n return label[0];\n else\n return null;\n }\n\n isActive() {\n return this.containsClass(\"active\");\n }\n makeActive() {\n if (this.isActive())\n return false;\n\n this.addClass(\"active\");\n this.trigger(\"qts.active\", false);\n\n // Remove inactive class\n let inactive = this.getInactiveFocusable();\n if (inactive)\n inactive.removeClass(\"inactive\")\n \n // If no active focusable,\n if (!this.getActiveFocusable()) {\n if (inactive) {\n // try to revive a previous active field\n this.makeFocusableActive(inactive);\n } else if (this._focusables.length > 0) {\n // else make the first field focusable\n this.makeFocusableActive(this._focusables[0]);\n }\n }\n\n return true;\n }\n\n makeInactive() {\n if (!this.isActive())\n return;\n\n // Make active label inactive:\n let activeFocusable = this.getActiveFocusable();\n if (activeFocusable) {\n activeFocusable.makeInactive();\n activeFocusable.addClass(\"inactive\");\n }\n\n this.removeClass(\"active\");\n this.trigger(\"qts.inactive\", false);\n }\n isRemoved() {\n return this.containsClass(\"out-left\") || super.isRemoved();\n }\n\n async remove(removeInner = true) {\n this.off(\"qts.observer.event\", this._observerEvent);\n this.off(\"qts.observer.change\", this._observerChange);\n\n\n if (!Site.isMobile()) {\n this.addClass(\"out-left\");\n await delay(200);\n }\n\n await super.remove(removeInner);\n }\n} ","type ISiteButtonAlign = 'left' | 'right';\n\ninterface ISiteCardMenuItem\n extends ISiteActionButton {\n \n align?: ISiteButtonAlign;\n items?: ISiteCardMenuItem[];\n}\n\nclass SiteCardMenu\n extends QueryElement {\n\n constructor(card: SiteCard, items: ISiteCardMenuItem[]) {\n super(document.createElement(\"UL\"));\n \n this.addClass(\"menu\");\n\n this.append(new SiteCardMenuItem(card, {\n icon: \"arrow_back\",\n action: {\n type: \"Close\"\n }\n }).addClass(\"show-mobile\"));\n\n for(let item of items) {\n this.append(new SiteCardMenuItem(card, item));\n }\n }\n}\n\nclass SiteCardMenuItem\n extends QueryElement {\n\n constructor(card: SiteCard, button: ISiteCardMenuItem) {\n super(document.createElement(\"LI\"));\n\n if (!!button.action || button.items) {\n // Putting the index to the end of the queue\n let actionButton = new SiteActionButton(card, button);\n actionButton.setAttr(\"data-tab-index\", \"30000\");\n\n this.append(actionButton);\n\n // Add subitems\n if (button.items) {\n this.append(new SiteCardMenu(card, button.items));\n this.addClass(\"items\");\n }\n }\n }\n}","interface ISiteContainer {\n\n Config: ISiteStartSectionItem;\n SiteConfig: SiteConfig;\n\n post(request: ISiteRequest): Promise;\n request(card: ISiteCard, request: ISiteRequest): Promise;\n on(val: string, func: (e: TEvent) => any): (e: TEvent) => any;\n off(val: string, func: ((e: TEvent) => any) | null): void;\n\n back(): Promise;\n redraw(): void;\n appendCard(card: ISiteCard): Promise;\n makeCardActive(card: ISiteCard): Promise;\n replaceCard(oldCard: ISiteCard, newCard: ISiteCard): Promise;\n removeNextCards(card: ISiteCard): Promise;\n removeCard(card: ISiteCard): Promise;\n\n remove(removeInner?: boolean): void;\n}\ninterface ISiteRequest {\n request: IActionInfo;\n path?: string[]; \n model?: string | Blob | FormData;\n options?: {\n override: boolean | undefined;\n }\n}\n\nclass SiteContainer\n extends QueryElement\n implements ISiteContainer {\n\n private readonly _site: Site;\n private readonly _cards: IQueryElement;\n private readonly _requester: ISiteCard;\n private readonly _loader: SiteLoader;\n private readonly _config: ISiteStartSectionItem;\n private _positioner?: ISiteCardPositioner;\n private _currentEvent: Event | undefined;\n\n get Config() { return this._config; }\n get SiteConfig() { return this._site.Config; }\n\n constructor(site: Site, config: ISiteStartSectionItem) {\n super(document.createElement(\"DIV\"));\n\n this._site = site;\n this._config = config;\n this._requester = new SiteCardContainerWrapper(this);\n\n let title = QueryElement.QueryElement(\"DIV\")\n .addClass(\"title\")\n .append(QueryElement.QueryElement(\"i\").setHtml(config.icon || \"\"))\n .append(QueryElement.QueryElement(\"span\").setHtml(config.title || \"-\"))\n .appendTo(this);\n\n this._cards = QueryElement.QueryElement(\"DIV\")\n .addClass(\"cards\")\n .appendTo(this);\n\n this._loader = new SiteLoader()\n .appendTo(this);\n\n this.on(\"mousedown\", (e) => {\n this._currentEvent = e;\n })\n this.on(\"mouseup\", (e) => {\n if (this._currentEvent === undefined)\n return;\n \n let target = this._currentEvent.target as HTMLElement;\n\n // Check if it is a label\n let isLabel = false;\n let element = QueryElement.get>(target);\n if (element instanceof SiteLabel) {\n isLabel = true;\n } else {\n element.parentAll(a => {\n if (a instanceof SiteLabel) {\n isLabel = true;\n }\n });\n }\n\n if (!isLabel) {\n let card = this.getActiveCard();\n let label = card && card.getActiveFocusable();\n if (label && label instanceof SiteLabel)\n label.makeInactive();\n }\n });\n this.on(\"qts.functionKey\", (e: CustomEvent) => {\n let activeCard = this.getActiveCard();\n\n if(activeCard)\n activeCard.trigger(\"qts.functionKey\", false, e.detail);\n });\n this.on(\"qts.observer.event\", (e: CustomEvent) => {\n let lastCard = this._cards.lastChild();\n\n if(lastCard)\n lastCard.trigger(\"qts.observer.event\", false, e.detail);\n });\n this.on(\"qts.observer.change\", (e: CustomEvent) => {\n this.getCards()\n .all(a => a.trigger(\"qts.observer.change\", false, e.detail));\n });\n this.addClass(\"container\");\n }\n\n\n async start(request: IActionTypeRequest) {\n // Create a one time requester\n let requester = new SiteCardContainerWrapper(this);\n\n // Do the request\n await requester.request(request);\n }\n\n redraw() {\n this._positioner?.redraw();\n }\n\n resize() {\n let position = this.position();\n if(position === null)\n return;\n\n let positioner = position.width <= Site.mobileWidth ? SiteCardPositionerMobile : SiteCardPositionerDesktop;\n\n // If we have another positioner, destruct and create new one\n if(!(this._positioner instanceof positioner)) {\n if(this._positioner !== undefined)\n this._positioner.destruct();\n \n // Construct new one:\n this._positioner = new positioner(\n this,\n this._cards.query(\".card\").all(a => a)\n );\n }\n\n this._positioner.resize(position);\n }\n\n async post(request: ISiteRequest): Promise {\n return await this._site.post(request);\n }\n async request(card: ISiteCard, request: ISiteRequest): Promise {\n this._loader.show();\n this.trigger(\"qts.loading\", false);\n try {\n let command = new SiteContainerRequestCommand(this._site, this, card, request);\n return await command.execute();\n } catch (e) {\n // Fetch exceptions:\n if (e instanceof UnauthorizedException)\n {\n var action = new SiteActionUrl(card, { type: \"Url\", url: \"/\", newWindow: false}, null);\n await action.execute();\n return false;\n }\n \n // Unknown exception:\n if (navigator.onLine) {\n this._site.addMessage(new SiteMessage({\n title: \"Something went wrong :(\",\n message: \"We couldn't complete the request, please contact the helpdesk, press F1 to find out how.\",\n sort: \"Error\"\n }));\n } else {\n this._site.addMessage(new SiteMessage({\n title: \"No internet connection\",\n message: \"There is no internet available please check your network and try again.\",\n sort: \"Error\"\n }));\n }\n console.error(e);\n return false;\n } finally {\n this.trigger(\"qts.loaded\", false);\n this._loader.hide();\n }\n }\n\n async makeActive() {\n if(this.isRemoved() || this.containsClass(\"active\"))\n return false;\n \n this.addClass(\"active\");\n this.trigger(\"qts.active\", false);\n\n let card = this._cards.lastChild();\n card && await this.makeCardActive(card);\n\n return true;\n }\n async makeInactive() {\n if(this.isRemoved() || !this.containsClass(\"active\"))\n return false;\n\n // Make active card inactive:\n let card = this.getActiveCard();\n card && card.makeInactive();\n \n // And now the container\n this.removeClass(\"active\");\n this.trigger(\"qts.inactive\", false);\n\n return true;\n }\n public isActive() {\n return this.containsClass(\"active\");\n }\n public hasFocus() {\n let hasFocus = this.query(\":focus\").first();\n return hasFocus !== null;\n }\n\n static async getCardView(view: string) {\n let cardRequest = await new QueryRequest(view)\n .request();\n\n return await cardRequest.text();\n }\n getCards() {\n return this._cards.query(\".card\");\n }\n getActiveCard() {\n return this._cards.query(\".card.active\")\n .first();\n }\n async back() {\n let activeCard = this._cards.lastChild();\n \n if (activeCard) {\n await activeCard.back();\n }\n }\n async appendCard(card: SiteCard) {\n this._cards.append(card);\n this._positioner && this._positioner.addCard(card);\n \n // Add history\n this._site.getHistory().add();\n \n // Only start when we are active\n if (this.isActive())\n await card.start();\n }\n async replaceCard(oldCard: ISiteCard, newCard: ISiteCard) {\n // Check if oldCard is removed\n if (oldCard.isRemoved()) {\n return await newCard.remove();\n }\n \n // If not, replace card content\n if(oldCard instanceof QueryElement && newCard instanceof QueryElement)\n this._cards.replace(oldCard, newCard);\n \n this._positioner && this._positioner.replaceCard(oldCard, newCard);\n\n // Make card active if it was active:\n if(this.isActive() && oldCard.isActive())\n await this.makeCardActive(newCard);\n \n // Do not await removing the old card\n oldCard.remove();\n }\n async makeCardActive(card: ISiteCard) {\n await this._site.makeContainerActive(this);\n\n let activeCard = this.getActiveCard();\n\n if (card === activeCard)\n return;\n\n if (activeCard !== null)\n activeCard.makeInactive();\n \n this.trigger(\"qts.card\", false, card);\n card.makeActive();\n }\n async removeCard(card: ISiteCard) {\n if (card.isRemoved())\n return;\n \n let toActivate = card.next() || card.prev();\n\n // Do we need to stay inside this container?\n if (this._site.Config.settings.includes(\"NoNavigation\")) {\n // Yes, only remove the card when we have another card left\n if (toActivate !== null) {\n this._positioner?.removeCard(card);\n await card.remove();\n await this.makeCardActive(toActivate);\n }\n } else {\n // No, just remove the card\n this._positioner?.removeCard(card);\n await card.remove();\n\n if (toActivate !== null)\n await this.makeCardActive(toActivate);\n else if (card instanceof SiteCard)\n await this._site.removeContainer(this);\n }\n }\n async removeNextCards(card: ISiteCard) {\n let cards: SiteCard[] = [];\n card.nextAll(a => { cards.push(a); });\n \n for (let toRemove of cards.reverse()) {\n this.removeCard(toRemove);\n };\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n }\n\n}\n\nclass SiteCardContainerWrapper\n implements ISiteCard {\n\n private _container: ISiteContainer;\n\n get Model(): SiteModel { return new SiteModel({}); }\n get ModelData(): SiteModel { return new SiteModel({}); }\n get Container(): ISiteContainer { return this._container; }\n\n constructor(container: ISiteContainer) {\n this._container = container;\n }\n trigger(val: string, bubble: boolean): this {\n return this;\n }\n async back(): Promise {\n await this._container.removeCard(this);\n }\n async refresh() {\n return true;\n }\n async remove() {\n await this._container.remove();\n }\n\n addValidation(path: string[], validation: ISiteValidation) {\n return;\n }\n clearValidation() {\n return;\n }\n\n keyPress(keyCodes: number[]): void {\n return;\n }\n async post(request: IActionTypeRequest): Promise {\n return true;\n }\n request(request: IActionTypeRequest): Promise {\n return this._container.request(this, { request: request.actionLink.actionInfo });\n }\n getRequest() {\n return undefined;\n }\n makeFocusableActive(focusable: ISiteFocusable) {\n return this;\n }\n makePrevFocusableActive(focusable: ISiteFocusable) {\n return this;\n }\n makeNextFocusableActive(focusable: ISiteFocusable) {\n return this;\n }\n \n getAttr(attr: string): string | null {\n return null;\n }\n setAttr(attr: string, content: string): this {\n return this;\n }\n \n isLarge(): boolean {\n return false;\n }\n isActive(): boolean {\n return true;\n }\n isRemoved(): boolean {\n return false;\n }\n makeActive(): boolean {\n return true;\n }\n makeInactive(): void {\n return;\n }\n next(): T | null {\n return null;\n }\n nextAll(func: (item: T) => boolean | void) {\n return this;\n }\n prev(): T | null {\n return null;\n }\n containsClass(string: string) {\n return false;\n }\n position() {\n return null;\n }\n style() {\n return undefined;\n }\n}","class ContainerSideContainer\n extends QueryElement\n implements ISiteContainer \n{\n private readonly _site: Site;\n\n get Config() { return { }; }\n get SiteConfig() { return this._site.Config; }\n \n constructor(site: Site) {\n super(document.createElement(\"div\"))\n\n this.addClass(\"container\");\n this.addClass(\"mobile\");\n this.addClass(\"mobile-small\");\n this.addClass(\"no-labels\");\n\n this._site = site;\n }\n redraw() {\n // Do nothing\n }\n\n async post(request: ISiteRequest): Promise {\n return await this._site.post(request);\n }\n request(card: ISiteCard, request: ISiteRequest): Promise {\n let command = new SiteContainerRequestCommand(\n this._site,\n this,\n card,\n request);\n return command.execute();\n }\n async back(): Promise {\n let activeCard = this.lastChild();\n \n if (activeCard) {\n await this.removeCard(activeCard);\n }\n }\n async appendCard(card: SiteCard): Promise {\n this.append(card);\n await card.start();\n }\n async makeCardActive(card: ISiteCard): Promise {\n let activeCard = this.getActiveCard();\n\n if (card === activeCard)\n return;\n\n if (activeCard !== null)\n activeCard.makeInactive();\n \n this.trigger(\"qts.card\", false, card);\n card.makeActive();\n }\n async replaceCard(oldCard: ISiteCard, newCard: ISiteCard): Promise {\n\n }\n async removeNextCards(card: ISiteCard): Promise {\n let cards: SiteCard[] = [];\n card.nextAll(a => { cards.push(a); });\n\n for (let toRemove of cards.reverse()) {\n await this.removeCard(toRemove);\n };\n }\n async removeCard(card: ISiteCard): Promise {\n let toActivate = card.next() || card.prev();\n await card.remove();\n\n if (toActivate !== null)\n await this.makeCardActive(toActivate);\n }\n getCards() {\n return this.query(\".card\");\n }\n getActiveCard() {\n return this.query(\".card.active\")\n .first();\n }\n\n open() {\n let card = new SiteCardContainerWrapper(this);\n this.request(card, {\n request: {\n module: \"AI\",\n controller: \"AI\",\n action: \"Index\"\n }\n });\n }\n close() {\n this.query(\".card\")\n .all(a => a.remove(true));\n }\n}\n\nclass SiteContainerSide\n extends QueryElement{\n \n private readonly _container: ContainerSideContainer;\n \n\n constructor(element: HTMLElement, site: Site) {\n super(element, false);\n \n this._container = new ContainerSideContainer(site).appendTo(this);\n }\n open() {\n this.addClass(\"active\");\n this._container.open();\n }\n close() {\n this.removeClass(\"active\");\n this._container.close();\n }\n}","class SiteHistory {\n\n _historyEvent: QueryEventAsync;\n get historyEvent(){ return this._historyEvent.expose(); } \n\n constructor() {\n this._historyEvent = new QueryEventAsync();\n\n window.addEventListener(\"popstate\", (e: PopStateEvent) => {\n this._historyEvent.trigger(\"\");\n }, false);\n }\n\n add() {\n history.pushState({}, \"\");\n }\n}","type BarcodeProfiles = 'Profile1' | 'Profile2';\n\ninterface IBarcodeProfile\n{\n character: string;\n characterCode: number;\n}\n\nclass SiteKeyboard\n{\n private readonly _site: Site;\n\n private _readBarcode: boolean = false;\n private _readBarcodeString: string[] = [];\n private _readBarcodeTimeout: number = 0;\n private _profiles: { [k in BarcodeProfiles]: IBarcodeProfile } = {\n \"Profile1\": {\n character: \"\\\\\",\n characterCode: 220\n },\n \"Profile2\": {\n character: \"`\",\n characterCode: 192\n }\n }\n private _profile: IBarcodeProfile;\n\n constructor (site: Site, profile: BarcodeProfiles)\n {\n this._site = site;\n this._profile = this._profiles[profile];\n \n QueryElement.get(document.body).on(\"textInput\", (e: Event) => {\n if (e.data == null)\n return;\n \n if (e.data == this._profile.character) {\n if (this._readBarcode == false)\n this.startBarcode();\n else\n this.endBarcode();\n \n e.stop()\n } else {\n if (this._readBarcode == true) {\n this.read(e, e.data);\n }\n }\n });\n \n QueryElement.get(document.body).on(\"keydown\", (e: KeyboardEvent) => {\n if(this.keyDown(e.keyCode)) {\n e.stop();\n } else {\n if (this._readBarcode == true) {\n if ((e.keyCode >= 48 && e.keyCode <= 57) || (e.keyCode >= 65 && e.keyCode <= 90)) {\n this.read(e, e.key);\n }\n }\n }\n });\n }\n read(e: Event, key: string) {\n this._readBarcodeString.push(key);\n this.prolongBarcode();\n e.stop();\n }\n keyDown(keyCode: number): boolean {\n switch(keyCode) {\n case this._profile.characterCode:\n if (this._readBarcode == false) \n this.startBarcode();\n else\n this.endBarcode();\n return true;\n case 27: // ESC\n this._site.back();\n return true;\n case 112: // F1\n this._site.containerSide();\n return true;\n case 113: // F2\n this._site.showHideConfidential();\n return true;\n case 114: // F3\n this._site.switchTheme();\n return true;\n }\n \n return false;\n }\n\n startBarcode() {\n this._readBarcode = true;\n this._readBarcodeString = [];\n\n this.prolongBarcode();\n }\n prolongBarcode() {\n window.clearTimeout(this._readBarcodeTimeout);\n this._readBarcodeTimeout = window.setTimeout(() => this.endBarcode(), 5000);\n }\n endBarcode() {\n this._readBarcode = false;\n window.clearTimeout(this._readBarcodeTimeout);\n\n if (this._readBarcodeString.length == 0)\n return;\n\n var barcode = this._readBarcodeString.join(\"\");\n\n var barcodeReturn = new BarcodeMessage();\n barcodeReturn.barcode = barcode;\n console.log(\"Found barcode \" + barcode);\n this._site.trigger(\"qts.observer.event\", false, barcodeReturn);\n }\n}","type SiteLabelPopout = \"normal\" | \"inline\" | \"none\" | \"always\";\ntype SiteLabelScroll = \"top\" | \"view\";\n\ninterface ISiteLabelConfig {\n popout: SiteLabelPopout,\n scroll: SiteLabelScroll\n}\n\ninterface ISiteFocusable\n extends IQueryElement {\n makeActive(): boolean;\n makeInactive(): void;\n makePrevActive(): void;\n makeNextActive(): void;\n}\n\ninterface ISiteLabel\n extends ISiteFocusable {\n init(input?: IQueryElement): void;\n\n getInput(): IQueryElement | null;\n setError(error: string): void;\n clearError(): void;\n\n path: string[];\n}\n\nabstract class SiteLabel\n extends QueryElement\n implements ISiteLabel {\n\n private readonly _card: SiteCard;\n private readonly _model: ISiteModel;\n private readonly _modelData: ISiteModel;\n private readonly _path: string[];\n private readonly _config: TConfig;\n static skipCtrlKeyCodes = [\n 67, // CTRL + C\n 86, // CTRL + V\n 88, // CTRL + X\n 65 // CTRL + A\n ];\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(element);\n\n this.setAttr(\"if-ISiteLabel\", \"true\");\n this.setAttr(\"if-ISiteFocusable\", \"true\");\n\n let path = this.getAttr('data-path');\n\n if(path === null)\n throw 'Labels must have a path!';\n\n this._card = card;\n this._model = model;\n this._modelData = modelData;\n this._path = SiteModel.split(path);\n this._config = this.getConfig();\n\n this.on(\"click\", () => {\n card.makeFocusableActive(this) \n });\n\n }\n init(input?: IQueryElement) {\n let value = this.getModelValue();\n if (value === undefined)\n this.initialValue(null); \n else\n this.initialValue(value);\n\n if (input === undefined)\n return;\n \n input.on(\"keydown\", (e: KeyboardEvent) => this.defaultKeyDownHandler(e));\n input.on(\"focus\", () => {\n this._card.makeFocusableActive(this) \n });\n \n var controlMode = this.getControlMode();\n if (controlMode != null) {\n if (controlMode == \"Hide\") {\n this.addClass(\"hide\");\n this.setAttr(\"if-ISiteFocusable\", \"false\");\n }\n }\n }\n defaultKeyDownHandler(e: KeyboardEvent) {\n switch(e.keyCode) {\n default:\n if (e.ctrlKey && !SiteLabel.skipCtrlKeyCodes.includes(e.keyCode))\n {\n this._card.keyPress([17, e.keyCode]);\n e.stop();\n }\n break;\n case 17: // CTRL\n this._card.keyPress([e.keyCode]);\n e.stop();\n break;\n case 13: // ENTER\n if (!e.ctrlKey && !e.shiftKey && !e.altKey) {\n this._card.keyPress([e.keyCode]);\n e.stop();\n }\n break;\n case 9: // TAB\n if(e.shiftKey)\n this.makePrevActive(true);\n else\n this.makeNextActive(true);\n e.stop();\n break;\n }\n }\n get config() : TConfig {\n return this._config;\n }\n get path() {\n return this._path;\n }\n abstract defaultConfig() : TConfig;\n abstract getValue(): T | null;\n abstract getInput(): IQueryElement | null;\n\n isNotNull(value: T | null): boolean {\n return value !== null;\n }\n private initialValue(value: T | null) {\n this._model.set(this._path, this, value, true);\n this.setValue(value);\n }\n setValue(value: T | null) {\n if(this.isNotNull(value))\n this.addClass(\"not-null\");\n else\n this.removeClass(\"not-null\");\n this._model.set(this._path, this, value, false);\n }\n\n setError(error: string) {\n this.setAttr(\"data-error\", error);\n this.addClass(\"error\");\n }\n clearError() {\n this.setAttr(\"data-error\", \"\");\n this.removeClass(\"error\");\n }\n makeCurrentActive() {\n this._card.makeFocusableActive(this);\n }\n makePrevActive(force = false) {\n if (!this._card.SiteConfig.settings.includes(\"NoAutoTab\") || force) {\n this._card.makePrevFocusableActive(this);\n return true;\n }\n return false;\n }\n makeNextActive(force = false) {\n if (!this._card.SiteConfig.settings.includes(\"NoAutoTab\") || force) {\n this._card.makeNextFocusableActive(this);\n return true;\n }\n return false;\n }\n getSiteConfig() {\n return this._card.SiteConfig;\n }\n getCard() {\n return this._card;\n }\n getIcon() {\n return this.query(\"i.inline.collapse\").first();\n }\n getModelValue() : T | undefined {\n let value = this._model\n .get(this._path);\n \n return value;\n }\n getModelData(): any | undefined {\n let value = this._modelData\n .get(this._path.concat(\"info\"));\n\n return value;\n }\n getControlMode(): ControlMode | undefined {\n let value = this._modelData\n .get(this._path.concat(\"controlMode\"));\n \n \n return value;\n }\n setModelData(modelData: any | undefined) {\n this._modelData.set(\n this._path.concat(\"info\"),\n this,\n modelData,\n false\n );\n }\n private getConfig() {\n let defaultConfig = this.defaultConfig();\n let dataConfig = this.getAttr('data-config') || \"\";\n \n let config : TConfig | null = null;\n if(dataConfig.startsWith(\"{\"))\n config = QueryJSON.deserialize(dataConfig);\n else if(dataConfig)\n config = this._model.get(SiteModel.split(dataConfig)) as TConfig;\n \n if (config != null)\n return {...defaultConfig, ...config};\n else\n return defaultConfig;\n }\n\n makeActive() {\n if(this.containsClass(\"active\"))\n return false;\n\n // Scroll into position:\n let content = this._card.query(\".content\")\n .first>();\n\n let elem = content && content.get();\n if (content !== null && elem !== null) {\n let posFocusable = this.position();\n let posContent = content.position();\n if (this.config.scroll == \"top\") {\n let toPositionY = (posFocusable && posFocusable.top || 0)\n - (posContent && posContent.top || 0);\n\n content.scrollToY(\n elem.scrollTop + toPositionY,\n 400,\n Easing.easeOutCubic);\n } else if (this.config.scroll == \"view\") {\n // Browser will do this\n }\n }\n \n this.addClass(\"active\").focus();\n this.trigger(\"qts.active\", false);\n\n return true;\n }\n makeInactive() {\n this.removeClass(\"active\");\n this.setValue(this.getValue());\n this.trigger(\"qts.inactive\", false);\n }\n}","abstract class SiteNavigation\n extends QueryElement {\n\n constructor() {\n let element = document.createElement(\"div\");\n element.id = \"navigation\";\n\n super(element)\n }\n\n abstract isActive(): boolean;\n abstract makeActive(): this;\n abstract makeInactive(): this;\n}","class SiteOverview\n extends QueryElement {\n \n private readonly _items: {[a: string]: SiteOverviewItem} = {};\n private readonly _site: Site;\n\n constructor(element: HTMLElement, site: Site) {\n super(element)\n\n this._site = site;\n }\n\n async register(container: SiteContainer) {\n let item = await SiteOverviewItem.create(this, this._site, container);\n this._items[container.getInstance() || \"\"] = item;\n\n this.append(item);\n\n let elem = this.get();\n if(elem !== null)\n elem.scrollTop = Number.MAX_SAFE_INTEGER;\n }\n removeItemByContainer(container:SiteContainer) {\n return this._items[container.getInstance() || \"\"].remove();\n }\n\n makeItemActiveByContainer(container: SiteContainer) {\n return this.makeItemActive(this._items[container.getInstance() || \"\"]);\n }\n makeItemInactiveByContainer(container: SiteContainer) {\n return this.makeItemInactive(this._items[container.getInstance() || \"\"]);\n }\n async makeItemInactive(item: SiteOverviewItem) {\n await item.makeInactive();\n }\n async makeItemActive(item: SiteOverviewItem) {\n if(!this.containsClass(\"active\"))\n return;\n \n this.addClass(\"active-grow\");\n await item.makeActive();\n this.removeClass(\"active-grow\");\n this.makeInactive();\n }\n\n makeActive() {\n this.addClass(\"active\");\n }\n makeInactive() {\n this.removeClass(\"active\");\n }\n}\nclass SiteOverviewItem\n extends QueryElement {\n\n private readonly _preview: QueryElement;\n \n private readonly _title: QueryElement;\n private readonly _container: SiteContainer;\n private readonly _overview: SiteOverview;\n private readonly _site: Site;\n private readonly _touch: QueryTouch;\n\n private _scale?: number;\n private _config = {\n maxWidth: 300,\n maxHeight: 300\n }\n\n public constructor(overview: SiteOverview, site: Site, container: SiteContainer) {\n super(document.createElement(\"DIV\"))\n\n this.addClass(\"item\");\n\n this._container = container;\n this._overview = overview;\n this._site = site;\n this._touch = new QueryTouch(this);\n this._preview = QueryElement.QueryElement(\"div\")\n .addClass(\"preview\");\n\n let recognizer = new QueryTouchSwipeRecognizer({\n direction: QueryTouchDirection.X,\n pointers: 1,\n threshold: 10,\n velocity: 0.2\n });\n recognizer.startEvent.on(async () => {\n this.addClass(\"drag\");\n });\n recognizer.moveEvent.on(async (e) => {\n let style = this.style();\n if(style !== undefined)\n style.transform = `translate(${e.movedX}px, 0)`;\n });\n recognizer.stopEvent.on(async(a) => {\n if(a !== \"none\") {\n // Close received\n this._site.removeContainer(this._container);\n } else {\n // Slow mover, do not a thing :)\n this.removeClass(\"drag\");\n let style = this.style();\n if(style !== undefined)\n style.transform = `translate(0, 0)`;\n }\n });\n \n this._touch.addRecognizer(recognizer);\n\n let containerConfig = container.Config;\n\n this._title = QueryElement.QueryElement(\"DIV\").addClass(\"title\");\n if (containerConfig.color !== undefined) {\n this._title.setAttr(\"style\", `background-color: ${containerConfig.color}`);\n this._preview.setAttr(\"style\", `border-color: ${containerConfig.color}`)\n }\n if(containerConfig.icon !== undefined)\n this._title.append(QueryElement.QueryElement(\"I\").setHtml(containerConfig.icon));\n if(containerConfig.title !== undefined)\n this._title.append(QueryElement.QueryElement(\"SPAN\").setHtml(containerConfig.title));\n \n let closeButton = new SiteButton({\n icon: \"close\"\n }, true);\n closeButton.on(\"click\", (e) => {\n site.removeContainer(container);\n e.stop();\n });\n this._title.append(closeButton);\n\n this.on(\"click\", async () => {\n await this._site.makeContainerActive(this._container);\n });\n\n container.on(\"qts.active\", () => {\n this.addClass(\"container-active\");\n });\n container.on(\"qts.inactive\", () => {\n this.removeClass(\"container-active\");\n });\n container.on(\"qts.loading\", () => {\n this.addClass(\"container-loading\");\n });\n container.on(\"qts.loaded\", () => {\n this.removeClass(\"container-loading\");\n });\n\n this.append(this._title);\n this.append(this._preview);\n }\n \n static async create(overview: SiteOverview, site: Site, container: SiteContainer) {\n return await new SiteOverviewItem(overview, site, container);\n }\n\n async makeActive() {\n \n }\n async makeInactive() {\n this._preview.setHtml(\"\");\n\n for (let title of this._container.getCards().all(a => a.Title)) {\n QueryElement.QueryElement(\"div\")\n .setHtml(title)\n .appendTo(this._preview);\n }\n }\n async remove(removeInner = true) {\n await super.remove(removeInner);\n }\n\n}","class SitePrint {\n \n private readonly _address : string = \"http://127.0.0.1:9100/\"\n \n private async GetDefault() {\n let response = await new QueryRequest(`${this._address}default?type=printer`)\n .request();\n \n let json = await response.json();\n json.version = 2;\n json.readRetries = json.connection == \"bluetooth\" ? 1 : 0;\n return json;\n }\n \n public async PrintRequest(request: IActionLink) {\n let response = await new QueryRequest(\n SiteAction.toLink(request.actionInfo),\n request.model ?\n {\n contentType: 'json',\n data: request.model,\n method: 'post'\n }\n : {\n contentType: 'json',\n method: 'get'\n }\n ).request();\n \n return await this.PrintBlob(await response.blob());\n }\n \n public async PrintBlob(blob: Blob) {\n let form = new FormData();\n let json = await this.GetDefault();\n form.append(\"json\", JSON.stringify({\n device: json\n }));\n form.append(\"blob\", blob);\n\n let request = new QueryRequest(`${this._address}write`, {\n method: \"post\",\n contentType: \"form\",\n data: form\n });\n let response = await request.request();\n //let json = await response.json();\n }\n}","type SiteStartSectionSort = \"normal\" | \"small\";\n\ninterface ISiteStartSectionItem\n extends ISiteActionButton {\n}\n\ninterface ISiteStartSection {\n title: string;\n items: ISiteStartSectionItem[];\n sort: SiteStartSectionSort;\n}\n\nclass SiteStart\n extends QueryElement {\n\n constructor(element: HTMLElement, site: Site, sections: ISiteStartSection[]) {\n super(element)\n\n let color = 0;\n let list = QueryElement.QueryElement(\"UL\");\n\n for (let section of sections) {\n let container = QueryElement.QueryElement(\"UL\");\n let count = 0;\n\n for (let item of section.items) {\n\n // If action isn't defined, continue\n if (!item.action)\n continue;\n\n count++;\n let wrapper = new SiteCardContainerWrapper(\n new SiteContainerStartWrapper(site.Config)\n );\n\n QueryElement.QueryElement(\"LI\")\n .append(new SiteActionButton(wrapper, item))\n .appendTo(container)\n .on(\"click\", async () => {\n if (item.action && item.action.type == \"Request\") {\n let container = await site.createContainer(item);\n await container.start(item.action as IActionTypeRequest);\n } else {\n let action = SiteAction.create(wrapper, item.action);\n action && action.execute();\n } \n });\n }\n\n if (count > 0) {\n let listItem = QueryElement.QueryElement(\"LI\")\n .append(QueryElement.QueryElement(\"H2\").setHtml(section.title))\n .appendTo(list);\n\n if (section.sort == \"small\")\n listItem.addClass(\"small\");\n\n container.appendTo(listItem);\n }\n }\n this.append(list);\n\n this.addClass(\"start\").on(\"click\", async () => {\n \n if(this.containsClass(\"show\")) {\n list.removeClass(\"in-grow\")\n .addClass(\"out-grow\");\n\n if(!Site.isMobile())\n await delay(200);\n \n this.removeClass(\"show\");\n } else {\n this.addClass(\"show\");\n list.removeClass(\"out-grow\")\n .addClass(\"in-grow\");\n }\n });\n site.append(this);\n }\n\n makeActive() {\n this.addClass(\"active\");\n }\n makeInactive() {\n this.removeClass(\"active\");\n }\n}\n\nclass SiteContainerStartWrapper\n implements ISiteContainer {\n\n private readonly _config: SiteConfig;\n\n on(val: string, func: (e: TEvent) => any) : (e: TEvent) => any {\n return () => {};\n }\n off(val: string, func: ((e: TEvent) => any) | null) : void {\n return;\n }\n\n get Config() { return { }; }\n get SiteConfig() { return this._config; }\n\n constructor(siteConfig: SiteConfig)\n {\n this._config = siteConfig;\n }\n redraw(): void {\n throw new Error(\"Method not implemented.\");\n }\n back(): Promise {\n throw new Error(\"Method not implemented.\");\n }\n post(request: ISiteRequest): Promise {\n throw new Error(\"Method not implemented.\");\n }\n request(card: ISiteCard, request: ISiteRequest): Promise {\n throw new Error(\"Method not implemented.\");\n }\n appendCard(card: ISiteCard): Promise {\n throw new Error(\"Method not implemented.\");\n }\n makeCardActive(card: ISiteCard): Promise {\n throw new Error(\"Method not implemented.\");\n }\n replaceCard(oldCard: ISiteCard, newCard: ISiteCard): Promise {\n throw new Error(\"Method not implemented.\");\n }\n removeNextCards(card: ISiteCard): Promise {\n return new Promise(() => { });\n }\n removeCard(card: ISiteCard): Promise {\n return new Promise(() => { });\n }\n remove(removeInner?: boolean | undefined): Promise {\n return new Promise(() => { });\n }\n}","type IActionSorts = \"Request\" | \"Post\" | \"Refresh\" | \"Close\" | \"Submit\" | \"Wrapper\" | \"Url\" | \"CloseRefresh\" | \"ShareUrl\" | \"ShareImage\" | \"Print\" | \"Sound\" | \"Copy\";\n\ninterface IActionInfo {\n module?: string;\n controller: string;\n action: string;\n id?: string;\n}\ninterface IActionLink {\n actionInfo: IActionInfo;\n model?: any;\n}\n\ninterface IActionType {\n type: IActionSorts;\n nextAction?: IActionType;\n}\ninterface IActionTypeUrl\n extends IActionType {\n \n url: string;\n newWindow: boolean;\n}\ninterface IActionTypeRequest\n extends IActionType {\n \n actionLink: IActionLink;\n}\ninterface IActionTypeCopy\n extends IActionType {\n \n text: string\n}\ninterface IActionTypeShareUrl\n extends IActionType {\n \n title: string,\n text: string,\n url: string\n}\ninterface IActionTypeShareImage\n extends IActionType {\n \n title: string,\n text: string,\n image: string\n}\ninterface IActionTypeSound\n extends IActionType {\n\n sound: string;\n}\ninterface IActionTypePrint\n extends IActionTypeRequest {\n\n path?: string;\n}\ninterface IActionTypePost\n extends IActionTypeRequest {\n\n path?: string;\n setModel: boolean;\n}\ninterface IActionTypeSubmit\n extends IActionTypeRequest {\n\n path?: string;\n setModel: boolean;\n}\n\nabstract class SiteAction {\n\n private readonly __next: SiteAction | null;\n\n constructor(next: SiteAction | null) {\n this.__next = next;\n }\n\n async execute(): Promise {\n try {\n if ((this.__next && await this.__next.execute()) || !this.__next)\n return await this._execute();\n } catch(e) {\n // Failed, please stop :)\n }\n return false;\n }\n\n getNext() {\n return this.__next;\n }\n\n protected abstract _execute(): Promise;\n\n static create(card: ISiteCard, action?: IActionType | null): SiteAction | null {\n if(!action)\n return null;\n\n switch (action.type) {\n case \"Wrapper\":\n return new SiteActionWrapper(card, action as IActionTypeRequest, SiteAction.create(card, action.nextAction));\n case \"Request\":\n return new SiteActionRequest(card, action as IActionTypeRequest, SiteAction.create(card, action.nextAction));\n case \"Submit\":\n return new SiteActionSubmit(card, action as IActionTypeRequest, SiteAction.create(card, action.nextAction));\n case \"Post\":\n return new SiteActionPost(card, action as IActionTypePost, SiteAction.create(card, action.nextAction));\n case \"Close\":\n return new SiteActionClose(card, action, SiteAction.create(card, action.nextAction));\n case \"Refresh\":\n return new SiteActionRefresh(card, action, SiteAction.create(card, action.nextAction));\n case \"CloseRefresh\":\n return new SiteActionCloseRefresh(card, action, SiteAction.create(card, action.nextAction));\n case \"Url\":\n return new SiteActionUrl(card, action as IActionTypeUrl, SiteAction.create(card, action.nextAction));\n case \"ShareUrl\":\n return new SiteActionShareUrl(card, action as IActionTypeShareUrl, SiteAction.create(card, action.nextAction));\n case \"ShareImage\":\n return new SiteActionShareImage(card, action as IActionTypeShareImage, SiteAction.create(card, action.nextAction));\n case \"Copy\":\n return new SiteActionCopy(card, action as IActionTypeCopy, SiteAction.create(card, action.nextAction));\n case \"Print\":\n return new SiteActionPrint(card, action as IActionTypePrint, SiteAction.create(card, action.nextAction));\n case \"Sound\":\n return new SiteActionSound(card, action as IActionTypeSound, SiteAction.create(card, action.nextAction));\n }\n\n return null;\n }\n\n static toLink(actionInfo: IActionInfo) {\n const arr = [actionInfo.module, actionInfo.controller, actionInfo.action, actionInfo.id];\n return arr.filter(a => a).join(\"/\");\n }\n}","class SiteActionClose\n extends SiteAction {\n\n private readonly _action: IActionType;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionType, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n await this._card.Container.removeCard(this._card);\n return true;\n }\n}","class SiteActionCloseRefresh\n extends SiteAction {\n\n private readonly _action: IActionType;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionType, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n let prevCard = this._card.prev();\n if (prevCard == null)\n return false;\n \n await this._card.Container.removeCard(this._card);\n return await prevCard.refresh();\n }\n}","class SiteActionCopy\n extends SiteAction {\n\n private readonly _action: IActionTypeCopy;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypeCopy, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n if(navigator.clipboard) {\n var site = Site.getSite();\n site.addMessage(new SiteMessage({\n sort: \"Info\",\n message: site.Config.strings[\"copied to clipboard.\"]\n }));\n navigator.clipboard.writeText(this._action.text);\n }\n return true;\n }\n}","class SiteActionPost\n extends SiteAction {\n\n private readonly _action: IActionTypePost;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypePost, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n return await this._card.post(this._action);\n }\n}","class SiteActionPrint\n extends SiteAction {\n\n private readonly _action: IActionTypePrint;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypePrint, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n\n getAction() {\n return this._action as IActionTypePrint;\n }\n\n async _execute() {\n let print = new SitePrint();\n let path = this._action.path && SiteModel.split(this._action.path) || [];\n this._action.actionLink.model = this._card.Model.get(path);\n \n await print.PrintRequest(this._action.actionLink);\n\n return true;\n }\n}","class SiteActionRefresh\n extends SiteAction {\n\n private readonly _action: IActionType;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionType, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n return await this._card.refresh();\n }\n}","class SiteActionRequest \n extends SiteAction {\n\n private readonly _action: IActionTypeRequest;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypeRequest, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n\n getAction() {\n return this._action as IActionTypeRequest;\n }\n\n async _execute() {\n return await this._card.request(this._action);\n }\n}","class SiteActionShareImage\n extends SiteAction {\n\n private readonly _action: IActionTypeShareImage;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypeShareImage, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n // Share or copy to clipboard\n if (navigator.share) {\n var data = await fetch(this._action.image);\n var blob = await data.blob();\n var file = new File([blob], \"image.jpg\", {\n type: blob.type, \n lastModified: Date.now()\n });\n navigator.share({\n title: this._action.title,\n text: this._action.text,\n files: [file]\n });\n } else if(navigator.clipboard) {\n var site = Site.getSite();\n\n site.addMessage(new SiteMessage({\n sort: \"Info\",\n message: site.Config.strings[\"copied to clipboard.\"]\n }));\n navigator.clipboard.writeText(this._action.image);\n }\n return true;\n }\n}","class SiteActionShareUrl\n extends SiteAction {\n\n private readonly _action: IActionTypeShareUrl;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypeShareUrl, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n // Share or copy to clipboard\n if (navigator.share) {\n navigator.share({\n title: this._action.title,\n text: this._action.text,\n url: this._action.url\n });\n } else if(navigator.clipboard) {\n var site = Site.getSite();\n\n site.addMessage(new SiteMessage({\n sort: \"Info\",\n message: site.Config.strings[\"copied to clipboard.\"]\n }));\n navigator.clipboard.writeText(this._action.url);\n }\n return true;\n }\n}","class SiteActionSound\n extends SiteAction {\n\n private readonly _action: IActionTypeSound;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypeSound, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n Site.getSite().playSound(this._action.sound);\n return true;\n }\n}","class SiteActionSubmit\n extends SiteAction {\n\n private readonly _action: IActionTypeRequest;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypeRequest, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n\n getAction() {\n return this._action as IActionTypeSubmit;\n }\n\n async _execute() {\n return await this._card.request(this._action);\n }\n}","class SiteActionUrl\n extends SiteAction {\n\n private readonly _action: IActionTypeUrl;\n private readonly _card: ISiteCard;\n\n constructor(card: ISiteCard, action: IActionTypeUrl, next: SiteAction | null) {\n super(next);\n this._action = action;\n this._card = card;\n }\n async _execute() {\n if (this._action.newWindow) {\n window.open(this._action.url, \"_blank\");\n }\n else {\n window.location.href = this._action.url;\n }\n return true;\n }\n}","interface IActionTypeWrapper\n extends IActionType\n{\n model: any;\n}\n\nclass SiteActionWrapper\n extends SiteAction {\n\n private readonly _action: IActionTypeWrapper;\n private readonly _card: ISiteCard;\n private readonly _next: SiteActionSubmit | SiteActionRequest;\n\n constructor(card: ISiteCard, action: IActionType, next: SiteAction | null) {\n super(null);\n\n if (next == null || !(next instanceof SiteActionSubmit || next instanceof SiteActionRequest))\n throw \"Cannot wrap without a next action.\";\n \n this._next = next;\n this._action = action as IActionTypeWrapper;\n this._card = card;\n }\n \n async _execute() {\n // -- Wrap current model with next action\n let nextAction = this._next.getAction();\n let nextActionSetModel: boolean;\n let nextActionModel: any;\n\n if (this._next instanceof SiteActionSubmit)\n {\n let nextActionCasted = nextAction;\n nextActionSetModel = nextActionCasted.setModel;\n nextActionModel = nextAction.actionLink.model;\n\n if (nextActionSetModel) {\n nextAction.actionLink.model = this._card.Model.get(SiteModel.split(nextActionCasted.path));\n (nextAction).setModel = false;\n }\n } else {\n nextActionSetModel = false;\n nextActionModel = nextAction.actionLink.model;\n }\n\n\n // Now wrap nextAction.ActionLink.Model with action.Model\n this._action.model.model = nextAction.actionLink.model;\n nextAction.actionLink.model = this._action.model;\n\n // And run the next action\n let result = await this._next.execute();\n\n // Set back to original values:\n nextAction.actionLink.model = nextActionModel;\n if (this._next instanceof SiteActionSubmit)\n (nextAction).setModel = nextActionSetModel;\n\n return result;\n }\n}","class SiteCardRequestCommand\n{\n private _request: IActionTypeRequest;\n private _card: ISiteCard;\n\n constructor(\n card: ISiteCard,\n request: IActionTypeRequest)\n {\n this._request = request;\n this._card = card;\n }\n\n execute(): Promise {\n let model: any | undefined;\n let path: string[] = [];\n\n model = this._request.actionLink.model;\n\n // When we submit:\n if (this._request.type == 'Submit') {\n let submit = this._request as IActionTypeSubmit;\n\n path = (submit.path && SiteModel.split(submit.path)) || [];\n\n // Check if we need to set the model:\n if (submit.setModel)\n model = this._card.Model.get(path);\n }\n\n // Convert model, when not null or undefined\n if (model != null) {\n return this._card.Container.request(this._card, { \n request: this._request.actionLink.actionInfo, \n path: path, \n model: JSON.stringify(model) \n });\n }\n\n return this._card.Container.request(this._card, {\n request:this._request.actionLink.actionInfo\n });\n }\n}","class UnauthorizedException\n{\n private readonly _text: string;\n \n constructor(text: string) \n {\n this._text = text;\n }\n}\n\nclass SiteContainerRequestCommand\n{\n private _container: ISiteContainer;\n private _card: ISiteCard;\n private _request: ISiteRequest;\n private _site: Site;\n\n constructor(site: Site, container: ISiteContainer, card: ISiteCard, request: ISiteRequest)\n {\n this._site = site;\n this._container = container;\n this._card = card;\n this._request = request;\n }\n\n async execute()\n {\n // -- Do a request\n let queryRequest = await new QueryRequest(\n SiteAction.toLink(this._request.request),\n this._request.model ?\n {\n contentType: 'json',\n data: this._request.model,\n method: 'post'\n }\n : {\n contentType: 'json',\n method: 'get'\n }\n ).request();\n \n if (queryRequest.status == 401)\n throw new UnauthorizedException(await queryRequest.text());\n \n let json = await queryRequest.json() as ISiteResponse;\n\n return await this.handle(json);\n }\n\n private async handle(json: ISiteResponse)\n {\n switch (json.type) {\n case \"Multi\":\n let multiAction = json as ISiteResponseMultiAction;\n for (let action of multiAction.actions) {\n if (!await this.handle(action))\n return false;\n }\n\n return true;\n case \"Card\":\n let response = json as ISiteResponseCard;\n // -- Request the view\n let view = await SiteContainer.getCardView(response.view);\n let createdCard = new SiteCard(this._container, view, response, this._request);\n if(this._request.options && this._request.options.override == true) {\n await this._container.replaceCard(this._card, createdCard);\n } else {\n await this._container.removeNextCards(this._card);\n await this._container.appendCard(createdCard);\n await this._container.makeCardActive(createdCard);\n }\n\n return true;\n case \"CardAction\":\n let cardAction = json as ISiteResponseCardAction;\n let action = SiteAction.create(this._card, cardAction.action);\n action && action.execute();\n \n return true;\n case \"Redirect\":\n let redirectResponse = json as ISiteResponseRedirect;\n let requestInfo : ISiteRequest = {\n request: redirectResponse.action.actionInfo,\n model: JSON.stringify(redirectResponse.action.model)\n };\n\n return await this._container.request(this._card, requestInfo);\n case \"Validation\":\n let valitationResponse = json as ISiteResponseValidation;\n this._site.addMessage(new SiteMessage({\n title: \"Fout opgetreden bij opslaan\",\n message: valitationResponse.message,\n sort: \"Error\"\n }));\n // For now clear and addValidation\n this._card.clearValidation();\n this._card.addValidation(this._request.path || [], valitationResponse);\n return false;\n case \"Modal\":\n let modal = json as ISiteResponseModal;\n this._site.showModal(this._card, modal.modal);\n return true;\n case \"Message\":\n let responseMessage = json as ISiteResponseMessage;\n\n if (responseMessage.affectedTypes && responseMessage.affectedTypes.length > 0) {\n let changeEvent = new ObserverChangeEvent(\n this._request.request.id, responseMessage.affectedTypes);\n\n this._site.trigger(\"qts.observer.change\", false, changeEvent);\n }\n\n let message = new SiteMessage(responseMessage);\n this._site.addMessage(message);\n return true;\n }\n }\n}","type SiteElementBindTypes = \"date\" | \"dateTime\" | \"dateTimeFormat\" | \"time\" | \"color\" | \"bool\" | \"telephone\" | \"email\" | \"image\" | \"timeSpan\" | \"timeSpan-short\";\n\nclass SiteElementBind\n extends QueryElement {\n\n constructor(card: SiteCard, element: HTMLElement) {\n super(element, false);\n\n let path = this.getAttr('data-path');\n let type = this.getAttr('data-bindType') as SiteElementBindTypes | null;\n let showTitle = this.getAttr('data-title') == \"true\";\n let value = card.Model.get((path && SiteModel.splitPath(card.Model, path)) || []);\n let siteConfig = card.SiteConfig;\n\n if (showTitle)\n this.setAttr(\"title\", value);\n \n if (value != null) {\n switch (type) {\n default:\n break;\n case \"telephone\":\n if (siteConfig.telephoneNumberSort == null)\n break;\n \n let protocol = \"\";\n switch(siteConfig.telephoneNumberSort)\n {\n case \"CallTo\":\n protocol = \"callto\";\n break;\n case \"Dial\":\n protocol = \"dial\";\n break;\n case \"FaceTime\":\n protocol = \"facetime\";\n break;\n case \"Skype\":\n protocol = \"skype\";\n break;\n case \"Tel\":\n protocol = \"tel\";\n break;\n }\n value = `${value}`;\n break;\n case \"email\":\n value = `${value}`;\n break;\n case \"bool\":\n value = value === true ? siteConfig.strings[\"yes\"] : siteConfig.strings[\"no\"];\n break;\n case \"dateTimeFormat\":\n let format = this.getAttr('data-dateTimeFormat') ?? \"\";\n value = new QueryDate(new Date(value)).format(format, false);\n break;\n case \"date\":\n value = new QueryDate(new Date(value)).format(\"dd-mm-yyyy\", false);\n break;\n case \"dateTime\":\n value = new QueryDate(new Date(value)).format(\"dd-mm-yyyy HH:MM:ss\", false);\n break;\n case \"time\":\n value = new QueryDate(new Date(value)).format(\"dd-mm-yyyy HH:MM:ss\", false);\n break;\n case \"image\":\n this.setAttr(\"src\", value);\n return;\n case \"timeSpan\":\n let timeSpan = new TimeSpan(value);\n value = timeSpan.toString();\n break;\n case \"timeSpan-short\":\n let timeSpanShort = new TimeSpan(value);\n value = timeSpanShort.toStringShort();\n break;\n case \"color\":\n let style = this.style();\n if (style && value) {\n style.backgroundColor = value;\n }\n return;\n }\n\n this.setHtml(value);\n }\n }\n}","class SiteElementBindActionButton\n extends QueryElement {\n\n constructor(card: ISiteCard, element: HTMLElement) {\n super(element, false);\n\n var parent = this.parent();\n if (parent == null)\n throw \"Unable to find parent.\";\n\n let actionPath = this.getAttr('data-action');\n let action = card.Model.get((actionPath && SiteModel.split(actionPath)) || []);\n let actionSiteModel = new SiteModel(JSON.parse(JSON.stringify(action)));\n\n let modelPath = this.getAttr('data-path');\n let actionModel = card.Model.get((modelPath && SiteModel.split(modelPath)) || []);\n\n let modelSetPath = this.getAttr('data-set');\n let setPath = (modelSetPath && SiteModel.split(modelSetPath)) || [];\n\n let name: string | undefined;\n let actionNamePath = this.getAttr('data-config');\n if (actionNamePath != null)\n name = card.Model.get((actionNamePath && SiteModel.split(actionNamePath)) || []);\n\n let icon = this.query(\"i\").first()?.getHtml() as Icons ?? undefined;\n\n actionSiteModel.set(setPath, \"self\", actionModel, true);\n let actionButton = actionSiteModel.get([]);\n\n new SiteActionButton(\n card, \n {\n icon: icon,\n title: name,\n action: actionButton,\n isFocusable: false\n },\n document.createElement(\"div\")\n ).appendTo(parent);\n\n this.remove();\n }\n}","class SiteElementBindClass\n extends QueryElement {\n\n constructor(card: ISiteCard, element: HTMLElement) {\n super(element, false);\n\n let path = this.getAttr('data-path');\n let value = card.Model.get((path && SiteModel.split(path)) || []);\n\n if (value !== undefined && value !== null)\n this.addClass(value);\n }\n}","\ndeclare const ChartDataLabels: any;\ndeclare const Chart: any;\n\nChart.defaults.set('plugins.datalabels', {\n color: '#FFFFFF',\n textStrokeColor: '#000000',\n textStrokeWidth: '5'\n});\n\ninterface IChartRequestFilter {\n $type?: string;\n input?: string;\n}\ninterface IChartRequest {\n chart: string;\n filter: IChartRequestFilter;\n}\ninterface IChartResponse {\n data: any;\n}\ninterface IChartInfo {\n name: any;\n type: string;\n options: any;\n filter: IChartRequestFilter;\n chart: string;\n refreshTime: number;\n}\n\n\nclass SiteElementChart\n extends QueryElement {\n\n private _chart: any | undefined;\n private readonly _info: IChartInfo;\n private _refreshTimer: number | null = null;\n private readonly _context: CanvasRenderingContext2D;\n\n constructor(card: ISiteCard, element: HTMLCanvasElement) {\n super(element, true);\n\n var context = element.getContext('2d');\n if (context == null)\n throw \"Cannot get context\";\n \n this._context = context;\n \n let path = this.getAttr('data-path');\n this._info = card.Model.get((path && SiteModel.split(path)) || []) as IChartInfo;\n if (this._info === undefined)\n throw \"Cannot fetch info\";\n \n // Add title to chart\n \n let title = this._info.options.plugins.title;\n if (title)\n title.text = this._info.name[card.Container.SiteConfig.language];\n \n // Create chart\n // BUG FIREFOX: wait 1ms before initializing\n setTimeout(() => this.initialize(), 1);\n }\n\n initialize() {\n this._chart = new Chart(this._context, {\n type: this._info.type,\n options: this._info.options,\n plugins: [ChartDataLabels]\n });\n this.refresh();\n }\n\n async refresh() {\n\n if (this._info.refreshTime > 0) {\n this._refreshTimer = setTimeout(async () => {\n await this.refresh();\n }, this._info.refreshTime * 1000);\n }\n\n let chartRequest: IChartRequest = {\n filter: this._info.filter,\n chart: this._info.chart\n };\n\n let request = new QueryRequest('Api/Chart', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify(chartRequest)\n });\n\n let response = await request.request();\n let chartResponse = await response.json() as IChartResponse;\n\n if (this._chart == null)\n throw \"Chart not initialized.\"\n \n // Update labels\n if (this._chart.data.labels && chartResponse.data.labels) {\n for (let x in chartResponse.data.labels) {\n let source = chartResponse.data.labels[x];\n let target = this._chart.data.labels[x];\n if (target != source)\n this._chart.data.labels[x] = source;\n }\n } else {\n this._chart.data.labels = chartResponse.data.labels;\n }\n\n // Update datasets\n if (this._chart.data.datasets && chartResponse.data.datasets) {\n for (let x in chartResponse.data.datasets) {\n let source = chartResponse.data.datasets[x] as any;\n let target = this._chart.data.datasets[x] as any;\n \n if (!target) {\n this._chart.data.datasets.push(source);\n } else {\n for (let y in source) {\n target[y] = source[y];\n }\n }\n }\n // Delete missing datasets\n this._chart.data.datasets.splice(\n chartResponse.data.datasets.length - 1,\n this._chart.data.datasets.length - chartResponse.data.datasets.length);\n } else {\n this._chart.data.datasets = chartResponse.data.datasets;\n }\n\n this._chart.update();\n }\n\n \n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n if (this._refreshTimer)\n clearTimeout(this._refreshTimer);\n }\n}","class SiteElementChat\n extends QueryElement {\n\n private _card: SiteCard;\n private _messages: SiteElementChatMessages;\n private _input: SiteElementChatInput;\n private _disposeEvent: (e: CustomEvent) => any;\n private _chatId: string;\n\n constructor(\n card: SiteCard,\n model: ISiteModel, \n elem: HTMLElement) {\n\n super(elem);\n\n this._card = card;\n this._messages = new SiteElementChatMessages();\n this._input = new SiteElementChatInput();\n\n var path = this.getAttr(\"data-path\");\n if (path == null)\n throw \"Unable to get path!\";\n\n this._chatId = model.get(SiteModel.split(path));\n\n this._disposeEvent = this._input.on(\"qts.input\", (e: CustomEvent) => {\n this.submit(e.detail);\n })\n\n this._messages.addMessage(new SiteElementChatMessageNotice(\"Welkom ik ben EasyBot, jouw virtuele assistent! Ik ben nog in aanbouw, maar je kunt me alvast wat vragen stellen.\"));\n\n this.append(this._messages);\n this.append(this._input);\n }\n async submit(message: string) {\n this._messages.addMessage(new SiteElementChatMessageUser(message));\n var responseTask = this.requestResponse(message);\n \n await delay(900);\n var waiting = new SiteElementChatMessageAssistant(this, { \n text: \"
\" \n });\n this._messages.addMessage(waiting);\n \n var response = await responseTask;\n waiting.remove();\n\n this._messages.addMessage(new SiteElementChatMessageAssistant(this, response));\n }\n\n getCard() {\n return this._card;\n }\n\n async requestResponse(message: string) {\n let queryRequest = await new QueryRequest(\n \"AI/AI/Submit\",\n {\n contentType: 'json',\n data: JSON.stringify(\n {\n id: this._chatId,\n message: message\n }\n ),\n method: 'post'\n }\n ).request();\n\n return await queryRequest.json() as ISiteElementChatAnswerAssistant;\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n this._input.off(\"input\", this._disposeEvent);\n }\n}\n\nclass SiteElementChatMessages\n extends QueryElement {\n \n constructor() {\n super(document.createElement(\"div\"));\n this.addClass(\"messages\")\n }\n addMessage(element: QueryElement) {\n QueryElement.QueryElement(\"div\")\n .addClass(\"message-container\")\n .append(element)\n .appendTo(this);\n\n element.get()?.scrollIntoView();\n }\n}\n\nclass SiteElementChatMessageNotice\n extends QueryElement {\n\n constructor(text: string) {\n super(document.createElement(\"div\"));\n\n this.addClass(\"notice\");\n\n this.setHtml(text.replace(/\\n/g, '
'));\n }\n}\n\nclass SiteElementChatMessageUser\n extends QueryElement {\n\n constructor(text: string) {\n super(document.createElement(\"div\"));\n\n this.addClass(\"message\");\n this.addClass(\"user\");\n\n this.setHtml(text.replace(/\\n/g, '
'));\n }\n}\n\ntype SiteChatElementChatContentTypes = \"Paragraph\" | \"Button\" | \"ButtonBar\" | \"List\" | \"Definition\";\ntype SiteChatElementChatContentOverflows = \"Top\" | \"Bottom\";\ntype SiteElementChatContentButtonActions = \"CardAction\" | \"SpecialAction\";\ntype SiteElementChatContentButtonSpecialActions = \"UserMessage\";\n\ninterface ISiteElementChatContent {\n type: SiteChatElementChatContentTypes;\n}\ninterface ISiteElementChatContentParagraph\n extends ISiteElementChatContent {\n \n text: string;\n}\n\n\ninterface ISiteElementChatContentButtonAction {\n type: SiteElementChatContentButtonActions;\n}\ninterface ISiteElementChatContentButtonCardAction\n extends ISiteElementChatContentButtonAction {\n action: IActionType;\n}\n\n\ninterface ISiteElementChatContentButtonSpecialAction\n extends ISiteElementChatContentButtonAction {\n specialAction: SiteElementChatContentButtonSpecialActions;\n}\n\ninterface ISiteElementChatContentButtonSpecialActionUserMessage\n extends ISiteElementChatContentButtonSpecialAction {\n \n text: string;\n}\n\ninterface ISiteElementChatContentButton\n extends ISiteElementChatContent {\n \n iconLeft?: Icons;\n iconRight?: Icons;\n content: ISiteElementChatContent;\n action: ISiteElementChatContentButtonAction;\n}\ninterface ISiteElementChatContentButtonBar\n extends ISiteElementChatContent {\n \n buttons: ISiteElementChatContent[];\n}\ninterface ISiteElementChatContentList\n extends ISiteElementChatContent {\n \n list: ISiteElementChatContent[];\n}\ninterface ISiteElementChatContentDefinition\n extends ISiteElementChatContent {\n \n name: string;\n value: string;\n}\ninterface ISiteElementChatAnswerAssistant {\n text: string;\n content?: ISiteElementChatContent[];\n overflows?: SiteChatElementChatContentOverflows[];\n\n}\nclass SiteElementChatMessageAssistant\n extends QueryElement {\n\n constructor(chat: SiteElementChat, answer: ISiteElementChatAnswerAssistant) {\n super(document.createElement(\"div\"));\n\n this.addClass(\"message\");\n this.addClass(\"assistant\");\n\n if (answer.content != null)\n {\n if (answer.overflows?.includes(\"Bottom\"))\n this.addClass(\"overflow-bottom\");\n if (answer.overflows?.includes(\"Top\"))\n this.addClass(\"overflow-top\");\n\n for(var content of answer.content) {\n SiteElementChatMessageAssistant\n .getElement(chat, content)\n ?.appendTo(this);\n }\n }\n else\n {\n this.setHtml(answer.text.replace(/\\n/g, '
'));\n }\n }\n\n static getElement(chat: SiteElementChat, input: ISiteElementChatContent) {\n switch(input.type)\n {\n case \"Paragraph\":\n return new SiteElementChatContentParagraph(input as ISiteElementChatContentParagraph);\n case \"ButtonBar\":\n return new SiteElementChatContentButtonBar(chat, input as ISiteElementChatContentButtonBar);\n case \"Button\":\n return new SiteElementChatContentButton(chat, input as ISiteElementChatContentButton);\n case \"Definition\":\n return new SiteElementChatContentDefinition(input as ISiteElementChatContentDefinition);\n case \"List\":\n return new SiteElementChatContentList(chat, input as ISiteElementChatContentList);\n }\n }\n}\nclass SiteElementChatContentParagraph\n extends QueryElement {\n\n constructor(paragraph: ISiteElementChatContentParagraph) {\n super(document.createElement(\"p\"));\n\n this.setHtml(paragraph.text);\n }\n}\nclass SiteElementChatContentButton\n extends QueryElement {\n\n constructor(chat: SiteElementChat, button: ISiteElementChatContentButton) {\n super(document.createElement(\"div\"));\n\n this.addClass(\"content-button\");\n\n if (button.iconLeft != null)\n QueryElement.QueryElement(\"i\")\n .addClass(\"icon-left\")\n .setText(button.iconLeft)\n .appendTo(this);\n\n SiteElementChatMessageAssistant\n .getElement(chat, button.content)\n ?.appendTo(this);\n \n\n if (button.iconRight != null)\n QueryElement.QueryElement(\"i\")\n .addClass(\"icon-right\")\n .setText(button.iconRight)\n .appendTo(this);\n \n this.on(\"click\", () => {\n switch(button.action.type) {\n case \"CardAction\":\n var cardAction = button.action as ISiteElementChatContentButtonCardAction;\n SiteAction.create(chat.getCard(), cardAction.action)?.execute();\n break;\n case \"SpecialAction\":\n var specialAction = button.action as ISiteElementChatContentButtonSpecialAction;\n switch(specialAction.specialAction)\n {\n case \"UserMessage\":\n var userMessage = specialAction as ISiteElementChatContentButtonSpecialActionUserMessage;\n chat.submit(userMessage.text);\n break;\n }\n\n break;\n }\n })\n }\n}\nclass SiteElementChatContentDefinition\n extends QueryElement {\n\n constructor(definition: ISiteElementChatContentDefinition) {\n super(document.createElement(\"div\"));\n\n this.addClass(\"content-definition\");\n \n QueryElement.QueryElement(\"div\")\n .setHtml(definition.name)\n .appendTo(this);\n QueryElement.QueryElement(\"div\")\n .setHtml(definition.value)\n .appendTo(this);\n }\n}\nclass SiteElementChatContentButtonBar\n extends QueryElement {\n\n constructor(chat: SiteElementChat, bar: ISiteElementChatContentButtonBar) {\n super(document.createElement(\"div\"));\n \n this.addClass(\"content-buttonbar\");\n\n for(var content of bar.buttons) {\n SiteElementChatMessageAssistant\n .getElement(chat, content)\n ?.appendTo(this);\n }\n \n }\n}\nclass SiteElementChatContentList\n extends QueryElement {\n\n constructor(chat: SiteElementChat, list: ISiteElementChatContentList) {\n super(document.createElement(\"div\"));\n \n this.addClass(\"content-list\");\n\n for(var content of list.list) {\n SiteElementChatMessageAssistant\n .getElement(chat, content)\n ?.appendTo(this);\n }\n \n }\n}\n\nclass SiteElementChatInput\n extends QueryElement {\n\n private _input: QueryElement;\n private _submit: QueryElement;\n private _disposeEventSubmit: (e: Event) => any;\n private _disposeEventInput: (e: KeyboardEvent) => any;\n private readonly _maxHeight: number = 80;\n private _disposeEventKeyDown: (e: KeyboardEvent) => any;\n\n constructor() {\n super(document.createElement(\"div\"));\n\n this.addClass(\"input\");\n\n this._input = QueryElement.QueryElement(\"textarea\")\n .setAttr(\"placeholder\", \"Stel hier je vragen...\")\n .appendTo(this);\n this._submit = QueryElement.QueryElement(\"div\")\n .addClass(\"send\")\n .append(QueryElement.QueryElement(\"i\").setText(\"send\"))\n .appendTo(this);\n \n this._disposeEventSubmit = this._submit.on(\"click\", (e) => {\n this.submit();\n });\n this._disposeEventInput = this._input.on(\"input\",(e: KeyboardEvent) => {\n let textarea = this._input.get();\n if (textarea != null) {\n textarea.style.height = \"auto\";\n textarea.style.height = Math.min(textarea.scrollHeight, this._maxHeight) + \"px\";\n }\n });\n this._disposeEventKeyDown = this._input.on(\"keydown\", (e: KeyboardEvent) => {\n switch(e.keyCode) {\n case 13:\n if (!e.shiftKey && !e.ctrlKey) {\n this.submit();\n e.stop();\n }\n break;\n }\n\n\n });\n }\n\n submit() {\n this.trigger(\"qts.input\", false, this._input.getVal());\n this._input.setVal(\"\");\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n this._submit.off(\"click\", this._disposeEventSubmit);\n this._input.off(\"input\", this._disposeEventInput);\n this._input.off(\"keydown\", this._disposeEventKeyDown);\n }\n}","interface ISiteElementHtmlViewConfig {\n actionLink: IActionLink;\n}\n\nclass SiteElementHtmlView\n extends QueryElement {\n \n private _eventRefresh: (e: CustomEvent) => any;\n private _card: SiteCard;\n private _config: ISiteElementHtmlViewConfig;\n\n constructor(\n card: SiteCard,\n elem: HTMLElement) {\n\n super(elem);\n let path = this.getAttr('data-path');\n\n this._card = card;\n this._config = card.Model.get((path && SiteModel.split(path)) || []) as ISiteElementHtmlViewConfig;\n\n this._eventRefresh = card.on(\"qts.refresh\", async (e: CustomEvent) => {\n this.refresh();\n });\n\n this.getView();\n }\n\n async refresh() {\n // TODO: Only refresh when visible (same as search)\n await this.getView();\n }\n\n async getView() {\n let queryRequest = await new QueryRequest(\n SiteAction.toLink(this._config.actionLink.actionInfo),\n this._config.actionLink.model ?\n {\n contentType: 'json',\n data: JSON.stringify(this._config.actionLink.model),\n method: 'post'\n }\n : undefined\n ).request();\n\n this.setHtml(await queryRequest.text());\n }\n \n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n this._card.off(\"qts.refresh\", this._eventRefresh);\n }\n}","class SiteElementImage\n extends QueryElement {\n \n constructor(card: ISiteCard, element: HTMLImageElement) {\n super(element, false);\n\n let path = this.getAttr('data-path');\n let crop = this.getAttr('data-image-crop') == \"True\";\n let dimensions = this.getAttr('data-image-dimensions');\n let fullPath = (path && SiteModel.split(path)) || [];\n\n let value = card.ModelData.get(fullPath.concat(\"info\"));\n\n if (Array.isArray(value) && value.length > 0)\n value = value[0];\n \n if (value != null)\n element.src = ((value.preview || \"\")).replace(\"/$$$x$$$/\", `/${crop ? \"c\" : \"o\"}=${dimensions}/`);\n\n let parent = this.parent();\n if (parent) {\n parent.on(\"click\", (e) => {\n if (e.target == e.currentTarget || e.target == element) {\n if (parent)\n parent.toggleClass('collapsed');\n }\n });\n }\n }\n}","class SiteElementImages\n extends QueryElement {\n\n private _card: ISiteCard;\n \n constructor(card: ISiteCard, element: HTMLElement) {\n super(element, false);\n\n this._card = card;\n\n let images = this.query(\"img\").all(a => a);\n for(let image of images)\n {\n image.addClass(\"image-clickable\");\n image.on(\"click\", () => this.enlarge(image.getAttr(\"src\")));\n }\n }\n\n enlarge(image:string | null)\n {\n if (image == null)\n return;\n \n Site.getSite().showModal(this._card, {\n image: image,\n sort: \"Image\",\n action: {\n image: image,\n text: \"Image\",\n title: \"Image\",\n type: \"ShareImage\"\n } as IActionTypeShareImage\n } as ISiteImageModal)\n }\n}","declare const maplibregl: any;\ndeclare const polyline: any;\n\nclass SiteElementMap extends QueryElement {\n private _cssElement: HTMLElement;\n private _maplibreJSElement: HTMLElement;\n private _polylineJSElement: HTMLElement;\n private _map: any;\n\n\n constructor(card: SiteCard, element: HTMLElement) {\n super(element, false);\n\n // Get the placeholders (for CSS/JS) only once.\n const cssElement = document.getElementById('maplibre-css-placeholder');\n const maplibreJSElement = document.getElementById('maplibre-js-placeholder');\n const polylineJSElement = document.getElementById('polyline-js-placeholder');\n\n if (\n !cssElement ||\n !maplibreJSElement || \n !polylineJSElement\n ) {\n throw \"Error fetching URLs\";\n }\n\n // Save the elements for later use.\n this._cssElement = cssElement;\n this._maplibreJSElement = maplibreJSElement;\n this._polylineJSElement = polylineJSElement;\n\n // Add events\n let cardStarted = card.on(\"qts.started\", (e: CustomEvent) => {\n card.off(\"qts.started\", cardStarted);\n this.initialize();\n });\n }\n\n async initialize() {\n // Load CSS only if it hasn't been loaded yet.\n if (this._cssElement.dataset.href != null && this._cssElement.dataset.loaded !== \"true\") {\n await QueryDocument.loadCSS(this._cssElement.dataset.href);\n this._cssElement.dataset.loaded = \"true\";\n }\n\n // Load maplibre JS only if it hasn't been loaded yet.\n if (this._maplibreJSElement.dataset.src != null && this._maplibreJSElement.dataset.loaded !== \"true\") {\n await QueryDocument.loadScript(this._maplibreJSElement.dataset.src);\n this._maplibreJSElement.dataset.loaded = \"true\";\n }\n\n // Load polyline JS only if it hasn't been loaded yet.\n if (this._polylineJSElement.dataset.src != null && this._polylineJSElement.dataset.loaded !== \"true\") {\n await QueryDocument.loadScript(this._polylineJSElement.dataset.src);\n this._polylineJSElement.dataset.loaded = \"true\";\n }\n\n // Initialize the map after required CSS/JS have loaded.\n this._map = new maplibregl.Map({\n container: this.get(),\n style: 'https://tiles.stadiamaps.com/styles/alidade_smooth.json',\n center: [5.861067, 51.344065],\n zoom: 7\n });\n\n this.trigger(\"qts.initialized\", false);\n }\n\n getMap() {\n return this._map;\n }\n}","interface INavigationItem {\n action: IActionType;\n title: string;\n}\ninterface INavigationCategory {\n order: number;\n category: string;\n items: INavigationItem[]\n}\n\nclass SiteElementNavigation\n extends QueryElement {\n\n constructor(card: SiteCard, element: HTMLElement) {\n super(element, false);\n\n let path = this.getAttr('data-path');\n let value = card.Model.get((path && SiteModel.split(path)) || []) as INavigationCategory[];\n\n // Check if null or undefined\n if (value != null) {\n for (let category of value.sort((a, b) => a.order - b.order)) {\n let container = QueryElement.QueryElement(\"div\");\n let count = 0;\n for (let item of category.items) {\n\n // If action isn't defined, continue\n if (!item.action)\n continue;\n\n count++;\n container.append(new SiteActionButton(card, {\n action: item.action,\n title: item.title,\n isFocusable: true\n }));\n }\n\n if (count > 0) {\n QueryElement.QueryElement(\"div\")\n .addClass(\"heading\")\n .append(QueryElement.QueryElement(\"h3\")\n .setHtml(category.category))\n .appendTo(this);\n\n this.append(container);\n }\n }\n }\n }\n}","interface IProgressInfo {\n id: string;\n refreshTime: number;\n toRefresh: string[];\n}\n\ninterface IProgressRequest {\n id: string;\n}\ninterface IProgressResponse {\n from: number | undefined;\n to: number | undefined;\n state: ProgressStates;\n}\n\ntype ProgressStates = 'Waiting' | 'InProgress' | 'DoneOk' | 'DoneError' ;\n\nclass SiteElementProgress\n extends QueryElement {\n\n private readonly _info: IProgressInfo;\n private readonly _progress: IQueryElement;\n private readonly _text: IQueryElement;\n private readonly _description: IQueryElement;\n\n private _refreshTimer: number | null = null;\n\n\n constructor(card: ISiteCard, element: SVGElement) {\n super(element, true);\n \n let path = this.getAttr('data-path');\n this._info = card.Model.get((path && SiteModel.split(path)) || []) as IProgressInfo;\n if (this._info === undefined)\n throw \"Cannot fetch info\";\n\n let progress = this.query(\".progress-foreground\").first();\n let text = this.query(\".progress-text\").first();\n let description = this.query(\".progress-description\").first();\n \n if (progress == null || text == null || description == null)\n throw \"Not all elements found!\";\n \n this._progress = progress;\n this._text = text;\n this._description = description;\n \n this.refresh();\n }\n\n async refresh() {\n\n if (this._info.refreshTime > 0) {\n this._refreshTimer = setTimeout(async () => {\n await this.refresh();\n }, this._info.refreshTime * 1000);\n }\n \n let progressRequest: IProgressRequest = {\n id: this._info.id\n };\n\n let request = new QueryRequest('Api/Progress', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify(progressRequest)\n });\n\n let response = await request.request();\n let progressResponse = await response.json() as IProgressResponse;\n \n let number = 0;\n if (progressResponse.from != null && progressResponse.to != null)\n {\n number = Math.floor(progressResponse.from / progressResponse.to * 100);\n this._description.setHtml(progressResponse.from + \" / \" + progressResponse.to);\n }\n\n switch(progressResponse.state)\n {\n case \"Waiting\":\n this._progress.setAttr(\"stroke-dasharray\", \"0, 100\");\n this._text.setHtml(\"...\");\n break;\n case \"InProgress\":\n this._progress.setAttr(\"stroke-dasharray\", number + \", 100\");\n this._text.setHtml(number + \"%\");\n break;\n case \"DoneError\":\n this._progress.setAttr(\"stroke-dasharray\", \"100, 100\");\n this._text.setHtml(\"ERROR\");\n this.stop();\n break;\n case \"DoneOk\":\n this._progress.setAttr(\"stroke-dasharray\", \"100, 100\");\n this._text.setHtml(\"100%\");\n this.stop();\n\n if (this._info.toRefresh && this._info.toRefresh.length > 0) {\n Site.getSite().trigger(\n \"qts.observer.change\", \n false, \n new ObserverChangeEvent(undefined, this._info.toRefresh));\n }\n break;\n }\n\n\n }\n\n stop() {\n if (this._refreshTimer)\n clearTimeout(this._refreshTimer);\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n this.stop();\n }\n}","interface IRouteData {\n routes: IRoute[]\n}\ninterface IRouteAddress {\n line1: string;\n line2: string;\n zipCode: string;\n city: string;\n country: string;\n}\ninterface IRoute {\n geometry: string;\n duration: number;\n service: number;\n vehicle: number;\n distance: number;\n steps: IRouteStep[];\n}\ninterface IRouteStep {\n location: number[];\n name: string;\n address: IRouteAddress;\n}\n\nclass SiteElementRoute extends QueryElement {\n private _cssElement: HTMLElement;\n private _maplibreJSElement: HTMLElement;\n private _polylineJSElement: HTMLElement;\n private _map: SiteElementMap;\n private _routeData: IRouteData;\n private _colors: { bg: string, text: string }[] = [\n { bg: 'red', text: 'white' },\n { bg: 'blue', text: 'white' },\n { bg: 'green', text: 'white' },\n { bg: 'orange', text: 'black' },\n { bg: 'purple', text: 'white' },\n { bg: 'cyan', text: 'black' },\n { bg: 'magenta', text: 'white' },\n { bg: 'yellow', text: 'black' },\n { bg: 'lime', text: 'black' },\n { bg: 'pink', text: 'black' },\n { bg: 'teal', text: 'white' },\n { bg: 'brown', text: 'white' },\n { bg: 'black', text: 'white' },\n { bg: 'gray', text: 'black' },\n { bg: 'violet', text: 'black' },\n { bg: 'indigo', text: 'white' },\n { bg: 'gold', text: 'black' },\n { bg: 'silver', text: 'black' },\n { bg: 'maroon', text: 'white' },\n { bg: 'navy', text: 'white' }\n ];\n private _routeTable: IQueryElement;\n\n constructor(card: SiteCard, element: HTMLElement) {\n super(element, false);\n\n // Get the route data from the card model.\n let path = this.getAttr(\"data-path\");\n let route = path && card.Model.get(SiteModel.split(path));\n this._routeData = route;\n\n // Get the placeholders (for CSS/JS) only once.\n const cssElement = document.getElementById('maplibre-css-placeholder');\n const maplibreJSElement = document.getElementById('maplibre-js-placeholder');\n const polylineJSElement = document.getElementById('polyline-js-placeholder');\n\n if (\n !cssElement ||\n !maplibreJSElement || \n !polylineJSElement\n ) {\n throw \"Error fetching URLs\";\n }\n\n // Save the elements for later use.\n this._cssElement = cssElement;\n this._maplibreJSElement = maplibreJSElement;\n this._polylineJSElement = polylineJSElement;\n\n // Find the map container.\n const map = this.query(\".map\").create(a => new SiteElementMap(card, a));\n const routeTable = this.query(\".route-table\").first();\n if (map === null || routeTable === null) {\n throw \"Not all element found\";\n }\n this._map = map;\n this._routeTable = routeTable;\n\n this._map.on(\"qts.initialized\", () => {\n this.setupRoutes(this._map.getMap());\n });\n }\n\n /**\n * Creates map layers and markers for each route,\n * builds a table row for each route and attaches event handlers\n * to zoom to or toggle visibility of the route.\n */\n private setupRoutes(map: any): void {\n const routeLayers: { [key: string]: { markers: any[], visible: boolean } } = {};\n const routeBounds: { [key: string]: any } = {};\n \n const fitRouteBounds = (routeId: string) => {\n const bounds = routeBounds[routeId];\n if (bounds && !bounds.isEmpty()) {\n map.fitBounds(bounds, { padding: 50, animate: true });\n }\n };\n const setupRoutesCallback = () => {\n const globalBounds = new maplibregl.LngLatBounds();\n \n // Declare accumulators for totals.\n let totalVehicles = 0;\n let sumTotalDuration = 0;\n let sumRouteDuration = 0;\n let sumDistance = 0;\n let sumStops = 0;\n \n this._routeData.routes.forEach((route: IRoute, index: number) => {\n totalVehicles++; // Count the route (vehicle)\n const { bg, text } = this._colors[index % this._colors.length];\n const routeId = `route-${index}`;\n const markers: any[] = [];\n const bounds = new maplibregl.LngLatBounds();\n \n if (route.geometry) {\n const decodedPath = polyline\n .decode(route.geometry)\n .map(([lat, lng]: [number, number]) => [lng, lat]);\n \n decodedPath.forEach((coord: number[]) => bounds.extend(coord));\n decodedPath.forEach((coord: number[]) => globalBounds.extend(coord));\n \n map.addLayer({\n id: routeId,\n type: \"line\",\n source: {\n type: \"geojson\",\n data: {\n type: \"Feature\",\n geometry: { type: \"LineString\", coordinates: decodedPath }\n }\n },\n layout: { \"line-join\": \"round\", \"line-cap\": \"round\" },\n paint: { \"line-color\": bg, \"line-width\": 4 }\n });\n }\n \n routeLayers[routeId] = { markers, visible: true };\n routeBounds[routeId] = bounds;\n \n const totalDuration = route.duration + route.service;\n // Update totals for this route.\n sumTotalDuration += totalDuration;\n sumRouteDuration += route.duration;\n sumDistance += route.distance;\n sumStops += route.steps.length;\n \n const row = QueryElement.QueryElement(\"tr\").addClass(\"route-info\");\n row.setHtml(`\n  \n ${route.vehicle}\n ${Math.floor(totalDuration / 3600)}h ${Math.floor(totalDuration / 60) % 60}m\n ${Math.floor(route.duration / 3600)}h ${Math.floor(route.duration / 60) % 60}m\n ${(route.distance / 1000).toFixed(1)} km\n ${route.steps.length} stops\n `);\n this._routeTable.append(row);\n \n // ... (the existing code for adding the route details row remains unchanged) ...\n const detailRow = QueryElement.QueryElement(\"tr\").addClass(\"route-detail\");\n const detailCell = QueryElement.QueryElement(\"td\").setAttr(\"colspan\", \"6\");\n let innerTableHTML = `\n \n \n \n \n \n \n \n \n \n \n \n \n `;\n route.steps.forEach((step: IRouteStep, stepIndex: number) => {\n const [lng, lat] = step.location;\n bounds.extend([lng, lat]);\n globalBounds.extend([lng, lat]);\n \n const el = document.createElement('div');\n el.className = 'marker';\n el.style.backgroundColor = bg;\n el.style.color = text;\n el.innerText = String(stepIndex + 1);\n \n const popupContent = `\n
\n

${step.name}

\n
${step.address.line1}
\n ${step.address.line2 ? `
${step.address.line2}
` : ''}\n
${step.address.zipCode} ${step.address.city}, ${step.address.country}
\n
\n `;\n \n const popup = new maplibregl.Popup({\n closeButton: false,\n closeOnClick: false,\n offset: 25\n }).setHTML(popupContent);\n \n el.addEventListener('mouseenter', () => popup.setLngLat([lng, lat]).addTo(map));\n el.addEventListener('mouseleave', () => popup.remove());\n \n const marker = new maplibregl.Marker({ element: el })\n .setLngLat([lng, lat])\n .addTo(map);\n markers.push(marker);\n \n innerTableHTML += `\n \n \n \n \n \n \n \n \n `;\n });\n innerTableHTML += `\n \n
IdNameLine1ZipCityCountry
${stepIndex + 1}${step.name}${step.address.line1}${step.address.zipCode}${step.address.city}${step.address.country}
\n `;\n detailCell.setHtml(innerTableHTML);\n detailRow.append(detailCell);\n this._routeTable.append(detailRow);\n \n // ... (existing click handlers code) ...\n row.on('click', function () {\n if (row.containsClass('selected')) {\n row.removeClass('selected');\n Object.keys(routeLayers).forEach(otherRouteId => {\n if (map.getLayer(otherRouteId)) {\n map.setPaintProperty(otherRouteId, \"line-width\", 4);\n }\n });\n if (!globalBounds.isEmpty()) {\n map.fitBounds(globalBounds, { padding: 50, animate: true });\n }\n } else {\n row.parent()?.children()?.forEach(r => r.removeClass('selected'));\n row.addClass('selected');\n fitRouteBounds(routeId);\n if (map.getLayer(routeId)) {\n map.moveLayer(routeId);\n map.setPaintProperty(routeId, \"line-width\", 6);\n }\n Object.keys(routeLayers).forEach(otherRouteId => {\n if (otherRouteId !== routeId && map.getLayer(otherRouteId)) {\n map.setPaintProperty(otherRouteId, \"line-width\", 2);\n }\n });\n }\n });\n \n detailRow.query(\".route-step\").all(stepRow => {\n stepRow.on(\"click\", function () {\n const lat = parseFloat(stepRow.getAttr(\"data-lat\") || \"0\");\n const lng = parseFloat(stepRow.getAttr(\"data-lng\") || \"0\");\n \n if (stepRow.containsClass(\"selected\")) {\n stepRow.parent()?.children()?.forEach(r => r.removeClass(\"selected\"));\n fitRouteBounds(routeId);\n } else {\n stepRow.parent()?.children()?.forEach(r => r.removeClass(\"selected\"));\n stepRow.addClass(\"selected\");\n map.flyTo({ center: [lng, lat], zoom: 14 });\n }\n });\n });\n });\n \n // Append a totals row to the route table.\n const totalRow = QueryElement.QueryElement(\"tr\").addClass(\"route-total\");\n totalRow.setHtml(`\n \n ${totalVehicles}\n ${Math.floor(sumTotalDuration / 3600)}h ${Math.floor(sumTotalDuration / 60) % 60}m\n ${Math.floor(sumRouteDuration / 3600)}h ${Math.floor(sumRouteDuration / 60) % 60}m\n ${(sumDistance / 1000).toFixed(1)} km\n ${sumStops} stops\n `);\n this._routeTable.append(totalRow);\n \n if (!globalBounds.isEmpty()) {\n map.fitBounds(globalBounds, { padding: 50, animate: true });\n }\n }; \n \n if (map.loaded()) {\n setupRoutesCallback();\n } else {\n map.on('load', setupRoutesCallback);\n }\n }\n}","interface IQueryInfo {\n query: string;\n idMember?: string;\n orderBy?: string;\n template?: string;\n refreshTime: number;\n disableDoubleClickOnSelect: boolean;\n\n filter?: IQueryRequestFilter;\n filterView?: string;\n}\ninterface IQueryMetaData {\n info: {\n selectAction?: IActionInfo;\n selectMultiAction?: IActionInfo;\n\n filter: any;\n orderBy: any;\n } \n}\ntype SiteElementSearchMode = 'normal' | 'multiselect' | 'edit';\n\nclass SiteElementSearch\n extends QueryElement {\n\n private _eventRefresh: (e: CustomEvent) => any;\n private _eventContainerInactive: (e: Event) => any;\n private _eventContainerActive: (e: Event) => any;\n private _eventResize: (data: CustomEvent) => any;\n\n private _mode: SiteElementSearchMode = 'normal';\n private _multiSelection: ISiteHelperQueryRequestItem[] = [];\n\n private readonly _changedEvent: (data: ISiteModelValueChanged) => void;\n private readonly _statisticsEvent: (data: IQueryResponseStatistics) => Promise;\n private readonly _clickEvent: (data: QueryEventedModel) => Promise;\n private readonly _templateEvent: (data: ISiteHelperQueryTemplate) => Promise;\n\n private readonly _selectButton: SiteButton;\n private readonly _editButton: SiteButton;\n private readonly _saveButton: SiteButton;\n\n private readonly _results: ISiteHelperQuery;\n private readonly _card: SiteCard;\n private readonly _query: IQueryInfo;\n private readonly _queryMetadata: IQueryMetaData;\n private readonly _innerModel: SiteModel;\n\n private readonly _filterPath: string | null;\n private readonly _modelPath: string | null;\n\n constructor(card: SiteCard, elem: HTMLElement) {\n super(elem);\n\n this._card = card;\n let siteConfig = card.SiteConfig;\n\n // Get info\n let path = this.getAttr(\"data-path\");\n\n this._query = path && this._card.Model.get(SiteModel.split(path));\n this._queryMetadata = path && this._card.ModelData.get(SiteModel.split(path));\n\n // Add filters\n this._innerModel = new SiteModel({\n filter: this._query.filter,\n orderBy: this._query.orderBy,\n template: this._query.template\n });\n let modelData = new SiteModel({\n filter: this._queryMetadata.info.filter,\n orderBy: this._queryMetadata.info.orderBy\n });\n\n // Get elements\n let results = this.query(\".results\").create((a : HTMLElement) =>\n new SiteHelperQuery2d(a, this._query, {\n perPage: 25,\n extraBottom: 5,\n extraTop: 5,\n maxRefresh: this._query.refreshTime || 120,\n autoRefresh: true\n })\n );\n let info = this.query(\".header > label > .info\").first();\n let fieldSet = this.query(\".header > .fieldset\").create(a => new SiteHelperCollapsable(a));\n let label = this.query(\".header > label\").create(a => {\n a.setAttribute(\"data-path\", \"filter.input\");\n let inputLabel = new SiteLabelInput(card, this._innerModel, new SiteModel({}), a);\n inputLabel.setConfig({\n setValueTimeout: 250,\n popout: \"none\",\n scroll: \"top\"\n });\n inputLabel.getInput().on(\"keydown\", (e: KeyboardEvent) => {\n switch (e.keyCode) {\n case 13: // ENTER\n let selector = this._results.getSelector();\n selector && this.click(selector);\n break; \n case 38: // KEY UP\n this._results.selectorUp(); \n break;\n case 40: // KEY DOWN\n this._results.selectorDown(); \n break;\n case 17:\n\n }\n });\n inputLabel.init(inputLabel.getInput());\n\n return inputLabel;\n });\n let labelString = this.query(\".header > label > .label\").first();\n \n if (results === null)\n throw \"Missing required elements!\";\n \n // Save some\n this._results = results;\n this._modelPath = this.getAttr(\"data-model-path\");\n this._filterPath = this.getAttr(\"data-filter-path\");\n \n // Add search...\n labelString && labelString.setHtml(siteConfig.strings[\"search...\"]);\n\n // Lock events\n this._changedEvent = this._innerModel.changedEvent.on(async a => {\n if (a.path[0] == \"filter\")\n await this._results.setFilter(this._innerModel.get([\"filter\"]));\n else if (a.path[0] == \"orderBy\")\n await this._results.setOrderBy(this._innerModel.get([\"orderBy\"]));\n else if (a.path[0] == \"template\")\n await this._results.setTemplate(this._innerModel.get([\"template\"]));\n });\n \n this._templateEvent = this._results.templateEvent.on(async a => {\n if (a.type == \"grid\")\n this._card.setSize(\"Large\");\n else\n this._card.setSize();\n })\n this._clickEvent = this._results.clickEvent.on(async a => { await this.click(a.model); });\n this._statisticsEvent = this._results.statisticsEvent.on(async a => {\n info && info.setHtml(`${a.totalResults} ${siteConfig.strings[\"results\"]}`);\n });\n\n // --- Create container\n let container = QueryElement.QueryElement(\"div\")\n .addClass(\"content\");\n \n // -- Create sort / Template\n let sortTemplate = SiteLabelDropdown.getTemplate(\"{name}\", \"
{name}
\", siteConfig.strings[\"sort\"], \"orderBy\", \"DirectCode.Module.Base.Queries.QueryOrderListQuery`1[[\" + this._query.query + \"]], DirectCode.Module.Base\").get();\n let templateTemplate = SiteLabelDropdown.getTemplate(\"{name}\", \"
{name}
\", siteConfig.strings[\"template\"], \"template\", \"DirectCode.Module.Base.Queries.QueryTemplateListQuery`1[[\" + this._query.query + \"]], DirectCode.Module.Base\").get();\n\n let sortFilter = sortTemplate && new SiteLabelDropdown(card, this._innerModel, modelData, sortTemplate);\n let templateFilter = templateTemplate && new SiteLabelDropdown(card, this._innerModel, modelData, templateTemplate);\n\n // -- Create buttons\n let filter = new SiteButton({ title: siteConfig.strings[\"filter\"], icon: \"filter_list\" }, true);\n if (!this._query.filterView) {\n filter.disable();\n } else {\n filter.on(\"click\", async a => {\n let view = await SiteContainer.getCardView(`View/QueryFilter/${this._query.filterView}`);\n let newCard = new SiteCard(card.Container, view, {\n model: new SiteModelInner(this._innerModel, [\"filter\"]),\n observers: [],\n metaData: new SiteModelInner(modelData, [\"filter\"]),\n type: \"Card\",\n options: {\n size: \"Normal\",\n cardItems: []\n },\n view: \"\"\n })\n\n card.Container.removeNextCards(card);\n await card.Container.appendCard(newCard);\n await card.Container.makeCardActive(newCard);\n });\n }\n\n this._saveButton = new SiteButton({ title: siteConfig.strings[\"save\"], icon: \"check\" }, true);\n this._saveButton.on(\"click\", async a => {\n let request: IActionTypeSubmit = {\n type: \"Request\",\n actionLink: {\n actionInfo: \n {\n controller: \"Api\",\n action: \"QuerySave\"\n },\n model: {\n query: this._query.query,\n Template: this._innerModel.get([\"template\"]),\n orderBy: this._innerModel.get([\"orderBy\"])\n }\n },\n setModel: false\n }\n\n if (this._modelPath) {\n request.type = \"Submit\";\n request.path = this._modelPath;\n }\n\n await this._card.request(request);\n });\n\n this._editButton = new SiteButton({ title: siteConfig.strings[\"edit\"], icon: \"edit\" }, true);\n this._editButton.on(\"click\", async a => {\n if (this._results.getMode() == \"edit\")\n {\n this._editButton.setIcon(\"edit\");\n this._results.setMode(\"view\");\n }\n else\n {\n this._editButton.setIcon(\"edit_off\");\n this._results.setMode(\"edit\");\n }\n });\n\n this._selectButton = new SiteButton({ title: siteConfig.strings[\"select all\"], icon: \"select_all\" }, true);\n // Set the select button\n if (this._queryMetadata.info.selectMultiAction == null) {\n this._selectButton.disable();\n } else {\n var clickHandler = new ClickHandler()\n .click(async a => {\n if (this._selectButton.containsClass(\"inactive\")) {\n this.setMode('normal');\n } else {\n this.setMode('multiselect');\n }\n })\n .dblclick(async a => {\n if (!this._query.disableDoubleClickOnSelect)\n await this.selectAll();\n })\n this._selectButton.on(\"click\", async (a : Event) => clickHandler.call(a));\n }\n\n let buttonContainer = QueryElement.QueryElement(\"div\")\n .addClass(\"buttons\")\n .append(filter)\n .append(this._saveButton)\n .append(this._editButton)\n .append(this._selectButton);\n \n // -- Append it all\n if (sortFilter && templateFilter && fieldSet) {\n fieldSet.append(\n container\n .append(sortFilter)\n .append(templateFilter)\n .append(buttonContainer)\n );\n sortFilter.init(sortFilter);\n sortFilter.renderModel({name:this._innerModel.get([\"orderBy\"])});\n templateFilter.init(templateFilter);\n console.log(this._innerModel);\n templateFilter.renderModel({name:this._innerModel.get([\"template\"])});\n }\n\n // Add events\n let cardStarted = card.on(\"qts.started\", (e: CustomEvent) => {\n this._results.start();\n card.off(\"qts.started\", cardStarted);\n });\n this._eventResize = card.on(\"qts.resize\", (e: CustomEvent) => {\n this._results.resize();\n })\n this._eventRefresh = card.on(\"qts.refresh\", async (e: CustomEvent) => {\n if(e.detail instanceof CancellableEvent)\n e.detail.cancelled = true;\n \n await this._results.refresh();\n });\n this._eventContainerActive = this._card.Container.on(\"qts.active\", () => {\n this._results.start();\n });\n this._eventContainerInactive = this._card.Container.on(\"qts.inactive\", () => {\n this._results.stop();\n });\n }\n async selectAll() {\n if (this._mode != 'multiselect')\n return;\n \n for(let item of this._results.getPageItems())\n {\n this.click(item);\n }\n }\n async setMode(mode: SiteElementSearchMode) {\n this._selectButton.removeClass(\"inactive\");\n this._saveButton.removeClass(\"inactive\");\n\n if (this._mode == 'multiselect' && mode != 'multiselect') {\n // Make all selected records unselected\n let ids = [];\n for(let item of this._multiSelection)\n {\n if (item !== undefined) {\n ids.push(item.getResult().id);\n item.makeUnselect();\n } \n }\n this._multiSelection = [];\n\n // Submit it:\n if (this._queryMetadata.info.selectMultiAction) {\n let request: IActionTypeSubmit = {\n type: \"Request\",\n actionLink: {\n actionInfo: this._queryMetadata.info.selectMultiAction,\n },\n setModel: false\n }\n\n if (this._modelPath) {\n let model = this._card.Model.get(SiteModel.split(this._modelPath));\n request.actionLink.model = {\n \"$type\": `DirectCode.Modules.MVC.Models.MultiModel\\`1[[${model[\"$type\"]}]], DirectCode.Session.MVC`,\n ids: ids,\n model: model\n }\n } else {\n request.actionLink.model = {\n \"$type\": `DirectCode.Modules.MVC.Models.MultiModel, DirectCode.Session.MVC`,\n ids: ids\n }\n }\n\n await this._card.request(request);\n } \n\n }\n if (this._mode == 'edit' && mode != 'edit') {\n // Make resultset normal again\n }\n\n if (mode == 'multiselect') {\n this._selectButton.addClass(\"inactive\");\n }\n if (mode == 'edit') {\n this._saveButton.addClass(\"inactive\");\n }\n\n this._mode = mode;\n }\n\n async click(ev: ISiteHelperQueryRequestItem) {\n // Remove all active class\n this._results.query(\".active\").all(a => a.makeInactive());\n this._results.query(\".selector\").all(a => a.makeUnselector());\n \n this._results.makeSelector(ev);\n \n // Request new card\n if (this._mode == 'normal') {\n if (this._queryMetadata.info.selectAction) {\n ev.makeActive();\n\n this._queryMetadata.info.selectAction.id = ev.getResult().id;\n\n let request: IActionTypeSubmit = {\n type: \"Request\",\n actionLink: {\n actionInfo: this._queryMetadata.info.selectAction\n },\n setModel: true\n }\n\n if (this._modelPath) {\n request.type = \"Submit\";\n request.path = this._modelPath;\n }\n\n await this._card.request(request);\n }\n }\n\n if (this._mode == 'multiselect') {\n if (ev.isSelected()) {\n ev.makeUnselect();\n delete this._multiSelection[this._multiSelection.indexOf(ev)];\n } else {\n ev.makeSelect();\n this._multiSelection.push(ev);\n }\n }\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n this._card.off(\"qts.refresh\", this._eventRefresh);\n this._card.off(\"qts.resize\", this._eventResize);\n this._card.Container.off(\"qts.active\", this._eventContainerActive);\n this._card.Container.off(\"qts.inactive\", this._eventContainerInactive);\n this._results.clickEvent.off(this._clickEvent);\n this._results.statisticsEvent.off(this._statisticsEvent);\n this._results.templateEvent.off(this._templateEvent);\n this._innerModel.changedEvent.off(this._changedEvent);\n }\n}","interface ISiteElementTimerConfig {\n action: IActionType;\n time: number;\n}\n\nclass SiteElementTimer\n extends QueryElement {\n \n private _card: ISiteCard;\n private _config: ISiteElementTimerConfig;\n\n constructor(card: ISiteCard, element: HTMLElement) {\n super(element, false);\n\n let path = this.getAttr('data-path');\n\n this._card = card;\n this._config = card.Model.get((path && SiteModel.split(path)) || []) as ISiteElementTimerConfig;\n\n let action = SiteAction.create(this._card, this._config.action);\n window.setTimeout(() => { action && action.execute() }, this._config.time);\n\n this.remove();\n }\n}","interface ISiteElementHtmlViewConfig {\n actionLink: IActionLink;\n}\n\nclass SiteElementViewFile\n extends QueryElement {\n \n private _card: SiteCard;\n private _model: { provider: string, id: any };\n\n constructor(\n card: SiteCard,\n elem: HTMLElement) {\n\n super(elem);\n let path = this.getAttr('data-path');\n\n this._card = card;\n this._model = card.Model.get((path && SiteModel.split(path)) || []);\n\n var test = JSON.stringify(this._model);\n\n QueryElement.QueryElement(\"embed\")\n .setAttr(\"width\", \"100%\")\n .setAttr(\"height\", \"100%\")\n .setAttr(\"type\", \"application/pdf\")\n .setAttr(\"src\", `/Api/FileGet/${btoa(test)}`)\n .appendTo(this);\n }\n \n async remove(removeInner = true) {\n await super.remove(removeInner);\n }\n}","class SiteHelperCollapsable\n extends QueryElement {\n \n constructor(elem: HTMLElement) {\n super(elem);\n\n this.on('mousedown', (e) => {\n if(e.target == e.currentTarget)\n this.toggleClass('collapsed');\n });\n }\n\n expand() {\n this.removeClass('collapsed');\n }\n collapse() {\n this.addClass('collapsed');\n }\n}","type SiteHelperQueryState = 'starting' | 'started' | 'stopped';\n\ninterface IQueryRequestFilter {\n $type?: string;\n input?: string;\n}\ninterface IQueryRequest {\n query: string;\n context: IQueryRequestContext;\n}\ninterface IQuerySaveRequest {\n query: string;\n id: string;\n path: string;\n value: string;\n}\ninterface ISiteHelperQueryConfig {\n perPage: number,\n extraTop: number,\n extraBottom: number,\n maxRefresh: number,\n autoRefresh: boolean\n}\ninterface IQueryRequestContextOptions {\n waitForNonStale?: boolean;\n}\ninterface IQueryRequestContext {\n from: number;\n limit: number;\n\n waitForNonStale?: boolean;\n\n filter: IQueryRequestFilter;\n orderBy?: string;\n}\ninterface IQueryResponseStatistics {\n duration: number;\n lastWrite: number;\n totalResults: number;\n}\ninterface IQueryResponse {\n results: any[];\n statistics: IQueryResponseStatistics;\n}\ninterface ISiteHelperQuery\n extends IQueryElement {\n\n statisticsEvent: IQueryEventAsync;\n templateEvent: IQueryEventAsync;\n clickEvent: IQueryEventAsync>;\n\n resize(): void;\n refresh(): Promise;\n\n selectorUp(): void;\n selectorDown(): void;\n getSelector(): ISiteHelperQueryRequestItem | null;\n makeSelector(selector: ISiteHelperQueryRequestItem): void;\n\n getFilter(): IQueryRequestFilter | undefined;\n setFilter(filter: IQueryRequestFilter): Promise;\n getOrderBy(): string | undefined;\n setOrderBy(orderBy: string): Promise;\n setTemplate(template: string): Promise;\n getTemplate(): string | undefined;\n\n getPageItems(): ISiteHelperQueryRequestItem[];\n\n itemMakeSelect(id: string): void;\n itemMakeUnselect(id: string): void;\n\n getMode(): SiteHelperQuery2dModes;\n setMode(mode: SiteHelperQuery2dModes): void;\n\n start(): void;\n stop(): void;\n}\ninterface ISiteHelperQueryRequest\n extends IQueryElement {\n\n}\ninterface ISiteHelperQueryRequestItem\n extends IQueryElement {\n \n makeActive(): void;\n makeInactive(): void;\n\n makeSelector(): void;\n makeUnselector(): void;\n\n isSelected(): boolean;\n makeSelect(): void;\n makeUnselect(): void;\n\n getResult(): any;\n}\ninterface ISiteHelperQueryTemplate {\n name: string;\n type: SiteHelperQuery2dTypes;\n}\n\nclass SiteHelperQueryInfo2d {\n active?: string;\n selector?: number;\n selected: { [key: string]: SiteHelperQueryRequestItem2d | null }\n = {};\n}\n\n\ntype SiteHelperQuery2dTypes = 'list' | 'grid';\ntype SiteHelperQuery2dModes = 'view' | 'edit';\n\nclass SiteHelperQuery2dTemplate {\n public name: string;\n public type: SiteHelperQuery2dTypes;\n public template: QueryTemplate;\n public width: number;\n public height: number;\n public columns: string | null;\n\n constructor(name: string, type: SiteHelperQuery2dTypes, template: QueryTemplate, columns: string | null, width: number, height: number) {\n this.name = name;\n this.type = type;\n this.template = template;\n this.columns = columns;\n this.width = width;\n this.height = height;\n } \n}\n\nclass SiteHelperQuery2d\n extends QueryElement\n implements ISiteHelperQuery {\n\n private _refreshInterval?: number;\n private _refreshTimeout?: number;\n\n private _mode: SiteHelperQuery2dModes = \"view\";\n private _state: SiteHelperQueryState = \"starting\";\n private _templates: SiteHelperQuery2dTemplate[] = [];\n private _template: SiteHelperQuery2dTemplate \n = new SiteHelperQuery2dTemplate(\"\", \"list\", new QueryTemplate(\"\"), null, 0, 0);\n private _height: number = 0;\n private _width: number = 0;\n private _scrollTop: number = 0;\n\n private readonly _info: SiteHelperQueryInfo2d\n = new SiteHelperQueryInfo2d();\n\n private readonly _query: IQueryInfo;\n private readonly _style: CSSStyleDeclaration;\n private readonly _columns: SiteHelperQueryColumns2d;\n private readonly _container: IQueryElement;\n private readonly _pages: SiteHelperQueryRequest2d[]\n = [];\n private readonly _statisticsEvent: QueryEventAsync\n = new QueryEventAsync();\n private readonly _clickEvent: QueryEventAsync>\n = new QueryEventAsync>();\n private readonly _templateEvent: QueryEventAsync\n = new QueryEventAsync();\n\n private _statistics?: IQueryResponseStatistics;\n\n private readonly _config = {\n perPage: 25,\n extraTop: 5,\n extraBottom: 5,\n\n maxRefresh: 120,\n autoRefresh: false\n };\n\n public get clickEvent() { return this._clickEvent.expose(); }\n public get statisticsEvent() { return this._statisticsEvent.expose(); }\n public get templateEvent() { return this._templateEvent.expose(); }\n\n constructor(\n elem: HTMLElement,\n query: IQueryInfo,\n config?: ISiteHelperQueryConfig) {\n\n super(elem);\n\n if (query === null)\n throw \"Unknown query!\";\n\n if (config !== undefined)\n this._config = config;\n\n this._columns = new SiteHelperQueryColumns2d(this)\n .appendTo(this);\n\n this._container = QueryElement.QueryElement(\"div\")\n .appendTo(this);\n\n this._container.on(\"click\", (e: MouseEvent) => {\n if (this._mode != \"view\")\n return;\n\n let position = this.position();\n let columnPosition = this._columns.position();\n let results = this.get();\n let columns = this.getColumns();\n if (position === null || results === null || columnPosition === null)\n return;\n\n let posY = e.pageY - position.top - columnPosition.height + results.scrollTop;\n let posX = e.pageX - position.left;\n\n let row = Math.floor(posY / this._template.height);\n let column = Math.floor(posX / (this._width / columns));\n let item = ((row * columns) + column);\n\n //console.log(`Item: ${item}; Row: ${row}; Column: ${column}`);\n\n let requester = Math.floor(item / this._config.perPage);\n let itemToGet = item % this._config.perPage;\n\n let resultItem = this._pages[requester].getResultItem(itemToGet);\n\n this._clickEvent.trigger(new QueryEventedModel(resultItem, e));\n });\n\n let style = this._container.style();\n if (style === undefined)\n throw \"Couldn't access style attribute!\";\n\n this._style = style;\n this._query = query;\n\n var f = throttle(() => this.render(), 250);\n this.on(\"scroll\", () => {\n this._scrollTop = this.scrollTop();\n f();\n });\n }\n getMode() {\n return this._mode;\n }\n setMode(mode: SiteHelperQuery2dModes) {\n this.removeClass(`mode-${this._mode}`);\n this._mode = mode;\n this.addClass(`mode-${this._mode}`);\n\n if (this._mode == \"edit\")\n this.stop();\n else\n this.start();\n }\n resize() {\n if (this._state == \"starting\")\n return;\n \n let elem = this.get();\n if (elem === null)\n return 0;\n \n elem.scrollTop = this._scrollTop;\n this._height = elem.clientHeight;\n\n if (this._width != elem.clientWidth) {\n this._width = elem.clientWidth;\n\n var results = this._statistics?.totalResults ?? 0;\n this._style.height = (Math.ceil(results / this.getColumns()) * this._template.height) + \"px\";\n\n this.getPages().forEach((a) => a.resize());\n\n var selector = this.getSelector();\n if (selector != null)\n this.makeSelector(selector);\n \n console.log(`Resize: Width: ${this._width}; Height: ${this._height}`);\n } else {\n console.log(`Resize: Height: ${this._height}`);\n }\n }\n\n start() {\n if (this._state == \"starting\") {\n let firstChild = this.query(\".templates\").first();\n\n if (firstChild === null)\n throw \"No template found!\";\n\n // Get templates\n for (var elem of firstChild.children())\n {\n var templateElement = elem.firstChild()?.get() as HTMLElement;\n var templateElementColumns = \n elem.children().length == 2 ? elem.lastChild()?.get() as HTMLElement : null;\n var templateName = elem.getAttr(\"data-template\") as string;\n var templateType = elem.getAttr(\"data-type\") as SiteHelperQuery2dTypes;\n var templateHeight = templateElement.scrollHeight;\n var templateWidth = templateElement.scrollWidth;\n\n var template = new SiteHelperQuery2dTemplate(\n templateName, \n templateType, \n new QueryTemplate(templateElement.outerHTML),\n templateElementColumns?.outerHTML || null,\n templateWidth,\n templateHeight);\n \n this._templates.push(template);\n }\n \n firstChild.remove();\n\n if (this._templates.length == 0)\n throw \"No templates found!\";\n \n // Select template\n var isMobile = Site.isMobile();\n if (isMobile) {\n this.setTemplate(this._templates.filter(a => a.type == \"list\")[0].name);\n } else if (this._query.template) {\n this.setTemplate(this._query.template);\n } else {\n this.setTemplate(this._templates[0].name);\n }\n\n // Set started\n this._state = \"started\";\n \n this.resize();\n this.render();\n }\n else {\n // Set started\n this._state = \"started\";\n }\n this.checkRefreshTimer();\n }\n stop() {\n this._state = \"stopped\";\n this.clearRefreshTimer();\n }\n private clearRefreshTimer() {\n clearTimeout(this._refreshTimeout);\n }\n private checkRefreshTimer() {\n if (!this._config.autoRefresh \n || this._state != \"started\")\n return;\n\n this._refreshInterval = Math.min(\n Math.max(this._refreshInterval || 0, 5),\n this._config.maxRefresh);\n\n console.log(\"Set a refresh timer to: \" + this._refreshInterval);\n\n this.clearRefreshTimer();\n this._refreshTimeout = setTimeout(async () => {\n await this.refresh();\n }, this._refreshInterval * 1000);\n }\n async refresh() {\n // Need to check for undefined, test of _pages[x] will create a undef value\n for (let page of this._pages.filter(a => a !== undefined)) {\n await page.setExpired();\n if (page.isVisible())\n await page.request({\n waitForNonStale: true\n });\n }\n \n this.checkRefreshTimer();\n }\n\n private request(from: number) {\n if (this._template == null)\n return null;\n \n // Add an elementRequest\n let request = new SiteHelperQueryRequest2d(this, this._template.template, {\n query: this._query.query,\n context: {\n from: from,\n limit: this._config.perPage,\n filter: this._query.filter || {},\n orderBy: this._query.orderBy\n }\n });\n \n // Find first element with top higher than this item\n let elementAfter = this._container.children()\n .filter(a => a.getOrder() > from)\n .first()\n \n // Append to container\n if (elementAfter == null)\n this._container.append(request);\n else\n this._container.insertBefore(request, elementAfter);\n \n return request;\n }\n setStatistics(statistics: IQueryResponseStatistics) {\n this._statistics = statistics;\n this._style.height = (Math.ceil(this._statistics.totalResults / this.getColumns()) * this._template.height) + \"px\";\n\n this._statisticsEvent.trigger(this._statistics);\n\n this._refreshInterval = Math.ceil(this._statistics.lastWrite / 10) * 5;\n\n // This will trigger it again, but will directly update the refreshInterval\n this.checkRefreshTimer();\n }\n getFilter() {\n return this._query.filter;\n }\n async setFilter(filter: IQueryRequestFilter) {\n this._query.filter = filter;\n await this.reloadResults();\n }\n getOrderBy() {\n return this._query.orderBy;\n }\n async setOrderBy(orderBy: string) {\n this._query.orderBy = orderBy;\n await this.reloadResults();\n }\n getTemplate() {\n return this._query.template;\n }\n async setTemplate(name: string) {\n var template = this._templates.filter(a => a.name == name).first();\n if (template != null) {\n this._template = template;\n this.clearPages();\n this._container.setAttr(\"class\", \"\");\n this._container.addClass(template.type);\n this._container.addClass(`template-${template.name}`);\n\n this._columns.setContent(template.columns || \"\");\n this._columns.setAttr(\"class\", \"\");\n this._columns.addClass(template.type);\n this._columns.addClass(`columns-${template.name}`);\n\n this._templateEvent.trigger({\n name: \"\",\n type: template.type\n });\n await this.reloadResults();\n }\n }\n private async reloadResults() {\n if (this._state == \"starting\")\n return;\n\n if (this._state == \"stopped\") {\n this.clearPages();\n } else {\n let request = this.request(0);\n if(request != null) {\n await request.request({});\n this.clearPages();\n this._pages[0] = request;\n this.render();\n }\n }\n }\n\n\n private clearPages() {\n // Scroll to top:\n let elem = this.get();\n if (elem)\n elem.scrollTop = 0;\n\n // Remove pages\n while (this._pages.length) {\n let page = this._pages.pop();\n page && page.remove();\n }\n }\n\n itemMakeSelect(id: string) {\n this._info.selected[id] = null;\n }\n itemMakeUnselect(id: string) {\n let item = this._info.selected[id];\n\n // Null or undefined\n if (item != null)\n item.makeUnselect();\n else\n delete this._info.selected[id];\n }\n getSelector() {\n return this._container.query(\"div:not(.hide) > .selector\").first();\n }\n selectorUp() {\n let prevElement: ISiteHelperQueryRequestItem | null | undefined;\n let element = this.getSelector();\n\n if (element) {\n let parent = element.parent();\n if (parent) {\n let results = parent.getResults();\n let index = parent.getResults().indexOf(element);\n if (index - 1 >= 0) {\n prevElement = results[index - 1];\n }\n else {\n let prevParent = parent.prev();\n if (prevParent) {\n prevElement = prevParent.getResults().last();\n }\n }\n }\n } else {\n let elem = this.get();\n elem && (elem.scrollTop = 0);\n\n prevElement = this._pages[0].getResultItem(0);\n element = prevElement;\n }\n\n if (prevElement != null) {\n element.makeUnselector();\n this.makeSelector(prevElement);\n }\n }\n selectorDown() {\n let nextElement: ISiteHelperQueryRequestItem | null | undefined;\n let element = this.getSelector();\n\n\n if (element) {\n let parent = element.parent();\n if (parent) {\n let results = parent.getResults();\n let index = parent.getResults().indexOf(element);\n if (results.length > index + 1) {\n nextElement = results[index + 1];\n }\n else {\n let nextParent = parent.next();\n if (nextParent) {\n nextElement = nextParent.getResults().first();\n }\n }\n }\n } else {\n let elem = this.get();\n elem && (elem.scrollTop = 0);\n\n nextElement = this._pages[0].getResultItem(0);\n element = nextElement;\n }\n\n if (nextElement != null) {\n element.makeUnselector();\n this.makeSelector(nextElement);\n }\n }\n\n makeSelector(selector: ISiteHelperQueryRequestItem) {\n selector.makeSelector();\n \n let elem = this.get();\n\n let parent = selector.parent();\n if (!elem || !parent)\n return;\n \n let columns = this.getColumns();\n let itemToSelect = parent.getResults()\n .indexOf(selector) + parent.getOrder();\n let itemToSelectPosition = Math.floor(itemToSelect / columns) * this._template.height;\n \n let scrollTop = this.scrollTop();\n var height = elem.clientHeight;\n\n console.log(`ScrollTop: ${scrollTop}; ItemsPosition: ${itemToSelectPosition}; Selected: ${itemToSelect}; Columns: ${columns}; ${height}`)\n\n if (itemToSelectPosition < scrollTop)\n elem.scrollTop = itemToSelectPosition;\n else if (itemToSelectPosition + this._template.height > (scrollTop + height))\n elem.scrollTop = itemToSelectPosition + this._template.height - height;\n }\n\n private getPages() {\n return this._container.children();\n }\n getPageItems() {\n let array : SiteHelperQueryRequestItem2d[] = [];\n for(var page of this.getPages())\n {\n array.push(...page.children());\n }\n return array;\n }\n\n getTemplateWidth() {\n return this._template.width;\n }\n getTemplateHeight() {\n return this._template.height;\n }\n getColumns() : number {\n return Math.floor(this._width / this._template.width) || 1;\n }\n getStatisticsResults() {\n return this._statistics?.totalResults ?? 0;\n }\n\n getInfo() {\n return this._info;\n }\n\n private scrollTop() {\n let elem = this.get();\n if (elem === null)\n return 0;\n\n return elem.scrollTop;\n }\n\n private _displaying: { from: number, to: number } = {\n from: 0,\n to: 0\n };\n private async render() {\n let elem = this.get();\n if (elem === null)\n return;\n \n let scrollTop = this.scrollTop();\n let columns = this.getColumns();\n\n // Calculate what to display:\n let firstRow = (scrollTop / this._template.height) - this._config.extraTop;\n if (firstRow < 0)\n firstRow = 0;\n\n let lastRow = ((scrollTop + this._height) / this._template.height) + this._config.extraBottom;\n if (this._statistics != null)\n {\n let lastCalculatedRow = Math.ceil((this._statistics.totalResults ?? 0) / columns);\n if (lastRow > lastCalculatedRow)\n lastRow = lastCalculatedRow;\n }\n\n let from = Math.floor(firstRow * columns / this._config.perPage);\n let to = Math.ceil(lastRow * columns / this._config.perPage);\n\n //console.log(`${scrollTop}; Columns: ${columns}; Results: ${this._statistics?.totalResults}; FirstRow: ${firstRow}; LastRow: ${lastRow}; FromPage: ${from}; ToPage: ${to}`);\n\n // Hide displaying.from to from\n for (let x = this._displaying.from; x < from; x++) {\n let toHide = this._pages[x];\n if (toHide !== undefined)\n toHide.hide();\n }\n // Hide to to displaying.to\n for (let x = to; x <= this._displaying.to; x++) {\n let toHide = this._pages[x];\n if (toHide !== undefined)\n toHide.hide();\n }\n\n this._displaying = {\n from: from,\n to: to\n };\n\n // Show / get pages\n for (let x = Math.max(from, this._displaying.from); x < Math.min(to, this._displaying.to); x++) {\n let result = this._pages[x];\n if (this._pages[x] === undefined) {\n let request = this.request(x * this._config.perPage);\n if (request != null) {\n this._pages[x] = request;\n await this._pages[x].request({});\n } \n }\n else {\n result.show();\n\n if (result.isExpired())\n await result.request({});\n }\n }\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n this.stop();\n }\n}\n\nclass SiteHelperQueryColumns2d\n extends QueryElement\n implements ISiteHelperQueryRequest {\n\n private readonly _parent: SiteHelperQuery2d;\n private _columns: SiteHelperQueryColumn2d[] = [];\n\n constructor(parent: SiteHelperQuery2d) {\n super(document.createElement(\"div\"));\n this._parent = parent;\n }\n\n setContent(html: string) {\n this.setHtml(html);\n this._columns = this.query(\".sort\").createAll(\n (a) => new SiteHelperQueryColumn2d(a, this)\n );\n }\n setSort(name: string) {\n for(let column of this._columns) {\n column.setSort(name);\n }\n this._parent.setOrderBy(name);\n }\n}\nclass SiteHelperQueryColumn2d\n extends QueryElement\n implements ISiteHelperQueryRequest {\n\n private _active : number = -1;\n private readonly _sorters: string[];\n private readonly _parent: SiteHelperQueryColumns2d;\n\n constructor(element: HTMLElement, parent: SiteHelperQueryColumns2d) {\n super(element);\n\n var sorters = this.getAttr(\"data-sort\");\n if (sorters == null)\n throw \"Sorters not found!\";\n \n this._sorters = sorters.split(\",\");\n this._parent = parent;\n\n this.on(\"click\", () => {\n this._active += 1;\n if (this._active > this._sorters.length)\n this._active = 0;\n\n this._parent.setSort(this._sorters[this._active]);\n });\n }\n setSort(name: string) {\n this._active = this._sorters.indexOf(name);\n\n this.setAttr(\"class\", \"sort\");\n if (this._active > -1) {\n this.addClass(`sort-${this._active}`);\n }\n }\n}\n\nclass SiteHelperQueryRequest2d\n extends QueryElement\n implements ISiteHelperQueryRequest {\n\n private readonly _template: QueryTemplate;\n private readonly _request: IQueryRequest;\n private readonly _parent: SiteHelperQuery2d;\n private _results: ISiteHelperQueryRequestItem[] = [];\n private _expired: boolean;\n private _startSpacer: SiteHelperQueryRequestSpacer2d;\n private _endSpacer: SiteHelperQueryRequestSpacer2d;\n private _style: CSSStyleDeclaration;\n\n constructor(parent: SiteHelperQuery2d, template: QueryTemplate, request: IQueryRequest) {\n super(document.createElement(\"div\"));\n\n let style = this.style();\n if (style === undefined)\n throw \"Unable to get style!\";\n\n this._style = style;\n this._template = template;\n this._request = request;\n this._parent = parent;\n this._expired = false;\n \n this._startSpacer = new SiteHelperQueryRequestSpacer2d(this._parent, \"start\").appendTo(this);\n this._endSpacer = new SiteHelperQueryRequestSpacer2d(this._parent, \"end\").appendTo(this);\n\n this.addClass(\"page\");\n }\n\n resize() {\n let columns = this._parent.getColumns();\n let startSpacer = this._request.context.from % columns;\n \n let contextTo = this._request.context.from + this._request.context.limit;\n if (contextTo > this._parent.getStatisticsResults())\n contextTo = this._parent.getStatisticsResults();\n \n let endSpacer = columns - (contextTo % columns);\n if (endSpacer == columns)\n endSpacer = 0;\n\n this._startSpacer.resize(startSpacer);\n this._endSpacer.resize(endSpacer);\n\n let skipColumns = Math.floor(this._request.context.from / columns);\n this._style.top = `${skipColumns * this._parent.getTemplateHeight()}px`;\n\n //console.log(`Columns: ${columns}; TemplateWidth: ${this._parent.getTemplateWidth()}; Top: ${this._style.top}; StartSpacer: ${startSpacer}; EndSpacer: ${endSpacer}`);\n }\n\n async request(options: IQueryRequestContextOptions) {\n this._expired = false;\n console.log(`Requesting: ${this._request.context.from}`);\n \n // Fill the extra options\n this._request.context.waitForNonStale = options.waitForNonStale;\n\n let request = new QueryRequest('Api/Query', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify(this._request)\n });\n\n let response = await request.request();\n let queryResponse = await response.json() as IQueryResponse;\n\n // Clear the results\n this._results.forEach(a => a.remove());\n this._results = [];\n\n // Fill them\n for (let x = 0; x < queryResponse.results.length; x++) {\n let toAppend = new SiteHelperQueryRequestItem2d(\n this._parent.getInfo(),\n this._template,\n this._request.query,\n this._request.context.from + x,\n queryResponse.results[x]\n );\n this.append(toAppend);\n this._results.push(toAppend);\n }\n this._parent.setStatistics(queryResponse.statistics);\n this.resize();\n }\n getOrder() {\n return this._request.context.from;\n }\n getResults() {\n return this._results;\n }\n getResultItem(index: number) {\n return this._results[index];\n }\n isExpired() {\n return this._expired;\n }\n setExpired() {\n this._expired = true;\n }\n\n isVisible() {\n return !this.containsClass(\"hide\");\n }\n show() {\n this.removeClass(\"hide\");\n }\n hide() {\n this.addClass(\"hide\");\n }\n}\n\nclass SiteHelperQueryRequestItemInput2d\n extends QueryElement {\n\n private _value?: string;\n private readonly _name: string;\n\n constructor(element: HTMLInputElement, query: string, id: string) {\n super(element);\n\n var name = this.getAttr(\"name\");\n if (name == null)\n throw \"Name not found!\";\n\n this._name = name;\n\n this.on(\"focus\", () => {\n this._value = this.getVal();\n this.select();\n })\n this.on(\"blur\", async () => {\n let currentValue = this.getVal();\n if (currentValue != null && currentValue != this._value) {\n let data : IQuerySaveRequest = {\n query: query,\n id: id,\n path: this._name,\n value: currentValue\n }\n\n let request = new QueryRequest('Api/QueryEdit', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify(data)\n });\n await request.request();\n }\n });\n }\n}\n\nclass SiteHelperQueryRequestItem2d\n extends QueryElement\n implements ISiteHelperQueryRequestItem {\n\n private readonly _info: SiteHelperQueryInfo2d;\n private readonly _result: any;\n private readonly _index: number;\n\n constructor(info: SiteHelperQueryInfo2d, template: QueryTemplate, query: string, index: number, result: any) {\n super(document.createElementFromHTML(template.render(result)));\n\n this._result = result;\n this._info = info;\n this._index = index;\n\n this.query(\"input[type='text']\").createAll((a) => new SiteHelperQueryRequestItemInput2d(a, query, result.id as string))\n\n if (this._info.selector == index)\n this.makeSelector();\n if (this._info.active == result.id)\n this.makeActive();\n if (this._info.selected[this._result.id] !== undefined)\n this.makeSelect();\n }\n\n public makeActive() {\n this._info.active = this._result.id;\n this.addClass(\"active\");\n }\n public makeInactive() {\n delete this._info.active;\n this.removeClass(\"active\");\n }\n\n public makeSelector() {\n this._info.selector = this._index;\n this.addClass(\"selector\");\n }\n public makeUnselector() {\n delete this._info.selector;\n this.removeClass(\"selector\");\n }\n\n public isSelected() {\n return this._info.selected[this._result.id] !== undefined;\n }\n public makeSelect() {\n this._info.selected[this._result.id] = this;\n this.addClass(\"selected\");\n }\n public makeUnselect() {\n delete this._info.selected[this._result.id];\n this.removeClass(\"selected\");\n }\n\n public getResult() {\n return this._result;\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n if (this._info.selected[this._result.id] == this)\n this._info.selected[this._result.id] = null;\n }\n}\n\nclass SiteHelperQueryRequestSpacer2d\n extends QueryElement {\n \n private _style: CSSStyleDeclaration;\n private _parent: SiteHelperQuery2d;\n\n constructor(parent: SiteHelperQuery2d, className: string) {\n super(document.createElement(\"div\"));\n this.addClass(\"spacer\");\n this.addClass(className);\n\n let style = this.style();\n if (style === undefined)\n throw \"Unable to get style!\";\n\n this._style = style;\n this._parent = parent;\n }\n\n resize(number: number) {\n this._style.width = `${number * this._parent.getTemplateWidth()}px`;\n this._style.flexGrow = number + \"\";\n }\n}","interface ISalesUnit {\n name: string;\n code: string;\n quantity: number;\n hide: boolean;\n}\ninterface ISiteLabelCalculatorConfig\n extends ISiteLabelConfig {\n \n units: ISalesUnit[];\n minQuantity: number | null;\n maxQuantity: number | null;\n}\ninterface ISiteLabelCalculatorHelper\n{\n setSalesUnits() : void;\n setValue() : void;\n}\n\nclass SiteLabelCalculator\n extends SiteLabel {\n\n private readonly _dependencies: IFilterDepencency[] | null;\n private readonly _changedEvent?: (data: ISiteModelValueChanged) => void;\n private readonly _container: IQueryElement;\n private readonly _input: IQueryElement;\n private readonly _header: IQueryElement;\n private readonly _content: ISiteLabelCalculatorHelper;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n let dependencies = input && input.getAttr(\"data-dependencies\");\n\n if(input === null || dependencies === null)\n throw 'SiteLabelDate: Missing element(s)';\n\n this._input = input;\n this._input.on(\"input\", () => {\n this.onValueChanged();\n });\n\n if(Site.isMobile() && !Site.hasKeyboard() && !card.SiteConfig.settings.includes(\"CalculatorUsePicker\"))\n this._input.setAttr(\"readonly\", \"true\");\n \n let icon = this.getIcon();\n icon && icon.on(\"click\", () => { this.showToggle(); });\n\n let backspace = this.query(\"i.inline.backspace\").first();\n // TODO: Use Press, blocking issue on iPhone\n backspace && backspace.on(\"click\", (e) => { \n this.setValue(null); \n this.onValueChanged(); \n })\n\n this._container = QueryElement.QueryElement('div')\n .addClass(\"calculator\")\n .addClass(\"popout\")\n .addClass(\"popout-\" + this.config.popout);\n\n this._header = QueryElement.QueryElement('div')\n .addClass(\"header\")\n .appendTo(this._container);\n \n if (card.SiteConfig.settings.includes(\"CalculatorUsePicker\")) {\n this._content = new SiteLabelCalculatorPicker(this)\n .appendTo(this._container);\n } else {\n this._content = new SiteLabelCalculatorNumpad(this)\n .appendTo(this._container);\n }\n\n\n this._dependencies = dependencies ? QueryJSON.deserialize>(dependencies) : null;\n if (this._dependencies && this._dependencies.length > 0) {\n // Subscribe for model changes\n this._changedEvent = this.getCard().Model.changedEvent.on(data => {\n // Get first item of path not equalling current path (so we make relative paths form an absolute one)\n for (var x = 0; x < Math.min(data.path.length, this.path.length); x++) {\n if (this.path[x] != data.path[x])\n break;\n }\n // And now join it\n let property = data.path.slice(x).join(\".\");\n\n if (this._dependencies\n && this._dependencies.some(a => a.property == property)\n && data.changer instanceof SiteLabelUnit) {\n \n this.config.units = [];\n\n // Order it from big to small\n data.value.reverse();\n for (let value of data.value)\n {\n let name = data.changer.getModelData()[QueryJSON.toCamelCase(value.salesUnit)];\n\n this.config.units.push({\n quantity: value.quantity,\n name: name,\n code: name[0],\n hide: false\n });\n }\n\n }\n });\n }\n\n this.append(this._container);\n }\n getInput() {\n return this._input;\n }\n preventContinue(e: Event)\n {\n if (this.config.popout != \"always\")\n e.stop(); \n }\n defaultConfig(): ISiteLabelCalculatorConfig {\n return {\n popout: \"normal\",\n units: [],\n minQuantity: null,\n maxQuantity: null,\n scroll: \"top\"\n }\n }\n show() {\n this._container.addClass(\"show\");\n }\n unShow() {\n this._container.removeClass(\"show\");\n }\n showToggle() {\n if (this._container.containsClass(\"show\"))\n this.unShow();\n else\n this.show();\n }\n defaultKeyDownHandler(e: KeyboardEvent) {\n let addKey = \"\";\n switch (e.keyCode) {\n case 117: // F6\n addKey = \"F\"\n break;\n case 118: // F7\n addKey = \"B\"\n break; \n case 119: // F8 \n addKey = \"S\"\n break;\n case 38: // KEY UP \n this.moveUp();\n break;\n case 40: // KEY DOWN \n this.moveDown(); \n break; \n }\n if (addKey) {\n this._input.setVal((this._input.getVal() || \"\") + addKey + \" \");\n this.preventContinue(e);\n }\n\n if (e.keyCode != 9)\n this.show();\n super.defaultKeyDownHandler(e);\n }\n moveUp() {\n var unit = this.getSmallestUnit();\n var newValue = (this.getValue() || 0) + unit;\n\n if (this.config.maxQuantity != null && newValue > this.config.maxQuantity)\n this.setValue(this.config.maxQuantity);\n else\n this.setValue(newValue);\n \n this.onValueChanged();\n }\n moveDown() {\n var value = this.getValue() || 0;\n if (value == 0) {\n if (this.config.maxQuantity != null)\n this.setValue(this.config.maxQuantity);\n } else {\n var unit = this.getSmallestUnit();\n var newValue = (this.getValue() || 0) - unit;\n\n if (newValue < 0)\n this.setValue(0);\n else\n this.setValue(newValue);\n }\n \n this.onValueChanged();\n }\n makeActive() {\n if(super.makeActive()) {\n this.renderHeader();\n this._content.setSalesUnits();\n\n if (!this.getSiteConfig().settings.includes(\"NoAutoPopout\"))\n this.show();\n \n this._input.select();\n\n return true;\n }\n return false;\n }\n makeInactive() {\n super.makeInactive();\n this.unShow();\n }\n renderHeader() {\n let quantity = this.getValue() || 0;\n let text = this.numberToString(quantity, true).join(\", \");\n\n this._header\n .clear()\n .append(QueryElement.QueryElement('div')\n .addClass(\"text\")\n .setHtml(text))\n .append(QueryElement.QueryElement('div')\n .addClass(\"numeric\")\n .setHtml(`${quantity}x`))\n }\n getValue() {\n return this.stringToNumber(this._input.getVal() || \"\") || null;\n }\n setValue(value: number | null) {\n let text = this.numberToString(value || 0, false);\n\n super.setValue(value);\n this._input.setVal(text.join(\" \") + \" \");\n }\n onValueChanged() {\n this.renderHeader();\n this._content.setValue();\n\n super.setValue(this.getValue());\n }\n numberToString (number: number, fullName: boolean = false) {\n let bestUnits = Math.getBest(\n new MathBest(\n number,\n this.getQuantities()\n )\n );\n\n let str = [];\n if (bestUnits.rest != 0)\n str.push(bestUnits.rest.toString());\n \n for(let x in bestUnits.output) {\n let number = bestUnits.output[x];\n if (number == 0)\n continue;\n \n let unit = this.getUnitFromQuantity(Number.parseInt(x));\n str.push(fullName ? `${number} ${unit.name}` : `${number}${unit.code}`);\n }\n\n return str.reverse();\n }\n stringToNumber (string: string) {\n let total = 0;\n let re = /(([\\-0-9]*)[\\s]*([a-z\\/\\*\\+\\.]*))/gi;\n\n let m: RegExpExecArray | null;\n while ((m = re.exec(string)) !== null) {\n if (m.index === re.lastIndex) {\n re.lastIndex++;\n }\n \n if (m[2] || m[3]) {\n let unit = this.getUnitFromCode(m[3]);\n total += unit.quantity * Number.parseInt(!m[2] ? \"1\" : m[2]);\n }\n }\n return total;\n }\n getQuantities() {\n return this.getUnits()\n .map(a => a.quantity)\n .sort((a, b) => b - a)\n }\n getUnits() {\n // Copy the array:\n var units = (this.config.units || []).slice(0);\n\n // Add quantity 1:\n if (!units.some(a => a.quantity == 1))\n units.push({ code: \"x\", name: \"x\", quantity: 1, hide: false });\n \n return units.filter(a => a.quantity > 0);\n }\n private getSmallestUnit() {\n var units = this.getUnits()\n .map(a => a.quantity)\n .filter(a => a > 1)\n .sort((a, b) => a - b);\n \n if (units.length == 0)\n return 1;\n else\n return units[0];\n }\n private getUnitFromCode(unit: string) {\n return this.getUnits().filter(a => a.code.toLowerCase() == unit.toLowerCase())[0] || {\n code: \"\",\n quantity: 1\n };\n }\n private getUnitFromQuantity(quantity: number) {\n return this.getUnits().filter(a => a.quantity == quantity)[0] || {\n code: \"\",\n quantity: 1\n };\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n if(this._changedEvent)\n this.getCard().Model.changedEvent.off(this._changedEvent);\n }\n} \nclass SiteLabelCalculatorPicker\n extends QueryElement\n implements ISiteLabelCalculatorHelper {\n\n private readonly _calculator: SiteLabelCalculator;\n private readonly _maxNumbers: number = 6;\n private _picker: IQueryElement; \n private _buttons: IQueryElement; \n\n constructor(calculator: SiteLabelCalculator) {\n super(document.createElement(\"div\"), true);\n\n this._calculator = calculator;\n this._picker = QueryElement.QueryElement(\"div\").addClass(\"picker\");\n this._buttons = QueryElement.QueryElement(\"div\").addClass(\"buttons\");\n\n if(this._calculator.config.maxQuantity != null) {\n let button = new SiteButton({\n title: \"Restx\" + this._calculator.config.maxQuantity + \"\"\n });\n button.on(\"click\", (e) => {\n this._calculator.setValue(this._calculator.config.maxQuantity);\n this._calculator.onValueChanged();\n this._calculator.getInput().select();\n this._calculator.makeNextActive();\n\n this._calculator.preventContinue(e);\n this.setValue();\n });\n this._buttons.append(button);\n }\n\n let button = new SiteButton({\n title: \"OK\"\n });\n button.on(\"click\", (e) => {\n this._calculator.makeNextActive(true); \n e.stop();\n });\n this._buttons.append(button);\n\n this.addClass(\"content\");\n this.append(this._buttons);\n }\n\n setValue() {\n this.setSalesUnits();\n }\n setSalesUnits() {\n this._picker.remove();\n this._picker = QueryElement.QueryElement(\"div\").addClass(\"picker\");\n \n let bestUnits = Math.getBest(\n new MathBest(\n this._calculator.getValue() || 0,\n this._calculator.getQuantities()\n )\n );\n\n let prevQuantity = 0;\n var units = this._calculator.getUnits()\n .filter(a => a.quantity > 1)\n .sort((a, b) => a.quantity - b.quantity)\n .reverse();\n \n for(let item of units) {\n let maxNumber = 0;\n if (prevQuantity)\n maxNumber = (Math.lcm(item.quantity, prevQuantity) / item.quantity) - 1;\n this.renderUnit(item, bestUnits.output[item.quantity] || 0, maxNumber);\n \n prevQuantity = item.quantity;\n }\n\n this.append(this._picker);\n }\n renderUnit(unit: ISalesUnit, value: number, maxNumber: number) {\n let config = this._calculator.config;\n\n let hasMax = true;\n let minNumber = 0;\n if (config.minQuantity != null)\n minNumber = config.minQuantity / unit.quantity;\n \n if (maxNumber == 0 || \n (\n config.maxQuantity != null &&\n maxNumber * unit.quantity > config.maxQuantity\n )\n ) {\n hasMax = config.maxQuantity != null;\n maxNumber = 0;\n if (config.maxQuantity != null)\n maxNumber = config.maxQuantity / unit.quantity;\n }\n\n let container = QueryElement.QueryElement(\"div\").addClass(\"unit\");\n QueryElement.QueryElement(\"div\")\n .addClass(\"header\")\n .setHtml(`${unit.name}${unit.quantity}x`)\n .appendTo(container);\n \n let startNumber = Math.round(value - ((this._maxNumbers - 1) / 2));\n if (startNumber < minNumber)\n startNumber = minNumber;\n \n if (startNumber < 1)\n startNumber = 1;\n \n let secondMaxNumber = startNumber + this._maxNumbers - 1;\n\n if (!hasMax || maxNumber > secondMaxNumber)\n maxNumber = secondMaxNumber;\n\n this.renderButton(0, value, unit.quantity).appendTo(container);\n for(var x = startNumber; x <= maxNumber; x++)\n {\n this.renderButton(x, value, unit.quantity).appendTo(container);\n }\n \n this._picker.append(container);\n }\n renderButton(value: number, selectedValue: number, quantity: number)\n {\n let button = new SiteButton({\n title: value.toString()\n });\n \n if (value == selectedValue)\n button.addClass(\"selected\");\n \n button.on(\"click\", (e) => {\n let input = this._calculator.getInput();\n let currValue = this._calculator.getValue() || 0;\n input.setVal(`${currValue - (selectedValue * quantity) + (value * quantity)}`);\n this._calculator.onValueChanged();\n input.select();\n \n this._calculator.makeNextActive();\n this._calculator.preventContinue(e);\n });\n\n return button;\n }\n}\n\nclass SiteLabelCalculatorNumpad\n extends QueryElement\n implements ISiteLabelCalculatorHelper {\n \n private readonly _calculator: SiteLabelCalculator;\n private _buttons: IQueryElement | null = null;\n\n constructor(calculator: SiteLabelCalculator) {\n super(document.createElement(\"div\"), true);\n\n this._calculator = calculator;\n \n this.addClass(\"content\");\n this.drawNumbers();\n }\n drawNumbers() {\n let numbers = QueryElement.QueryElement('div')\n .addClass(\"numbers\")\n .appendTo(this);\n \n let numbersToDraw = [\"7\",\"8\",\"9\",\"4\",\"5\",\"6\",\"1\",\"2\",\"3\",\"OK\",\"0\"];\n for (let title of numbersToDraw) {\n let button = new SiteButton({\n title: title\n });\n if(title == \"OK\")\n button.on(\"click\", (e) => { \n this._calculator.makeNextActive(true); \n e.stop();\n });\n else\n button.on(\"click\", (e) => {\n let input = this._calculator.getInput();\n input.setVal(input.getVal() + title);\n this._calculator.onValueChanged();\n\n this._calculator.preventContinue(e);\n });\n numbers.append(button);\n }\n\n let button = new SiteButton({\n title: \"-/-\"\n });\n button.on(\"click\", (e) => {\n let input = this._calculator.getInput();\n input.setVal(input.getVal() + \"-\");\n this._calculator.onValueChanged();\n\n this._calculator.preventContinue(e);\n });\n numbers.append(button);\n }\n setSalesUnits() {\n if(this._buttons !== null)\n this._buttons.remove();\n \n this._buttons = QueryElement.QueryElement('div')\n .addClass(\"buttons\");\n \n for(let item of this._calculator.getUnits()) {\n if (item.quantity <= 0)\n continue;\n\n let button = new SiteButton({\n title: item.name + \"x\" + item.quantity + \"\"\n });\n button.on(\"click\", (e) => {\n var input = this._calculator.getInput();\n input.setVal((input.getVal() || \"\") + item.code + \" \");\n this._calculator.onValueChanged();\n input.select();\n\n this._calculator.makeNextActive();\n this._calculator.preventContinue(e);\n });\n this._buttons.append(button);\n }\n var config = this._calculator.config\n if(this._calculator.config.maxQuantity != null) {\n let button = new SiteButton({\n title: \"Restx\" + this._calculator.config.maxQuantity + \"\"\n });\n button.on(\"click\", (e) => {\n this._calculator.setValue(this._calculator.config.maxQuantity); \n this._calculator.onValueChanged();\n this._calculator.getInput().select();\n\n this._calculator.makeNextActive();\n this._calculator.preventContinue(e);\n });\n this._buttons.append(button);\n }\n\n this.append(this._buttons);\n }\n setValue() {\n\n }\n}\n","interface ISiteLabelCheckboxConfig\n extends ISiteLabelConfig\n{\n isNullable: boolean;\n}\n\nclass SiteLabelCheckbox \n extends SiteLabel {\n\n private _input: IQueryElement;\n private _value: boolean | null;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n let input = this.query(\"input\").first();\n\n if(input === null)\n throw 'SiteLabelInput: Missing element(s)';\n \n this._value = null;\n this._input = input;\n\n this._input.on(\"change\", () => {\n if (this.config.isNullable) {\n if (this._value === null)\n this._value = true;\n else if (this._value === true)\n this._value = false;\n else\n this._value = null;\n } else {\n if (this._value === true)\n this._value = false;\n else\n this._value = true;\n }\n this.setValue(this.getValue());\n });\n }\n getInput() {\n return this._input;\n }\n \n defaultConfig(): ISiteLabelCheckboxConfig {\n return {\n popout: \"normal\",\n isNullable: false,\n scroll: \"top\"\n }\n }\n\n getValue() {\n return this._value;\n }\n setValue(value: boolean | null) {\n let element = this._input.get();\n this._value = value;\n \n if(element instanceof HTMLInputElement) {\n element.indeterminate = false;\n if(this._value == null)\n element.indeterminate = true;\n else if(this._value === true) \n element.checked = true;\n else\n element.checked = false;\n }\n\n super.setValue(this._value);\n }\n} ","interface ICoordinates {\n latitude: number;\n longitude: number;\n}\n\nclass SiteLabelCoordinates \n extends SiteLabel {\n\n private _input: IQueryElement;\n private _timer?: number;\n private _current: ICoordinates | null;\n private _mapComponent: SiteElementMap; // Hold reference to our map component.\n private _marker: any; // Will hold the currently active marker.\n private _isInitialized: boolean;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n let buttons = this.query(\".buttons\").first();\n let mapComponent = this.query(\".results\")\n .create(a => new SiteElementMap(card, a));\n\n if (input === null || mapComponent === null || buttons === null)\n throw 'SiteLabelCoordinates: Missing element(s)';\n\n this._input = input;\n this._mapComponent = mapComponent;\n this._current = null;\n this._isInitialized = false;\n\n // Listen for map initialization and add click handler on the map.\n this._mapComponent.on(\"qts.initialized\", () => {\n this._mapComponent.getMap().on('click', (e: any) => {\n const coords: ICoordinates = {\n latitude: e.lngLat.lat,\n longitude: e.lngLat.lng,\n };\n this.setValue(coords);\n });\n\n this._isInitialized = true;\n this.setValue(this.getValue());\n });\n\n\n // Add mylocation button\n let myLocation = new SiteButton({\n icon: 'my_location',\n title: this.getSiteConfig().strings[\"current location\"]\n }).appendTo(buttons);\n\n if (\"geolocation\" in navigator) {\n myLocation.on(\"click\", (e) => {\n navigator.geolocation.getCurrentPosition(\n (position) => {\n const coords: ICoordinates = {\n latitude: position.coords.latitude,\n longitude: position.coords.longitude,\n };\n this.setValue(coords);\n },\n (error) => {\n console.error(\"Error obtaining geolocation:\", error);\n }\n );\n });\n } else {\n myLocation.disable();\n }\n }\n\n getInput() {\n return this._input;\n }\n\n \n async defaultKeyDownHandler(e: KeyboardEvent) {\n if (e.key === 'Enter') {\n const queryText = this._input.getVal();\n if (!queryText) {\n return;\n }\n\n const url = `/Routing/Api/GetCoordinates?text=${encodeURIComponent(queryText)}`;\n const req = new QueryRequest(url, { method: 'get', useCache: false });\n try {\n const response = await req.request();\n if (response.ok) {\n const coords: ICoordinates = await response.json();\n // Update the value (and marker on the map) using the returned coordinates.\n this.setValue(coords);\n } else {\n console.error(\"Request failed with status\", response.status, response.statusText);\n }\n } catch (error) {\n console.error(\"Error occurred during request:\", error);\n }\n\n return;\n }\n \n super.defaultKeyDownHandler(e);\n }\n\n defaultConfig(): ISiteLabelInputConfig {\n return {\n popout: \"always\",\n setValueTimeout: 0,\n scroll: \"top\"\n };\n }\n\n makeActive() {\n if (super.makeActive()) {\n this._input.select();\n return true;\n }\n return false;\n }\n\n getValue() {\n return this._current;\n }\n \n setValue(value: ICoordinates | null) {\n super.setValue(value);\n this._current = value;\n\n // Remove the existing marker, if one is present.\n if (this._marker) {\n this._marker.remove();\n this._marker = null;\n }\n\n // If new coordinates are provided and the map is initialized, add a new marker.\n if (this._isInitialized && value) {\n this._marker = new maplibregl.Marker()\n .setLngLat([value.longitude, value.latitude])\n .addTo(this._mapComponent.getMap());\n\n // Zoom to the new location.\n this._mapComponent.getMap().flyTo({\n center: [value.longitude, value.latitude],\n zoom: 16\n });\n }\n }\n}","interface Date {\n clone(func: (s: Date) => void): Date;\n equalsYMD(date: Date) : boolean\n}\nDate.prototype.clone = function(func: (s: Date) => void) {\n let date = new Date(this);\n func(date);\n return date;\n};\nDate.prototype.equalsYMD = function(date: Date) {\n return date.getDate() == this.getDate() &&\n date.getMonth() == this.getMonth() &&\n date.getFullYear() == this.getFullYear();\n};\n\ntype SiteLabelDateTimeFormats = 'Date' | 'Time' | 'DateTime';\n\nclass SiteLabelDateTime \n extends SiteLabel {\n\n private _container: IQueryElement;\n private _input: IQueryElement;\n private _header: IQueryElement;\n private _content: IQueryElement;\n private _format: SiteLabelDateTimeFormats;\n\n private _activeDate: Date = new Date(Date.now());\n private _months: string[] = [\"januari\", \"februari\", \"maart\", \"april\", \"mei\", \"juni\", \"juli\", \"augustus\", \"september\", \"oktober\", \"november\", \"december\"];\n private _parser: RegExp = /^([0-9]{1,2}).([0-9]{1,2}).([0-9]{4})((\\s)?([0-9]{1,2}).([0-9]{2}))?/g;\n private _formats = {\n Date: \"dd-mm-yyyy\",\n Time: \"HH:MM\",\n DateTime: \"dd-mm-yyyy HH:MM\"\n };\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n\n if(input === null)\n throw 'SiteLabelDate: Missing element(s)';\n\n this._input = input;\n if(Site.isMobile() && !Site.hasKeyboard())\n this._input.setAttr(\"readonly\", \"true\");\n\n this._format = input.getAttr(\"data-format\") as SiteLabelDateTimeFormats;\n \n let icon = this.getIcon();\n icon && icon.on(\"click\", () => { this.showToggle(); });\n \n this._container = QueryElement.QueryElement('div')\n .addClass(\"datetime\")\n .addClass(\"popout\")\n .addClass(\"popout-\" + this.config.popout);\n \n this._header = QueryElement.QueryElement('div')\n .addClass(\"header\")\n .appendTo(this._container);\n \n this._content = QueryElement.QueryElement('div')\n .addClass(\"content\")\n .appendTo(this._container);\n \n let minYear = new SiteButton({ icon: 'first_page' }, false);\n minYear.on(\"click\", () => this.setMonth(-12));\n let minMonth = new SiteButton({ icon: 'chevron_left' }, false);\n minMonth.on(\"click\", () => this.setMonth(-1));\n let today = new SiteButton({ title: this.getSiteConfig().strings[\"today\"] }, false).addClass(\"today\");\n today.on(\"click\", (e) => { \n this.setDate(new Date(Date.now())); \n e.stop();\n });\n let plusMonth = new SiteButton({ icon: 'chevron_right' }, false);\n plusMonth.on(\"click\", () => this.setMonth(1));\n let plusYear = new SiteButton({ icon: 'last_page' }, false);\n plusYear.on(\"click\", () => this.setMonth(12));\n \n let navigation = QueryElement.QueryElement(\"div\").addClass(\"date-navigation\")\n .append(minYear).append(minMonth).append(today).append(plusMonth).append(plusYear)\n .appendTo(this._content);\n \n\n this.append(this._container);\n }\n getInput() {\n return this._input;\n }\n \n defaultConfig(): ISiteLabelConfig {\n return {\n popout: \"normal\",\n scroll: \"top\"\n }\n }\n show() {\n this._container.addClass(\"show\");\n }\n unShow() {\n this._container.removeClass(\"show\");\n }\n showToggle() {\n if (this._container.containsClass(\"show\"))\n this.unShow();\n else\n this.show();\n }\n\n defaultKeyDownHandler(e: KeyboardEvent) {\n switch (e.keyCode) {\n case 38: // KEY UP \n this.moveUp();\n break;\n case 40: // KEY DOWN \n this.moveDown(); \n break; \n }\n \n //if (e.keyCode != 9)\n // this.show();\n \n super.defaultKeyDownHandler(e);\n }\n\n moveUp() {\n let date = this.getValue();\n if (date != null) {\n date.setDate(date.getDate() + 1);\n this.setValue(date);\n }\n }\n moveDown() {\n let date = this.getValue();\n if (date != null) {\n date.setDate(date.getDate() - 1);\n this.setValue(date);\n }\n }\n\n setMonth(month: number) {\n this._activeDate.setMonth(this._activeDate.getMonth() + month);\n this.renderHeader();\n\n let leftRight = month < 0 ? \"left\" : \"right\";\n \n this._content.query(\".dates:not(.out-left):not(.out-right)\").first(async a => {\n a.removeClass('in-left').removeClass('in-right').addClass(`out-${leftRight}`);\n await delay(200);\n a.remove();\n });\n this.renderMonth().addClass(`in-${leftRight}`).appendTo(this._content);\n }\n setDate(date: Date) {\n this.setValue(date);\n this._input.select();\n this.makeNextActive();\n }\n\n makeActive() {\n if (super.makeActive()) {\n if (!this.getSiteConfig().settings.includes(\"NoAutoPopout\"))\n this.show();\n \n this._input.select();\n return true;\n }\n return false;\n }\n makeInactive() {\n super.makeInactive();\n this.unShow();\n }\n\n renderHeader() {\n this._header\n .setHtml(this._months[this._activeDate.getMonth()] + \" \" + this._activeDate.getFullYear());\n }\n renderMonth() {\n let dates = QueryElement.QueryElement('div')\n .addClass(\"dates\");\n\n let days = ['m', 'd', 'w', 'd', 'v', 'z', 'z'];\n for (let x = 0; x < days.length; x++)\n {\n dates.append(QueryElement.QueryElement('button').addClass(\"header\").setHtml(days[x]));\n }\n\n let selectedDate = this.getValue();\n let firstDayOfMonth = this._activeDate.clone(a => a.setDate(1));\n let extraDays = firstDayOfMonth.clone(a => a.setDate(a.getDate() - 1)).getDay();\n\n for (let x = extraDays * -1; x < 42 - extraDays; x++)\n {\n let currDate = firstDayOfMonth.clone(a => a.setDate(a.getDate() + x));\n\n let button = new SiteButton({\n title: currDate.getDate().toString()\n }, false);\n\n button.on(\"click\", (e) => { \n this.setDate(currDate); \n e.stop();\n });\n\n if(currDate.getMonth() != this._activeDate.getMonth())\n button.addClass('a');\n \n if(selectedDate !== null && selectedDate.equalsYMD(currDate))\n button.addClass('selected');\n \n dates.append(button);\n }\n \n return dates;\n }\n\n getValue() {\n let value = this._input.getVal();\n if(value === undefined)\n return null;\n\n let parser = new RegExp(this._parser);\n\n let parsed = parser.exec(value);\n if(parsed === null || parsed.length === 0)\n return null;\n \n switch (this._format) {\n case 'Date':\n return new Date(Date.UTC(\n Number(parsed[3]),\n Number(parsed[2]) - 1,\n Number(parsed[1])\n ));\n case 'Time':\n case 'DateTime':\n return new Date(\n Number(parsed[3]), \n Number(parsed[2]) - 1, \n Number(parsed[1]),\n Number(parsed[6]),\n Number(parsed[7])\n );\n }\n }\n setValue(value: Date | null) {\n if(value && !(value instanceof Date))\n value = new Date(value as string);\n \n super.setValue(value);\n\n this._activeDate = value || new Date(Date.now());\n\n if (value === null)\n this._input.setVal(\"\");\n else {\n let date = new QueryDate(value);\n switch(this._format) {\n case 'Date':\n this._input.setVal(\n date.format(this._formats[this._format], true)\n );\n break;\n case 'Time':\n case 'DateTime':\n this._input.setVal(\n date.format(this._formats[this._format], false)\n );\n break;\n }\n } \n \n // -- And rerender since value is set:\n this.renderHeader();\n this._content.query(\".dates\").all(a => a.remove());\n this.renderMonth().appendTo(this._content);\n \n // When date is selected we are done:\n this.unShow();\n }\n} ","interface ISiteLabelDecimalConfig\n extends ISiteLabelConfig {\n \n readOnly?: boolean;\n \n minValue?: number;\n maxValue?: number;\n decimals: number;\n showDecimals?: number;\n\n salesUnitProperty?: string;\n\n quantityProperty?: string;\n quantityArray?: {[a:number]: number};\n\n priceProperty?: string;\n originalPriceProperty?: string;\n priceQuantity?: {\n multiplier: number;\n price: number;\n };\n}\n\ninterface ISiteLabelDecimalSalesUnits\n{\n salesUnits: SalesUnit[];\n salesUnitNames: {[key: string]: string}\n}\n\nclass SiteLabelDecimal\n extends SiteLabel {\n\n private _changedPriceEvent?: (data: ISiteModelValueChanged) => void;\n private _changedQuantityEvent?: (data: ISiteModelValueChanged) => void;\n private _changedSalesUnitEvent?: (data: ISiteModelValueChanged) => void;\n private _input: IQueryElement;\n private _container: IQueryElement;\n private _startValue: number | null = null;\n private _salesUnits: ISiteLabelDecimalSalesUnits | null = null;\n private _salesUnit: SalesUnit;\n private static SALESUNIT_DEFAULT : SalesUnit = {\n quantity: 1,\n salesUnit: \"Piece\"\n }\n private _origValue: number | null = null;\n private _percentage: IQueryElement | null;\n private _lastPrice: number | null = null;\n private _originalPrice: number | null = null;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n\n if(input === null)\n throw 'SiteLabelDecimal: Missing element(s)';\n\n this._input = input;\n this._input.setAttr(\"type\", \"number\");\n this._input.setAttr(\"inputmode\", \"decimal\");\n this._input.addClass(\"no-spinner\");\n \n this._percentage = this.query(\".percentage\").first();\n this._salesUnit = SiteLabelDecimal.SALESUNIT_DEFAULT;\n\n // if (Site.isMobile && !Site.hasKeyboard())\n //this._input.setAttr(\"readonly\", \"true\");\n if (this.config.readOnly == true)\n {\n this._input.setAttr(\"readonly\", \"true\");\n this.config.popout = \"none\";\n }\n\n if (this.config.readOnly != true)\n {\n let icon = this.getIcon();\n icon && icon.on(\"click\", () => { this.showToggle(); });\n\n let backspace = this.query(\"i.inline.backspace\").first();\n // TODO: Use Press, blocking issue on iPhone\n backspace && backspace.on(\"click\", (e) => { \n this.setValue(null); \n })\n }\n\n this._container = QueryElement.QueryElement('div')\n .addClass(\"decimal\")\n .addClass(\"popout\")\n .addClass(\"popout-\" + this.config.popout)\n .appendTo(this);\n\n if (this.config.salesUnitProperty !== undefined)\n {\n var salesUnits = this.getCard().Model.get(this.config.salesUnitProperty.split(\".\"));\n var salesUnitInfo = this.getCard().ModelData.get(this.config.salesUnitProperty.split(\".\"));\n\n this._salesUnits = {\n salesUnits: salesUnits,\n salesUnitNames: salesUnitInfo.info\n };\n\n // Add listener\n this._changedSalesUnitEvent = this.getCard().Model.changedEvent.on(data => {\n // Do not change on initialSet\n if (data.initial)\n return;\n let property = data.path.join(\".\");\n if (this.config.salesUnitProperty == property && this._salesUnits != null) {\n this.setSalesUnits(data.value);\n }\n });\n\n if (card.SiteConfig.salesUnitOrder.length > 0) {\n for(var item of card.SiteConfig.salesUnitOrder) {\n let salesUnit = this._salesUnits.salesUnits\n .filter(a => a.salesUnit == item)\n .first();\n \n if (salesUnit != null) {\n this._salesUnit = salesUnit;\n break;\n }\n }\n }\n }\n\n\n\n if (this.config.quantityProperty !== undefined)\n {\n // Add listener\n this._changedQuantityEvent = this.getCard().Model.changedEvent.on(data => {\n // Do not change on initialSet\n if (data.initial)\n return; \n \n // Get first item of path not equalling current path (so we make relative paths form an absolute one)\n for (var x = 0; x < Math.min(data.path.length, this.path.length); x++) {\n if (this.path[x] != data.path[x])\n break;\n }\n // And now join it\n let property = data.path.slice(x).join(\".\");\n if (this.config.quantityProperty == property) {\n this.setValue(\n this.getQuantityClosestValue(\n data.value\n )\n );\n }\n });\n }\n if (this.config.priceProperty !== undefined)\n {\n let absolutePath = [this.path[0]]\n .concat(this.config.priceProperty.split(\".\"));\n this._lastPrice = this.getCard().Model.get(absolutePath);\n\n // Add listener\n this._changedPriceEvent = this.getCard().Model.changedEvent.on(data => {\n // Do not change on initialSet\n if (data.initial)\n return; \n\n // Get first item of path not equalling current path (so we make relative paths form an absolute one)\n for (var x = 0; x < Math.min(data.path.length, this.path.length); x++) {\n if (this.path[x] != data.path[x])\n break;\n }\n // And now join it\n let property = data.path.slice(x).join(\".\");\n if (this.config.priceProperty == property) {\n this._lastPrice = data.value;\n\n this.setValue(\n Number(this.getPriceValue(\n data.value\n ))\n );\n }\n });\n }\n\n if (this.config.originalPriceProperty !== undefined)\n {\n this._originalPrice = this.getCard().Model.get(this.config.originalPriceProperty.split(\".\"));\n }\n }\n init(elem: IQueryElement) {\n super.init(elem);\n this._startValue = this.getValue();\n }\n getInput() {\n return this._input;\n }\n defaultKeyDownHandler(e: KeyboardEvent) {\n switch (e.keyCode) {\n case 38: // KEY UP \n this.moveUp();\n e.stop(); \n break;\n case 40: // KEY DOWN \n this.moveDown(); \n e.stop(); \n break; \n }\n\n //if (e.keyCode != 9)\n // this.show();\n \n super.defaultKeyDownHandler(e);\n }\n show() {\n this._container.addClass(\"show\");\n }\n unShow() {\n this._container.removeClass(\"show\");\n }\n showToggle() {\n if (this._container.containsClass(\"show\"))\n this.unShow();\n else\n this.show();\n }\n\n moveUp() {\n this.setValue(\n (this.getValue() || 0) + ((1 / Math.pow(10, this.config.decimals)) / this._salesUnit.quantity), true);\n }\n moveDown() {\n this.setValue(\n (this.getValue() || 0) - ((1 / Math.pow(10, this.config.decimals)) / this._salesUnit.quantity), true);\n }\n getPriceValue(number: number)\n {\n if (this.config.priceQuantity === undefined)\n throw \"Config.PriceQuantity was not set!\";\n\n return ((number * this.config.priceQuantity.multiplier) + this.config.priceQuantity.price)\n .toFixed(this.config.showDecimals ?? this.config.decimals);\n }\n getQuantityClosestValue(number: number)\n {\n if (this.config.quantityArray) {\n number = Math.abs(number);// On negative switch to positive to get price\n\n for (let [key, value] of Object.entries(this.config.quantityArray).reverse()) {\n let keyNumber = parseInt(key);\n if (number >= keyNumber)\n return value; \n }\n }\n\n return null;\n }\n\n defaultConfig(): ISiteLabelDecimalConfig {\n return {\n popout: \"normal\",\n decimals: 0,\n scroll: \"top\"\n }\n }\n makeActive() {\n if(super.makeActive()) {\n if (!this.getSiteConfig().settings.includes(\"NoAutoPopout\"))\n this.show();\n \n this._input.select();\n \n return true;\n }\n return false;\n }\n makeInactive() {\n super.makeInactive();\n this.unShow();\n }\n setSalesUnits(salesUnits: SalesUnit[]) {\n var val = this._origValue;\n\n let salesUnit = salesUnits\n .filter(a => a.salesUnit == this._salesUnit.salesUnit)\n .first();\n if (salesUnit != null)\n this._salesUnit = salesUnit;\n else\n this._salesUnit = SiteLabelDecimal.SALESUNIT_DEFAULT;\n \n if (this._salesUnits != null)\n this._salesUnits.salesUnits = salesUnits\n \n this.setValue(val, true);\n this.renderNumbers();\n }\n setMultiplier(salesUnit: SalesUnit) {\n var val = this._origValue;\n this._salesUnit = salesUnit;\n this.setValue(val, true);\n this.renderNumbers();\n }\n\n private propertyToSalesUnits(property: string) : SalesUnits\n {\n switch(property) {\n default:\n return \"Piece\";\n case \"trolley\":\n return \"Trolley\";\n case \"layer\":\n return \"Layer\";\n case \"quantity\":\n return \"Quantity\";\n case \"bunch\":\n return \"Bunch\";\n case \"piece\":\n return \"Piece\";\n }\n }\n\n renderNumbers() {\n this._container.clear();\n\n if (this._salesUnits != null) {\n let containerMultiplier = QueryElement.QueryElement(\"div\").addClass(\"multiplier\");\n\n for(let item in this._salesUnits.salesUnitNames) {\n let salesUnit = this._salesUnits.salesUnits.filter(a => a.salesUnit == this.propertyToSalesUnits(item)).first();\n\n if (this.propertyToSalesUnits(item) == \"Piece\")\n {\n salesUnit = SiteLabelDecimal.SALESUNIT_DEFAULT;\n }\n \n let button = new SiteButton({\n title: this._salesUnits.salesUnitNames[item]\n }).appendTo(containerMultiplier);\n\n button.removeClass(\"selected\");\n if (salesUnit != null)\n {\n button.on(\"click\", a => {\n if (salesUnit != null)\n this.setMultiplier(salesUnit)\n })\n button.enable();\n\n if (salesUnit.salesUnit == this._salesUnit.salesUnit)\n {\n button.addClass(\"selected\");\n }\n }\n else\n {\n button.disable();\n }\n }\n this._container.append(containerMultiplier);\n }\n\n let value = (this.getValue() || 0) * this._salesUnit.quantity;\n let container = QueryElement.QueryElement(\"div\").addClass(\"numbers\");\n\n let multiplier = Math.pow(10, this.config.showDecimals ?? this.config.decimals);\n let upper = (Math.pow(10, (this.config.showDecimals ?? this.config.decimals) - this.config.decimals));\n\n let number = Math.round(value * Math.pow(10, this.config.decimals));\n let numberShow = Math.round(value * multiplier);\n\n let difference = numberShow - (number * upper);\n let startNumber = (number - (number + (Math.abs(number) - Math.abs(number) % 5) + 5) % 5) * upper;\n let startValue = (this._startValue || 0) * multiplier;\n\n let fromNumber = Math.max(this.config.minValue || startNumber - (10 * upper), startNumber - (10 * upper)) + difference;\n let toNumber = Math.min(this.config.maxValue || fromNumber + (30 * upper), fromNumber + (30 * upper)) + difference;\n\n for(let x = fromNumber; x < toNumber; x+=upper)\n {\n let currValue = (x / multiplier);\n let button = new SiteButton({\n title: currValue.toFixed(this.config.showDecimals ?? this.config.decimals)\n }).appendTo(container);\n \n button.on(\"click\", (e) => {\n this.setValue(currValue / this._salesUnit.quantity, true); \n this._input.select();\n // If we stay active, rerender buttons:\n if (!this.makeNextActive())\n this.renderNumbers();\n \n e.stop();\n });\n\n if(numberShow === x)\n button.addClass(\"selected\");\n else if(x === startValue)\n button.addClass(\"start\");\n }\n\n this._container.append(container);\n }\n\n getValue() {\n var value = this._input.getVal();\n if (value != null && value !== \"\")\n return Number(value.replace(\",\", \".\")) / this._salesUnit.quantity;\n else\n return null; \n }\n setValue(value: number | null, round: boolean = false) {\n super.setValue(value);\n\n if (this._percentage != null)\n {\n this._percentage.clear();\n if (value != null && value != 0)\n {\n if (this._originalPrice != null)\n {\n let difference = value - this._originalPrice;\n let percentage = (difference / this._originalPrice) * 100;\n \n var element = QueryElement.QueryElement(\"div\");\n element.setHtml(`${percentage.toFixed(1)}%`);\n if (percentage > 0)\n element.addClass(\"ok\");\n else\n element.addClass(\"error\");\n\n this._percentage.append(\n element\n );\n }\n if (this._lastPrice != null)\n {\n let difference = value - this._lastPrice;\n let percentage = (difference / this._lastPrice) * 100;\n \n var element = QueryElement.QueryElement(\"div\");\n element.setHtml(`${percentage.toFixed(1)}%`);\n if (percentage > 0)\n element.addClass(\"ok\");\n else\n element.addClass(\"error\");\n\n this._percentage.append(\n element\n );\n }\n }\n }\n\n this._origValue = value;\n\n if(this._origValue === null) {\n this._input.setVal(\"\");\n }\n else {\n let value = this._origValue * this._salesUnit.quantity;\n this._input.setVal(\n (round \n ? Math.roundPlaces(value, this.config.showDecimals ?? this.config.decimals)\n : value).toString()\n );\n }\n \n this.renderNumbers();\n } \n}","interface IFilterDepencency\n{\n property: string;\n filterProperty: string;\n required: boolean;\n isArray: boolean;\n crossReference: boolean;\n}\ninterface IFilterConfig\n{\n property: string;\n value: any;\n path: string[];\n}\ninterface ISiteLabelDropdownConfig\n extends ISiteLabelConfig {\n \n filters: IFilterConfig[];\n}\n\nclass SiteLabelDropdown \n extends SiteLabel {\n\n private readonly _dependencies: Array | null;\n private readonly _clickEvent?: (data: QueryEventedModel) => Promise;\n private readonly _changedEvent?: (data: ISiteModelValueChanged) => void;\n private readonly _input: IQueryElement;\n private readonly _dropdown: IQueryElement;\n private readonly _buttons: IQueryElement;\n private readonly _valueElement: IQueryElement;\n private readonly _results: ISiteHelperQuery;\n private readonly _valueTemplate: QueryTemplate;\n private readonly _editButton: SiteActionButton;\n private _value: string | null = null;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n let query = input && input.getAttr(\"data-query\") || \"\";\n let queryFilter = input && input.getAttr(\"data-query-filter\");\n let dependencies = input && input.getAttr(\"data-dependencies\");\n \n let dropdown = this.query(\".dropdown\").first();\n let buttons = this.query(\".buttons\").first();\n let value = this.query(\".value\").first();\n let metaData = this.getModelData();\n\n let filter:any = queryFilter && { $type: queryFilter } || {};\n for (let item of this.config.filters)\n {\n filter[item.property] = item.value;\n }\n\n let results = this.query(\".results\").create(a =>\n new SiteHelperQuery2d(a, {\n refreshTime: 0,\n query: query,\n filter: filter,\n disableDoubleClickOnSelect: false\n })\n );\n \n if(input === null || buttons === null || dropdown == null || value === null || results === null)\n throw 'SiteLabelDropdown: Missing element(s)';\n \n let icon = this.getIcon();\n icon && icon.on(\"click\", () => { this.showToggle(); });\n \n this._dropdown = dropdown;\n this._input = input;\n this._input.on(\"input\", () => {\n this.setFilter();\n });\n\n this._dependencies = dependencies ? QueryJSON.deserialize>(dependencies) : null;\n this._buttons = buttons;\n \n let addAction: IActionTypeRequest | null = metaData && metaData.addAction ? {\n type: \"Request\",\n actionLink: {\n actionInfo: metaData.addAction\n }\n } : null;\n let editAction: IActionTypeRequest | null = metaData && metaData.editAction ? {\n type: \"Request\",\n actionLink: {\n actionInfo: metaData.editAction\n }\n } : null;\n\n\n let addButton = new SiteActionButton(card, {\n icon: \"add\",\n title: this.getSiteConfig().strings[\"add\"],\n action: addAction,\n isFocusable: false\n }).appendTo(this._buttons);\n if (addAction === null)\n addButton.disable();\n\n this._editButton = new SiteActionButton(card, {\n icon: \"edit\",\n title: this.getSiteConfig().strings[\"edit\"],\n action: editAction,\n isFocusable: false\n }).appendTo(this._buttons);\n if (editAction === null)\n this._editButton.disable();\n\n let clearButton = new SiteButton({\n icon: \"clear\",\n title: this.getSiteConfig().strings[\"clear\"]\n }).appendTo(this._buttons);\n clearButton.on(\"click\", (e) => {\n this.clearValue(); \n this._input.select();\n e.stop();\n });\n\n this._results = results;\n this._clickEvent = this._results.clickEvent.on(async a => {\n this.click(a.model);\n \n if(this.config.popout != \"always\")\n a.event.stop();\n });\n\n this._valueElement = value;\n\n let firstChild = this._valueElement.firstChild();\n this._valueTemplate = new QueryTemplate(firstChild && firstChild.getHtml() || \"\");\n firstChild && firstChild.remove();\n\n if (metaData !== undefined && metaData.entity !== undefined) {\n this.renderModel(metaData.entity);\n }\n\n if (this._dependencies && this._dependencies.length > 0) {\n // Subscribe for model changes\n this._changedEvent = this.getCard().Model.changedEvent.on(data => {\n // Get first item of path not equalling current path (so we make relative paths form an absolute one)\n for (var x = 0; x < Math.min(data.path.length, this.path.length); x++) {\n if (this.path[x] != data.path[x])\n break;\n }\n // And now join it\n let property = data.path.slice(x).join(\".\");\n if(this._dependencies && this._dependencies.some(a => a.crossReference == false && a.property == property)) {\n this.clearValue();\n }\n\n this.setFilter();\n });\n }\n }\n init(elem: IQueryElement) {\n super.init(elem);\n\n // Set filter (only for first time)\n this.setFilter();\n\n // Set the popout state\n this._dropdown.addClass(\"popout-\" + this.config.popout);\n \n if (this.config.popout == \"always\") {\n let onActive = this.getCard().on(\"qts.active\", () => {\n this._results.start();\n\n this.getCard().off(\"qts.active\", onActive);\n });\n }\n }\n getInput() {\n return this._input;\n }\n\n defaultKeyDownHandler(e: KeyboardEvent) {\n switch (e.keyCode) {\n case 13: // ENTER (stop SUPER)\n let enterSelector = this._results.getSelector();\n enterSelector && this.click(enterSelector);\n return;\n case 8: // Backspace\n if (this._input.getVal() == null || this._input.getVal() == \"\")\n this.clearValue();\n break;\n case 9: // TAB\n let tabSelector = this._results.getSelector();\n tabSelector && this.click(tabSelector);\n break; \n case 38: // KEY UP\n this._results.selectorUp(); \n break;\n case 40: // KEY DOWN\n this._results.selectorDown(); \n break; \n }\n\n if (e.keyCode != 9)\n this.show();\n \n super.defaultKeyDownHandler(e);\n }\n defaultConfig(): ISiteLabelDropdownConfig {\n return {\n popout: \"normal\",\n filters: [],\n scroll: \"top\"\n }\n }\n show() {\n this._results.start();\n this._dropdown.addClass(\"show\");\n }\n unShow() {\n this._dropdown.removeClass(\"show\");\n this.clearInput();\n }\n showToggle() {\n if (this._dropdown.containsClass(\"show\"))\n this.unShow();\n else\n this.show();\n }\n setFilter() {\n if (this._input.getVal())\n this.addClass(\"searching\");\n else\n this.removeClass(\"searching\");\n\n\n let filter:any = this._results.getFilter();\n filter.input = this._input.getVal() || \"\";\n\n // Relative to absolute path, get basePath:\n let basePath = this.path.slice(0, this.path.length - 1);\n\n // Set dependencies\n if (this._dependencies && this._dependencies.length > 0) {\n for (let item of this._dependencies) {\n let newValue = this.getCard().Model.get(\n basePath.concat(SiteModel.split(item.property))\n );\n \n // Check if we've a filter\n if (newValue != null) {\n if (item.isArray) {\n filter[item.filterProperty] = Array.isArray(newValue) ?\n newValue\n : [newValue];\n } else {\n filter[item.filterProperty] = Array.isArray(newValue) ?\n newValue[0]\n : newValue;\n }\n } else {\n delete filter[item.filterProperty];\n } \n \n }\n }\n\n this._results.setFilter(filter);\n }\n makeActive() {\n if (super.makeActive()) {\n if (!this.getSiteConfig().settings.includes(\"NoAutoPopout\"))\n this.show();\n \n this._input.select();\n return true;\n }\n return false;\n }\n makeInactive() {\n super.makeInactive();\n this.removeClass(\"searching\");\n this.unShow();\n }\n\n clearInput() {\n // Clear input (when needed)\n let input = this._input.getVal();\n \n // And set the filter (when there was input)\n if (input) {\n this._input.setVal(\"\");\n this.setFilter();\n }\n }\n\n click(ev: ISiteHelperQueryRequestItem) {\n this.setValueModel(ev.getResult());\n this._input.select();\n this.makeNextActive();\n }\n\n clearValue() {\n this.setValueModel(null);\n }\n getValue() {\n return this._value;\n }\n setValue(value: any) {\n let modelData = this.getModelData() || {};\n\n if (value === null) {\n this._editButton.disable();\n } else {\n if (this._editButton.Action !== null) {\n this._editButton.enable();\n \n if (this._editButton.Action instanceof SiteActionRequest) {\n let id :string;\n if (modelData.isObjectReferenceCopy)\n id = value.referenceId;\n else\n id = value;\n \n this._editButton.Action.getAction().actionLink.actionInfo.id = id;\n }\n } \n }\n\n super.setValue(value);\n this._value = value;\n\n // When item is selected whe are done:\n this.unShow();\n }\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n // Dispose all resources\n if(this._results === undefined)\n return;\n \n if(this._clickEvent)\n this._results.clickEvent.off(this._clickEvent);\n if(this._changedEvent)\n this.getCard().Model.changedEvent.off(this._changedEvent);\n }\n\n renderModel(model: any) {\n this._valueElement.setHtml(\n this._valueTemplate.render(model)\n );\n }\n \n private setValueModel(model: any) {\n let modelData = this.getModelData() || {};\n \n if (model === null) {\n this.setValue(null);\n this._valueElement.setHtml(\"\");\n delete modelData.entity;\n } else {\n if (modelData.isObjectReferenceCopy) {\n let reference: any = {\n referenceId: model.id\n };\n\n this.setValue(reference);\n } else {\n this.setValue(model.id);\n }\n\n this.renderModel(model);\n modelData.entity = model;\n }\n \n this.setModelData(modelData);\n }\n\n static getTemplate(smallTemplate: string, largeTemplate: string, title: string, path: string, query: string) {\n let _ = QueryElement.QueryElement;\n return _(\"label\")\n .setAttr(\"data-path\", path)\n .setAttr(\"data-type\", \"dropdown\")\n .append(_(\"i\").addClass(\"inline\").addClass(\"collapse\").setHtml(\"keyboard_arrow_down\"))\n .append(_(\"div\").addClass(\"value\")\n .append(_(\"span\").setHtml(smallTemplate))\n )\n .append(_(\"input\").setAttr(\"type\", \"text\")\n .setAttr(\"data-query\", query)\n )\n .append(_(\"span\").addClass(\"label\").setHtml(title))\n .append(_(\"div\")\n .addClass(\"dropdown\")\n .addClass(\"popout\")\n .append(_(\"div\").addClass(\"buttons\"))\n .append(_(\"div\").addClass(\"results\")\n .append(_(\"div\").addClass(\"templates\")\n .append(_(\"div\")\n .addClass(\"list\")\n .setAttr(\"data-template\", \"default\")\n .setAttr(\"data-type\", \"list\")\n .setHtml(largeTemplate)))\n )\n )\n }\n}","\nclass SiteLabelDropdownMulti\n extends SiteLabel {\n\n private readonly _dropdown: IQueryElement;\n private readonly _dependencies: Array | null;\n private readonly _clickEvent?: (data: QueryEventedModel) => Promise;\n private readonly _changedEvent?: (data: ISiteModelValueChanged) => void;\n private readonly _input: IQueryElement;\n private readonly _buttons: IQueryElement;\n private readonly _valuesElement: IQueryElement;\n private readonly _valuesTemplate: QueryTemplate;\n private readonly _results: ISiteHelperQuery;\n\n private readonly _isObjectReferenceCopy: boolean;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n let query = input && input.getAttr(\"data-query\") || \"\";\n let queryFilter = input && input.getAttr(\"data-query-filter\");\n let dependencies = input && input.getAttr(\"data-dependencies\");\n\n let dropdown = this.query(\".dropdown\").first();\n let buttons = this.query(\".buttons\").first();\n let values = this.query(\".values\").first();\n let modelValue = this.getModelValue();\n let metaData = this.getModelData();\n\n let filter:any = queryFilter && { $type: queryFilter } || {};\n for (let item of this.config.filters)\n {\n filter[item.property] = item.value;\n }\n let results = this.query(\".results\").create(a =>\n new SiteHelperQuery2d(a, {\n refreshTime: 0,\n query: query,\n filter: filter,\n disableDoubleClickOnSelect: false\n })\n );\n \n if(input === null || values === null || dropdown == null || buttons === null || results === null)\n throw 'SiteLabelDropdownMulti: Missing element(s)';\n \n let icon = this.getIcon();\n icon && icon.on(\"click\", () => { this.showToggle(); });\n \n this._dropdown = dropdown;\n this._input = input;\n this._input.on(\"input\", () => {\n this.setFilter();\n });\n\n\n this._dependencies = dependencies ? QueryJSON.deserialize>(dependencies) : null;\n this._buttons = buttons;\n \n let addAction: IActionTypeRequest | null = metaData && metaData.addAction ? {\n type: \"Request\",\n actionLink: {\n actionInfo: metaData.addAction\n }\n } : null;\n\n let addButton = new SiteActionButton(card, {\n icon: \"add\",\n title: this.getSiteConfig().strings[\"add\"],\n action: addAction,\n isFocusable: false\n }).appendTo(this._buttons);\n if (addAction === null)\n addButton.disable();\n\n let clearButton = new SiteButton({\n icon: \"clear\",\n title: this.getSiteConfig().strings[\"clear\"]\n }).appendTo(this._buttons);\n clearButton.on(\"click\", (e) => {\n this.clearValue(); \n this._input.select();\n e.stop();\n });\n\n this._isObjectReferenceCopy = metaData && metaData.isObjectReferenceCopy;\n this._valuesElement = values;\n this._results = results;\n this._clickEvent = this._results.clickEvent.on(async a => {\n this.click(a.model);\n\n if(this.config.popout != \"always\")\n a.event.stop();\n });\n\n let firstChild = this._valuesElement.firstChild();\n this._valuesTemplate = new QueryTemplate(firstChild && firstChild.getHtml() || \"\");\n firstChild && firstChild.remove();\n\n if (metaData !== undefined && metaData.entity !== undefined) {\n // Copy and clean entity Array\n let copyEntity = metaData.entity.slice();\n metaData.entity = [];\n\n // Add values (to fill metaData again)\n for (let elem of copyEntity) {\n if (elem == null)\n continue;\n \n this.addValueModel(elem);\n this._results.itemMakeSelect(elem.id);\n }\n }\n\n if (this._dependencies && this._dependencies.length > 0) {\n // Subscribe for model changes\n this._changedEvent = this.getCard().Model.changedEvent.on(data => { \n // Get first item of path not equalling current path (so we make relative paths form an absolute one)\n for (var x = 0; x < Math.min(data.path.length, this.path.length); x++) {\n if (this.path[x] != data.path[x])\n break;\n }\n // And now join it\n let property = data.path.slice(x).join(\".\");\n if(this._dependencies && this._dependencies.some(a => a.property == property)) {\n this.clearValue();\n }\n\n this.setFilter();\n });\n }\n }\n init(elem: IQueryElement) {\n super.init(elem);\n\n // Set filter (only for first time)\n this.setFilter();\n\n // Set the popout state\n this._dropdown.addClass(\"popout-\" + this.config.popout);\n\n if (this.config.popout == \"always\") {\n let onActive = this.getCard().on(\"qts.active\", () => {\n this._results.start();\n this.getCard().off(\"qts.active\", onActive);\n });\n } \n }\n\n getInput() {\n return this._input;\n }\n\n defaultKeyDownHandler(e: KeyboardEvent) {\n switch (e.keyCode) {\n case 13: // ENTER (stop SUPER)\n let selector = this._results.getSelector();\n selector && this.click(selector);\n \n // And go to next\n this._results.selectorDown(); \n return;\n case 8: // Backspace\n if (this._input.getVal() == null || this._input.getVal() == \"\") {\n var lastValue = this.query(\".values > div\").last();\n if (lastValue != null)\n lastValue.remove();\n }\n break;\n case 38: // KEY UP\n this._results.selectorUp(); \n break;\n case 40: // KEY DOWN\n this._results.selectorDown(); \n break; \n }\n\n if (e.keyCode != 9)\n this.show();\n \n super.defaultKeyDownHandler(e);\n }\n defaultConfig(): ISiteLabelDropdownConfig {\n return {\n popout: \"normal\",\n filters: [],\n scroll: \"top\"\n }\n }\n show() {\n this._results.start();\n this._dropdown.addClass(\"show\");\n }\n unShow() {\n this._dropdown.removeClass(\"show\");\n }\n showToggle() {\n if (this._dropdown.containsClass(\"show\"))\n this.unShow();\n else\n this.show();\n }\n setFilter() {\n let filter: any = this._results.getFilter();\n filter.input = this._input.getVal() || \"\";\n\n // Set dependencies\n if (this._dependencies !== null) {\n for (let item of this._dependencies) {\n let newValue = this.getCard().Model.get(SiteModel.split(item.property));\n \n // Check if we've a filter\n if (newValue != null) {\n if (item.isArray) {\n filter[item.filterProperty] = Array.isArray(newValue) ?\n newValue\n : [newValue];\n } else {\n filter[item.filterProperty] = Array.isArray(newValue) ?\n newValue[0]\n : newValue;\n }\n } else {\n delete filter[item.filterProperty];\n } \n }\n }\n\n this._results.setFilter(filter);\n }\n\n makeActive() {\n if (super.makeActive()) {\n if (!this.getSiteConfig().settings.includes(\"NoAutoPopout\"))\n this.show();\n\n this._input.select();\n return true;\n }\n return false;\n }\n makeInactive() {\n super.makeInactive();\n\n // Clear input (when needed)\n let input = this._input.getVal();\n \n // And set the filter (when there was input)\n if (input) {\n this._input.setVal(\"\");\n this.setFilter();\n }\n \n this.unShow();\n }\n\n click(ev: ISiteHelperQueryRequestItem) {\n if (!ev.isSelected()) {\n ev.makeSelect();\n this.addValueModel(ev.getResult());\n }\n this._input.select();\n }\n\n makeUnselect(id: string) {\n this._results.itemMakeUnselect(id);\n }\n\n isNotNull(value: string[] | null) {\n return value !== null && value.length > 0;\n }\n\n getValue() {\n let values = this.query(\".values > div\")\n .all(a => {\n return a.id\n });\n\n return values.length > 0 ? values : null;\n }\n setValue(value: string[] | null) {\n super.setValue(value);\n }\n clearValue() {\n // Remove objects\n this.query(\".values > div\").all(a => a.remove());\n }\n private addValueModel(model: any) {\n let id: any;\n if (this._isObjectReferenceCopy) {\n id = {\n referenceId: model.id\n };\n } else {\n id = model.id;\n }\n // Append an item\n new SiteLabelDropdownMultiItem(this, this._valuesTemplate, id, model)\n .appendTo(this._valuesElement);\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n // Dispose all resources\n if(this._results === undefined)\n return;\n \n if(this._clickEvent)\n this._results.clickEvent.off(this._clickEvent);\n if(this._changedEvent)\n this.getCard().Model.changedEvent.off(this._changedEvent);\n }\n}\nclass SiteLabelDropdownMultiItem\n extends QueryElement\n{\n private _id: string;\n private _model: any;\n private _owner: SiteLabelDropdownMulti;\n\n public get id() { return this._id; }\n\n constructor(owner: SiteLabelDropdownMulti, template: QueryTemplate, id: string, model: any) {\n super(document.createElement(\"div\"));\n \n this._id = id;\n this._model = model;\n this._owner = owner;\n\n QueryElement.QueryElement(\"span\")\n .setHtml(template.render(model))\n .appendTo(this);\n QueryElement.QueryElement(\"i\")\n .setHtml(\"close\")\n .appendTo(this);\n \n this.on(\"click\", async () => { await this.remove() });\n\n // Set modelData\n let modelData = this._owner.getModelData() || {};\n if (!modelData.entity)\n modelData.entity = [];\n modelData.entity.push(model);\n this._owner.setModelData(modelData);\n }\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n this._owner.makeUnselect(this._id);\n\n // Remove modelData\n let modelData = this._owner.getModelData() || {};\n let toRemove = modelData.entity.indexOf(this._model);\n if (toRemove > -1)\n modelData.entity.splice(toRemove, 1); \n this._owner.setModelData(modelData);\n }\n}","interface IFidoKey {\n uniqueIdentifier: string;\n}\n\nclass SiteLabelFido\n extends SiteLabel {\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n console.log(model);\n }\n \n getInput() {\n return null;\n }\n\n defaultConfig(): ISiteLabelConfig {\n return {\n popout: 'inline',\n scroll: \"top\"\n }\n }\n\n async register(uniqueIdentifier: string) {\n // -- Request Fido\n let fidoRequest = await new QueryRequest('Api/FidoRegisterRequest', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify({\n uniqueIdentifier: uniqueIdentifier\n })\n }).request();\n let fidoResponse = await fidoRequest.json();\n \n // Convert some properties\n fidoResponse.challenge = Fido.coerceToArrayBuffer(fidoResponse.challenge);\n fidoResponse.user.id = Fido.coerceToArrayBuffer(fidoResponse.user.id);\n fidoResponse.excludeCredentials = fidoResponse.excludeCredentials.map((c:any) => {\n c.id = Fido.coerceToArrayBuffer(c.id);\n return c;\n });\n if (fidoResponse.authenticatorSelection.authenticatorAttachment === null) \n fidoResponse.authenticatorSelection.authenticatorAttachment = undefined;\n \n // -- Do credential create\n let newCredential : PublicKeyCredential;\n let newCredentialResponse : AuthenticatorAttestationResponse;\n try {\n newCredential = (await navigator.credentials.create({\n publicKey: fidoResponse\n }) as PublicKeyCredential) ?? throwExpression(\"No credentials fetched.\");\n\n newCredentialResponse = newCredential.response as AuthenticatorAttestationResponse \n ?? throwExpression(\"Wrong response.\");\n } catch (e) {\n console.error(e);\n this.setValue({\n uniqueIdentifier: uniqueIdentifier\n });\n this.error();\n return;\n }\n \n // -- Register to server\n let registerData = {\n id: newCredential.id,\n rawId: Fido.coerceToBase64Url(new Uint8Array(newCredential.rawId)),\n type: newCredential.type,\n extensions: newCredential.getClientExtensionResults(),\n response: {\n attestationObject: Fido.coerceToBase64Url(new Uint8Array(newCredentialResponse.attestationObject)),\n clientDataJson: Fido.coerceToBase64Url(new Uint8Array(newCredentialResponse.clientDataJSON))\n }\n };\n\n let registerRequest = await new QueryRequest('Api/FidoRegister', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify({\n uniqueIdentifier: uniqueIdentifier,\n response: registerData\n })\n }).request();\n switch(registerRequest.status)\n {\n case 200:\n this.setValue(await registerRequest.json() as IFidoKey);\n this.success();\n break;\n default:\n this.error();\n break;\n }\n }\n\n error() {\n this.addClass(\"error\")\n .removeClass(\"ok\");\n }\n success() {\n this.addClass(\"ok\")\n .removeClass(\"error\");\n }\n\n\n makeActive() {\n super.makeActive();\n\n var model = this.getModelValue();\n if (model == null)\n throw \"No modelvalue recieved\";\n\n this.register(model.uniqueIdentifier);\n\n return true;\n }\n\n getValue() {\n var model = this.getModelValue();\n if (model == null)\n throw \"No modelvalue recieved\";\n \n return model;\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n }\n}","interface ISiteLabelInputConfig\n extends ISiteLabelConfig {\n popout: SiteLabelPopout;\n setValueTimeout: number;\n}\n\nclass SiteLabelInput \n extends SiteLabel {\n\n private _input: IQueryElement;\n private _timer?: number;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input, textarea\").first();\n\n if(input === null)\n throw 'SiteLabelInput: Missing element(s)';\n\n this._input = input;\n\n this.setConfig(this.config);\n }\n\n getInput() {\n return this._input;\n }\n\n setConfig(config: ISiteLabelInputConfig) {\n if (config.setValueTimeout !== 0) {\n this._input.on(\"keyup\", e => {\n if (this._timer)\n window.clearTimeout(this._timer);\n\n this._timer = window.setTimeout(() => this.setValue(this.getValue()), config.setValueTimeout);\n })\n }\n }\n\n defaultConfig(): ISiteLabelInputConfig {\n return {\n popout: \"normal\",\n setValueTimeout: 0,\n scroll: \"top\"\n }\n }\n\n makeActive() {\n if(super.makeActive()) {\n this._input.select();\n return true;\n }\n return false;\n }\n\n getValue() {\n let value = this._input.getVal();\n return !value ? null : value;\n }\n setValue(value: string | null) {\n super.setValue(value);\n this._input.setVal(value);\n }\n} ","class SiteLabelInputLanguage\n extends SiteLabel {\n\n private readonly _input: IQueryElement;\n private readonly _container: IQueryElement;\n private _selectedLanguage: Languages;\n private _value: LanguageValues | null = null;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input, textarea\").first();\n if(input === null)\n throw \"Missing element.\";\n\n this._input = input;\n\n this._container = QueryElement.QueryElement('div')\n .addClass(\"languages\")\n .addClass(\"popout\")\n .addClass(\"popout-\" + this.config.popout)\n .addClass(\"show\");\n \n let config = this.getCard().SiteConfig;\n this._selectedLanguage = config.language;\n\n this.append(this._container);\n }\n \n getInput() {\n return this._input;\n }\n\n defaultConfig(): ISiteLabelConfig {\n return {\n popout: \"normal\",\n scroll: \"top\"\n }\n }\n setLanguage(language:Languages) {\n this.makeInactive();\n \n this._selectedLanguage = language;\n\n this._container.clear();\n this.makeActive();\n this.setValue(this._value);\n }\n drawLanguages() {\n let config = this.getCard().SiteConfig;\n for(let x in config.languageNames)\n {\n let language = x as Languages;\n\n let title = config.languageNames[language] as string;\n let button = new SiteButton({\n title: title\n })\n .appendTo(this._container);\n button.on(\"click\", (e) => {\n this.setLanguage(language)\n e.stop();\n });\n\n if(x == this._selectedLanguage)\n button.addClass(\"active\");\n }\n }\n makeActive() {\n if(super.makeActive()) {\n this.drawLanguages();\n this._input.select();\n return true;\n }\n return false;\n }\n makeInactive() {\n if(this._value === null)\n this._value = {};\n\n let inputValue = this._input.getVal();\n if (inputValue == null || inputValue == \"\")\n delete this._value[this._selectedLanguage];\n else\n this._value[this._selectedLanguage] = inputValue;\n\n super.makeInactive();\n this._container.clear();\n }\n setValue(value: LanguageValues | null) {\n this._value = value;\n if(value === null) {\n super.setValue(this._value);\n return this._input.setVal(null);\n }\n \n let fetchValue = value[this._selectedLanguage];\n this._input.setVal(fetchValue || \"\");\n super.setValue(this._value);\n }\n getValue(): LanguageValues | null {\n return this._value;\n }\n async remove(removeInner = true) {\n await super.remove(removeInner);\n }\n}","class SiteLabelMarkdown \n extends SiteLabel {\n\n private _input: IQueryElement;\n private _easyMDE: any;\n private _siteCard: SiteCard;\n private _labelUpload?: SiteLabelUpload;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"textarea\").first();\n\n if(input === null)\n throw 'SiteLabelMarkdown: Missing element(s)';\n \n this._input = input;\n this._siteCard = card;\n\n this._easyMDE = new EasyMDE({\n element: input.get(),\n spellChecker: false,\n //forceSync: true,\n autoDownloadFontAwesome: false,\n previewClass: \"markdown-preview\",\n status: false,\n previewImagesInEditor: true,\n uploadImage: true,\n imagesPreviewHandler: (src:string) => this.imageSrcGet(src),\n imageUploadFunction: (\n file: File,\n onSuccess: (imageUrl: string) => void,\n onError: (errorMessage: string) => void\n ) => this.imageUploadFunction(file, onSuccess, onError)\n })\n\n }\n\n init(input?: IQueryElement) {\n let value = this.getModelValue();\n this._easyMDE.value(value);\n\n var attachments = this._input.getAttr(\"data-attachments\");\n if (attachments != null) {\n this._labelUpload = this._siteCard.getLabel(QueryJSON.toCamelCase(attachments)) as SiteLabelUpload;\n }\n }\n\n imageSrcGet(src: string) {\n if (this._labelUpload == null)\n throw \"No labelUpload set.\";\n \n switch(this._labelUpload.getProvider())\n {\n case \"attachment\":\n return `${window.location.origin}/Api/FileAttachmentGet/${src}`;\n case \"image\":\n return `${window.location.origin}/Api/FileImageGet/${src}`;\n }\n }\n\n async imageUploadFunction(\n file: File,\n onSuccess: (imageUrl: string) => void,\n onError: (errorMessage: string) => void\n ) {\n if (this._labelUpload == null)\n return onError(\"No labelUpload set..\");\n \n var upload = await this._labelUpload.addFile(new QueryUploadFileUpload(file));\n if (upload.state == \"succeeded\") {\n onSuccess(upload.id.objectName.split(\"/\")[1]);\n } else {\n onError(\"Upload failed!\");\n }\n }\n\n getInput() {\n return this._input;\n }\n makeActive() {\n if(super.makeActive()) {\n this._easyMDE.codemirror.focus();\n return true;\n }\n return false;\n }\n makeInactive() {\n super.makeInactive();\n }\n defaultConfig(): ISiteLabelConfig {\n return {\n popout: \"normal\",\n scroll: \"top\"\n }\n }\n\n getValue() {\n let value = this._easyMDE.value();\n return !value ? null : value;\n }\n setValue(value: string | null) {\n super.setValue(value);\n this._input.setVal(value);\n }\n} ","type SiteLabelSignatureProgress = 'succeeded' | 'inprogress' | 'failed';\n\ninterface ISiteLabelSignaturePosition {\n xPosition: number;\n yPosition: number;\n}\n\nclass SiteLabelSignature\n extends SiteLabel {\n\n private readonly _container: IQueryElement;\n private readonly _provider: string;\n private readonly _global: string;\n private readonly _input: IQueryElement;\n private readonly _canvas: SiteLabelSignatureCanvas;\n private readonly _context: CanvasRenderingContext2D;\n\n private _isChanged: boolean = false;\n private _value: string | null = null;\n private _drawing: boolean = false;\n private _oldPosition?: ISiteLabelSignaturePosition;\n private _newPosition?: ISiteLabelSignaturePosition;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n let provider = input && input.getAttr(\"data-provider\");\n let global = input && input.getAttr(\"data-global\");\n let modelValue = this.getModelValue();\n let metaData = this.getModelData();\n\n if (input === null || provider === null || global === null)\n throw \"Couldn't find the input element.\";\n\n this._provider = provider;\n this._global = global;\n\n this._input = input;\n \n // Disable upload\n this.on(\"click\", (e) => {\n e.stop();\n });\n\n // Create view\n var signature = QueryElement.QueryElement(\"div\")\n .addClass(\"signature\");\n \n this._container = QueryElement.QueryElement(\"div\")\n .addClass(\"container\")\n .appendTo(signature);\n\n this._canvas = new SiteLabelSignatureCanvas()\n .appendTo(this._container);\n this._canvas.on(\"pointerdown\", (e) => this.start(e));\n this._canvas.on(\"pointermove\", (e) => this.move(e));\n this._canvas.on(\"pointerup\", (e) => this.stop(e));\n\n var context = this._canvas.get2DContext();\n if (context == null)\n throw \"Unable to get context\";\n \n this._context = context;\n this._context.strokeStyle = \"#000000\";\n this._context.lineWidth = 1;\n\n var buttons = QueryElement.QueryElement(\"div\")\n .addClass(\"buttons\")\n .appendTo(signature);\n \n new SiteActionButton(card, {\n icon: \"backspace\",\n isFocusable: false\n })\n .appendTo(buttons)\n .on(\"click\", () => {\n this.clearCanvas();\n });\n\n new SiteActionButton(card, {\n icon: \"done\",\n isFocusable: false\n })\n .appendTo(buttons)\n .on(\"click\", () => {\n this.makeInactive();\n });\n\n this.append(signature);\n }\n init(elem: IQueryElement) {\n super.init(elem);\n let onActive = this.getCard().on(\"qts.active\", () => {\n // Set canvas after appending\n var positionContainer = this._container.position();\n \n if (positionContainer == null)\n throw \"Cannot get position of container.\";\n\n this._canvas.setAttr(\"height\", `${positionContainer.height}px`);\n this._canvas.setAttr(\"width\", `${positionContainer.width}px`);\n this._context.fillStyle = \"#FFFFFF\";\n this._context.fillRect(0, 0, positionContainer.width, positionContainer.height);\n\n this.getCard().off(\"qts.active\", onActive);\n });\n\n }\n\n start(e: Event) {\n this._drawing = true;\n this._newPosition = this._oldPosition = this.getPosition(e);\n this.drawLoop();\n }\n move(e: Event) {\n if (this._drawing)\n this._newPosition = this.getPosition(e);\n }\n stop(e: Event) {\n this._drawing = false;\n this.clearValue();\n this._isChanged = true;\n }\n\n drawLoop() {\n if (this._drawing) {\n window.requestAnimationFrame(() => this.drawLoop());\n this.draw();\n }\n }\n draw() {\n if (this._oldPosition == null || this._newPosition == null)\n return;\n \n this._context.beginPath();\n this._context.moveTo(this._oldPosition.xPosition, this._oldPosition.yPosition);\n this._context.lineTo(this._newPosition.xPosition, this._newPosition.yPosition);\n this._context.stroke();\n\n this._oldPosition = this._newPosition;\n }\n clearCanvas() {\n var positionContainer = this._container.position();\n \n if (positionContainer == null)\n throw \"Cannot get position of container.\";\n\n this._context.clearRect(0, 0, positionContainer.width, positionContainer.height);\n this._context.fillStyle = \"#FFFFFF\";\n this._context.fillRect(0, 0, positionContainer.width, positionContainer.height);\n\n this.clearValue();\n }\n\n getPosition(e: Event) : ISiteLabelSignaturePosition | undefined {\n let position: ISiteLabelSignaturePosition | undefined;\n let elementPosition = this._canvas.position();\n\n if (elementPosition == null)\n return undefined;\n\n if (e instanceof PointerEvent) {\n position = {\n xPosition: e.clientX - elementPosition.left,\n yPosition: e.clientY - elementPosition.top\n };\n }\n\n return position;\n }\n \n getInput() {\n return this._input;\n }\n defaultConfig(): ISiteLabelConfig {\n return {\n popout: 'inline',\n scroll: \"top\"\n }\n }\n async upload() {\n if (!this._isChanged)\n return;\n \n var blob = await this._canvas.getBlob();\n if (blob == null)\n return null;\n \n var file = new File([blob], \"signature.jpg\", {\n lastModified: new Date().getTime()\n });\n\n var fileUpload = await new QueryUploadFileUpload(file).upload(\n {\n provider: this._provider,\n global: this._global\n }\n );\n\n if (fileUpload == null)\n return null;\n \n this._value = fileUpload.id;\n this._isChanged = false;\n }\n clearValue() {\n this._value = null;\n this.setValue(this._value);\n }\n getValue() {\n return this._value;\n }\n setValue(value: string | null) {\n super.setValue(value);\n }\n async makeInactive() {\n await this.upload();\n super.makeInactive();\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n }\n}\n\nclass SiteLabelSignatureCanvas\n extends QueryElement {\n\n constructor() {\n super(document.createElement(\"CANVAS\") as HTMLCanvasElement);\n }\n async getBlob() : Promise {\n return new Promise((resolve, reject) => {\n \n var element = this.get();\n if (element == null)\n return reject();\n \n element.toBlob(\n (blob) => resolve(blob), \n 'image/jpeg', \n 0.95\n );\n });\n }\n get2DContext() {\n var element = this.get();\n if (element == null)\n return null;\n \n return element.getContext(\"2d\");\n }\n}","interface SalesUnit {\n salesUnit: SalesUnits;\n quantity: number;\n}\n\nclass SiteLabelUnit\n extends SiteLabel, ISiteLabelConfig> {\n\n private readonly _innerModel: ISiteModel;\n private readonly _changedEvent: (data: ISiteModelValueChanged) => void;\n private readonly _sorts : SalesUnits[] = [\"Piece\", \"Bunch\", \"Quantity\", \"Layer\", \"Trolley\"];\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let container = this.query(\"div[data-type='unit']\").first>();\n if (container === null)\n throw \"Container not found.\"\n \n container.addClass(\"unit\");\n\n let salesUnits: { [event: string]: number } = {};\n let value = this.getModelValue();\n value && value.forEach((value, key) => {\n salesUnits[value.salesUnit] = value.quantity;\n });\n\n this._innerModel = new SiteModel(salesUnits);\n let innerModelData = new SiteModel({});\n\n this._sorts.forEach((value, key) => {\n let name = this.getModelData()[QueryJSON.toCamelCase(value)];\n\n let template = QueryElement.QueryElement(\"label\")\n .setAttr(\"data-path\", value)\n .setAttr(\"data-config\", JSON.stringify({ popout: \"none\", decimals: 0 }))\n .append(QueryElement.QueryElement(\"input\").setAttr(\"type\", \"text\"))\n .append(QueryElement.QueryElement(\"span\").addClass(\"label\").setHtml(name))\n .get();\n\n if (template === null)\n return;\n\n let decimalElement = new SiteLabelDecimal(card, this._innerModel, innerModelData, template);\n decimalElement.init(decimalElement.getInput());\n container && container.append(decimalElement);\n });\n\n this._changedEvent = this._innerModel.changedEvent.on(data => {\n this.setValue(this.getValue());\n });\n this.off(\"click\", null);\n }\n getInput() {\n return null;\n }\n makeActive() {\n if (super.makeActive()) {\n this.makeNextActive();\n }\n return false;\n }\n makeInactive() {\n super.makeInactive();\n }\n defaultConfig(): ISiteLabelConfig {\n return {\n popout: \"normal\",\n scroll: \"top\"\n };\n }\n getValue() {\n let toReturn : Array = [];\n for (let sort of this._sorts) {\n let item = this._innerModel.get([sort]);\n\n if(item > 0)\n toReturn.push({\n quantity: item,\n salesUnit: sort\n });\n }\n return toReturn;\n }\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n this._innerModel.changedEvent.off(this._changedEvent);\n }\n}","interface IFileIdentifier {\n\n}\ntype SiteLabelUploadFileProgress = 'succeeded' | 'inprogress' | 'failed';\n\nclass SiteLabelUpload\n extends SiteLabel {\n\n private readonly _dropEvent: (data: QueryUploadFile) => Promise;\n private readonly _container: IQueryElement;\n private readonly _drop: QueryUpload;\n private readonly _files: IQueryElement;\n private readonly _provider: string;\n private readonly _global: string;\n private readonly _input: IQueryElement;\n\n constructor(card: SiteCard, model: ISiteModel, modelData: ISiteModel, element: HTMLElement) {\n super(card, model, modelData, element);\n\n let input = this.query(\"input\").first();\n let provider = input && input.getAttr(\"data-provider\");\n let global = input && input.getAttr(\"data-global\");\n let modelValue = this.getModelValue();\n let metaData = this.getModelData();\n\n if (input === null || provider === null || global === null)\n throw \"Couldn't find the input element.\";\n\n this._provider = provider;\n this._global = global;\n\n this._input = input;\n\n this._container = QueryElement.QueryElement(\"div\")\n .addClass(\"upload\");\n \n this._drop = new QueryUpload(document.createElement(\"div\"), input)\n .addClass(\"drop\")\n .setHtml(`cloud_upload${this.getSiteConfig().strings[\"drag your files here to upload.\"]}`)\n .appendTo(this._container);\n this._drop.on(\"dragover\", () => this._container.addClass(\"drag\"));\n this._drop.on(\"dragleave\", () => this._container.removeClass(\"drag\"));\n this._drop.on(\"drop\", () => this._container.removeClass(\"drag\"));\n \n this._files = QueryElement.QueryElement(\"div\")\n .addClass(\"files\")\n .appendTo(this._container);\n\n this.append(this._container);\n \n this._dropEvent = this._drop.dropEvent.on(async (a) => { \n await this.addFile(a);\n });\n if (modelValue !== undefined) {\n for (let x = 0; x < modelValue.length; x++) {\n let uploadMeta = metaData[x];\n let uploadItem = modelValue[x];\n if(uploadMeta != null && uploadItem != null) {\n let item = new SiteLabelUploadFile(\n card,\n this,\n new QueryUploadFile(\n {\n name: uploadMeta.fileName || `file ${x}`,\n size: 0,\n type: \"\"\n },\n {\n id: uploadItem,\n preview: uploadMeta.preview\n }), this._provider, this._global\n ).appendTo(this._files);\n }\n }\n }\n\n // Click is handled by \n this.off(\"click\", null);\n }\n \n getInput() {\n return this._input;\n }\n getProvider() {\n return this._provider;\n }\n\n async addFile(file: QueryUploadFile) {\n var result = await new SiteLabelUploadFile(this.getCard(), this, file, this._provider, this._global)\n .appendTo(this._files)\n .upload();\n\n this.setValue(this.getValue());\n return result;\n }\n\n defaultConfig(): ISiteLabelConfig {\n return {\n popout: 'inline',\n scroll: \"top\"\n }\n }\n getValue() {\n let values = this.query(\".files > div\")\n .all(a => {\n return { id: a.id, state: a.state };\n })\n .filter(a => a.state != \"failed\")\n .map(a => a.id);\n\n return values.length > 0 ? values : null;\n }\n setValue(value: string[] | null) {\n super.setValue(value || []);\n }\n\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n // Cleanup event\n this._drop.dropEvent.off(this._dropEvent);\n }\n}\n\nclass SiteLabelUploadFile\n extends QueryElement {\n\n private readonly _icon: IQueryElement;\n private readonly _buttons: IQueryElement;\n private readonly _file: QueryUploadFile;\n private readonly _card: SiteCard;\n private readonly _provider: string;\n private readonly _global: string;\n private readonly _element: SiteLabelUpload;\n private _id: any;\n private _state: SiteLabelUploadFileProgress;\n\n public get id() { return this._id; }\n public get state() { return this._state; }\n\n constructor(card: SiteCard, element: SiteLabelUpload, file: QueryUploadFile, provider: string, global: string) {\n super(document.createElement(\"div\"));\n\n this._card = card;\n this._element = element;\n this._file = file;\n this._provider = provider;\n this._global = global;\n this._state = \"failed\";\n\n this._icon = QueryElement.QueryElement(\"i\")\n .setHtml(SiteLabelUploadFile.mimeToIcon(file.type));\n \n this._buttons = QueryElement.QueryElement(\"div\")\n .addClass(\"buttons\");\n \n let title = QueryElement.QueryElement(\"div\")\n .addClass(\"title\")\n .setHtml(file.name);\n\n // Init model:\n if(file.model !== undefined) {\n this._id = file.model.id;\n this._state = \"succeeded\";\n\n this.addButtons(this._id);\n if(file.model.preview !== undefined) {\n this.setPreview(file.model.preview);\n }\n }\n \n this.addClass(\"file\")\n .append(this._icon)\n .append(this._buttons)\n .append(title);\n }\n async addButtons(id: string) {\n let downloadAction: IActionTypePost = {\n type: \"Post\",\n setModel: false,\n actionLink: {\n actionInfo: {\n controller: \"Api\",\n action: \"FileGet\"\n },\n model: {\n id: id,\n provider: this._provider\n }\n }\n };\n\n new SiteActionButton(this._card, {\n icon: \"get_app\",\n title: \"\",\n action: downloadAction,\n isFocusable: false\n })\n .appendTo(this._buttons)\n\n let rotateAction: IActionTypePost = {\n type: \"Post\",\n setModel: false,\n actionLink: {\n actionInfo: {\n controller: \"Api\",\n action: \"ImageFlip\"\n },\n model: {\n id: id,\n provider: this._provider\n }\n }\n };\n\n let button = new SiteActionButton(this._card, {\n icon: \"rotate_right\",\n title: \"\",\n action: rotateAction,\n isFocusable: false\n })\n .appendTo(this._buttons);\n \n button.on(\"click\", async a => {\n this._card.makeFocusableActive(this._element);\n a.stop();\n });\n button.on(\"actionExecuted\", async a => {\n if (this._file.model?.preview !== undefined) {\n this.setPreview(this._file.model?.preview);\n }\n });\n\n let deleteAction: IActionTypePost = {\n type: \"Post\",\n setModel: false,\n actionLink: {\n actionInfo: {\n controller: \"Api\",\n action: \"FileDelete\"\n },\n model: {\n id: id,\n provider: this._provider\n }\n }\n };\n new SiteActionButton(this._card, {\n icon: \"delete\",\n title: \"\",\n action: deleteAction,\n isFocusable: false\n })\n .appendTo(this._buttons)\n .on(\"click\", async a => {\n await this.remove();\n this._card.makeFocusableActive(this._element);\n a.stop();\n });\n }\n async upload() {\n this._state = \"inprogress\";\n\n if(this._file instanceof QueryUploadFileUpload) {\n try {\n let response = await this._file.upload(\n {\n provider: this._provider,\n global: this._global\n }\n );\n\n // 200 OK with no JSON:\n if(response === undefined)\n throw \"Not recieved the information.\";\n\n this._id = response.id;\n this.addButtons(response.id);\n if (response.preview !== undefined) {\n this.setPreview(response.preview);\n }\n \n this._state = \"succeeded\";\n this.addClass(\"success\");\n } catch(e) {\n this._state = \"failed\";\n this.addClass(\"failed\");\n }\n \n // Set value after upload completed\n this._element.setValue(this._element.getValue());\n }\n\n return this;\n }\n\n setPreview(preview: string) {\n let style = this._icon.style();\n\n if (style !== undefined) {\n style.backgroundImage = `url(${this.getImageUrl(preview)}?${new Date().getTime()})`;\n this._icon.setHtml(\"\");\n }\n }\n private getImageUrl(url: string) {\n return url.replace(\"/$$$x$$$/\", \"/c=128x128/\");\n }\n private static mimeToIcon(mime: string) {\n if (mime.startsWith(\"image/\"))\n return \"image\";\n else if (mime.startsWith(\"video/\"))\n return \"movie\";\n else if (mime.startsWith(\"audio/\"))\n return \"audiotrack\";\n else if (mime.startsWith(\"application\") || mime.startsWith(\"text\"))\n return \"description\";\n \n return \"attachment\";\n }\n}","class SiteStatementFor\n extends QueryElement {\n \n constructor(card: ISiteCard, element: HTMLElement) {\n super(element, false);\n\n let from = parseInt(this.getAttr('data-from') || \"0\");\n let to = parseInt(this.getAttr('data-to') || \"0\");\n let name = this.getAttr('data-name');\n\n // Get inserting parent:\n let parent = this.parent();\n if (parent == null)\n throw \"No parent found.\";\n\n let propertiesToReplace = [\"data-path\", \"data-config\"];\n\n // Duplicate it:\n for (let x = from; x <= to; x++) {\n let toReplaceString = `[${name}]`;\n let toReplaceStringBy = `[${x}]`;\n\n let newContent = element.cloneNode(true) as HTMLElement;\n\n for (var propertyToReplace of propertiesToReplace)\n {\n let toReplaceElements = newContent.querySelectorAll(`[${propertyToReplace}*=\"${toReplaceString}\"]`);\n for (let y = 0; y < toReplaceElements.length; y++)\n {\n let toReplaceElement = toReplaceElements[y];\n let newValue = (toReplaceElement.getAttribute(propertyToReplace) || \"\")\n .replace(toReplaceString, toReplaceStringBy);\n\n toReplaceElement.setAttribute(propertyToReplace, newValue);\n }\n }\n\n let innerFor = newContent.querySelectorAll(\"div[data-type='for']\");\n for (let y = 0; y < innerFor.length; y++)\n {\n new SiteStatementFor(card, innerFor[y] as HTMLElement);\n }\n\n while (newContent.children.length != 0) {\n parent.insertBefore(\n new QueryElement(newContent.children[0], false),\n this);\n }\n }\n\n element.remove();\n }\n}","class SiteStatementForeach\n extends QueryElement {\n \n constructor(card: ISiteCard, element: HTMLElement) {\n super(element, false);\n\n let path = this.getAttr('data-path');\n let name = this.getAttr('data-name');\n let global = this.getAttr('data-global');\n let value = card.Model.get((path && SiteModel.split(path)) || []) as any[];\n\n if (value == null)\n return;\n\n // Get inserting parent:\n let parent = this.parent();\n if (parent == null)\n throw \"No parent found.\";\n \n let propertiesToReplace = [\"data-path\", \"data-config\"];\n\n // Duplicate it:\n for (let x of Object.keys(value)) {\n let toReplaceString = global ? `[${name}]` : `${path}[${name}]`;\n let toReplaceStringBy = global ? `[${x}]` : `${path}[${x}]`;\n\n let newContent = element.cloneNode(true) as HTMLElement;\n \n for (var propertyToReplace of propertiesToReplace)\n {\n let selector = global ? `[${propertyToReplace}*=\"${toReplaceString}\"]` : `[${propertyToReplace}^=\"${toReplaceString}\"]`;\n let toReplaceElements = newContent.querySelectorAll(selector);\n for (let y = 0; y < toReplaceElements.length; y++)\n {\n let toReplaceElement = toReplaceElements[y];\n let newValue = (toReplaceElement.getAttribute(propertyToReplace) || \"\")\n .replace(toReplaceString, toReplaceStringBy);\n\n toReplaceElement.setAttribute(propertyToReplace, newValue);\n }\n }\n\n let innerForeach = newContent.querySelectorAll(\"div[data-type='foreach']\");\n for (let y = 0; y < innerForeach.length; y++)\n {\n new SiteStatementForeach(card, innerForeach[y] as HTMLElement);\n }\n \n while(newContent.children.length != 0) {\n parent.insertBefore(\n new QueryElement(newContent.children[0], false),\n this);\n }\n }\n\n element.remove();\n }\n}","type SiteStatementIfSorts =\n 'notNullOrUndefined' | 'nullOrUndefined' |\n 'notNullOrEmpty' | 'nullOrEmpty' |\n 'equals' | 'notEquals' | 'equalsType' |\n 'greaterThan' | 'smallerThan' | 'greaterOrEquals' | 'smallerOrEquals' |\n 'contains' | 'notContains';\n\nclass SiteStatementIf\n extends QueryElement {\n \n constructor(card: ISiteCard, element: HTMLElement) {\n super(element, false);\n\n let path = this.getAttr('data-path');\n let sort = this.getAttr('data-sort') as SiteStatementIfSorts;\n let compareValue = this.getAttr('data-value') as any;\n let value = card.Model.get((path && SiteModel.split(path)) || []) as any;\n\n let show = false;\n switch (sort) {\n case 'contains':\n show = value.includes(compareValue);\n break;\n case 'notContains':\n show = !value.includes(compareValue);\n break;\n case 'notNullOrUndefined':\n show = value != null;\n break;\n case 'notNullOrEmpty':\n show = value != null && value.length > 0\n break;\n case 'nullOrUndefined':\n show = value == null;\n break;\n case 'nullOrEmpty':\n show = value == null || value.length == 0\n break;\n case 'equalsType':\n case 'equals':\n show = value == compareValue;\n break;\n case 'notEquals':\n show = value != compareValue;\n break;\n case 'greaterThan':\n show = value > compareValue;\n break;\n case 'greaterOrEquals':\n show = value >= compareValue;\n break;\n case 'smallerThan':\n show = value < compareValue;\n break;\n case 'smallerOrEquals':\n show = value <= compareValue;\n break;\n }\n \n // Make this tag dissapear\n if (show) {\n let parent = this.parent();\n if (parent != null)\n for (let x of this.children()) {\n parent.insertBefore(x, this);\n }\n }\n\n element.remove();\n }\n}","class SiteNavigationDesktop\n extends SiteNavigation\n{\n private readonly _site: Site;\n\n constructor(site: Site) {\n super();\n\n this._site = site;\n let button = new SiteButton({\n icon: \"apps\",\n title: site.Config.strings[\"overview\"]\n });\n button.addClass(\"rounded\");\n button.on(\"click\", async () => await site.overview(false));\n this.append(button);\n }\n \n \n isActive() {\n return this.containsClass(\"active\");\n }\n\n makeActive() {\n if(this.isActive())\n return this;\n \n let button = new SiteButton({\n icon: \"arrow_back\",\n title: this._site.Config.strings[\"previous card\"]\n });\n button.addClass(\"rounded\")\n .addClass(\"rounded-small\");\n button.on(\"click\", () => {\n var activeCard = this._site.query(\"#containers > .container.active\").first();\n if (activeCard != null)\n {\n var prevCard = activeCard.prev();\n \n if (prevCard == null)\n prevCard = this._site.query(\"#containers > .container:not(.active)\").last();\n\n if (prevCard != null)\n this._site.makeContainerActive(prevCard, false);\n }\n });\n this.append(button);\n\n if(this._site.isSplit()) {\n let button = new SiteButton({\n icon: \"cached\",\n title: this._site.Config.strings[\"flip split\"]\n });\n button.addClass(\"rounded\")\n .addClass(\"rounded-small\");\n button.on(\"click\", () => this._site.toggleSplit());\n this.append(button);\n } else {\n let button = new SiteButton({\n icon: \"compare\",\n title: this._site.Config.strings[\"split screen\"]\n });\n button.addClass(\"rounded\")\n .addClass(\"rounded-small\");\n button.on(\"click\", async () => await this._site.overview(true));\n this.append(button);\n }\n this.addClass(\"active\");\n return this;\n }\n makeInactive() {\n this.removeClass(\"active\");\n this.query(\"button:not(:first-child)\").all(a => a.remove());\n return this;\n }\n}\n","class SiteNavigationMobile\n extends SiteNavigation\n{\n private readonly _site: Site;\n private readonly _siteEvent: (e: CustomEvent) => any;\n \n private _container: SiteContainer | undefined;\n private _containerEvent: ((e: CustomEvent) => any) | undefined;\n private _card: SiteCard | undefined;\n private _cardEvent: ((e: CustomEvent) => any) | undefined;\n private _button?: SiteButton;\n \n\n constructor(site: Site) {\n super();\n\n this._site = site;\n this._siteEvent = this._site.on(\"qts.container\", (e: CustomEvent) => {\n this.unregisterContainer();\n this._container = e.detail as SiteContainer;\n this._containerEvent = this._container.on(\"qts.card\", (e: CustomEvent) => {\n this.unregisterCard();\n this._button && this._button.remove();\n\n this._card = e.detail as SiteCard;\n this._cardEvent = this._card.on(\"qts.label\", (e: CustomEvent) => {\n this._button && this._button.remove();\n this.draw(e.detail as ISiteLabel);\n });\n });\n });\n\n let button = new SiteButton({\n icon: \"apps\",\n title: site.Config.strings[\"overview\"]\n });\n button.addClass(\"rounded\");\n button.on(\"click\", async () => await site.overview(false));\n this.append(button);\n }\n \n isActive() {\n return this.containsClass(\"active\");\n }\n private draw(label: ISiteLabel) {\n if(this._card === undefined)\n return;\n \n if(this._card.isLastFocusable(label)) {\n this._button = new SiteActionButton(this._card, {\n icon: \"check\",\n title: this._site.Config.strings[\"done\"],\n action: {\n type: \"Submit\"\n },\n isFocusable: false\n });\n this._button.addClass(\"rounded\")\n .addClass(\"rounded-small\");\n this._button.on(\"click\", async () => { \n label.makeNextActive(); \n });\n\n this.append(this._button);\n } else {\n this._button = new SiteButton({\n icon: \"keyboard_tab\",\n title: this._site.Config.strings[\"next field\"]\n });\n this._button.addClass(\"rounded\")\n .addClass(\"rounded-small\");\n this._button.on(\"click\", async () => { \n label.makeNextActive(); \n });\n\n this.append(this._button);\n }\n }\n makeActive() {\n if(this.isActive())\n return this;\n \n this.addClass(\"active\");\n return this;\n }\n makeInactive() {\n this._button && this._button.remove();\n \n this.removeClass(\"active\");\n return this;\n }\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n this._site.off(\"qts.container\", this._siteEvent);\n this.unregisterContainer();\n }\n\n private unregisterContainer() {\n if(this._container !== undefined && this._containerEvent !== undefined)\n this._container.off(\"qts.card\", this._containerEvent);\n\n this._container = undefined;\n this._containerEvent = undefined;\n\n this.unregisterCard();\n }\n\n private unregisterCard() {\n if(this._card !== undefined && this._cardEvent !== undefined)\n this._card.off(\"qts.label\", this._cardEvent);\n\n this._card = undefined;\n this._cardEvent = undefined;\n }\n\n}","class SiteNavigationNone\n extends SiteNavigation\n{\n private _isActive: boolean;\n\n constructor(site: Site) {\n super();\n this._isActive = false;\n }\n \n isActive() {\n return this._isActive;\n }\n makeActive() {\n this._isActive = true;\n return this;\n }\n makeInactive() {\n this._isActive = false;\n return this;\n }\n}","class SiteCardPositionerDesktop\n implements ISiteCardPositioner {\n \n private _currentSize?: DOMRect;\n private _totalSize: number = 0;\n private _totalLargeCards: number = 0;\n private _cards: ISiteCard[] = [];\n\n constructor(container: SiteContainer, cards: ISiteCard[]) {\n this._cards = cards || [];\n this._calculateCards();\n }\n\n addCard(card: ISiteCard) {\n this._cards.push(card);\n this._totalSize += this._getWidth(card);\n this._totalLargeCards += card.isLarge() ? 1 : 0;\n this._redraw();\n }\n replaceCard(oldCard: ISiteCard, newCard: ISiteCard): void {\n this._cards[this._cards.indexOf(oldCard)] = newCard;\n this._redraw();\n }\n removeCard(card: ISiteCard) {\n let position = this._cards.indexOf(card);\n\n // Already removed?\n if (position === -1)\n return;\n \n this._totalSize -= this._getWidth(card);\n this._totalLargeCards -= card.isLarge() ? 1 : 0;\n\n // Remove from array\n this._cards.splice(position, 1);\n this._redraw();\n }\n resize(position: DOMRect) {\n this._currentSize = position;\n this._redraw();\n }\n destruct() {\n // Unset all lefts\n for(let card of this._cards) {\n let style = card.style();\n if (style !== undefined) {\n style.removeProperty(\"left\");\n style.removeProperty(\"width\");\n }\n }\n }\n redraw() {\n this._calculateCards();\n this._redraw();\n }\n private _calculateCards() {\n this._totalSize = 0;\n this._totalLargeCards = 0;\n for(let card of this._cards) {\n this._totalSize += this._getWidth(card);\n this._totalLargeCards += card.isLarge() ? 1 : 0;\n }\n }\n private _getWidth(card: ISiteCard) {\n let width = parseInt(card.getAttr(\"data-width\") || \"0\");\n if (!width) {\n let position = card.position();\n width = (position && position.width) || 0;\n card.setAttr(\"data-width\", width + \"\");\n }\n return width;\n }\n private _redraw() {\n if(this._cards.length == 0 || !this._currentSize)\n return;\n \n let currentWidth = this._currentSize.width;\n\n let firstCard = this._cards[0];\n let firstCardStyle = firstCard.style();\n let firstCardPosition = firstCard.position();\n \n // Set first card to first position\n if(firstCardStyle !== undefined)\n firstCardStyle.left = '0px';\n \n let staticSize = (firstCardPosition && firstCardPosition.width) || 0;\n let totalSize = this._totalSize - staticSize;\n\n let currentPosition = staticSize;\n let largeCardAsSmall = 0;\n\n // Do we have a static card?\n var startIndex = 1;\n if(this._cards.some(a => a.isLarge())) {\n for(var card of this._cards.slice(1)) {\n let style = card.style();\n if (style === undefined)\n continue;\n\n if (card.isLarge())\n break;\n\n startIndex++;\n\n style.left = `${currentPosition}px`;\n style.removeProperty(\"width\");\n\n let width = this._getWidth(card);\n currentPosition += 25;\n totalSize -= width - 25;\n\n card.trigger(\"qts.resize\", false);\n }\n }\n \n for(let card of this._cards.slice(startIndex)) {\n let style = card.style();\n if (style === undefined)\n continue;\n\n style.left = `${currentPosition}px`;\n style.removeProperty(\"width\");\n\n let width = this._getWidth(card);\n if (staticSize + totalSize > currentWidth) {\n // Display small\n currentPosition += 25;\n totalSize -= width - 25;\n if (card.isLarge())\n largeCardAsSmall += 1;\n } else {\n // Display full\n if (card.isLarge()) {\n width = width + ((currentWidth - (staticSize + totalSize)) / (this._totalLargeCards - largeCardAsSmall));\n style.width = width + \"px\";\n }\n currentPosition += width;\n }\n card.trigger(\"qts.resize\", false);\n \n }\n }\n}","class SiteCardPositionerMobile\n implements ISiteCardPositioner {\n\n private _container: SiteContainer;\n\n constructor(container: SiteContainer, cards: ISiteCard[]) {\n this._container = container.addClass(\"mobile\");\n }\n\n addCard(card: ISiteCard) {\n // Do nothing, handled by CSS\n }\n replaceCard(oldCard: ISiteCard, newCard: ISiteCard): void {\n // Do nothing, handled by CSS\n }\n removeCard(card: ISiteCard) {\n // Do nothing, handled by CSS\n }\n redraw() {\n // Do nothing, handled by CSS\n }\n resize(position: DOMRect) {\n if(position.width <= 500) {\n if(!this._container.containsClass(\"mobile-small\")) {\n this._container\n .removeClass(\"mobile-large\")\n .addClass(\"mobile-small\");\n }\n } else {\n if(!this._container.containsClass(\"mobile-large\")) {\n this._container\n .removeClass(\"mobile-small\")\n .addClass(\"mobile-large\");\n }\n }\n }\n destruct() {\n // Remove it\n this._container\n .removeClass(\"mobile\")\n .removeClass(\"mobile-large\")\n .removeClass(\"mobile-small\");\n }\n}","interface ISiteActionButton\n extends ISiteButton {\n action?: IActionType | null;\n isFocusable?: boolean;\n key?: string;\n}\ninterface ISiteButton {\n icon?: Icons;\n title?: string;\n color?: string;\n}\n\nclass SiteButton\n extends QueryElement {\n\n private _icon?: QueryElement;\n \n constructor(\n button: ISiteButton,\n registerInstance: boolean = false,\n element: HTMLElement = document.createElement(\"button\")) {\n \n super(element, registerInstance);\n\n if(button.icon !== undefined) {\n this._icon = QueryElement.QueryElement(\"i\")\n .setHtml(button.icon)\n .appendTo(this);\n if(button.color !== undefined) {\n this._icon.setAttr(\"style\", \"background-color: \" + button.color)\n }\n }\n if(button.title !== undefined)\n QueryElement.QueryElement(\"span\")\n .setHtml(button.title)\n .appendTo(this);\n }\n\n setIcon(icon: string) {\n this._icon?.setHtml(icon);\n }\n\n enable() {\n this.removeClass(\"disabled\");\n }\n disable() {\n this.addClass(\"disabled\");\n }\n}\nclass SiteActionButton\n extends SiteButton\n implements ISiteFocusable {\n \n private readonly _action: SiteAction | null;\n private _actionRunning: boolean;\n private _owner: ISiteCard;\n\n get Action(): SiteAction | null {\n return this._action;\n }\n\n constructor(owner: ISiteCard, button: ISiteActionButton, element?: HTMLElement) {\n super(button, true, element);\n\n if(button.isFocusable !== false)\n this.setAttr(\"if-ISiteFocusable\", \"true\");\n \n this._owner = owner;\n\n let action = SiteAction.create(owner, button.action);\n this._action = action;\n this._actionRunning = false;\n\n if(this._action !== null) {\n this.on(\"click\", async () => {\n await this.onClick();\n });\n }\n\n if (button.key) {\n let keyCode = QueryElement.QueryElement(\"div\")\n .addClass(\"key\");\n\n for (let key of button.key.split(\"+\")) {\n QueryElement.QueryElement(\"span\")\n .setHtml(key)\n .appendTo(keyCode);\n }\n\n this.setAttr(\"data-key\", button.key);\n this.append(keyCode);\n }\n\n\n this.on(\"keydown\", (e: KeyboardEvent) => {\n switch (e.keyCode) {\n default:\n if(e.ctrlKey)\n {\n owner.keyPress([17, e.keyCode]);\n e.stop();\n }\n break;\n case 17: // CTRL\n owner.keyPress([e.keyCode]);\n e.stop();\n break;\n case 13:\n this.trigger(\"click\", true);\n e.stop();\n break;\n case 37:\n case 38:\n this.makePrevActive();\n case 39:\n case 40:\n case 9:\n this.makeNextActive();\n e.stop();\n break;\n }\n });\n }\n\n async onClick() {\n if (!this._actionRunning)\n {\n this._owner.makeFocusableActive(this);\n\n this.trigger(\"actionExecuting\", false);\n this._actionRunning = true;\n if(this._action)\n await this._action.execute();\n \n this._actionRunning = false;\n this.trigger(\"actionExecuted\", false);\n }\n }\n\n makeActive() {\n if (this.containsClass(\"active\"))\n return false;\n\n this.addClass(\"active\");\n this.trigger(\"qts.active\", false);\n this.focus();\n return true;\n }\n makeInactive() {\n this.removeClass(\"active\");\n this.trigger(\"qts.inactive\", false);\n }\n makePrevActive() {\n this._owner.makePrevFocusableActive(this);\n }\n makeNextActive() {\n this._owner.makeNextFocusableActive(this);\n }\n}","interface ISiteLink\n extends ISiteButton {\n action: string;\n}\n\nclass SiteLink\n extends QueryElement {\n \n constructor(owner: ISiteCard, link: ISiteLink, element: HTMLElement) {\n super(element);\n\n let linkInfo = link.action.split('/');\n let linkActionInfo : IActionInfo = {\n module: linkInfo.shift() || \"\",\n controller: linkInfo.shift() || \"\",\n action: linkInfo.shift() || \"\",\n id: linkInfo.join(\"/\")\n };\n let linkAction: IActionLink = {\n actionInfo: linkActionInfo\n };\n let linkActionType : IActionTypeRequest = {\n actionLink: linkAction,\n type: \"Request\"\n };\n let action = SiteAction.create(owner, linkActionType);\n\n this.on(\"click\", async(a) => {\n if (action != null)\n action.execute();\n \n a.stop();\n });\n }\n}","class SiteLoader\n extends QueryElement {\n\n private calls: number;\n private timer?: number;\n\n constructor() {\n super(document.createElement(\"div\"));\n this.addClass(\"loader\");\n\n this.calls = 0;\n\n this.setHtml(`\n
\n \n \n \n
`)\n }\n\n show() {\n this.calls++;\n if (this.timer != null)\n clearTimeout(this.timer);\n \n this.timer = setTimeout(() => this.showHide(), 700);\n }\n hide() {\n this.calls--;\n this.showHide();\n }\n\n private showHide() {\n if(this.isRemoved())\n return;\n \n if (this.calls == 0)\n this.addClass(\"hide\");\n else\n this.removeClass(\"hide\");\n }\n} ","type SiteMessageSorts = 'Ok' | 'Error' | 'Waring' | 'Info';\n\ninterface ISiteMessage {\n title?: string;\n message?: string;\n sort: SiteMessageSorts;\n timeOut?: number;\n}\n\nclass SiteMessage\n extends QueryElement {\n private readonly _touch: QueryTouch;\n\n constructor(message: ISiteMessage) {\n super(document.createElement(\"DIV\"));\n \n this._touch = new QueryTouch(this);\n this.addClass(message.sort.toLowerCase());\n\n let recognizer = new QueryTouchSwipeRecognizer({\n direction: QueryTouchDirection.X,\n pointers: 1,\n threshold: 10,\n velocity: 0.2\n });\n recognizer.startEvent.on(async () => {\n this.addClass(\"drag\");\n });\n recognizer.moveEvent.on(async (e) => {\n let style = this.style();\n if(style !== undefined)\n style.transform = `translate(${e.movedX}px, 0)`;\n });\n recognizer.stopEvent.on(async(a) => {\n if(a !== \"none\") {\n // Close received\n this.remove();\n } else {\n // Slow mover, do not a thing :)\n this.removeClass(\"drag\");\n let style = this.style();\n if(style !== undefined)\n style.transform = `translate(0, 0)`;\n }\n });\n this._touch.addRecognizer(recognizer);\n \n if(message.title !== undefined)\n QueryElement.QueryElement(\"h2\")\n .setHtml(message.title)\n .appendTo(this);\n \n if (message.message !== undefined)\n QueryElement.QueryElement(\"p\")\n .setHtml(message.message)\n .appendTo(this);\n \n QueryElement.QueryElement(\"i\")\n .addClass(\"close\")\n .setText(\"clear\")\n .appendTo(this)\n .on(\"click\", () => {\n this.remove();\n });\n\n if(message.timeOut !== 0)\n window.setTimeout(() => this.remove(), (message.timeOut || 5) * 1000);\n }\n}\n\nclass SiteMessages\n extends QueryElement {\n \n constructor(elem: HTMLElement) {\n super(elem);\n\n }\n\n async add(message: SiteMessage) {\n this.append(message);\n }\n}","type SiteModalSorts = 'Message' | 'Image';\n\ninterface ISiteModal {\n sort: SiteModalSorts;\n}\n\ninterface ISiteMessageModal\n extends ISiteModal {\n \n icon?: Icons;\n message?: string;\n buttons?: Array;\n}\n\ninterface ISiteImageModal\n extends ISiteModal {\n \n image: string;\n action?: IActionType;\n}\n\nclass SiteModal\n extends QueryElement {\n \n constructor(obj: HTMLElement) {\n super(obj);\n\n this.on(\"click\", () => {\n this.children().forEach((a) => a.remove());\n this.remove();\n });\n\n }\n\n show(card: ISiteCard, modal: ISiteModal) {\n this.removeClass(\"hide\");\n\n if (modal.sort == \"Message\") {\n let messageModal = new SiteMessageModal(card, modal as ISiteMessageModal);\n this.append(messageModal);\n\n return messageModal;\n }\n if (modal.sort == \"Image\") {\n let imageModal = new SiteImageModal(card, modal as ISiteImageModal);\n this.append(imageModal);\n \n return imageModal;\n }\n }\n\n getModals() {\n return this.children();\n }\n\n async remove() {\n this.addClass(\"hide\");\n }\n}\n\nclass SiteMessageModal\n extends QueryElement {\n \n constructor(card: ISiteCard, modal: ISiteMessageModal) {\n super(document.createElement(\"DIV\"));\n\n this.addClass(\"container\");\n this.addClass(\"message\");\n\n if (modal.icon !== undefined)\n this.append(\n QueryElement.QueryElement(\"i\")\n .setHtml(modal.icon));\n\n if (modal.message !== undefined)\n this.append(\n QueryElement.QueryElement(\"div\")\n .addClass(\"content\")\n .setHtml(modal.message));\n\n if (modal.buttons !== undefined) {\n let buttons = QueryElement.QueryElement(\"div\")\n .addClass(\"buttons\")\n .appendTo(this);\n \n for (let button of modal.buttons) {\n let actionButton = new SiteActionButton(card, button);\n buttons.append(actionButton);\n }\n }\n }\n}\n\nclass SiteImageModal\n extends QueryElement {\n \n private _action: SiteAction | null;\n \n constructor(card: ISiteCard, modal: ISiteImageModal) {\n super(document.createElement(\"DIV\"));\n\n this.addClass(\"container\");\n this.addClass(\"image\");\n\n let action = SiteAction.create(card, modal.action);\n this._action = action;\n \n let element = QueryElement.QueryElement(\"img\");\n element.on(\"click\", () => {\n this.execute();\n });\n element.on(\"load\", () => {\n let pos = QueryElement.get(document.body).position();\n let imagePos = element.position();\n \n if (pos == null || imagePos == null)\n return;\n\n let ratioWidth = imagePos.width / (pos.width - 50);\n let ratioHeight = imagePos.height / (pos.height - 50);\n\n let ratio = ratioWidth > ratioHeight ? ratioWidth : ratioHeight;\n ratio = ratio > 1 ? ratio : 1;\n\n element.setAttr(\"style\", `width: ${imagePos.width/ratio}px; height: ${imagePos.height/ratio}px`)\n });\n element.setAttr(\"src\", modal.image);\n\n this.append(element);\n }\n\n async execute() {\n await this._action?.execute();\n }\n}","interface ISiteModelValueChanged {\n initial: boolean;\n path: string[];\n value: any;\n changer: any;\n}\ninterface ISiteModel {\n\n changedEvent: IQueryEvent;\n get(path: string[]): any;\n set(path: string[], changer: any, value: any, initial: boolean): void;\n}\n\nfunction hasInterface(object: any, interfaceName: string): object is T {\n return '__interface' in object && object.__interface == interfaceName;\n}\n\nclass SiteModel\n implements ISiteModel {\n\n private readonly __interface = \"ISiteModel\";\n private readonly _model: any;\n private readonly _changedEvent: QueryEvent\n = new QueryEvent();\n\n\n public get changedEvent() { return this._changedEvent.expose(); }\n\n constructor(model: any) {\n this._model = model;\n }\n\n static equals(path: string[], path2: string[]) {\n if (path.length !== path2.length) {\n return false;\n }\n\n for (let i = 0; i < path.length; i++) {\n if (path[i] !== path2[i]) {\n return false;\n }\n }\n\n return true;\n }\n\n static split(path?: string) {\n if (!path)\n return []; \n\n return path\n .replace(/\\[([^\\]]*)\\]/g, '.$1')\n .split('.');\n }\n\n static splitPath(model: ISiteModel, path?: string) {\n if (!path)\n return [];\n\n var pathArray : string[][] = [];\n var currString = \"\";\n var depth = 0;\n\n pathArray[0] = [];\n for(let i = 0; i < path.length; i++) {\n const char = path[i];\n\n if (char === '[') {\n if (currString) { // Edge case ][\n pathArray[depth].push(currString);\n currString = \"\";\n }\n pathArray[++depth] = [];\n } else if (char === ']') {\n if (!isNaN(Number(currString)) && Number.isInteger(Number(currString))) {\n pathArray[--depth].push(currString);\n currString = \"\";\n } else {\n if (currString) { // Edge case ]]\n pathArray[depth].push(currString);\n currString = \"\";\n }\n var currPath = pathArray[depth];\n var value = model.get(currPath);\n if (value === undefined)\n pathArray[--depth].push(currPath.join(\".\"));\n else\n pathArray[--depth].push(QueryJSON.toCamelCase(value))\n \n }\n } else if (char === '.') {\n if (currString) { // Edge case ].\n pathArray[depth].push(currString);\n currString = \"\";\n }\n } else {\n currString += char;\n }\n }\n \n if (currString) {\n pathArray[depth].push(currString);\n }\n\n return pathArray[0];\n }\n\n get(path: string[]) {\n let currentValue = this._model;\n for(let pat of path) {\n if (currentValue === undefined)\n return undefined;\n\n currentValue = currentValue[pat];\n }\n\n return currentValue;\n }\n set(path: string[], changer: any, value: any, initial: boolean) {\n let currentValue = this._model;\n\n // We need to copy the path, else pop will destroy the source array!\n let copyPath = path.slice();\n let last = copyPath.pop();\n\n if(last === undefined)\n return;\n\n for (let pat of copyPath) {\n // Make a node of all in between paths,\n // since we haven't travel to last yet\n if (currentValue[pat] === undefined)\n currentValue[pat] = {};\n \n currentValue = currentValue[pat];\n }\n \n // Always set to null when it was undefined\n if (currentValue[last] === undefined)\n currentValue[last] = null;\n\n // Check if exists and is changed:\n if (currentValue[last] !== value) {\n // Set value\n currentValue[last] = value;\n // Send event\n this._changedEvent.trigger({\n path: path,\n value: value,\n initial: initial,\n changer: changer\n });\n }\n }\n}\n\nclass SiteModelInner\n implements ISiteModel {\n\n private readonly __interface = \"ISiteModel\";\n private readonly _changedEvent: QueryEvent\n = new QueryEvent();\n\n public get changedEvent() { return this._changedEvent.expose(); }\n private readonly _innerModel: ISiteModel;\n private readonly _path: string[];\n\n constructor(model: ISiteModel, path: string[]) {\n this._innerModel = model;\n this._path = path;\n }\n\n get(path: string[]) {\n return this._innerModel.get(\n this._path.concat(path)\n );\n }\n set(path: string[], changer: any, value: any, initial: boolean) {\n this._innerModel.set(\n this._path.concat(path),\n changer,\n value,\n initial\n );\n\n this._changedEvent.trigger({\n changer: changer,\n path: path,\n value: value,\n initial: initial\n });\n }\n}","class SiteSounds\n extends QueryElement {\n \n private readonly _sounds: { [name: string]: HTMLAudioElement } = {};\n \n constructor(obj: HTMLElement) {\n super(obj);\n \n var sounds = this.query(\"audio\").all(a => a);\n for (var sound of sounds)\n {\n var name = sound.getAttr(\"class\");\n if (name === null)\n continue;\n \n this._sounds[name] = sound.get() as HTMLAudioElement;\n }\n }\n \n play(sound: string)\n {\n var foundSound = this._sounds[`sound-${sound}`];\n if (foundSound != null) {\n foundSound.currentTime = 0;\n foundSound.play();\n }\n }\n}","class SiteStyle \n extends QueryElement {\n\n private _sheet: CSSStyleSheet;\n private _meta: IQueryElement;\n private __rules: number = 0;\n\n constructor(parent: IQueryElement) {\n super(document.createElement(\"style\"));\n\n this.appendTo(parent);\n let element = this.get();\n if (element === null)\n throw \"Could not find element.\";\n\n let meta = new Query(\"meta[name=theme-color]\").first();\n if(meta === null)\n throw 'Meta not found!';\n\n this._sheet = element.sheet as CSSStyleSheet;\n this._meta = meta;\n }\n addCss(css: string) {\n this._sheet.insertRule(css);\n }\n addColor(instance: number, color: string) {\n this._sheet.insertRule('#containers .container[data-instance=\"'+instance+'\"] { --default-color: '+color+';}', this.__rules);\n this.__rules++;\n }\n setColor(color: string) {\n this._meta.setAttr(\"content\", color);\n }\n}"],"sourceRoot":"../../src/ts/Site/"}