{"version":3,"sources":["Site.ts","SiteKeyboard.ts","SiteMessages.ts","SiteNavigation.ts","Helpers/SiteBind.ts","Helpers/SiteElementButton.ts","Helpers/SiteElementBuy.ts","Helpers/SiteElementCarousel.ts","Helpers/SiteElementCheckColorItem.ts","Helpers/SiteElementCheckItem.ts","Helpers/SiteElementClose.ts","Helpers/SiteElementCollapsible.ts","Helpers/SiteElementCustomFields.ts","Helpers/SiteElementCustomFieldsPreview.ts","Helpers/SiteElementFavorite.ts","Helpers/SiteElementFavorites.ts","Helpers/SiteElementFilter.ts","Helpers/SiteElementFilterArray.ts","Helpers/SiteElementFilterArrayDefaultRenderer.ts","Helpers/SiteElementFilterArrayDropdownRenderer.ts","Helpers/SiteElementFilterArrayInlineRenderer.ts","Helpers/SiteElementFilterClear.ts","Helpers/SiteElementFilterSingle.ts","Helpers/SiteElementFilterSingleArticleGroupRenderer.ts","Helpers/SiteElementFilterSingleDropdownRenderer.ts","Helpers/SiteElementFilterSingleInputRenderer.ts","Helpers/SiteElementHide.ts","Helpers/SiteElementHover.ts","Helpers/SiteElementImage.ts","Helpers/SiteElementLayout.ts","Helpers/SiteElementOrderStatus.ts","Helpers/SiteElementPopup.ts","Helpers/SiteElementPrice.ts","Helpers/SiteElementProduct.ts","Helpers/SiteElementQuantityPicker.ts","Helpers/SiteElementQuantityPickerNumber.ts","Helpers/SiteElementScroll.ts","Helpers/SiteElementSearch.ts","Helpers/SiteElementShoppingCart.ts","Helpers/SiteElementSticky.ts","Helpers/SiteElementUpload.ts"],"names":[],"mappings":"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","file":"../Site.js","sourcesContent":["/// \n/// \n/// \n/// \n/// \n\n\ninterface ISiteFilterModel {\n listGroup?: string;\n articleGroupId?: string;\n\n query?: string;\n listGroups?: string[];\n articleGroups?: string[];\n articleSorts?: string[];\n features?: { [key: string]: string[] };\n manufacturerSuppliers?: string[];\n index?: string[];\n baseColors?: string[];\n tags?: string[];\n articleHeight?: string[];\n articleWidth?: string[];\n price?: string[];\n locations?: string[];\n orderBy?: string;\n favorites?: boolean;\n}\ninterface ISiteFilterResponse {\n filters: ISiteFilterItem[];\n}\ninterface ISiteFilterItem {\n filterName: string;\n name: string;\n items: ISiteFilterItemValue[];\n}\ninterface ISiteFilterItemValue {\n filterValue: string;\n name: string;\n count: number;\n childs: ISiteFilterItemValue[];\n}\ninterface ISiteFilterColorItemValue\n extends ISiteFilterItemValue {\n \n colorName: string;\n}\ninterface ISiteAssortmentConfig {\n currentDateTime: string;\n refreshDateTime: string;\n closeDateTime: string;\n defaultLayout: SiteLayout;\n defaultMobileLayout: SiteLayout;\n defaultOrderBy: string;\n}\n\ntype SiteLayout = 'Line' | 'Small' | 'Medium' | 'Full';\ntype SiteResponses = 'Message' | 'Cart' | 'Favorites';\ninterface IPayloadResponse {\n\n}\ninterface IResponse {\n type: SiteResponses;\n payLoad: IPayloadResponse\n}\ninterface IMessagePayloadResponse\n extends IPayloadResponse {\n \n title?: string;\n message?: string;\n sort: SiteMessageSorts;\n timeOut?: number;\n}\ninterface ICartPayloadResponse \n extends IPayloadResponse {\n succeeded: boolean;\n}\ninterface IFavoritesPayloadResponse \n extends IPayloadResponse {\n succeeded: boolean;\n}\n\nclass Site \n extends QueryElement {\n \n private readonly _shoppingCart: SiteElementShoppingCart | null;\n private readonly _orderStatus: SiteElementOrderStatus | null;\n private readonly _favorites: SiteElementFavorites | null;\n private readonly _messages: SiteMessages;\n private _activePopup: SiteElementPopup | null;\n private _keyboard: SiteKeyboard;\n\n constructor(element: HTMLElement) {\n super(element);\n\n let shoppingCart = this.query(\".shopping-cart\").create(a => new SiteElementShoppingCart(a, this));\n let orderStatus = this.query(\".order-status\").create(a => new SiteElementOrderStatus(a, this));\n let favorites = this.query(\".favorites\").create(a => new SiteElementFavorites(a, this));\n let messages = this.query('#messages').create(a => new SiteMessages(a));\n\n if (messages === null)\n throw \"Default element(s) not found!\"\n \n this._shoppingCart = shoppingCart;\n this._orderStatus = orderStatus;\n this._favorites = favorites;\n this._messages = messages;\n\n // Create other elements\n this.query(\".element-carousel\").createAll(a => new SiteElementCarousel(a));\n this.query(\".element-search\").createAll(a => new SiteElementSearch(a));\n this.query(\".element-upload\").createAll(a => new SiteElementUpload(a));\n this.query(\".element-sticky\").createAll(a => new SiteElementSticky(a));\n this.query(\".element-hover\").createAll(a => new SiteElementHover(a));\n this.query(\".element-hide\").createAll(a => new SiteElementHide(a, this)); \n this.query(\".element-scroll\").createAll(a => new SiteElementScroll(a)); \n this.query(\".display-product\").createAll(a => new SiteElementProductStaticContainer(a, this));\n\n // Create binds\n this.query(\".bind\").createAll(a => new SiteBind(a));\n\n // Create popups\n this._activePopup = null;\n\n this.query(\".event-popup\").all(a => {\n var href = a.getAttr(\"href\");\n if (href && href.charAt(0) != '#')\n a.setAttr(\"href\", `#${href}`);\n });\n this.query(\".event-redirect\").all(a => {\n a.on(\"click\", e => {\n var href = a.getAttr(\"href\");\n if (href) {\n window.location.href = href.replace(\"%7B0%7D\", encodeURIComponent(window.location.pathname))\n }\n e.stop();\n });\n });\n\n this._keyboard = new SiteKeyboard(this);\n\n window.addEventListener(\"hashchange\", () => {\n this.openPopup(window.location.hash.substr(1));\n });\n if (window.location.hash)\n this.openPopup(window.location.hash.substr(1));\n }\n showHideConfidential() {\n if (this.containsClass(\"confidential-mode\")) {\n this.removeClass(\"confidential-mode\");\n } else {\n this.addClass(\"confidential-mode\");\n }\n }\n addMessage(message: IMessagePayloadResponse) {\n var messageElement = new SiteMessage(message);\n this._messages.add(messageElement);\n return this;\n }\n openPopup(url: string) {\n if (this._activePopup != null)\n this._activePopup.remove();\n \n if (url == \"\")\n return;\n \n var popup = new SiteElementPopup(this)\n .appendTo(this);\n popup.request(url);\n this._activePopup = popup;\n }\n closePopup() {\n if (this._activePopup != null)\n this._activePopup.remove();\n \n this._activePopup = null;\n\n var url = window.location.href.split(\"#\", 1);\n history.replaceState(\n {}, \n \"Geen idee\", \n url[0]);\n }\n static isMobile() {\n let body = QueryElement.get(document.body).position();\n if(body === null)\n return true;\n \n return body.width <= 768;\n }\n getFavorites() {\n return this._favorites;\n }\n getShoppingCart() {\n return this._shoppingCart;\n }\n eventAddedPreOrder() {\n this._shoppingCart?.reload();\n this._orderStatus?.reload();\n }\n async deleteItemCart(id: string, reload: boolean) {\n let request = new QueryRequest(\n `/Cart/Delete/${id}`, {\n contentType: 'json',\n method: 'get'\n });\n\n var response = await request.request();\n var jsonResponse: IResponse = await response.json();\n\n switch(jsonResponse.type)\n {\n case \"Cart\":\n {\n let payLoad = jsonResponse.payLoad;\n if (payLoad.succeeded)\n { \n if (reload == true)\n window.location.reload();\n else\n this.eventAddedPreOrder();\n }\n }\n case \"Message\":\n {\n let payLoad = jsonResponse.payLoad;\n this.addMessage(payLoad);\n }\n }\n }\n async deleteItemFavorite(id: string, reload: boolean) {\n let request = new QueryRequest(\n `/Favorites/Delete/${id}`, {\n contentType: 'json',\n method: 'get'\n });\n\n var response = await request.request();\n var jsonResponse: IResponse = await response.json();\n // refresh cards\n if (reload == true)\n window.location.reload();\n else\n this._favorites?.reload();\n }\n on(val: string, func: (e: TEvent) => any): (e: TEvent) => any {\n if (val == \"scroll\")\n {\n document.addEventListener(\"scroll\", <(ev: Event) => any>func, false);\n return func;\n }\n return super.on(val, func);\n }\n \n resize() {\n \n }\n}\n\nclass SiteAssortment\n extends Site {\n\n private readonly _filters: ISiteFilter[];\n private readonly _product: SiteElementProduct;\n private readonly _navigation: SiteNavigation;\n\n private readonly _refreshDateTime: Date;\n private readonly _closeDateTime: Date;\n private readonly _dateTimeOffset: number;\n\n private readonly _defaultLayout: SiteLayout;\n private readonly _defaultMobileLayout: SiteLayout;\n private readonly _defaultOrderBy: string;\n\n constructor(element: HTMLElement, config: ISiteAssortmentConfig) {\n super(element);\n\n this._dateTimeOffset = new Date().getTime() - new Date(config.currentDateTime).getTime();\n this._refreshDateTime = new Date(config.refreshDateTime);\n this._closeDateTime = new Date(config.closeDateTime);\n\n this._defaultLayout = config.defaultLayout;\n this._defaultMobileLayout = config.defaultMobileLayout;\n this._defaultOrderBy = config.defaultOrderBy;\n \n // Set refresh timer\n let refreshIn = this._refreshDateTime.getTime() - new Date().getTime() + this._dateTimeOffset;\n \n // Protect against overflowing INT32 from setTimeout, which will refresh directly\n if (refreshIn < Math.pow(2,31) - 1 && refreshIn > 0)\n window.setTimeout(() => location.reload(), refreshIn);\n \n this._navigation = new SiteNavigation();\n \n // Setup filters\n this._filters = [];\n this._filters.push(new SiteFilterSingleValue(\"ListGroup\", \"\"));\n this._filters.push(new SiteFilterSingleValue(\"Favorites\", \"\"));\n this._filters = this._filters.concat(this.query(\".element-filter-array\").createAll(a => new SiteElementFilterArray(a, this)));\n this._filters = this._filters.concat(this.query(\".element-filter-single\").createAll(a => new SiteElementFilterSingle(a, this)));\n this.query(\".element-filter-clear\").createAll(a => new SiteElementFilterClear(a, this));\n \n var filterModel: any = this._navigation.parseUrl(this.getFilterModel(), window.location.pathname);\n \n for(let filter of this._filters) {\n\n var filterName = QueryJSON.toCamelCase(filter.getName());\n \n if (filter instanceof SiteElementFilterArray) {\n var values = filterModel[filterName] as string[];\n if (values) {\n for (let value of values) {\n filter.addValue(value);\n }\n }\n }\n else if (filter instanceof SiteElementFilterSingle || filter instanceof SiteFilterSingleValue) {\n var value = filterModel[filterName] as string;\n if (value) {\n filter.setValue(value);\n }\n }\n }\n \n\n // Setup extra elements\n this.query(\".element-layout\").createAll(a => new SiteElementLayout(a, this));\n this.query(\".element-close\").createAll(a => new SiteElementClose(a, new Date((this._closeDateTime.getTime() + this._dateTimeOffset) / 1000)));\n var product = this.query(\".element-product\").create(a => new SiteElementProduct(a, this, filterModel));\n\n if (product == null)\n throw \"Element(s) not found!\";\n \n this._product = product;\n\n this.setFilters(filterModel, []);\n }\n\n getFilterModel() : ISiteFilterModel {\n let filterModel: any = {};\n for(var filter of this._filters)\n {\n const filterName = QueryJSON.toCamelCase(filter.getName());\n\n let currTarget = filterModel;\n const parts = filterName.split('.');\n const last = parts.pop() ?? \"\";\n \n // Navigate to the deep property\n for (const part of parts) {\n // Initialize the nested object if it doesn't exist\n if (!(part in currTarget)) {\n currTarget[part] = {};\n }\n currTarget = currTarget[part];\n }\n\n if (filter instanceof SiteElementFilterArray)\n currTarget[last] = filter.getValues();\n else if (filter instanceof SiteElementFilterSingle || filter instanceof SiteFilterSingleValue)\n currTarget[last] = filter.getValue();\n }\n\n if (!filterModel.orderBy)\n filterModel.orderBy = this._defaultOrderBy;\n\n return filterModel as ISiteFilterModel;\n }\n clearFilterModel() {\n for(var filter of this._filters)\n {\n if (filter instanceof SiteElementFilterArray)\n filter.removeValues();\n else if (filter instanceof SiteElementFilterSingle || filter instanceof SiteFilterSingleValue)\n filter.removeValue();\n }\n }\n resize() {\n this._product.resize();\n }\n getLayout() {\n return this._product;\n }\n setLayout(layout: string) {\n this._product.setLayout(layout);\n }\n async updateFilterModel(filter: ISiteFilter | null, name: string[]) {\n if (this._product == null)\n return;\n \n // Set other (same) filters to right values:\n if (filter != null)\n {\n var setFilterName = filter.getName();\n for(var currFilter of this._filters)\n {\n var filterName = currFilter.getName();\n\n if (setFilterName == filterName)\n {\n if (currFilter instanceof SiteElementFilterArray && filter instanceof SiteElementFilterArray)\n {\n currFilter.setValues(filter.getValues());\n }\n else if (currFilter instanceof SiteElementFilterSingle && filter instanceof SiteElementFilterSingle)\n {\n currFilter.setValue(filter.getValue());\n }\n }\n }\n }\n \n var filterModel = this.getFilterModel();\n\n var url = this._navigation.getUrl(filterModel);\n history.replaceState(\n {}, \n \"Geen idee\", \n url);\n\n this.setFilters(filterModel, name);\n this._product.setFilterModel(filterModel);\n }\n private async setFilters(filters: ISiteFilterModel, skipName: string[]) {\n\n let request = new QueryRequest('/Assortment/Filters', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify(filters)\n });\n\n var response = await request.request();\n var jsonResponse: ISiteFilterResponse = await response.json();\n\n for(var filter of this._filters) {\n var filterName = filter.getName();\n\n if (skipName.indexOf(filterName) === -1) {\n var item = jsonResponse.filters\n .filter(a => a.filterName == filterName);\n filter.setContent(item[0]);\n }\n }\n }\n async reloadFilters() {\n await this.setFilters(this.getFilterModel(), []);\n }\n\n getDefaultLayout() {\n return this._defaultLayout;\n }\n getDefaultMobileLayout() {\n return this._defaultMobileLayout;\n }\n}\n\ninterface Event {\n stop(): void;\n}\ninterface Array {\n remove(item: T): T[];\n}\nEvent.prototype.stop = function() {\n this.preventDefault();\n this.stopPropagation();\n this.stopImmediatePropagation();\n}\nArray.prototype.remove = function(item: any) {\n let ax: number;\n while ((ax = this.indexOf(item)) !== -1) {\n this.splice(ax, 1);\n }\n return this;\n};\nfunction sleep(ms: number) {\n return new Promise(resolve => setTimeout(resolve, ms));\n}","class SiteKeyboard\n{\n private readonly _site: Site;\n\n constructor (site: Site)\n {\n this._site = site;\n \n QueryElement.get(document.body).on(\"keydown\", (e: KeyboardEvent) => {\n if(this.keyDown(e.keyCode)) {\n e.stop();\n }\n });\n }\n keyDown(keyCode: number): boolean {\n switch(keyCode) {\n case 113: // F2\n this._site.showHideConfidential();\n return true;\n }\n \n return false;\n }\n}","type SiteMessageSorts = 'Ok' | 'Error' | 'Warning' | 'Info';\n\nclass SiteMessage\n extends QueryElement {\n private readonly _touch: QueryTouch;\n\n constructor(message: IMessagePayloadResponse) {\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}","class SiteNavigation {\n\n private navigationUrl: ISiteNavigationUrl[] = \n [\n new SiteNavigationUrlListGroupId(),\n new SiteNavigationUrlArticleGroupId(),\n\n new SiteNavigationUrlListGroups(),\n new SiteNavigationUrlArticleGroups(),\n new SiteNavigationUrlArticleSorts(),\n new SiteNavigationUrlArticleHeight(),\n new SiteNavigationUrlArticleWidth(),\n new SiteNavigationUrlBaseColors(),\n new SiteNavigationUrlIndex(),\n new SiteNavigationUrlManufacturerSuppliers(),\n new SiteNavigationUrlPrice(),\n new SiteNavigationUrlTags(),\n new SiteNavigationUrlLocations(),\n new SiteNavigationUrlFavorites(),\n new SiteNavigationUrlQuery(),\n new SiteNavigationUrlOrderBy()\n ]\n \n\n getUrl(filters: ISiteFilterModel) {\n\n let url = \"/Assortment/\";\n\n if (filters.listGroup != null && filters.listGroup.length > 0)\n url += `${filters.listGroup}/`;\n else\n url += \"All/\";\n\n if (filters.articleGroupId != null && filters.articleGroupId.length > 0)\n url += `${filters.articleGroupId}/`;\n\n for (let navigation of this.navigationUrl) {\n \n let partUrl = navigation.appendUrl(filters);\n if (partUrl) {\n url += `${navigation.category}=${partUrl}/`;\n }\n }\n\n return url;\n }\n parseUrl(model: ISiteFilterModel, url: string) {\n let parts = url.split(\"/\");\n let split = /([^=]+)=(.*)/;\n\n // We always get /Assortment/ so start with 2\n if (parts.length > 2) {\n let x = 3;\n // Our first part is always the listGroupId\n model.listGroup = parts[2];\n\n // Our second part MIGHT BE articleGroupId\n if (parts.length > 3 && !split.test(parts[3])) {\n model.articleGroupId = parts[3];\n x = 4;\n }\n\n // Filters\n for (; x < parts.length; x++) {\n let result = split.exec(parts[x]);\n if (result != null) {\n for (let navigation of this.navigationUrl) {\n if (navigation.parseUrl(model, x, result[1], result[2]))\n break;\n }\n }\n }\n }\n return model;\n }\n\n public static encodeUrl(url: string) {\n return encodeURIComponent(url);\n }\n\n public static decodeUrl(url: string) {\n return decodeURIComponent(url);\n }\n}\n\ninterface ISiteNavigationUrl {\n \n category: string;\n appendUrl(filters: ISiteFilterModel) : string | undefined;\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) : boolean;\n\n}\nclass SiteNavigationUrlListGroupId\n implements ISiteNavigationUrl {\n \n category = \"\";\n\n appendUrl(filters: ISiteFilterModel) {\n // return filters.ListGroupId\n return \"\";\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n //if (index == 0) {\n // return true;\n //}\n return false;\n }\n}\nclass SiteNavigationUrlArticleGroupId \n implements ISiteNavigationUrl {\n \n category = \"\";\n \n appendUrl(filters: ISiteFilterModel) {\n // return filters.ArticleGroupId\n return \"\";\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n //if (index == 1) {\n // return true;\n //}\n return false;\n }\n}\nclass SiteNavigationUrlFavorites\n implements ISiteNavigationUrl {\n\n category = \"Favorites\";\n\n appendUrl(filters: ISiteFilterModel) {\n if (filters.favorites == null)\n return \"\";\n \n return \"\" + filters.favorites;\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.favorites = value === 'true';\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlArticleGroups\n implements ISiteNavigationUrl {\n \n category = \"ArticleGroups\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.articleGroups?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.articleGroups = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlArticleSorts\n implements ISiteNavigationUrl {\n \n category = \"ArticleSorts\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.articleSorts?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.articleSorts = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlLocations\n implements ISiteNavigationUrl {\n \n category = \"Locations\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.locations?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.locations = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlArticleHeight\n implements ISiteNavigationUrl {\n \n category = \"ArticleHeight\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.articleHeight?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.articleHeight = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlArticleWidth\n implements ISiteNavigationUrl {\n \n category = \"ArticleWidth\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.articleWidth?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.articleWidth = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlBaseColors\n implements ISiteNavigationUrl {\n \n category = \"BaseColors\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.baseColors?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.baseColors = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlIndex\n implements ISiteNavigationUrl {\n \n category = \"Index\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.index?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.index = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlListGroups\n implements ISiteNavigationUrl {\n \n category = \"ListGroups\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.listGroups?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.listGroups = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlManufacturerSuppliers\n implements ISiteNavigationUrl {\n \n category = \"ManufacturerSuppliers\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.manufacturerSuppliers?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.manufacturerSuppliers = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlPrice\n implements ISiteNavigationUrl {\n \n category = \"Price\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.price?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.price = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlOrderBy\n implements ISiteNavigationUrl {\n \n category = \"OrderBy\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.orderBy;\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.orderBy = value;\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlTags\n implements ISiteNavigationUrl {\n \n category = \"Tags\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.tags?.map(a => SiteNavigation.encodeUrl(a)).join(\",\");\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.tags = value.split(\",\").map(a => SiteNavigation.decodeUrl(a));\n return true;\n }\n return false;\n }\n}\nclass SiteNavigationUrlQuery\n implements ISiteNavigationUrl {\n \n category = \"Query\";\n \n appendUrl(filters: ISiteFilterModel) {\n return filters.query;\n }\n parseUrl(model: ISiteFilterModel, index: number, category: string, value: string) {\n if (category == this.category) {\n model.query = value;\n return true;\n }\n return false;\n }\n}","class SiteBind\n extends QueryElement {\n\n constructor(element: HTMLElement) {\n super(element, false);\n\n let type = this.getAttr(\"data-type\");\n let text = this.getHtml();\n \n // Only execute on content\n if (text != null) {\n\n let content: string | null = null;\n\n switch(type)\n {\n case \"datetime\":\n content = new SiteBindDateTime(this).execute(text);\n break;\n }\n\n this.setHtml(content ?? \"\");\n }\n }\n}\n\ntype SiteBindDateTimeFormat = 'DateTime' | 'DateTimeShort' | \n 'Date' | 'DateShort' | 'Custom' | 'CustomUTC';\n\nclass SiteBindDateTime {\n private readonly _format: SiteBindDateTimeFormat;\n private readonly _customFormat: string;\n \n \n constructor(parent: SiteBind) {\n this._format = parent.getAttr(\"data-format\") as SiteBindDateTimeFormat;\n this._customFormat = parent.getAttr(\"data-format-custom\") as string;\n }\n\n execute(text: string)\n {\n var queryDate = new QueryDate(new Date(text));\n\n switch(this._format) {\n case \"Date\":\n return queryDate.format(\"dd-mm-yyyy\", true);\n case \"DateShort\":\n return queryDate.format(\"dd-mm\", true);\n case \"DateTime\":\n return queryDate.format(\"dd-mm-yyyy HH:MM:ss\", false);\n case \"DateTimeShort\":\n return queryDate.format(\"dd-mm HH:MM\", false);\n case \"Custom\":\n return queryDate.format(this._customFormat, false);\n case \"CustomUTC\":\n return queryDate.format(this._customFormat, true);\n }\n }\n\n}","interface ISiteElementButtonConfig {\n title: string;\n icon: string;\n}\n\nclass SiteElementButton\n extends QueryElement {\n \n private readonly _title: QueryElement;\n private readonly _icon: QueryElement;\n \n constructor(config: ISiteElementButtonConfig) {\n super(document.createElement(\"DIV\"));\n\n this._title = QueryElement.QueryElement(\"SPAN\");\n this._icon = QueryElement.QueryElement(\"I\");\n \n this.setTitle(config.title);\n this.setIcon(config.icon);\n\n this.append(this._title);\n this.append(this._icon);\n\n this.addClass(\"element-button\");\n }\n\n setTitle(title: string) {\n this._title.setText(title);\n }\n setIcon(icon: string) {\n this._icon.setText(icon);\n }\n}","type SiteBuyResponse = 'Ok' | 'Error' | 'Unknown';\n\nclass SiteElementBuy\n extends QueryElement \n implements ISiteElementQuantityPickerSubmit {\n \n private readonly _id: string;\n private readonly _site: Site;\n private _listGroupId: string | null;\n\n constructor(element: HTMLElement, site: Site) {\n super(element);\n\n let id = this.getAttr(\"data-id\");\n if (id == null)\n throw \"ID not found!\";\n\n this._id = id;\n this._listGroupId = this.getAttr(\"data-listGroupId\");\n this._site = site;\n\n let quantityPicker = this.query(\".quantity-picker\")\n .createAll(a => new SiteElementQuantityPicker(a, this))\n .concat(this.query(\".quantity-picker-number\")\n .createAll(a => new SiteElementQuantityPickerNumber(a, this)));\n\n var x = 0;\n this.query(\".element-price\").create(a => {\n var quantityPickerItem = quantityPicker[x];\n x++;\n \n if (quantityPickerItem == null)\n return null;\n \n return new SiteElementPrice(a, quantityPickerItem)\n });\n\n var customFields = this.query(\".custom-fields\").create(a => new SiteElementCustomFields(a, this));\n this.query(\".custom-fields-preview\").create(a => customFields && new SiteElementCustomFieldsPreview(a, customFields));\n\n }\n\n async submit(debtorId: string, quantity: number, customFields: {[key: string]: string}) : Promise {\n let request = new QueryRequest(\n `/Cart/Create/${this._id}`, {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify({\n quantity: quantity,\n listGroupId: this._listGroupId,\n debtorId: debtorId,\n customFields: customFields\n })\n });\n\n var response = await request.request();\n var jsonResponse: IResponse = await response.json();\n switch(jsonResponse.type)\n {\n case \"Cart\":\n {\n let payLoad = jsonResponse.payLoad;\n if (payLoad.succeeded)\n {\n this._site.eventAddedPreOrder();\n return \"Ok\";\n }\n else\n {\n return \"Error\";\n }\n }\n case \"Message\":\n {\n let payLoad = jsonResponse.payLoad;\n this._site.addMessage(payLoad);\n\n if (payLoad.sort == \"Info\")\n {\n this._site.eventAddedPreOrder();\n return \"Unknown\";\n }\n else\n {\n return \"Error\";\n }\n }\n default:\n return \"Error\";\n }\n }\n}","class SiteElementCarousel\n extends QueryElement {\n\n private _items: QueryElement;\n private _nav: QueryElement;\n private _numberOfItems: number;\n private _active: number = 0;\n private _timer: number | undefined;\n \n \n constructor(element: HTMLElement) {\n super(element);\n\n let items = this.query(\".items\").first>();\n \n if (items == null)\n throw \"Element(s) not found!\";\n\n this._items = items;\n this._nav = QueryElement.QueryElement(\"DIV\")\n .addClass(\"nav\")\n .appendTo(this);\n this._numberOfItems = items.children().length;\n \n for(let x = 0; x < this._numberOfItems; x++) {\n QueryElement.QueryElement(\"DIV\")\n .appendTo(this._nav)\n .on(\"click\", a => {\n this.makeActive(x);\n });\n }\n\n this.makeActive(0);\n }\n\n setTimer() {\n if (this._timer != null)\n clearTimeout(this._timer);\n\n this._timer = setTimeout(() => {\n this.makeNextActive();\n }, 5000);\n }\n makeActive(index: number) {\n this.makeInactive(this._active);\n this.setTimer();\n \n this._active = index;\n\n var style = this._items.style();\n if (style != null)\n style.transform = `translateX(-${index * 100}%)`;\n \n this._nav.children()[index].addClass(\"active\");\n }\n private makeInactive(index: number) {\n this._nav.children()[index].removeClass(\"active\");\n }\n makeNextActive() {\n var next = this._active + 1;\n if (next > (this._numberOfItems - 1))\n next = 0;\n \n this.makeActive(next);\n }\n makePrevActive() {\n var prev = this._active - 1;\n if (prev < 0)\n prev = this._numberOfItems - 1;\n \n this.makeActive(prev);\n }\n\n\n}","interface ISiteElementCheckItem {\n addValue(value: ISiteFilterItemValue): void;\n removeValue(value: ISiteFilterItemValue): void;\n containsValue(value: ISiteFilterItemValue): boolean;\n}\n\nclass SiteElementCheckColorItem\n extends QueryElement {\n\n private readonly _filter: ISiteElementCheckItem;\n private readonly _value: ISiteFilterColorItemValue;\n \n constructor(\n filter: ISiteElementCheckItem, \n value: ISiteFilterColorItemValue) {\n \n super(document.createElement(\"A\"));\n\n this._filter = filter;\n this._value = value;\n \n this.addClass(\"element-filter-checkitem\");\n\n // Create a div container for color, title, and count\n let container = QueryElement.QueryElement(\"DIV\")\n .addClass(\"colorItemContainer\");\n\n // Create color span\n let color = QueryElement.QueryElement(\"SPAN\")\n .addClass(\"colorContainer\");\n\n const style = this.style();\n if (style && this._value.colorName) {\n style.setProperty('--item-backgroundcolor', this._value.colorName);\n switch(this._value.colorName)\n {\n default: \n style.setProperty('--item-color', \"#FFFFFF\");\n break;\n case \"white\":\n style.setProperty('--item-color', \"#000000\");\n break;\n case \"yellow\":\n style.setProperty('--item-color', \"#000000\");\n break;\n\n }\n }\n\n // Set the background color\n if (value.colorName) {\n const style = color.style();\n if (style) {\n style.backgroundColor = value.colorName; \n }\n }\n\n container.append(color); // Add color span to container\n \n let title = QueryElement.QueryElement(\"SPAN\")\n .addClass(\"title\")\n .setText(value.name);\n\n container.append(title);\n \n if (value.count != null) {\n let count = QueryElement.QueryElement(\"SPAN\")\n .addClass(\"count\")\n \n count.setText(value.count.toString());\n \n container.append(count); // Add count to container\n }\n\n // Append the container to the element\n this.append(container);\n \n // Check if this filter item is active\n if (filter.containsValue(value)) {\n this.makeActive();\n }\n this.on(\"click\", e => {\n this.click();\n });\n }\n\n click() {\n if (this.isActive()) {\n this._filter.removeValue(this._value);\n this.makeInactive();\n } else {\n this._filter.addValue(this._value);\n this.makeActive();\n }\n }\n makeActive() {\n this.addClass(\"active\");\n }\n makeInactive() {\n this.removeClass(\"active\");\n }\n isActive() {\n return this.containsClass(\"active\");\n }\n}","interface ISiteElementCheckItem {\n addValue(value: ISiteFilterItemValue): void;\n removeValue(value: ISiteFilterItemValue): void;\n containsValue(value: ISiteFilterItemValue): boolean;\n}\n\nclass SiteElementCheckItem\n extends QueryElement {\n\n private readonly _filter: ISiteElementCheckItem;\n private readonly _value: ISiteFilterItemValue;\n \n constructor(\n filter: ISiteElementCheckItem, \n value: ISiteFilterItemValue) {\n \n super(document.createElement(\"A\"));\n\n this._filter = filter;\n this._value = value;\n \n this.addClass(\"element-filter-checkitem\");\n \n let title = QueryElement.QueryElement(\"SPAN\")\n .addClass(\"title\")\n .setText(value.name);\n\n this.append(title);\n \n if (value.count != null) {\n let count = QueryElement.QueryElement(\"SPAN\")\n .addClass(\"count\")\n \n count.setText(value.count.toString());\n \n this.append(count);\n }\n \n if (filter.containsValue(value))\n this.makeActive();\n \n\n this.on(\"click\", e => {\n this.click();\n })\n }\n\n click() {\n if (this.isActive()) {\n this._filter.removeValue(this._value);\n this.makeInactive();\n } else {\n this._filter.addValue(this._value);\n this.makeActive();\n }\n }\n makeActive() {\n this.addClass(\"active\");\n }\n makeInactive() {\n this.removeClass(\"active\");\n }\n isActive() {\n return this.containsClass(\"active\");\n }\n}","const DATE_SECOND = 1;\nconst DATE_MINUTE = DATE_SECOND * 60;\nconst DATE_HOUR = DATE_MINUTE * 60;\nconst DATE_DAY = DATE_HOUR * 24;\n\ninterface ISiteElementCloseConfig\n{\n days: string;\n day: string;\n hours: string;\n hour: string;\n minutes: string;\n minute: string;\n seconds: string;\n second: string;\n}\n\nclass SiteElementClose\n extends QueryElement {\n \n private readonly _dateTime: Date;\n private readonly _countdown: any;\n private readonly _config: ISiteElementCloseConfig;\n\n constructor(element: HTMLElement, dateTime: Date) {\n super(element);\n \n this._config = QueryJSON.deserialize(this.getAttr(\"data-config\") || \"{}\");\n this._dateTime = dateTime;\n this._countdown = this.query(\".countdown\").first();\n this.loop();\n }\n\n loop() {\n var time = this._dateTime.getTime() - new Date().getTime() / 1000;\n \n var toReturn = [];\n if (time > DATE_DAY) {\n var days = Math.floor(time / DATE_DAY);\n toReturn.push(`${days} ${days > 1 ? this._config.days : this._config.day}`);\n time = time % DATE_DAY;\n }\n\n if (time > DATE_HOUR) {\n var hours = Math.floor(time / DATE_HOUR);\n toReturn.push(`${hours} ${hours > 1 ? this._config.hours : this._config.hour}`);\n time = time % DATE_HOUR;\n }\n\n if (time > DATE_MINUTE) {\n var minutes = Math.floor(time / DATE_MINUTE);\n toReturn.push(`${minutes} ${minutes > 1 ? this._config.minutes : this._config.minute}`);\n time = time % DATE_MINUTE;\n }\n\n if (time > DATE_SECOND) {\n var seconds = Math.floor(time / DATE_SECOND);\n toReturn.push(`${seconds} ${seconds > 1 ? this._config.seconds : this._config.second}`);\n }\n\n this._countdown.setHtml(toReturn.join(\" \"));\n\n window.setTimeout(() => this.loop(), 1000);\n }\n}","class SiteElementCollapsible\n extends QueryElement {\n\n\n constructor(element: HTMLElement) {\n super(element);\n\n var that = this;\n\n this.query(\".collapsible-on\").all(a => {\n a.on(\"click\", (e) => {\n that.toggleClass(\"collapsed\");\n e.stop();\n })\n });\n }\n\n async remove(removeInner?: boolean) {\n super.remove(removeInner);\n }\n\n}","class SiteElementCustomFields\n extends QueryElement {\n\n private _product: ISiteElementQuantityPickerSubmit;\n private _button: IQueryElement;\n\n constructor(element: HTMLElement, product: ISiteElementQuantityPickerSubmit) {\n super(element);\n\n this._product = product;\n\n var button = this.query(\".button\").first() ;\n if (button == null)\n throw \"Unable to find element\";\n\n this._button = button;\n this._button.on(\"click\", () => {\n this.submit();\n });\n\n this.reset();\n }\n\n values() {\n var toReturn :{[key: string]: string} = {};\n this.query(\"input,textarea\").all(a => {\n var name = a.getAttr(\"name\");\n var element = (a.get() as HTMLInputElement);\n if (name == null)\n return;\n\n if (a.getAttr(\"type\") == \"radio\")\n {\n if (element.checked)\n toReturn[name] = a.getVal() ?? \"\";\n }\n else\n {\n toReturn[name] = a.getVal() ?? \"\";\n }\n });\n\n return toReturn;\n }\n\n async submit() {\n \n var toReturn = this.values();\n this._button.addClass(\"status-busy\");\n\n var successful = await this._product.submit(\"\", 1, toReturn);\n switch (successful)\n {\n case \"Ok\":\n this._button.addClass(\"status-ok\");\n break;\n case \"Error\":\n this._button.addClass(\"status-error\");\n break;\n case \"Unknown\":\n this._button.addClass(\"status-unknown\");\n break;\n }\n\n this.reset();\n }\n\n reset() {\n this.query('input[type=\"text\"]').all(a => a.setVal(\"\"));\n }\n}","class SiteElementCustomFieldsPreview\n extends QueryElement {\n\n private _defaultText: string;\n\n constructor(element: HTMLElement, customFields: SiteElementCustomFields) {\n super(element);\n\n this._defaultText = this.getHtml() ?? \"\";\n\n setInterval(() => {\n var values = customFields.values();\n this.setAttr(\"class\", \"custom-fields-preview\");\n \n if (values[\"Font\"] != \"\")\n {\n this.addClass(`font-${values[\"Font\"]}`);\n }\n if (values[\"Description\"] != \"\")\n {\n this.setHtml(this.nl2br(values[\"Description\"]));\n }\n else\n {\n this.setHtml(this._defaultText);\n }\n }, 1000); \n }\n\n private nl2br(input: string) {\n return input.replace(/(\\r\\n|\\r|\\n)/g, '
');\n }\n}","\nclass SiteElementFavorite\n extends QueryElement {\n\n private readonly _site: Site;\n private readonly _id: string;\n\n constructor(element: HTMLElement, site: Site) {\n super(element);\n\n this._site = site;\n this._id = this.getAttr(\"data-id\") ?? \"\";\n\n this.on(\"click\", a => {\n this.click();\n });\n }\n\n isActive() {\n return this.containsClass(\"favorite-is-active\");\n }\n\n async click() {\n\n let request = new QueryRequest(\n `/Favorites/${this.isActive() ? \"Delete\" : \"Put\"}/${this._id}`, {\n contentType: 'json',\n method: 'get'\n });\n\n await request.request();\n\n if (this.isActive()) {\n this.removeClass(\"favorite-is-active\");\n this.addClass(\"favorite-is-inactive\");\n } else {\n this.addClass(\"favorite-is-active\");\n this.removeClass(\"favorite-is-inactive\");\n }\n\n var favorites = this._site.getFavorites();\n if (favorites != null)\n await favorites.reload();\n }\n\n}","interface ISiteElementFavoritesResponse\n{\n items: number;\n}\n\nclass SiteElementFavorites\n extends QueryElement {\n \n private readonly _site: Site;\n\n private readonly _number: IQueryElement;\n \n constructor(element: HTMLElement, site: Site) {\n super(element);\n\n this._site = site;\n\n let number = this.query(\".number\").first();\n\n\n if (number == null)\n throw \"Element(s) not found!\";\n\n this._number = number;\n this.reload();\n }\n\n async reload() {\n let request = new QueryRequest('/Favorites/Get', {\n contentType: 'json',\n method: 'get'\n });\n\n let response = await request.request();\n let jsonResponse: ISiteElementFavoritesResponse = await response.json();\n\n this._number.setHtml(jsonResponse.items.toString());\n\n if (this._site instanceof SiteAssortment) {\n await this._site.reloadFilters();\n }\n }\n}","interface ISiteFilter {\n getName(): string;\n setContent(values: ISiteFilterItem): void;\n hasValue(): boolean;\n}\n\ninterface ISiteElementFilterRenderer {\n getState(): any;\n}\ninterface ISiteElementFilterRendererQueryElement\n extends IQueryElement, ISiteElementFilterRenderer {\n \n}\n\nabstract class SiteElementFilter\n extends QueryElement\n implements ISiteFilter {\n\n private readonly _site: SiteAssortment;\n\n constructor(element: HTMLElement, site: SiteAssortment) {\n super(element);\n\n this._site = site;\n }\n getName(): string {\n return this.getAttr(\"data-filter\") || \"\";\n }\n getConfig(defaultConfig: T): T {\n let elementConfig = JSON.parse(this.getAttr(\"data-config\") || \"{}\");\n return {...defaultConfig, ...elementConfig};\n }\n\n protected getSite() {\n return this._site;\n }\n\n abstract hasValue(): boolean;\n abstract setContent(values: ISiteFilterItem): void;\n}","interface ISiteFilterArray \n extends ISiteFilter{\n \n getValues(): string[];\n setValues(value: string[]): void;\n addValue(value: string): void;\n removeValue(value: string): void;\n removeValues(): void;\n}\ntype SiteElementFilterArrayTypes = 'color' | 'checkbox';\n\nclass SiteElementFilterArray\n extends SiteElementFilter\n implements ISiteFilterArray {\n \n private _values: string[];\n private _renderer?: ISiteElementFilterRendererQueryElement;\n private _amount?: number;\n\n constructor(element: HTMLElement, site: SiteAssortment) {\n super(element, site);\n\n var amount = parseInt(this.getAttr(\"data-amount\") ?? \"\") || undefined;\n\n this._values = [];\n this._renderer = undefined;\n this._amount = amount;\n }\n\n getValues(): string[] {\n return this._values;\n }\n setValues(value: string[]) {\n this._values = value;\n }\n hasValue(): boolean {\n return this._values.length != 0;\n }\n containsValue(value: string): boolean {\n return this._values.indexOf(value) !== -1;\n }\n addValue(value: string): void {\n this._values.push(value);\n }\n removeValue(value: string): void {\n this._values.remove(value);\n }\n removeValues(): void {\n this._values = [];\n }\n updateFilterModel(updateAll: boolean): void {\n this.getSite().updateFilterModel(this,\n updateAll ? [] : [this.getName()]\n );\n }\n\n\n setContent(value: ISiteFilterItem): void {\n // -- Create new renderer\n let renderer: ISiteElementFilterRendererQueryElement;\n\n let state: any;\n if (this._renderer != null)\n state = this._renderer.getState();\n\n var type = (this.getAttr(\"data-type\") ?? \"checkbox\") as SiteElementFilterArrayTypes;\n \n switch(this.getAttr(\"data-renderer\"))\n {\n default:\n case \"Default\":\n renderer = new SiteElementFilterArrayDefaultRenderer(this, value, type, this._amount, state || SiteElementFilterArrayDefaultRenderer.getDefaultState());\n break;\n case \"Inline\":\n renderer = new SiteElementFilterArrayInlineRenderer(this, value, type);\n break;\n case \"Dropdown\":\n renderer = new SiteElementFilterArrayDropdownRenderer(this, value, type);\n break;\n }\n\n if (this._renderer != renderer) {\n // -- Remove old renderer\n if (this._renderer != null)\n this._renderer.remove();\n \n // -- Append new renderer\n this.append(renderer);\n\n // Add renderer reference:\n this._renderer = renderer;\n }\n }\n}","interface ISiteElementFilterArrayDefaultRendererConfig {\n isSingleSelect: boolean;\n}\n\nclass SiteElementFilterArrayDefaultRenderer\n extends QueryElement\n implements ISiteElementFilterRenderer, ISiteElementCheckItem {\n \n private readonly _filter: SiteElementFilterArray;\n private readonly _value: ISiteFilterItem;\n private readonly _config: ISiteElementFilterArrayDefaultRendererConfig;\n private readonly _clear: SiteElementButton;\n private _index: number;\n private _container: QueryElement;\n private _state: {\n showMore: boolean,\n isHide: boolean\n };\n private _maxVisibleItems: number;\n\n private readonly _type: SiteElementFilterArrayTypes;\n\n static getDefaultState() {\n return {\n showMore: false,\n isHide: false\n };\n }\n \n constructor(filter: SiteElementFilterArray, value: ISiteFilterItem, type: SiteElementFilterArrayTypes, amount: number | undefined, state: any) {\n super(document.createElement(\"DIV\"));\n\n this._filter = filter;\n this._value = value;\n this._index = 0;\n this._state = state;\n this._type = type;\n this._config = filter.getConfig({\n isSingleSelect: false\n });\n this._maxVisibleItems = amount || 10;\n\n this.addClass(\"element-filter-default\");\n\n var header = QueryElement.QueryElement(\"H2\")\n .setText(value.name);\n header.on(\"click\", () => {\n if (this._state.isHide)\n this.removeClass(\"hide\");\n else\n this.addClass(\"hide\");\n \n this._state.isHide = !this._state.isHide;\n });\n if (this._state.isHide)\n this.addClass(\"hide\");\n\n this._container = QueryElement.QueryElement(\"DIV\")\n .addClass(\"container\");\n this.showMore(this._state.showMore);\n\n this.append(header);\n this.append(this._container);\n \n // Append clear button\n let clear = new SiteElementButton({\n \"icon\": \"clear\",\n \"title\": \"Reset\"\n });\n clear.addClass(\"reset\");\n clear.on(\"click\", () => {\n this._filter.removeValues();\n this._filter.updateFilterModel(true);\n });\n this.append(clear);\n this._clear = clear;\n\n this.checkFilter();\n }\n\n addValue(value: ISiteFilterItemValue): void {\n if (this._config.isSingleSelect) {\n this._filter.removeValues();\n this.query(\".element-filter-checkitem\")\n .all(a => a.makeInactive());\n }\n\n this._filter.addValue(value.filterValue);\n this._filter.updateFilterModel(false);\n\n this.checkFilter();\n }\n removeValue(value: ISiteFilterItemValue): void {\n this._filter.removeValue(value.filterValue);\n this._filter.updateFilterModel(false);\n\n this.checkFilter();\n }\n checkFilter(): void {\n if (!this._filter.hasValue())\n this._clear.addClass(\"hidden\");\n else\n this._clear.removeClass(\"hidden\");\n }\n containsValue(value: ISiteFilterItemValue): boolean {\n return this._filter.containsValue(value.filterValue);\n }\n\n showMore(show: boolean) {\n this._state.showMore = show;\n for(let child of this._container.children()) {\n child.remove();\n }\n\n let buttonConfig : ISiteElementButtonConfig;\n if (show)\n buttonConfig = {\n title: \"\",\n icon: \"keyboard_arrow_up\"\n };\n else\n buttonConfig = {\n title: \"\",\n icon: \"keyboard_arrow_down\"\n };\n\n let button = new SiteElementButton(buttonConfig);\n button.on(\"click\", () => {\n this.showMore(!show);\n });\n\n this._index = 0;\n this._container.append(this.renderChilds(this._value.items, show));\n \n if (this._index > this._maxVisibleItems)\n this._container.append(button);\n }\n\n renderChilds(items: ISiteFilterItemValue[], show: boolean) {\n let container = QueryElement.QueryElement(\"UL\");\n \n for(let item of items) {\n if (this._index++ < this._maxVisibleItems || show)\n {\n let containerItem = QueryElement.QueryElement(\"LI\");\n \n switch(this._type)\n {\n default:\n new SiteElementCheckItem(this, item)\n .appendTo(containerItem);\n break;\n case \"color\":\n new SiteElementCheckColorItem(this, item as ISiteFilterColorItemValue)\n .appendTo(containerItem);\n break;\n }\n \n if (item.childs != null) {\n this.renderChilds(item.childs, show)\n .appendTo(containerItem);\n }\n\n container.append(containerItem);\n }\n else\n {\n break;\n }\n }\n\n return container;\n }\n\n getState() {\n return this._state;\n }\n}\n","interface SiteElementFilterArrayDropdownRendererConfig {\n isSingleSelect: boolean;\n}\n\nclass SiteElementFilterArrayDropdownRenderer\n extends QueryElement\n implements ISiteElementFilterRenderer, ISiteElementCheckItem {\n \n private readonly _filter: SiteElementFilterArray;\n private readonly _value: ISiteFilterItem;\n private readonly _config: SiteElementFilterArrayDropdownRendererConfig;\n private readonly _clear: SiteElementButton;\n private readonly _type: SiteElementFilterArrayTypes;\n \n constructor(filter: SiteElementFilterArray, value: ISiteFilterItem, type: SiteElementFilterArrayTypes) {\n super(document.createElement(\"DIV\"));\n\n this._filter = filter;\n this._value = value;\n this._type = type;\n this._config = this._filter.getConfig({\n isSingleSelect: false\n });\n \n this.addClass(\"element-filter-dropdown\")\n .addClass(\"element-hover\");\n\n var header = QueryElement.QueryElement(\"H2\")\n .addClass(\"element-hover-close\")\n .setText(value.name);\n \n this.append(header);\n\n // Append clear button\n let clear = new SiteElementButton({\n \"icon\": \"clear\",\n \"title\": \"\"\n });\n clear.addClass(\"reset\");\n clear.on(\"click\", () => {\n this._filter.removeValues();\n this._filter.updateFilterModel(true);\n });\n this.append(clear);\n this._clear = clear;\n\n this.append(this.renderChilds(value.items));\n this.checkFilter();\n\n var element = this.get();\n if (element == null)\n throw \"Element not found\";\n \n new SiteElementHover(element);\n }\n\n addValue(value: ISiteFilterItemValue): void {\n if (this._config.isSingleSelect) {\n this._filter.removeValues();\n this.query(\".element-filter-checkitem\")\n .all(a => a.makeInactive());\n }\n \n this._filter.addValue(value.filterValue);\n this._filter.updateFilterModel(false);\n\n this.checkFilter();\n }\n removeValue(value: ISiteFilterItemValue): void {\n this._filter.removeValue(value.filterValue);\n this._filter.updateFilterModel(false);\n\n this.checkFilter();\n }\n containsValue(value: ISiteFilterItemValue): boolean {\n return this._filter.containsValue(value.filterValue);\n }\n\n checkFilter(): void {\n if (!this._filter.hasValue())\n this._clear.addClass(\"hidden\");\n else\n this._clear.removeClass(\"hidden\");\n }\n\n renderChilds(values: ISiteFilterItemValue[]) {\n let container = QueryElement.QueryElement(\"UL\");\n \n for(let item of values) {\n let containerItem = QueryElement.QueryElement(\"LI\");\n\n switch(this._type)\n {\n default:\n new SiteElementCheckItem(this, item)\n .appendTo(containerItem);\n break;\n case \"color\":\n new SiteElementCheckColorItem(this, item as ISiteFilterColorItemValue)\n .appendTo(containerItem);\n break;\n }\n \n if (item.childs != null) {\n this.renderChilds(item.childs)\n .appendTo(containerItem);\n }\n\n container.append(containerItem);\n }\n\n return container;\n }\n\n getState() {\n return null;\n }\n}","interface SiteElementFilterArrayInlineRendererConfig {\n isSingleSelect: boolean;\n}\n\nclass SiteElementFilterArrayInlineRenderer\n extends QueryElement\n implements ISiteElementFilterRenderer, ISiteElementCheckItem {\n \n private readonly _filter: SiteElementFilterArray;\n private readonly _value: ISiteFilterItem;\n private readonly _config: SiteElementFilterArrayInlineRendererConfig;\n private readonly _type: SiteElementFilterArrayTypes;\n \n constructor(filter: SiteElementFilterArray, value: ISiteFilterItem, type: SiteElementFilterArrayTypes) {\n super(document.createElement(\"DIV\"));\n\n this._filter = filter;\n this._value = value;\n this._type = type;\n this._config = this._filter.getConfig({\n isSingleSelect: false\n });\n\n this.addClass(\"element-filter-inline\");\n\n this.append(this.renderChilds(value.items));\n }\n\n addValue(value: ISiteFilterItemValue): void {\n if (this._config.isSingleSelect) {\n this._filter.removeValues();\n this.query(\".element-filter-checkitem\")\n .all(a => a.makeInactive());\n }\n \n this._filter.addValue(value.filterValue);\n this._filter.updateFilterModel(false);\n }\n removeValue(value: ISiteFilterItemValue): void {\n this._filter.removeValue(value.filterValue);\n this._filter.updateFilterModel(false);\n }\n containsValue(value: ISiteFilterItemValue): boolean {\n return this._filter.containsValue(value.filterValue);\n }\n\n renderChilds(values: ISiteFilterItemValue[]) {\n let container = QueryElement.QueryElement(\"UL\");\n \n for(let item of values) {\n let containerItem = QueryElement.QueryElement(\"LI\");\n\n switch(this._type)\n {\n default:\n new SiteElementCheckItem(this, item)\n .appendTo(containerItem);\n break;\n case \"color\":\n new SiteElementCheckColorItem(this, item as ISiteFilterColorItemValue)\n .appendTo(containerItem);\n break;\n }\n \n if (item.childs != null) {\n this.renderChilds(item.childs)\n .appendTo(containerItem);\n }\n\n container.append(containerItem);\n }\n\n return container;\n }\n\n getState() {\n return null;\n }\n}\n","interface ISiteElementButtonConfig {\n title: string;\n icon: string;\n}\n\nclass SiteElementFilterClear\n extends QueryElement {\n \n constructor(element: HTMLElement, site: SiteAssortment) {\n super(element);\n \n var button = new SiteElementButton({\n title: \"\",\n icon: \"clear\"\n });\n button.on(\"click\", () => {\n site.clearFilterModel();\n site.updateFilterModel(null, []);\n });\n \n this.append(button);\n }\n \n}","interface ISiteFilterSingle \n extends ISiteFilter{\n \n getValue(): string;\n setValue(value?: string): void;\n}\n\nclass SiteFilterSingleValue\n implements ISiteFilterSingle {\n\n private readonly _name: string;\n private _value: string;\n\n constructor(name: string, value: string) {\n this._name = name;\n this._value = value;\n }\n\n getValue(): string {\n return this._value || \"\";\n }\n getName(): string {\n return this._name;\n }\n setValue(value: string): void {\n this._value = value;\n }\n setContent(values: ISiteFilterItem) {\n \n }\n hasValue(): boolean {\n return this._value.length != 0;\n }\n removeValue(): void {\n //this._value = \"\";\n }\n\n}\n\nclass SiteElementFilterSingle\n extends SiteElementFilter\n implements ISiteFilterSingle {\n \n private _value: string;\n private _renderer?: ISiteElementFilterRendererQueryElement;\n\n constructor(element:HTMLElement, site: SiteAssortment) {\n super(element, site);\n\n this._value = \"\";\n this._renderer = undefined;\n }\n \n getValue(): string {\n return this._value;\n }\n hasValue(): boolean {\n return this._value.length != 0;\n }\n removeValue(): void {\n this._value = \"\";\n }\n setValue(value: string) {\n this._value = value;\n }\n clearFilterModel(): void {\n this.getSite().clearFilterModel();\n }\n updateFilterModel(updateAll: boolean): void {\n this.getSite().updateFilterModel(this,\n updateAll ? [] : [this.getName()]\n );\n }\n\n setContent(value: ISiteFilterItem): void {\n // -- Create new renderer\n let renderer: ISiteElementFilterRendererQueryElement;\n\n let state: any;\n if (this._renderer != null)\n state = this._renderer.getState();\n\n switch(this.getAttr(\"data-renderer\"))\n {\n default:\n case \"Input\":\n renderer = this._renderer || new SiteElementFilterSingleInputRenderer(this, value);\n break;\n case \"ArticleGroup\":\n renderer = new SiteElementFilterSingleArticleGroupRenderer(this, value, this.getSite());\n break;\n case \"Dropdown\":\n renderer = new SiteElementFilterSingleDropdownRenderer(this, value);\n break;\n }\n \n if (this._renderer != renderer) {\n // -- Remove old renderer\n if (this._renderer != null)\n this._renderer.remove();\n \n // -- Append new renderer\n this.append(renderer);\n\n // Add renderer reference:\n this._renderer = renderer;\n }\n }\n}","class SiteElementFilterSingleArticleGroupRenderer\n extends QueryElement\n implements ISiteElementFilterRenderer {\n \n private readonly _filter: SiteElementFilterSingle;\n private readonly _value: ISiteFilterItem;\n private readonly _site: SiteAssortment;\n \n constructor(filter: SiteElementFilterSingle, value: ISiteFilterItem, site: SiteAssortment) {\n super(document.createElement(\"DIV\"));\n\n this._filter = filter;\n this._value = value;\n this._site = site;\n\n this.addClass(\"menu-large\")\n .addClass(\"articlegroups\")\n .addClass(\"element-hover\");\n \n this.append(QueryElement.QueryElement(\"I\")\n .addClass(\"element-hover-close\")\n .setText(\"menu\"));\n this.append(this.renderChilds(value.items).container);\n\n var element = this.get();\n if (element == null)\n throw \"Unable to get element\";\n \n new SiteElementHover(element);\n }\n\n renderChilds(values: ISiteFilterItemValue[]) {\n\n let container = QueryElement.QueryElement(\"UL\");\n\n let isActive = false;\n \n for(let item of values) {\n let id = `${item.filterValue.split(\"/\")[1]}-${item.name}`;\n let meActive = id == this._filter.getValue();\n\n let containerItem = QueryElement.QueryElement(\"LI\").addClass(\"element-hover\");\n\n var element = containerItem.get();\n if (element == null)\n throw \"Unable to get element\";\n \n new SiteElementHover(element);\n\n let containerUrl = QueryElement.QueryElement(\"SPAN\")\n .appendTo(containerItem);\n \n containerUrl.setText(item.name);\n containerUrl.on('click', e => {\n this.setValue(id);\n e.stop();\n });\n \n \n if (item.childs != null) {\n let result = this.renderChilds(item.childs);\n containerItem.append(result.container);\n \n // Check if inner child was active\n if (result.isActive == true)\n meActive = true;\n }\n\n if (meActive)\n containerItem.addClass(\"active\");\n \n if (!isActive)\n isActive = meActive;\n\n container.append(containerItem);\n }\n\n return {\n container: container,\n isActive: isActive\n };\n }\n setValue(id: string) {\n this._filter.clearFilterModel();\n this._filter.setValue(id);\n this._filter.updateFilterModel(true);\n }\n\n getState() {\n return null;\n }\n}","class SiteElementFilterSingleDropdownRenderer\n extends QueryElement\n implements ISiteElementFilterRenderer, ISiteElementCheckItem {\n \n private readonly _filter: SiteElementFilterSingle;\n private readonly _value: ISiteFilterItem;\n \n constructor(filter: SiteElementFilterSingle, value: ISiteFilterItem) {\n super(document.createElement(\"DIV\"));\n\n this._filter = filter;\n this._value = value;\n \n this.addClass(\"element-filter-dropdown\")\n .addClass(\"element-hover\");\n\n var header = QueryElement.QueryElement(\"H2\")\n .addClass(\"element-hover-close\")\n .setText(value.name);\n \n this.append(header);\n this.append(this.renderChilds(value.items));\n\n var element = this.get();\n if (element == null)\n throw \"Element not found\";\n \n new SiteElementHover(element);\n }\n\n addValue(value: ISiteFilterItemValue): void {\n\n this.query(\".element-filter-checkitem\")\n .all(a => a.makeInactive());\n \n this._filter.setValue(value.filterValue);\n this._filter.updateFilterModel(true);\n }\n removeValue(value: ISiteFilterItemValue): void {\n // Do nothing, cannot uncheck\n }\n containsValue(value: ISiteFilterItemValue): boolean {\n return this._filter.getValue() == value.filterValue;\n }\n\n renderChilds(values: ISiteFilterItemValue[]) {\n let container = QueryElement.QueryElement(\"UL\");\n \n for(let item of values) {\n let containerItem = QueryElement.QueryElement(\"LI\");\n\n new SiteElementCheckItem(this, item)\n .appendTo(containerItem);\n \n if (item.childs != null) {\n this.renderChilds(item.childs)\n .appendTo(containerItem);\n }\n\n container.append(containerItem);\n }\n\n return container;\n }\n\n getState() {\n return null;\n }\n}","class SiteElementFilterSingleInputRenderer\n extends QueryElement \n implements ISiteElementFilterRenderer {\n\n\n private readonly _input: QueryElement;\n private readonly _filter: SiteElementFilterSingle;\n \n private _timer?: number;\n\n constructor(filter: SiteElementFilterSingle, value: ISiteFilterItem) {\n super(document.createElement(\"DIV\"));\n this._filter = filter;\n\n this.addClass(\"element-filter-input\");\n \n var container = QueryElement.QueryElement(\"DIV\")\n .addClass(\"container\")\n\n this._input = QueryElement.QueryElement(\"INPUT\")\n .setAttr(\"type\", \"text\")\n .setAttr(\"name\", \"Search\")\n .setAttr(\"title\", \"Search\");\n \n this._input.setVal(filter.getValue());\n \n this._input.on(\"keyup\", () => {\n if (this._timer != null)\n window.clearTimeout(this._timer);\n \n this._timer = window.setTimeout(() => this.setValue(), 500);\n });\n \n container.append(this._input);\n this.append(container);\n }\n\n setValue() {\n this._filter.setValue(this._input.getVal() || \"\");\n this._filter.updateFilterModel(false);\n }\n giveFocus() {\n var element = this._input.get() as HTMLInputElement;\n element.selectionStart = 1000;\n element.selectionEnd = 1000;\n element.focus();\n }\n\n getState() {\n return null;\n }\n}","class SiteElementHide\n extends QueryElement {\n\n\n constructor(element: HTMLElement, site: Site) {\n super(element);\n\n this.on(\"click\", (e) => {\n this.parent()?.toggleClass(\"hide\");\n site.resize();\n e.stop();\n })\n }\n\n async remove(removeInner?: boolean) {\n super.remove(removeInner);\n }\n\n}","class SiteElementHover\n extends QueryElement {\n\n private _isActive: boolean;\n\n\n constructor(element: HTMLElement) {\n super(element, false);\n\n this._isActive = false;\n \n this.query(\".element-hover-close\").all((a) => {\n a.on(\"click\", () => {\n this.click();\n })\n });\n\n this.on(\"mouseenter\", () => {\n this.hover(true);\n });\n this.on(\"mouseleave\", () => {\n this.unhover(true);\n });\n }\n\n click() {\n if (this._isActive)\n return;\n \n if (this.containsClass(\"hover\"))\n this.unhover();\n else\n this.hover();\n }\n\n hover(force = false) {\n if (this._isActive && !force)\n return;\n\n this.addClass(\"hover\");\n this.action();\n }\n unhover(force = false) {\n if (this._isActive && !force)\n return;\n\n this.removeClass(\"hover\");\n this.action();\n }\n\n action() {\n this._isActive = true;\n setTimeout(() => {\n this._isActive = false;\n }, 100);\n }\n}","type SiteElementImageSizes = \"thumb\" | \"normal\" | \"zoom\";\ninterface ISiteElementImageSize {\n size: SiteElementImageSizes;\n src: string;\n}\ninterface ISiteElementImageSizes {\n sizes: ISiteElementImageSize[];\n}\n\nclass SiteElementImageFull\n extends QueryElement {\n\n private _info: ISiteElementImageSizes;\n private _parent: SiteElementImage;\n private _image: QueryElement;\n private _zoom: QueryElement;\n private _zoomWidth: number;\n private _zoomHeight: number;\n \n constructor(parent: SiteElementImage, info: ISiteElementImageSizes) {\n super(document.createElement(\"DIV\"));\n\n this._parent = parent;\n this._info = info;\n\n this.addClass(\"container\");\n \n var src = this._info.sizes.filter(a => a.size == \"normal\")[0].src;\n var srcZoom = this._info.sizes.filter(a => a.size == \"zoom\")[0].src;\n this._image = QueryElement.QueryElement(\"IMG\")\n .setAttr(\"src\", src)\n .appendTo(this);\n\n // Add magnify glass\n if (this._parent.getConfig().zoomFull == false) {\n this._zoom = QueryElement.QueryElement(\"DIV\")\n .addClass(\"zoom\")\n .appendTo(this);\n } else {\n this._zoom = QueryElement.QueryElement(\"DIV\")\n .addClass(\"zoom-full\")\n .appendTo(this);\n }\n\n var style = this._zoom.style();\n var config = this._parent.getConfig();\n if (style == null)\n throw \"Couldn't get style\";\n\n this._zoomWidth = config.zoomSize.width / 2;\n this._zoomHeight = config.zoomSize.height / 2;\n \n style.backgroundImage = `url(${srcZoom})`;\n style.backgroundRepeat = \"no-repeat\";\n style.width = `${config.sizes.normal.width * config.zoom}px`;\n style.height = `${config.sizes.normal.height * config.zoom}px`;\n\n this.on(\"pointermove\", (e: PointerEvent) => { this.onMove(e) });\n this.on(\"pointerenter\", () => { this.show() });\n this.on(\"pointerleave\", () => { this.hide() });\n }\n \n show() {\n this._zoom.addClass(\"visible\");\n }\n hide() {\n this._zoom.removeClass(\"visible\");\n }\n\n onMove(e: PointerEvent) {\n var config = this._parent.getConfig();\n var style = this._zoom.style();\n var dimensions = this._image.position();\n if (dimensions == null || style == null)\n throw \"Couldn't get style/position\";\n\n var position = this.getCursorPosition(e);\n var x = position.x;\n var y = position.y;\n\n if (this._parent.getConfig().zoomFull == false) {\n var offsetLeft = (dimensions.width - config.sizes.normal.width) / 2;\n var offsetTop = (dimensions.height - config.sizes.normal.height) / 2;\n\n if (x > (config.sizes.normal.width + offsetLeft) - (this._zoomWidth / config.zoom))\n x = (config.sizes.normal.width + offsetLeft) - (this._zoomWidth / config.zoom);\n if (x < (this._zoomWidth / config.zoom) + offsetLeft)\n x = (this._zoomWidth / config.zoom) + offsetLeft;\n if (y > (config.sizes.normal.height + offsetTop) - (this._zoomHeight / config.zoom))\n y = (config.sizes.normal.height + offsetTop) - (this._zoomHeight / config.zoom);\n if (y < (this._zoomHeight / config.zoom) + offsetTop)\n y = (this._zoomHeight / config.zoom) + offsetTop;\n\n\n style.left = `${x - this._zoomWidth}px`;\n style.top = `${y - this._zoomHeight}px`;\n\n style.backgroundPosition = `${(((x - offsetLeft) * config.zoom) - this._zoomWidth) * -1}px ${(((y - offsetTop) * config.zoom) - this._zoomHeight) * -1}px`;\n } else {\n var extraWidth = (this.get()?.clientWidth || config.sizes.normal.width) - config.sizes.normal.width;\n x-= (extraWidth / (config.zoom)) * (config.zoom - 1);\n style.backgroundPosition = `${(x * (config.zoom - 1)) * -1}px ${(y * (config.zoom - 1)) * -1}px`;\n }\n \n }\n\n getCursorPosition(e: PointerEvent) {\n var x = 0, y = 0;\n /* Get the x and y positions of the image: */\n var config = this._parent.getConfig();\n var position = this._image.position();\n if (position == null)\n throw \"Couldn't get position\";\n \n /* Calculate the cursor's x and y coordinates, relative to the image: */\n x = e.clientX - position.left;\n y = e.clientY - position.top;\n\n return {x : x, y : y};\n }\n}\n\nclass SiteElementImageThumb\n extends QueryElement {\n \n private _info: ISiteElementImageSizes;\n private _parent: SiteElementImage;\n\n constructor(parent: SiteElementImage, info: ISiteElementImageSizes) {\n super(document.createElement(\"IMG\"));\n\n this._parent = parent;\n this._info = info;\n\n this.on(\"click\", () => {\n var current = this._parent.getActive();\n if (current != null)\n current.makeInactive();\n \n this.makeActive();\n });\n\n this.setAttr(\"src\", this._info.sizes.filter(a => a.size == \"thumb\")[0].src);\n }\n\n makeActive() {\n this._parent.setFull(this._info);\n this.addClass(\"active\");\n this.get()?.scrollIntoView(false);\n }\n makeInactive() {\n this.removeClass(\"active\");\n }\n}\n\nclass SiteElementImage\n extends QueryElement {\n\n private _images : ISiteElementImageSizes[] = [];\n private _config = {\n zoom: 3,\n zoomFull: true,\n zoomSize: {\n width: 100,\n height: 100\n },\n sizes: {\n thumb: {\n width: 100,\n height: 100\n },\n normal: {\n width: 500,\n height: 500\n },\n zoom: {\n width: 1000,\n height: 1000\n }\n }\n }\n _container_full: QueryElement;\n _container_thumb: QueryElement;\n _container_image: QueryElement;\n _container_zoom: QueryElement;\n \n constructor(element: HTMLElement) {\n super(element);\n\n var pictures = this.query(\"picture\").all(a => a);\n for(let picture of pictures) {\n\n var image : ISiteElementImageSizes = {\n sizes: []\n };\n\n for (let child of picture.children()) {\n image.sizes.push({\n size: child.getAttr(\"data-width\") as SiteElementImageSizes,\n src: child.getAttr(\"srcset\") || \"\"\n });\n }\n\n this._images.push(image);\n }\n\n this._container_full = QueryElement.QueryElement(\"div\").addClass(\"full\");\n this._container_zoom = QueryElement.QueryElement(\"div\").addClass(\"zoom\");\n this._container_thumb = QueryElement.QueryElement(\"div\").addClass(\"thumb\");\n\n // -- Create image content\n this._container_image = QueryElement.QueryElement(\"div\")\n .addClass(\"image\")\n .appendTo(this._container_full);\n QueryElement.QueryElement(\"div\")\n .addClass(\"left\")\n .setHtml(\"keyboard_arrow_left\")\n .appendTo(this._container_full)\n .on(\"click\", () => this.prevActive());\n QueryElement.QueryElement(\"div\")\n .addClass(\"right\")\n .setHtml(\"keyboard_arrow_right\")\n .appendTo(this._container_full)\n .on(\"click\", () => this.nextActive());\n \n // -- Add thumbs\n for (let image of this._images) {\n new SiteElementImageThumb(this, image)\n .appendTo(this._container_thumb);\n }\n \n \n // Add both containers to this object\n this.append(this._container_full)\n .append(this._container_thumb);\n \n \n // Make first active\n this._container_thumb\n .firstChild()\n ?.makeActive();\n }\n\n setFull(image: ISiteElementImageSizes) {\n this._container_image.clear();\n this._container_image.append(\n new SiteElementImageFull(this, image)\n );\n }\n\n getActive() {\n return this._container_thumb.query(\".active\").first();\n }\n nextActive() {\n var active = this.getActive();\n if (active != null) {\n active.makeInactive();\n var nextItem = active.next();\n if (nextItem != null)\n nextItem.makeActive();\n else\n this._container_thumb.firstChild()?.makeActive();\n }\n }\n prevActive() {\n var active = this.getActive();\n if (active != null) {\n active.makeInactive();\n var nextItem = active.prev();\n if (nextItem != null)\n nextItem.makeActive();\n else\n this._container_thumb.lastChild()?.makeActive();\n }\n }\n getZoom() {\n return this._container_zoom;\n }\n getConfig() {\n return this._config;\n }\n}","class SiteElementLayout\n extends QueryElement {\n private readonly _site: SiteAssortment;\n \n constructor(element: HTMLElement, site: SiteAssortment) {\n super(element);\n\n this._site = site;\n\n this.query(\"a\").createAll(a => new SiteElementLayoutButton(a, this));\n this.children()[0].addClass(\"active\");\n }\n\n setLayout(element:IQueryElement, size: string) {\n this.children().forEach(a => a.removeClass(\"active\"));\n element.addClass(\"active\");\n this._site.setLayout(size);\n }\n}\n\nclass SiteElementLayoutButton\n extends QueryElement {\n\n constructor(element: HTMLElement, parent: SiteElementLayout) {\n super(element);\n\n var size = this.getAttr(\"data-set\") ?? \"\";\n this.on(\"click\", () => parent.setLayout(this, size))\n }\n}","class SiteElementOrderStatus\n extends QueryElement {\n \n private readonly _site: Site;\n \n constructor(element: HTMLElement, site: Site) {\n super(element);\n \n this._site = site;\n this.reload();\n }\n\n getSite() {\n return this._site;\n }\n\n async reload() {\n let request = new QueryRequest('/Assortment/OrderStatus', {\n contentType: 'json',\n method: 'get'\n });\n\n let response = await request.request();\n let jsonResponse = await response.text();\n\n this.setHtml(jsonResponse);\n }\n}","class SiteElementPopup\n extends QueryElement {\n \n private readonly _site: Site;\n private _container: QueryElement;\n private _close: QueryElement;\n private _containerInner: QueryElement;\n\n private _closeClick: (e: Event) => any;\n \n constructor(site: Site) {\n super(document.createElement(\"DIV\"));\n \n this._site = site;\n\n // Disable overflow of body\n document.body.style.overflow = \"hidden\";\n\n this.addClass(\"element-popup\");\n this.on(\"click\", e => {\n if (e.target == this.get()) {\n this._site.closePopup();\n }\n });\n\n this._container = QueryElement.QueryElement(\"div\")\n .appendTo(this);\n \n this._containerInner = QueryElement.QueryElement(\"div\")\n .addClass(\"popup\")\n .appendTo(this._container);\n \n this._close = QueryElement.QueryElement(\"i\")\n .addClass(\"close\")\n .setText(\"clear\")\n .appendTo(this._container);\n \n this._closeClick = this._close.on(\"click\", e => {\n this._site.closePopup();\n });\n }\n async request(url: string) {\n let request = new QueryRequest(url, {\n method: 'get'\n });\n \n let response = await request.request();\n this._containerInner.setHtml(await response.text());\n\n this._containerInner.query(\".element-image\").createAll(a => new SiteElementImage(a));\n this._containerInner.query(\".element-favorite\").createAll(a => new SiteElementFavorite(a, this._site));\n this._containerInner.query(\".element-buy\").createAll(a => new SiteElementBuy(a, this._site));\n this._containerInner.query(\".element-product-navigation\").createAll(a => new SiteElementProductNavigation(a, this._site as SiteAssortment, url));\n this._containerInner.query(\".display-product\").createAll(a => new SiteElementProductStaticContainer(a, this._site));\n this._containerInner.query(\".bind\").createAll(a => new SiteBind(a));\n }\n \n async remove(removeInner = true) {\n this._close.off(\"click\", this._closeClick);\n\n // Enable overflow of body\n document.body.style.overflow = \"visible\";\n \n await super.remove(removeInner);\n }\n}","interface ISiteElementPriceInfo {\n price: number;\n quantity: number;\n}\n\nclass SiteElementPrice\n extends QueryElement {\n\n \n constructor(element: HTMLElement, quantityPicker: ISiteElementQuantityPicker) {\n super(element);\n\n let prefix = this.query(\"span.prefix\").first();\n let decimals = this.query(\"span.decimals\").first();\n let values = JSON.parse(this.getAttr(\"data-values\") ?? \"{}\");\n\n if (prefix == null || decimals == null)\n throw \"Element(s) not found!\";\n\n let priceValueArray : ISiteElementPriceInfo[] = [];\n for(let x in values)\n {\n priceValueArray.push({\n price: values[x],\n quantity: parseInt(x)\n });\n }\n\n priceValueArray = priceValueArray\n .sort(function(a, b) {\n return a.quantity - b.quantity;\n })\n .reverse();\n \n quantityPicker.valueEvent.on(async (a) => {\n for(var x of priceValueArray) {\n if (x.quantity <= a) {\n prefix?.setHtml(Math.floor(x.price).toString());\n\n // Calculate decimals:\n var priceDecimals = (x.price % 1).toFixed(4).substring(2);\n if (priceDecimals[3] == \"0\") {\n priceDecimals = priceDecimals.slice(0, -1);\n\n if (priceDecimals[2] == \"0\") {\n priceDecimals = priceDecimals.slice(0, -1);\n }\n }\n decimals?.setHtml(priceDecimals);\n\n break;\n }\n }\n });\n }\n}","interface IQueryResponseStatistics {\n lastWrite: number;\n totalResults: number;\n}\n\nclass SiteElementProductNavigation\n extends QueryElement {\n private _prev: QueryElement;\n private _next: QueryElement;\n\n constructor(element: HTMLElement, site: SiteAssortment, url: string) {\n super(element);\n\n var id = url.substring(17);\n var products = site.query(\".element-product\").first();\n var product = products?.getById(id);\n\n if (product == null)\n this.remove();\n\n var prev = this.query(\".element-product-navigation-prev\").first>();\n var next = this.query(\".element-product-navigation-next\").first>();\n\n if (prev == null || next == null)\n throw \"Cannot find all elements.\";\n \n this._prev = prev;\n this._next = next;\n\n this._prev.on(\"click\", () => {\n var prevProduct = product?.parent()?.prev()?.lastChild();\n\n // Go to next page?\n if (prevProduct == null)\n prevProduct = product\n ?.parent()?.parent()?.parent()\n ?.prev()\n ?.firstChild()?.query(\".item\").last()?.lastChild();\n\n if (prevProduct != null)\n {\n prevProduct.get()?.scrollIntoView(false);\n site.openPopup(`${url.substring(0,17)}${prevProduct.getId()}`);\n }\n });\n this._next.on(\"click\", () => {\n var nextProduct = product?.parent()?.next()?.lastChild();\n\n // Go to next page?\n if (nextProduct == null)\n nextProduct = product\n ?.parent()?.parent()?.parent()\n ?.next()\n ?.firstChild()?.firstChild()?.lastChild();\n\n if (nextProduct != null)\n {\n nextProduct.get()?.scrollIntoView(false);\n site.openPopup(`${url.substring(0,17)}${nextProduct.getId()}`);\n }\n });\n }\n}\n\nclass SiteElementProduct\n extends QueryElement {\n\n private readonly _config = {\n perPage: 25,\n extraRowsTop: 2,\n extraRowsBottom: 2,\n\n maxRefresh: 120,\n autoRefresh: false\n };\n\n private readonly _style: CSSStyleDeclaration;\n private readonly _site: Site;\n private _templateWidth: number = 0;\n private _templateHeight: number = 0;\n private _layout: string | null = null;\n\n private _filterModel: ISiteFilterModel;\n private _width: number = 0;\n private _height: number = 0;\n private _top: number = 0;\n\n private _statistics: IQueryResponseStatistics = {\n totalResults: 25,\n lastWrite: 0\n };\n\n private _pages: SiteElementProductPage[]\n = [];\n\n private _listGroupId: string | null;\n\n constructor(element: HTMLElement, site: SiteAssortment, filterModel: ISiteFilterModel) {\n super(element);\n\n this._site = site;\n this._filterModel = filterModel;\n this._listGroupId = this.getAttr(\"data-listGroupId\") ?? null;\n \n let style = this.style();\n if (style === undefined)\n throw \"Couldn't access style attribute!\";\n\n this._style = style;\n let f = debounce(() => this.render(), 250);\n this._site.on(\"scroll\", f);\n \n window.onresize = () => this.resize();\n\n if(Site.isMobile())\n this.setLayout(site.getDefaultMobileLayout().toLowerCase());\n else\n this.setLayout(site.getDefaultLayout().toLowerCase());\n }\n getListGroupId() {\n return this._listGroupId;\n }\n getById(id: string) {\n return this.query(`[data-id=\"${id}\"]`).first();\n }\n getLayout() {\n return this._layout;\n }\n setLayout(name: string) {\n if (this._layout != null)\n this.removeClass(this._layout);\n \n var newLayout = `layout-${name}`;\n this.addClass(newLayout);\n this._layout = newLayout;\n\n this.calculateTemplateDimensions();\n this.resize();\n }\n\n scrollTop() {\n return window.scrollY - this._top;\n }\n\n private _displaying: { from: number, to: number } = {\n from: 0,\n to: 0\n };\n async render() {\n let scrollTop = this.scrollTop();\n let columns = this.getColumns();\n\n let firstRow = (scrollTop / this._templateHeight) - this._config.extraRowsTop;\n if (firstRow < 0)\n firstRow = 0;\n \n let lastRow = ((scrollTop + this._height) / this._templateHeight) + this._config.extraRowsBottom;\n let lastCalculatedRow = Math.ceil(this._statistics.totalResults / columns);\n if (lastRow > lastCalculatedRow)\n lastRow = lastCalculatedRow;\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}; LastCalculatedRow: ${lastCalculatedRow}; 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 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);\n if (request != null) {\n this._pages[x] = request;\n this.setStatistics(await this._pages[x].request());\n } \n }\n else {\n result.show();\n\n //if (result.isExpired())\n // this.setStatistics(await result.request());\n }\n }\n }\n resize() {\n let position = this.position();\n if (position === null)\n throw \"Can't get position\";\n \n this._top = position.top + document.documentElement.scrollTop;\n this._width = document.documentElement.clientWidth - position.left - (document.documentElement.clientWidth - position.right);\n this._height = document.documentElement.clientHeight;\n\n console.log(`Width: ${this._width}; Height: ${this._height}`);\n this.setStatistics(this._statistics);\n \n let elementAfter = this.children()\n for(var item of elementAfter)\n {\n item.resize();\n }\n this.render();\n }\n setStatistics(statistics: IQueryResponseStatistics) {\n this._statistics = statistics;\n if (statistics.totalResults == -1) {\n var position = this._pages[0].position();\n if (position)\n this._style.height = `${position.height}px`;\n } else {\n this._style.height = `${Math.ceil(this._statistics.totalResults / this.getColumns()) * this._templateHeight}px`;\n }\n }\n request(page: number) {\n var productPage = new SiteElementProductPage(this, page);\n\n this.append(productPage);\n return productPage;\n }\n getTemplateWidth() : number {\n return this._templateWidth;\n }\n getTemplateHeight() : number {\n return this._templateHeight;\n }\n getColumns() : number {\n return Math.floor(this._width / this._templateWidth) || 1;\n }\n getPerPage() : number {\n return this._config.perPage;\n }\n getFilterModel(): ISiteFilterModel {\n return this._filterModel;\n }\n getSite() {\n return this._site;\n }\n async setFilterModel(filter: ISiteFilterModel) {\n this._filterModel = filter;\n\n let firstPage = new SiteElementProductPage(this, 0);\n this._statistics = await firstPage.request();\n\n for(let page of this._pages) {\n if (page != null)\n await page.remove();\n }\n\n this._pages = [firstPage];\n this.append(firstPage);\n this.resize();\n }\n private calculateTemplateDimensions() {\n var itemTemplate = QueryElement.QueryElement(\"DIV\")\n .addClass(\"item\")\n .appendTo(this);\n \n var itemTemplateElement = itemTemplate.get() as HTMLElement;\n if (itemTemplateElement === null)\n throw \"Can't get element\";\n \n this._templateHeight = itemTemplateElement.offsetHeight;\n this._templateWidth = itemTemplateElement.offsetWidth;\n\n console.log(`TemplateWidth: ${this._templateWidth}; TemplateHeight: ${this._templateHeight}`);\n \n itemTemplateElement.remove();\n }\n}\n\nclass SiteElementProductPage\n extends QueryElement {\n\n private _page: number;\n private _style: CSSStyleDeclaration;\n private _limit: { start: number; end: number; }\n private _parent: SiteElementProduct;\n private _container: SiteElementProductContainer | null = null;\n\n constructor(parent: SiteElementProduct, page: number) {\n super(document.createElement(\"div\"));\n this.addClass(\"page\");\n\n let style = this.style();\n if (style === undefined)\n throw \"Unable to get style!\";\n\n this._page = page;\n this._style = style;\n this._parent = parent;\n\n let perPage = parent.getPerPage();\n\n this._limit = {\n start: (page * perPage),\n end: ((page + 1) * perPage)\n }\n\n console.log(`Page: ${page}`);\n\n this.resize();\n }\n resize() {\n let columns = this._parent.getColumns();\n var skipColumns = Math.floor(this._limit.start / columns);\n this._style.top = `${skipColumns * this._parent.getTemplateHeight()}px`;\n\n if (this._container != null) {\n this._container.resize();\n }\n }\n async request() {\n let request = new QueryRequest('/Assortment/Items', {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify({\n from: this._limit.start,\n to: this._limit.end,\n filter: this._parent.getFilterModel()\n })\n });\n\n let response = await request.request();\n if (response.status == 200) {\n this.setHtml(await response.text());\n\n var container = this.query(\".page-container\").create(a => new SiteElementProductContainer(a, this._parent, this._limit));\n if (container == null)\n throw \"Container doesn't exist!\";\n\n this._container = container;\n return this._container.getConfig();\n } else {\n this.setHtml(await response.text());\n let statistics : IQueryResponseStatistics = {\n lastWrite: 0,\n totalResults: -1\n };\n return statistics;\n }\n }\n show() {\n this._style.display = \"\";\n }\n hide() {\n this._style.display = \"none\";\n }\n}\n\nclass SiteElementProductStaticContainer\n extends QueryElement {\n\n constructor(element: HTMLElement, site: Site) {\n super(element);\n\n this.query(\".product\").createAll(a => new SiteElementProductItem(a, site, null));\n }\n}\n\nclass SiteElementProductContainer\n extends QueryElement {\n\n private _startSpacer: SiteElementProductSpacer;\n private _endSpacer: SiteElementProductSpacer;\n private _parent: SiteElementProduct;\n private _limit: { start: number; end: number; };\n private _config: IQueryResponseStatistics;\n\n constructor(element: HTMLElement, parent: SiteElementProduct, limit: { start: number; end: number; })\n {\n super(element);\n\n this._parent = parent;\n this._limit = limit;\n this._startSpacer = new SiteElementProductSpacer(this._parent, \"start\").appendTo(this);\n this._endSpacer = new SiteElementProductSpacer(this._parent, \"end\").appendTo(this);\n\n this.query(\".product\").createAll(a => new SiteElementProductItem(a, this.getSite(), this._parent.getListGroupId()));\n\n var config = this.getAttr(\"data-config\");\n if (config == null)\n throw \"Unable to read config!\";\n \n this._config = JSON.parse(config) as IQueryResponseStatistics;\n\n this.resize();\n }\n\n resize() {\n let columns = this._parent.getColumns();\n let startSpacer = this._limit.start % columns;\n let endSpacer = columns - (this._limit.end % columns);\n if (endSpacer == columns)\n endSpacer = 0;\n \n this._startSpacer.resize(startSpacer);\n this._endSpacer.resize(endSpacer);\n\n console.log(`Columns: ${columns}; StartSpacer: ${startSpacer}; EndSpacer: ${endSpacer}`);\n }\n\n getConfig()\n {\n return this._config;\n }\n\n getSite()\n {\n return this._parent.getSite();\n }\n}\n\n\nclass SiteElementProductItemFavorite\n extends QueryElement {\n\n private readonly _site: Site;\n private readonly _id: string;\n\n constructor(element: HTMLElement, site: Site, id: string) {\n super(element);\n\n this._site = site;\n this._id = id;\n\n if (this.getAttr(\"data-is-favorite\") == \"True\")\n this.addClass(\"active\");\n\n this.on(\"click\", a => {\n this.click();\n });\n }\n\n isActive() {\n return this.containsClass(\"active\");\n }\n\n async click() {\n\n let request = new QueryRequest(\n `/Favorites/${this.isActive() ? \"Delete\" : \"Put\"}/${this._id}`, {\n contentType: 'json',\n method: 'get'\n });\n\n await request.request();\n\n if (this.isActive()) {\n this.removeClass(\"active\");\n } else {\n this.addClass(\"active\");\n }\n\n var favorites = this._site.getFavorites();\n if (favorites != null)\n await favorites.reload();\n }\n\n}\n\nclass SiteElementProductItemHistory\n extends QueryElement {\n \n constructor(quantity: string) {\n super(document.createElement(\"div\"));\n\n this.addClass(\"item\")\n .setText(quantity);\n }\n}\n\ntype SiteElementProductItemStatuses = 'Ok' | 'Busy' | 'Error' | 'Unknown';\nclass SiteElementProductItem\n extends QueryElement\n implements ISiteElementQuantityPickerSubmit {\n\n private readonly _status: IQueryElement | null;\n private readonly _id: string;\n private readonly _listGroupId: string | null;\n private readonly _site: Site;\n private _currentStatus?: SiteElementProductItemStatuses;\n private _history: IQueryElement | null;\n\n constructor(element: HTMLElement, site: Site, listGroupId: string | null) {\n super(element);\n\n this._site = site;\n let id = this.getId();\n if (id == null)\n throw \"ID not found!\";\n \n this._id = id;\n this._listGroupId = listGroupId;\n\n let status = this.query(\".status\").first();\n let history = this.query(\".history\").first();\n let favorite = this.query(\".favorite\").create(a => new SiteElementProductItemFavorite(a, this._site, this._id));\n let quantityPicker = this.query(\".quantity-picker\")\n .createAll(a => new SiteElementQuantityPicker(a, this))\n .concat(this.query(\".quantity-picker-number\")\n .createAll(a => new SiteElementQuantityPickerNumber(a, this)));\n\n this._status = status;\n this._history = history;\n\n var x = 0;\n this.query(\".element-price\").create(a => {\n var quantityPickerItem = quantityPicker[x];\n x++;\n\n if (quantityPickerItem == null)\n return null;\n return new SiteElementPrice(a, quantityPickerItem);\n });\n\n // Parse popup\n this.query(\".event-popup\").all(a => {\n var href = a.getAttr(\"href\");\n if (href && href.charAt(0) != '#')\n a.setAttr(\"href\", `#${href}`);\n });\n \n this.query(\".event-redirect\").all(a => {\n a.on(\"click\", e => {\n var href = a.getAttr(\"href\");\n if (href) {\n window.location.href = href.replace(\"%7B0%7D\", encodeURIComponent(window.location.pathname))\n }\n e.stop();\n });\n });\n \n this.query(\".collapsible\").createAll(a => new SiteElementCollapsible(a));\n this.setHistory();\n }\n\n getId() {\n return this.getAttr(\"data-id\");\n }\n\n setHistory() {\n if (this._history == null)\n return;\n\n var items = this._site.getShoppingCart()?.getItem(this._id);\n if (items != null)\n {\n for(var item of items)\n {\n this._history.append(new SiteElementProductItemHistory(`${item.quantity} x ${item.quantityPerUnit}`));\n }\n }\n \n }\n\n async submit(debtorId: string, quantity: number) : Promise\n {\n // Prevent double firing\n if (this._currentStatus == \"Busy\")\n return \"Error\";\n \n this.setStatus(\"Busy\");\n\n let request = new QueryRequest(\n `/Cart/Create/${this._id}`, {\n contentType: 'json',\n method: 'post',\n data: JSON.stringify({\n quantity: quantity,\n listGroupId: this._listGroupId,\n debtorId: debtorId\n })\n });\n\n var response = await request.request();\n var jsonResponse: IResponse = await response.json();\n switch(jsonResponse.type)\n {\n case \"Cart\":\n {\n let payLoad = jsonResponse.payLoad;\n if (payLoad.succeeded)\n { \n this.setStatus(\"Ok\");\n this._site.eventAddedPreOrder();\n return \"Ok\";\n }\n else\n {\n this.setStatus(\"Error\");\n return \"Error\";\n }\n }\n case \"Message\":\n {\n let payLoad = jsonResponse.payLoad;\n this._site.addMessage(payLoad);\n\n if (payLoad.sort == \"Info\")\n {\n this.setStatus(\"Unknown\");\n this._site.eventAddedPreOrder();\n return \"Unknown\";\n }\n else\n {\n this.setStatus(\"Error\");\n return \"Error\";\n }\n }\n default:\n {\n this.setStatus(\"Error\");\n return \"Error\";\n }\n }\n }\n\n setStatus(status: SiteElementProductItemStatuses)\n {\n this._currentStatus = status;\n \n if (this._status == null)\n return;\n \n this._status.setAttr(\"class\", \"status\");\n switch(status)\n {\n case 'Ok':\n this._status.addClass(\"status-ok\").setHtml(`done`);\n break;\n case 'Busy':\n this._status.addClass(\"status-busy\").setHtml(`schedule`);\n break;\n case 'Error':\n this._status.addClass(\"status-error\").setHtml(`clear`);\n break;\n case 'Unknown':\n this._status.addClass(\"status-unknown\").setHtml(`question_mark`);\n break;\n }\n }\n}\nclass SiteElementProductSpacer\n extends QueryElement {\n \n private _style: CSSStyleDeclaration;\n private _parent: SiteElementProduct;\n\n constructor(parent: SiteElementProduct, 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 {\n this._style.width = `${number * this._parent.getTemplateWidth()}px`;\n this._style.flexGrow = number + \"\";\n }\n}","type SiteElementQuantityPickerStatuses = 'Ok' | 'Busy' | 'Error' | 'Unknown';\n\ninterface ISiteElementQuantityPickerConfig {\n minQuantity: number;\n maxQuantity: number;\n incrementQuantity: number;\n debtorId: string;\n}\ninterface ISiteElementQuantityPickerSubmit {\n submit(debtorId: string, quantity: number, customFields: {[key: string]: string}): Promise\n}\ninterface ISiteElementQuantityPicker\n extends IQueryElement {\n \n valueEvent: IQueryEventAsync;\n}\nclass SiteElementQuantityPicker\n extends QueryElement\n implements ISiteElementQuantityPicker {\n \n private _isDisabled: boolean;\n private readonly _product: ISiteElementQuantityPickerSubmit;\n \n private readonly _config: ISiteElementQuantityPickerConfig;\n private readonly _upButton: IQueryElement;\n private readonly _downButton: IQueryElement;\n private readonly _addButton: IQueryElement;\n private readonly _input: IQueryElement;\n\n private readonly _valueEvent: QueryEventAsync;\n get valueEvent(){ return this._valueEvent.expose(); } \n\n constructor(element: HTMLElement, product: ISiteElementQuantityPickerSubmit) {\n super(element);\n var config = this.getAttr(\"data-config\");\n\n if (config == null)\n throw \"Unable to get config\";\n \n this._valueEvent = new QueryEventAsync();\n this._config = QueryJSON.deserialize(config);\n\n this._product = product;\n this._isDisabled = false;\n\n var upButton = this.query(\".up\").first();\n var addButton = this.query(\".add\").first();\n var downButton = this.query(\".down\").first();\n var input = this.query(\".input input\").first();\n\n if (upButton == null || downButton == null || input == null || addButton == null)\n throw \"Element(s) not found!\";\n \n this._upButton = upButton;\n this._downButton = downButton;\n this._addButton = addButton;\n this._input = input;\n\n this._upButton.on(\"click\", e => {\n e.stop();\n this.up();\n });\n this._downButton.on(\"click\", e => {\n e.stop();\n this.down();\n });\n this._addButton.on(\"click\", e => {\n e.stop();\n this.submit();\n });\n\n this.reset();\n }\n\n up() {\n let value = this.getValue();\n value += this._config.incrementQuantity;\n\n if (value > this._config.maxQuantity)\n value = this.getValue();\n\n this.setValue(value);\n }\n down() {\n let value = this.getValue();\n value -= this._config.incrementQuantity;\n\n if (value < this._config.minQuantity)\n value = this.getValue();\n \n this.setValue(value);\n }\n async submit() {\n if (this._isDisabled)\n return;\n \n this.disable();\n this.setStatus(\"Busy\");\n let successful = await this._product.submit(this._config.debtorId, this.getValue(), {});\n this.enable();\n\n switch (successful)\n {\n case \"Ok\":\n this.setStatus(\"Ok\");\n break;\n case \"Error\":\n this.setStatus(\"Error\")\n break;\n case \"Unknown\":\n this.setStatus(\"Unknown\");\n break;\n }\n \n window.setTimeout(() => this.resetStatus(), 5000);\n this.reset();\n }\n reset() {\n this.setValue(this._config.minQuantity);\n }\n setStatus(status: SiteElementQuantityPickerStatuses) {\n this.resetStatus();\n this._addButton.addClass(`status-${status.toLowerCase()}`);\n }\n resetStatus() {\n this._addButton\n .removeClass(\"status-busy\")\n .removeClass(\"status-ok\")\n .removeClass(\"status-error\")\n .removeClass(\"status-unknown\");\n }\n buttonCheck() {\n var value = this.getValue();\n\n if ((value + this._config.incrementQuantity) > this._config.maxQuantity)\n this._upButton.addClass(\"disabled\");\n else\n this._upButton.removeClass(\"disabled\");\n \n if ((value - this._config.incrementQuantity) < this._config.minQuantity)\n this._downButton.addClass(\"disabled\");\n else\n this._downButton.removeClass(\"disabled\");\n }\n enable() {\n this._isDisabled = false;\n }\n disable() {\n this._isDisabled = true;\n }\n\n setValue(value: number) {\n this._input.setVal(value.toString());\n this._valueEvent.trigger(value);\n this.buttonCheck();\n }\n getValue() {\n let value = this._input.getVal() || \"0\";\n\n return parseInt(value);\n }\n}","class SiteElementQuantityPickerNumber\n extends QueryElement\n implements ISiteElementQuantityPicker {\n \n private _isDisabled: boolean;\n private readonly _product: ISiteElementQuantityPickerSubmit;\n \n private readonly _config: ISiteElementQuantityPickerConfig;\n private readonly _addButton: IQueryElement;\n private readonly _input: IQueryElement;\n\n private readonly _valueEvent: QueryEventAsync;\n get valueEvent(){ return this._valueEvent.expose(); } \n\n constructor(element: HTMLElement, product: ISiteElementQuantityPickerSubmit) {\n super(element);\n var config = this.getAttr(\"data-config\");\n\n if (config == null)\n throw \"Unable to get config\";\n \n this._valueEvent = new QueryEventAsync();\n this._config = QueryJSON.deserialize(config);\n\n this._product = product;\n this._isDisabled = false;\n\n var addButton = this.query(\".add\").first();\n var input = this.query(\".input input\").first();\n\n if (input == null || addButton == null)\n throw \"Element(s) not found!\";\n \n this._addButton = addButton;\n this._input = input;\n \n this._input.on(\"keyup\", (e: KeyboardEvent) => {\n switch(e.keyCode)\n {\n default:\n this._valueEvent.trigger(this.getValue());\n break;\n case 13: // ENTER\n this.submit();\n break;\n }\n });\n\n this._addButton.on(\"click\", e => {\n e.stop();\n this.submit();\n });\n\n this.reset();\n }\n async submit() {\n if (this._isDisabled)\n return;\n \n this.disable();\n this.setStatus(\"Busy\");\n let successful = await this._product.submit(this._config.debtorId, this.getValue(), {});\n this.enable();\n \n switch (successful)\n {\n case \"Ok\":\n this.setStatus(\"Ok\");\n break;\n case \"Error\":\n this.setStatus(\"Error\")\n break;\n case \"Unknown\":\n this.setStatus(\"Unknown\");\n break;\n }\n \n window.setTimeout(() => this.resetStatus(), 5000);\n this.reset();\n }\n reset() {\n this._input.setVal(\"\");\n }\n setStatus(status: SiteElementQuantityPickerStatuses) {\n this.resetStatus();\n this._addButton.addClass(`status-${status.toLowerCase()}`);\n }\n resetStatus() {\n this._addButton\n .removeClass(\"status-busy\")\n .removeClass(\"status-ok\")\n .removeClass(\"status-error\")\n .removeClass(\"status-unknown\");\n }\n enable() {\n this._isDisabled = false;\n }\n disable() {\n this._isDisabled = true;\n }\n \n getValue() {\n let value = this._input.getVal() || \"0\";\n return parseInt(value) * this._config.incrementQuantity;\n }\n}","interface ISiteElementScrollConfig {\n height: number;\n delay: number;\n}\n\nclass SiteElementScroll\n extends QueryElement {\n\n private _config: ISiteElementScrollConfig;\n private _rows: number;\n private _container: IQueryElement;\n private _button_more: IQueryElement;\n private _button_prev: IQueryElement;\n private _button_next: IQueryElement;\n private _currentRow: number;\n private _timer?: number;\n\n constructor(element: HTMLElement) {\n super(element, false);\n\n this._config = QueryJSON.deserialize(this.getAttr(\"data-config\") || \"{}\");\n\n var container = this.query(\".element-scroll-container\").first();\n var button_more = this.query(\".element-scroll-more\").first();\n var button_prev = this.query(\".element-scroll-prev\").first();\n var button_next = this.query(\".element-scroll-next\").first();\n\n if (container == null || button_more == null || button_next == null || button_prev == null)\n throw \"Can not find elements.\";\n \n this._container = container;\n this._button_more = button_more;\n this._button_prev = button_prev;\n this._button_next = button_next;\n\n this._button_more.on(\"click\", () => this.showAll());\n this._button_prev.on(\"click\", () => this.prevItem());\n this._button_next.on(\"click\", () => this.nextItem());\n \n var position = this._container.position();\n var style = this._container.style();\n if (position == null || style == null)\n throw \"Unable to get dimension.\";\n \n this._rows = Math.round(position.height / this._config.height);\n style.height = `${this._config.height}px`;\n\n this._currentRow = 0;\n\n this.loop();\n }\n loop() {\n if (this._config.delay == 0)\n return;\n\n window.clearTimeout(this._timer);\n\n this._timer = window.setTimeout(() => {\n this.nextItem();\n this.loop();\n }, this._config.delay * 1000);\n }\n\n nextItem() {\n if (this._currentRow == -1)\n return;\n\n this.loop();\n\n this._currentRow++;\n if (this._currentRow >= this._rows)\n this._currentRow = 0;\n\n var style = this._container.style();\n if (style != null)\n style.transform = `translateY(-${this._currentRow * this._config.height}px)`;\n }\n prevItem() {\n if (this._currentRow == -1)\n return;\n\n this.loop();\n\n this._currentRow--;\n if (this._currentRow < 0)\n this._currentRow = this._rows - 1;\n \n var style = this._container.style();\n if (style != null)\n style.transform = `translateY(-${this._currentRow * this._config.height}px)`;\n }\n showAll() {\n if (this._currentRow == -1) {\n var style = this._container.style();\n if (style != null) {\n style.transform = `translateY(0)`;\n style.height = `${this._config.height}px`\n }\n \n this._currentRow = 0;\n this.loop();\n }\n else {\n var style = this._container.style();\n if (style != null) {\n style.transform = `translateY(0)`;\n style.height = `${this._rows * this._config.height}px`\n }\n \n this._currentRow = -1;\n window.clearTimeout(this._timer);\n }\n\n }\n}","class SiteElementSearch\n extends QueryElement {\n \n constructor(element: HTMLElement) {\n super(element);\n\n var button = this.query(\".button-search\").first();\n var input = this.query(\".input-search\").first();\n\n if (input == null || button == null)\n throw \"Unable to find element(s)!\";\n\n\n button.on(\"click\", () => {\n if (input == null)\n return;\n\n window.location.href = `Assortment/All/Query=${input.getVal()}/OrderBy=Name/`\n })\n }\n}","interface ISiteElementShoppingCartResponse\n{\n trolley: string;\n price: string;\n items: ISiteElementShoppingCartItem[];\n previouslyOrderedItems: ISiteElementShoppingCartItem[];\n}\n\ninterface ISiteElementShoppingCartItem\n{\n id: string;\n orderId: string;\n name: string;\n description: string;\n quantity: number;\n quantityPerUnit: number;\n price: string;\n priceTotal: string;\n isPending: boolean;\n}\n\nclass SiteElementShoppingCart\n extends QueryElement {\n \n private readonly _site: Site;\n\n private readonly _number: IQueryElement;\n private readonly _price: IQueryElement;\n private readonly _trolley: IQueryElement;\n private readonly _container: SiteElementShoppingCartContainer;\n private _results?: ISiteElementShoppingCartResponse;\n \n constructor(element: HTMLElement, site: Site) {\n super(element);\n\n this._site = site;\n\n let number = this.query(\".number\").first();\n let price = this.query(\".price\").first();\n let trolley = this.query(\".trolley\").first();\n let container = this.query(\".details .container\").first();\n\n if (number == null || price == null || trolley == null || container == null)\n throw \"Element(s) not found!\";\n\n let containerElement = container.get() as HTMLElement;\n if (containerElement == null)\n throw \"Could not extract HTMLElement!\";\n\n this._number = number;\n this._price = price;\n this._trolley = trolley;\n this._container = new SiteElementShoppingCartContainer(this, containerElement);\n\n this.reload();\n }\n\n getSite() {\n return this._site;\n }\n\n getItem(id: string) {\n if (this._results == null)\n return null;\n \n var results = this._results.items.filter(a => a.orderId == id);\n results.concat(this._results.previouslyOrderedItems.filter(a => a.orderId == id));\n\n return results;\n }\n\n async reload() {\n let request = new QueryRequest('/Cart/Get', {\n contentType: 'json',\n method: 'get'\n });\n\n let response = await request.request();\n let jsonResponse: ISiteElementShoppingCartResponse = await response.json();\n this._results = jsonResponse;\n\n this._number.setHtml(jsonResponse.items.length.toString());\n this._trolley.setHtml(jsonResponse.trolley);\n this._price.setHtml(jsonResponse.price);\n this._container.addItems(jsonResponse.items);\n }\n}\n\nclass SiteElementShoppingCartContainer\n extends QueryElement {\n\n private _cart: SiteElementShoppingCart;\n\n constructor(cart: SiteElementShoppingCart, element: HTMLElement) {\n super(element);\n\n this._cart = cart;\n }\n addItems(items: ISiteElementShoppingCartItem[]) {\n // Remove old items\n for(let x of this.children()) {\n x.remove();\n }\n // Add new items\n for(let x of items) {\n new SiteElementShoppingCartContainerItem(this._cart, x)\n .appendTo(this);\n }\n }\n}\n\nclass SiteElementShoppingCartContainerItem\nextends QueryElement {\n\n private _cart: SiteElementShoppingCart;\n\n constructor(cart: SiteElementShoppingCart, item: ISiteElementShoppingCartItem) {\n super(document.createElement(\"dl\"));\n\n this._cart = cart;\n\n var title = QueryElement.QueryElement(\"dt\");\n title.setHtml(item.name + \" \" + item.description);\n\n var container = QueryElement.QueryElement(\"dd\");\n QueryElement.QueryElement(\"span\")\n .setHtml(item.quantity + \" x \" + item.quantityPerUnit)\n .appendTo(container);\n QueryElement.QueryElement(\"span\")\n .setHtml(\"x \" + item.price)\n .appendTo(container);\n QueryElement.QueryElement(\"span\")\n .setHtml(\"= \" + item.priceTotal)\n .appendTo(container);\n \n var button : SiteElementButton;\n if (item.isPending)\n {\n var button = new SiteElementButton({\n icon: \"schedule\",\n title: \"\"\n });\n }\n else\n {\n var button = new SiteElementButton({\n icon: \"clear\",\n title: \"\"\n });\n \n button.on(\"click\", async () => {\n let request = new QueryRequest(\n `/Cart/Delete/${item.id}`, {\n contentType: 'json',\n method: 'get'\n });\n \n var response = await request.request();\n var jsonResponse: IResponse = await response.json();\n switch(jsonResponse.type)\n {\n case \"Cart\":\n {\n let payLoad = jsonResponse.payLoad;\n this._cart.getSite().eventAddedPreOrder();\n }\n }\n });\n }\n\n\n this.append(title).append(container).append(button);\n }\n}","class SiteElementSticky\n extends QueryElement {\n\n private _style: CSSStyleDeclaration;\n private _height: number;\n private _lastScrollTop: number;\n private _startY: number;\n private _currentTop: number;\n private _setStartY: boolean;\n \n constructor(element: HTMLElement) {\n super(element);\n\n var style = this.style();\n if (style == null)\n throw \"Unable to get style!\";\n var parent = this.parent();\n if (parent == null)\n throw \"Unable to get parent!\";\n\n this._style = style;\n this._height = 0;\n this._startY = parseInt(style.top);\n this._currentTop = 0;\n this._lastScrollTop = 0;\n\n this._setStartY = style.top == \"\";\n\n window.addEventListener(\"scroll\", () => this.scroll());\n window.addEventListener(\"resize\", () => this.resize());\n\n this.resize();\n this.scroll();\n }\n\n scroll() {\n let top = document.documentElement.scrollTop;\n let position = this.position();\n if (position == null)\n throw \"Unable to get position!\";\n \n var changeY = top - this._lastScrollTop;\n\n let height = position.height;\n let minTop = this._startY;\n\n let maxTop = (height - (this._height)) * -1;\n \n if (maxTop > minTop)\n maxTop = minTop;\n \n let newTop = this._currentTop;\n if (changeY > 0) {\n newTop -= changeY;\n\n if (newTop < maxTop)\n newTop = maxTop;\n } else {\n newTop -= changeY;\n if (newTop > minTop)\n newTop = minTop;\n }\n \n if (newTop != this._currentTop)\n this._style.top = newTop + \"px\";\n\n this._lastScrollTop = top;\n this._currentTop = newTop;\n }\n resize() {\n var position = this.position();\n if (position == null)\n throw \"Unable to get position!\";\n \n if (this._setStartY)\n this._startY = position.y;\n this._height = document.documentElement.clientHeight;\n }\n}","interface IFileIdentifier {\n\n}\ntype SiteElementUploadFileProgress = 'succeeded' | 'inprogress' | 'failed';\n\nclass SiteElementUpload\n extends QueryElement {\n\n private readonly _name: string;\n private readonly _dropEvent: (data: QueryUploadFile) => Promise;\n private readonly _drop: QueryUpload;\n private readonly _files: IQueryElement;\n private readonly _provider: string;\n private readonly _input: IQueryElement;\n\n constructor(element: HTMLElement) {\n super(element);\n\n let provider = this.getAttr(\"data-provider\");\n let name = this.getAttr(\"data-name\");\n\n if (provider === null || name === null)\n throw \"No information about provider/name!\";\n\n this._name = name;\n this._provider = provider;\n\n this._input = QueryElement.QueryElement(\"input\")\n .setAttr(\"type\", \"file\")\n .setAttr(\"multiple\", \"multiple\")\n .appendTo(this);\n \n this._drop = new QueryUpload(document.createElement(\"div\"), this._input)\n .addClass(\"drop\")\n .setHtml(`cloud_uploadSleep uw bestanden hierheen om te uploaden.`)\n .appendTo(this);\n this._drop.on(\"dragover\", () => this.addClass(\"drag\"));\n this._drop.on(\"dragleave\", () => this.removeClass(\"drag\"));\n this._drop.on(\"drop\", () => this.removeClass(\"drag\"));\n \n this._files = QueryElement.QueryElement(\"div\")\n .addClass(\"files\")\n .appendTo(this);\n \n this._dropEvent = this._drop.dropEvent.on(async (a) => { await this.addFile(a); });\n }\n\n getName() {\n return this._name;\n }\n\n async addFile(file: QueryUploadFile) {\n await new SiteLabelUploadFile(this, file, this._provider)\n .appendTo(this._files)\n .upload();\n }\n async remove(removeInner = true) {\n await super.remove(removeInner);\n\n // Cleanup event\n this._drop.dropEvent.off(this._dropEvent);\n }\n}\nclass SiteLabelUploadFile\nextends QueryElement {\n\n private readonly _icon: IQueryElement;\n private readonly _file: QueryUploadFile;\n private readonly _provider: string;\n private readonly _element: SiteElementUpload;\n private readonly _input: QueryElement;\n private _id: any;\n private _state: SiteElementUploadFileProgress;\n\n public get id() { return this._id; }\n public get state() { return this._state; }\n\n constructor(element: SiteElementUpload, file: QueryUploadFile, provider: string) {\n super(document.createElement(\"div\"));\n\n this._element = element;\n this._file = file;\n this._provider = provider;\n this._state = \"failed\";\n\n this._icon = QueryElement.QueryElement(\"i\")\n .setHtml(SiteLabelUploadFile.mimeToIcon(file.type));\n \n this._input = QueryElement.QueryElement(\"input\")\n .setAttr(\"type\", \"text\")\n .setAttr(\"name\", `${this._element.getName()}[]`);\n \n let title = QueryElement.QueryElement(\"div\")\n .addClass(\"title\")\n .setHtml(file.name);\n \n this.addClass(\"file\")\n .append(this._icon)\n .append(this._input)\n .append(title);\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 }\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._input.setVal(response.id.objectName);\n\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 }\n\n setPreview(preview: string) {\n let style = this._icon.style();\n\n if (style !== undefined) {\n style.backgroundImage = `url(${preview})`;\n this._icon.setHtml(\"\");\n }\n }\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}"],"sourceRoot":"../../src/ts/Site/"}