{"version":3,"file":"e08ed6137742e1912cfc.js","mappings":"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","sources":["webpack:///./PimShop/wwwroot/js/ui/search/components/product-tile/product-tile.html?3725","webpack:///./PimShop/wwwroot/js/ui/search/facet.js","webpack:///./PimShop/wwwroot/js/ui/search/components/product-tile/product-tile.js","webpack:///./PimShop/wwwroot/js/binding/numeric.js","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter.html","webpack:///./PimShop/wwwroot/js/ui/search/category.js","webpack:///./PimShop/wwwroot/js/ui/search/components/pagination/pagination.html","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter-category.html","webpack:///./PimShop/wwwroot/js/ui/search/result.js","webpack:///./PimShop/wwwroot/js/ui/search/tile.js","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter.js","webpack:///./PimShop/wwwroot/js/ui/search/components/pagination/pagination.html?cfdc","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter-category.html?34b3","webpack:///./PimShop/wwwroot/js/binding/stopBinding.js","webpack:///./PimShop/wwwroot/js/ui/search/components/pagination/pagination.js","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter-category-page.html","webpack:///./PimShop/wwwroot/js/ui/search/price.js","webpack:///./PimShop/wwwroot/js/ui/search/facetvalue.js","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter-category-page.js","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter-category-page.html?a6c3","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter-category.js","webpack:///./PimShop/wwwroot/js/binding/shiftClick.js","webpack:///./PimShop/wwwroot/js/binding/slideDown.js","webpack:///./PimShop/wwwroot/js/ui/search/components/product-tile/product-tile.html","webpack:///./PimShop/wwwroot/js/vendor/ko.fastforeach.js","webpack:///./PimShop/wwwroot/js/ui/search/components/facet-filter/filter.html?3da6"],"sourcesContent":["module.exports = \"// Module\\nvar code = `<div class=\\\"product-tile\\\">\\r\\n\\r\\n <div class=\\\"product-tile-image-wrapper\\\">\\r\\n\\r\\n <div data-bind=\\\"visible: instanceCount > 1, attr: {title: instanceCount + ' varianten beschikbaar'}\\\" class=\\\"product-tile-instance-count\\\">\\r\\n <img class=\\\"product-tile-instance-icon\\\" src=\\\"/assets/icons/icon-variants-white-16.svg\\\"><span data-bind=\\\"text: instanceCount\\\"></span>\\r\\n </div>\\r\\n\\r\\n <button data-bind=\\\"click: addToFavorites\\\" class=\\\"product-tile-add-to-favourites\\\" type=\\\"button\\\">\\r\\n <!--<span data-bind=\\\"hidden: !isFavoriteLoading()\\\" class=\\\"spinner-border spinner-border-sm text-dark\\\"></span>-->\\r\\n <img data-bind=\\\"visible: !isFavorite() && !isFavoriteLoading()\\\" src=\\\"/assets/icons/icon-star-outline-24.svg\\\" title=\\\"Voeg toe aan favorieten\\\" />\\r\\n <img data-bind=\\\"visible: isFavorite() && !isFavoriteLoading()\\\" src=\\\"/assets/icons/icon-star-blue-24.svg\\\" title=\\\"Verwijder uit favorieten\\\" />\\r\\n </button>\\r\\n\\r\\n <a class=\\\"product-tile-image\\\" data-bind=\\\"attr: {href: slug}\\\">\\r\\n <img data-bind=\\\"attr: {src: thumbnail, alt: title}\\\" loading=\\\"lazy\\\" />\\r\\n </a>\\r\\n\\r\\n <div data-bind=\\\"visible: standards.length > 0, foreach: {data: standards, as: 'standard', noChildContext: false}\\\" class=\\\"product-tile-standards-wrapper\\\">\\r\\n <img data-bind=\\\"attr: {src: standard.icon, alt: standard.name, title: standard.name + ' - ' + \\\\$parent.displayStandards(standard)}\\\" class=\\\"product-tile-standard-icon\\\" />\\r\\n </div>\\r\\n\\r\\n </div>\\r\\n\\r\\n <div class=\\\"product-tile-info-wrapper\\\">\\r\\n\\r\\n <div class=\\\"product-tile-info\\\">\\r\\n <div data-bind=\\\"visible: brand !== null, text: brand\\\" class=\\\"product-tile-brand\\\"></div>\\r\\n <a data-bind=\\\"visible: categoryText != null, text: categoryText, attr: {href: categorySlug}\\\" class=\\\"product-tile-category\\\"></a>\\r\\n <a class=\\\"product-tile-title\\\" data-bind=\\\"attr: {href: slug}\\\" href=\\\"#\\\"><h3 data-bind=\\\"text: title\\\"></h3></a>\\r\\n <div data-bind=\\\"text: \\\\`Artikelnr. \\\\${firstSku}\\\\`\\\" href=\\\"#\\\" class=\\\"product-tile-data\\\"></div>\\r\\n <div data-bind=\\\"visible: properties !== null, foreach: {data: properties, as:'property', noChildContext: true}\\\">\\r\\n <div data-bind=\\\"text: \\\\`\\\\${property.key}: \\\\${property.value}\\\\`\\\" class=\\\"product-tile-data\\\"></div>\\r\\n </div>\\r\\n <!-- ko if: price !== null && (price.price > 0 || canCheckoutFreeItems) -->\\r\\n <div class=\\\"product-tile-stock in-stock\\\">\\r\\n <span data-bind=\\\"text: (stock > 0 ? 'Op voorraad' : 'Levertijd op aanvraag')\\\"></span>\\r\\n </div>\\r\\n <!-- /ko -->\\r\\n <!-- ko ifnot: price !== null && (price.price > 0 || canCheckoutFreeItems) -->\\r\\n <div class=\\\"product-tile-stock\\\">\\r\\n <span>Niet leverbaar</span>\\r\\n </div>\\r\\n <!-- /ko -->\\r\\n </div>\\r\\n\\r\\n <!-- ko if: price !== null && (price.price > 0 || canCheckoutFreeItems) -->\\r\\n <div class=\\\"product-tile-add-to-cart-container\\\">\\r\\n <div class=\\\"product-tile-price-container\\\">\\r\\n <div class=\\\"product-tile-price\\\">\\r\\n <span data-bind=\\\"text: price.displayPrice\\\" class=\\\"price\\\"></span>\\r\\n <span data-bind=\\\"visible: price.qtyModifier > 1\\\" class=\\\"unit\\\">\\r\\n /\\r\\n <span data-bind=\\\"text: price.qtyModifier\\\"></span>\\r\\n <span data-bind=\\\"text: price.uomDescription\\\"></span>\\r\\n </span>\\r\\n </div>\\r\\n <!--<div class=\\\"product-tile-tax\\\">\\r\\n <span data-bind=\\\"text: price.displayVatText\\\"></span>\\r\\n </div>-->\\r\\n </div>\\r\\n \\r\\n \\r\\n <!--<div class=\\\"product-tile-attribute-selector\\\">\\r\\n <label>Maat</label>\\r\\n <select>\\r\\n <option>One</option>\\r\\n <option value=\\\"1\\\">One</option>\\r\\n <option value=\\\"2\\\">Two</option>\\r\\n </select>\\r\\n </div>-->\\r\\n\\r\\n <!--ko if: price !== null-->\\r\\n <div class=\\\"product-tile-quantity-wrapper\\\">\\r\\n <form method=\\\"POST\\\" class=\\\"quantity-wrapper\\\" action=\\\"#\\\">\\r\\n <input data-bind=\\\"click: decreaseQty, attr: {disabled: quantity() <= 1 ? true : null}\\\" type=\\\"button\\\" class=\\\"quantity-button decrease\\\" title=\\\"Aantal verlagen\\\" />\\r\\n <input data-bind=\\\"value: quantity, numeric: item.quantity\\\" type=\\\"text\\\" inputmode=\\\"numeric\\\" pattern=\\\"[0-9]*\\\" spellcheck=\\\"false\\\" class=\\\"quantity-input\\\" />\\r\\n <input data-bind=\\\"click: increaseQty\\\" type=\\\"button\\\" class=\\\"quantity-button increase\\\" title=\\\"Aantal verhogen\\\" />\\r\\n </form>\\r\\n <button data-bind=\\\"click: addToCart\\\" class=\\\"primary-button medium add-to-cart-button\\\" type=\\\"button\\\" title=\\\"Toevoegen aan winkelwagen\\\">\\r\\n <img data-bind=\\\"hidden: isAddToCartLoading() || isAddedToCart()\\\" src=\\\"/assets/icons/icon-addtocart-white-32.svg\\\" />\\r\\n <img data-bind=\\\"hidden: !isAddToCartLoading() || isAddedToCart()\\\" src=\\\"/assets/icons/icon-loadingcart-white-32.svg\\\" />\\r\\n <img data-bind=\\\"hidden: !isAddedToCart()\\\" src=\\\"/assets/icons/icon-checkcart-white-32.svg\\\" class=\\\"icon-checkcart\\\" />\\r\\n </button>\\r\\n </div>\\r\\n <!-- /ko -->\\r\\n\\r\\n </div>\\r\\n <!-- /ko -->\\r\\n\\r\\n </div>\\r\\n\\r\\n</div>\\r\\n\\r\\n`;\\n// Exports\\nmodule.exports = code;\"","define(['ko', '_', 'search/facetvalue'], function (ko, _, facetValueVM) {\r\n return function (facet) {\r\n var self = this;\r\n\r\n self.name = facet.name;\r\n self.label = facet.label;\r\n self.count = facet.count;\r\n self.values = ko.observableArray(_.map(facet.values, function (val) { return new facetValueVM(val)}));\r\n self.showValues = ko.observable(false);\r\n\r\n self.getCheckedValues = function () {\r\n return _.filter(self.values(), function(val) {\r\n return val.checked();\r\n }); \r\n }\r\n \r\n self.toggleValue = function () {\r\n self.showValues(!self.showValues());\r\n }\r\n };\r\n});\r\n","define(['ko', '_', 'search/price', 'text!./product-tile.html', 'bindings/numeric'], function (ko, _, priceViewModel, htmlString) {\r\n function ProductTile(params) {\r\n var self = this;\r\n var product = params.product;\r\n self.title = product.title;\r\n self.brand = product.brand;\r\n self.id = product.id;\r\n self.categoryId = product.category;\r\n self.categories = product.categories;\r\n self.price = product.price !== null ? new priceViewModel(product.price) : null;\r\n self.quantity = ko.observable(self.price !== null ? parseInt(self.price.minOrderQty, 10) : 1);\r\n self.instanceCount = product.instanceCount;\r\n self.thumbnail = product.thumbnail;\r\n self.standards = product.standards;\r\n self.highlight = product.highlight;\r\n self.firstSku = product.firstSku;\r\n self.stock = product.stock !== null ? product.stock : 0;\r\n self.properties = product.properties;\r\n self.canCheckoutFreeItems = product.price != null && product.price.canCheckoutFreeItems;\r\n\r\n self.isFavorite = ko.observable(params.isFavorite);\r\n self.isFavoriteLoading = ko.observable(false);\r\n self.isAddToCartLoading = ko.observable(false);\r\n self.isAddedToCart = ko.observable(false);\r\n /**\r\n * Display/start the cart check animation\r\n * @param finishAnimation <img.icon-checkcart> element\r\n */\r\n self.finishLoading = function (finishAnimation) {\r\n // restart the .SVG animation by appending a random hash\r\n finishAnimation.src = finishAnimation.src + '#' + Math.random();\r\n self.isAddedToCart(true);\r\n // reset to default button after 750ms\r\n _.delay(function() {\r\n self.isAddedToCart(false);\r\n }, 750);\r\n };\r\n \r\n self.slug = product.slug;\r\n \r\n self.categoryText = ko.pureComputed(function() {\r\n if(self.categories !== null && !_.isEmpty(self.categories)) {\r\n return self.categories[0].name;\r\n }\r\n return null;\r\n });\r\n self.categorySlug = ko.pureComputed(function() {\r\n if(self.categories !== null && !_.isEmpty(self.categories)) {\r\n var catUrl = \"/categories\";\r\n _.forEach(_.reverse(self.categories), (cat, i) => {\r\n catUrl += \"/\" + cat.slug;\r\n });\r\n return catUrl;\r\n }\r\n return null; \r\n });\r\n\r\n // todo: separate viewmodel with computed prop\r\n self.displayStandards = function (standard) {\r\n return _.join(\r\n _.map(_.filter(standard.values, (val) => !_.isNull(val.value)), (val) =>{\r\n if(_.isEmpty(val.value)) {\r\n return val.name; \r\n }\r\n return val.name + ': ' + val.value})\r\n , ' | ');\r\n };\r\n \r\n self.increaseQty = function() {\r\n self.quantity(self.quantity() + 1);\r\n };\r\n self.decreaseQty = function() {\r\n if(self.quantity() <= 1) {\r\n return false;\r\n }\r\n self.quantity(self.quantity() - 1);\r\n };\r\n\r\n self.addToCart = function (event, data) {\r\n var finishAnimation = data.currentTarget.querySelector('.icon-checkcart');\r\n self.isAddToCartLoading(true);\r\n var url = '/internal-api/add-to-cart?sku=' + self.firstSku + '&qty=' + self.quantity();\r\n fetch(url, {\r\n method: 'GET',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n redirect: 'follow',\r\n referrerPolicy: 'no-referrer',\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n var cartCounter = document.getElementById('header-shopping-cart-quantity');\r\n cartCounter.innerText = _.sumBy(data.items, 'quantity');\r\n var cartAmount = document.getElementById('header-shopping-cart-amount');\r\n cartAmount.innerText = new Intl.NumberFormat('nl-NL', {style: 'currency', currency: 'EUR'}).format(data.total);\r\n })\r\n .finally(function () {\r\n self.isAddToCartLoading(false);\r\n self.finishLoading(finishAnimation);\r\n });\r\n };\r\n\r\n self.addToFavorites = function () {\r\n self.isFavoriteLoading(true);\r\n var url = '/internal-api/add-to-favorites?sku=' + self.firstSku;\r\n fetch(url, {\r\n method: 'GET',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n redirect: 'follow',\r\n referrerPolicy: 'no-referrer',\r\n })\r\n .then(response => response.json())\r\n .then(data => {\r\n if (_.isArray(data)) {\r\n self.isFavorite(_.includes(data, self.firstSku));\r\n }\r\n })\r\n .finally(function () {\r\n console.log('klaar met favorites request');\r\n self.isFavoriteLoading(false);\r\n });\r\n }\r\n }\r\n\r\n return {viewModel: ProductTile, template: htmlString};\r\n});\r\n","define(['ko'], function(ko) {\r\n ko.bindingHandlers.numeric = {\r\n init: function (element, valueAccessor) {\r\n $(element).on(\"keydown\", function (event) {\r\n // Allow: backspace, delete, tab, escape, and enter\r\n if (event.keyCode == 46 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 27 || event.keyCode == 13 ||\r\n // Allow: Ctrl+A\r\n (event.keyCode == 65 && event.ctrlKey === true) ||\r\n // Allow: . ,\r\n (event.keyCode == 188 || event.keyCode == 190 || event.keyCode == 110) ||\r\n // Allow: home, end, left, right\r\n (event.keyCode >= 35 && event.keyCode <= 39)) {\r\n // let it happen, don't do anything\r\n // return true;\r\n }\r\n else {\r\n // Ensure that it is a number and stop the keypress\r\n if (event.shiftKey || (event.keyCode < 48 || event.keyCode > 57) && (event.keyCode < 96 || event.keyCode > 105)) {\r\n event.preventDefault();\r\n }\r\n }\r\n });\r\n }\r\n };\r\n});\r\n","// Module\nvar code = `<div class=\"filter\">\r\n <div data-bind=\"text: facet.label\" class=\"filter-heading\"></div>\r\n <div class=\"filter-panel\">\r\n <input data-bind=\"attr: { name: 'filters[' + \\$index() + '].Name', value: facet.name }\" type=\"hidden\"/>\r\n <form data-bind=\"visible: showFacetSearch\" class=\"filter-search\">\r\n <input data-bind=\"textInput: facetSearchQuery, attr: {placeholder: 'Zoeken naar ' + _.toLower(facet.label)}\" class=\"filter-search-input\" type=\"search\" name=\"searchterm\" placeholder=\"Zoeken\" autocomplete=\"off\" autocapitalize=\"off\">\r\n <button data-bind=\"click: resetFacetSearchQuery\" type=\"reset\" class=\"clear-icon\"></button>\r\n </form>\r\n <ul data-bind=\"css: {'open': facet.showValues()}\" class=\"facets-list\">\r\n <!-- ko foreach: matchingFacetValues().slice(0, facetLimit()) -->\r\n <li class=\"facet-item\">\r\n <input data-bind=\"\r\n attr: {\r\n id: \\$parent.facet.name + '_' + \\$data.name(),\r\n name: 'filters['+\\$parentContext.\\$index()+'].Values',\r\n value: \\$data.name()\r\n },\r\n checked: \\$data.checked,\r\n event: {change: \\$root.handleSubmit}\"\r\n type=\"checkbox\">\r\n <label data-bind=\"text: label, attr: { for: \\$parent.facet.name + '_' + \\$data.name() }\"></label>\r\n <!-- ko if: \\$parent.facet.name != 'stock' -->\r\n <span data-bind=\"text: \\`(\\${count()})\\`\" class=\"filter-count\">0</span>\r\n <!-- /ko -->\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: matchingFacetValueCount() > 5 -->\r\n <!-- ko ifnot: facet.showValues -->\r\n <li data-bind=\"click: facet.toggleValue\" class=\"facet-toggle facet-toggle-open\">\r\n <a data-bind=\"text: \\`toon meer (\\${matchingFacetValueCount()-5})\\`\" href=\"#!toggle\">toon meer</a>\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: facet.showValues() -->\r\n <li class=\"facet-toggle facet-toggle-closed\">\r\n <a data-bind=\"click: facet.toggleValue\" href=\"#!toggle\">toon minder</a>\r\n </li>\r\n <!-- /ko -->\r\n <!-- /ko -->\r\n <li data-bind=\"visible: _.isEmpty(matchingFacetValues()) && !_.isEmpty(facetSearchQuery())\">\r\n Geen opties gevonden voor \"<span data-bind=\"text: facetSearchQuery\">.</span>\"\r\n </li>\r\n </ul>\r\n \r\n </div>\r\n</div>\r\n`;\n// Exports\nmodule.exports = code;","define(['ko', '_'], function (ko, _) {\r\n return function (category, level) {\r\n var self = this;\r\n self.id = category.id;\r\n self.name = category.name;\r\n self.parent = category.parent;\r\n self.count = ko.observable(category.count);\r\n self.slug = category.slug;\r\n self.level = level;\r\n \r\n self.open = ko.observable(false);\r\n self.toggleState = function() {\r\n self.open(!self.open());\r\n }\r\n\r\n self.categories = category.categories;\r\n if(category.checked !== undefined) {\r\n self.checked = ko.observable(category.checked);\r\n } else {\r\n self.checked = ko.observable(false);\r\n }\r\n };\r\n});\r\n","// Module\nvar code = `<nav class=\"pager\">\r\n <!-- <div class=\"pager__amount product-amount\">-->\r\n <!-- <div class=\"product-amount__inner\">-->\r\n <!-- <label>-->\r\n <!-- Toon-->\r\n <!-- <select>-->\r\n <!-- <option>36</option>-->\r\n <!-- <option value=\"1\">72</option>-->\r\n <!-- <option value=\"2\">108</option>-->\r\n <!-- </select>-->\r\n <!-- </label>-->\r\n <!-- </div>-->\r\n <!-- </div>-->\r\n <div class=\"pagination-count\">\r\n <span>Pagina <span data-bind=\"text: currentPage()\"></span> van <span data-bind=\"text: totalPages()\"></span></span>\r\n </div>\r\n \r\n <ul class=\"pagination\">\r\n <!-- ko if: totalPages() !== 1 && currentPage() === 1-->\r\n <li class=\"pagination-item gotofirst disabled\">\r\n <img src=\"/assets/icons/icon-arrowfirst-grey-12.svg\" />\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: currentPage() === 1-->\r\n <li class=\"pagination-item previous disabled\">\r\n <img src=\"/assets/icons/icon-arrowback-grey-12.svg\" />\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: currentPage() > 1 -->\r\n <li data-bind=\"event:\r\n {click: \\$root.gotoFirstPage}\" class=\"pagination-item gotofirst\">\r\n <img src=\"/assets/icons/icon-arrowfirst-darkgrey-12.svg\" />\r\n </li>\r\n <li data-bind=\"event: {click: \\$root.gotoPreviousPage}\" class=\"pagination-item previous\">\r\n <img src=\"/assets/icons/icon-arrowback-darkgrey-12.svg\" />\r\n </li>\r\n <!-- /ko -->\r\n <li class=\"pagination-item first\"\r\n data-bind=\"css: {'active': currentPage() == 1}, event: {click: \\$root.gotoPage}\">\r\n <span>1</span>\r\n </li>\r\n <!-- ko if: (currentPage() >= 4) -->\r\n <div class=\"pagination-item dots\">\r\n <div class=\"dots__inner\">...</div>\r\n </div>\r\n <!-- /ko -->\r\n <!-- ko foreach: pages -->\r\n <li class=\"pagination-item\"\r\n data-bind=\"css: {'active': \\$parent.currentPage() == \\$data}, event: {click: \\$root.gotoPage}\">\r\n <span data-bind=\"text: \\$data\"></span>\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: (totalPages() - currentPage() >= 3) -->\r\n <div class=\"pagination-item dots\">\r\n <div class=\"dots__inner\">...</div>\r\n </div>\r\n <!-- /ko -->\r\n <!-- ko if: (totalPages() !== 1) -->\r\n <li class=\"pagination-item last\" data-bind=\"css: {'active': currentPage() == totalPages()}, event: {click: \\$root.gotoLastPage}\">\r\n <span data-bind=\"text: totalPages()\"></span>\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: currentPage() !== totalPages() -->\r\n <li data-bind=\"event: {click: \\$root.gotoNextPage}\" class=\"pagination-item next\">\r\n <img src=\"/assets/icons/icon-arrowforward-darkgrey-12.svg\" />\r\n </li>\r\n <li data-bind=\"event: {click: \\$root.gotoLastPage}\" class=\"pagination-item gotolast\">\r\n <img src=\"/assets/icons/icon-arrowlast-darkgrey-12.svg\" />\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: currentPage() === totalPages() -->\r\n <li class=\"pagination-item next disabled\">\r\n <img src=\"/assets/icons/icon-arrowforward-grey-12.svg\" />\r\n </li>\r\n <!-- /ko -->\r\n <!-- ko if: totalPages() !== 1 && currentPage() === totalPages()-->\r\n <li class=\"pagination-item gotolast disabled\">\r\n <img src=\"/assets/icons/icon-arrowlast-grey-12.svg\" />\r\n </li>\r\n <!-- /ko -->\r\n </ul>\r\n</nav>\r\n`;\n// Exports\nmodule.exports = code;","// Module\nvar code = `<div class=\"subcategories\">\r\n <div class=\"block-heading subcategories-heading\">\r\n Categorieën:\r\n </div>\r\n <ul style=\"list-style-type: none;\" data-bind=\"template: { name: 'node', foreach: categoryTree }\" id=\"subcategories-tree\" class=\"subcategories-tree level1\"></ul>\r\n</div>\r\n\r\n${\"<\" + \"script\"} type=\"text/html\" id=\"node\">\r\n <li class=\"tree-item facet-filter-category-option\">\r\n <!-- ko if: categories.length > 0 -->\r\n <label data-bind=\"attr: { for: \\`category-tree-input-\\${id}\\` }\">\r\n <span data-bind=\"text: name\" class=\"subcategory-title\"></span>\r\n <span data-bind=\"text: \\`(\\${count()})\\`\" class=\"filter-count\">()</span>\r\n <input data-bind=\"value: id, attr: {id: \\`category-tree-input-\\${id}\\`}, checked: \\$data.checked, event: {change: \\$root.handleSubmit}\" class=\"hidden\" type=\"checkbox\" />\r\n </label>\r\n <span data-bind=\"click: toggleState, css: {'tree-arrow-collapse': open}\" class=\"tree-arrow\"></span>\r\n <ul data-bind=\"template: { name: 'node', foreach: categories }, css: {'visible': open(), level2: level == 1, level3: level == 2}\" style=\"list-style-type: none\" class=\"nested subcategories-tree\" ></ul>\r\n <!-- /ko -->\r\n\r\n <!-- ko if: categories.length === 0 -->\r\n <label data-bind=\"attr: { for: \\`category-tree-input-\\${id}\\` }, css: {'active': checked}\" class=\"\">\r\n <span data-bind=\"text: name\" class=\"subcategory-title\"></span>\r\n <span data-bind=\"text: \\`(\\${count()})\\`\" class=\"filter-count\">()</span>\r\n <input data-bind=\"value: id, attr: {id: \\`category-tree-input-\\${id}\\`}, checked: \\$data.checked, event: {change: \\$root.handleSubmit}\" class=\"hidden\" type=\"checkbox\">\r\n </label>\r\n <!-- /ko -->\r\n </li>\r\n${\"<\" + \"/script\"}>\r\n`;\n// Exports\nmodule.exports = code;","define(['ko', '_', 'search/facet', 'search/facetvalue', 'search/category', 'bindings/stopBinding', 'bindings/shiftClick', 'koFastForeach'], function (ko, _, facetViewModel, facetValueViewModel, categoryViewModel) {\r\n ko.components.register('facet-filter', {\r\n viewModel: require('components/facet-filter/filter'),\r\n template: require('components/facet-filter/filter.html')\r\n });\r\n ko.components.register('facet-category-filter', {\r\n viewModel: require('components/facet-filter/filter-category'),\r\n template: require('components/facet-filter/filter-category.html')\r\n });\r\n ko.components.register('filter-category-page', {\r\n viewModel: require('components/facet-filter/filter-category-page'),\r\n template: require('components/facet-filter/filter-category-page.html')\r\n });\r\n ko.components.register('product-tile', {\r\n viewModel: require('components/product-tile/product-tile'),\r\n template: require('components/product-tile/product-tile.html')\r\n });\r\n ko.components.register('pagination', {\r\n viewModel: require('components/pagination/pagination'),\r\n template: require('components/pagination/pagination.html')\r\n });\r\n\r\n window.copyTree = function (originalTree, level) {\r\n if (_.isUndefined(level)) {\r\n level = 1;\r\n }\r\n return originalTree.map(function (category) {\r\n var vm = new categoryViewModel(category, level);\r\n if (category.categories.length >= 1) {\r\n vm.categories = copyTree(category.categories, level + 1);\r\n }\r\n\r\n return vm;\r\n\r\n });\r\n };\r\n\r\n return function SearchResultViewModel(pageType, term, products, pages, currentPage, resultCount, facets, favorites, restrictedFacets, favoriteSkus, categories, currentCategory) {\r\n self = this;\r\n\r\n var allowedPageTypes = ['category', 'search', 'favorites'];\r\n if (_.includes(allowedPageTypes, pageType)) {\r\n self.pageType = pageType;\r\n } else {\r\n console.debug('UNKNOWN PAGE TYPE: ' + pageType);\r\n self.pageType = 'search';\r\n }\r\n\r\n self.term = ko.observable(term);\r\n self.favoriteTerm = ko.observable(term.replace('*:*', ''));\r\n self.favoriteTermValue = ko.computed({\r\n read: function () {\r\n return self.favoriteTerm().replace('*:*', '');\r\n },\r\n write: function (value) {\r\n self.favoriteTerm(value);\r\n self.handleSubmit();\r\n },\r\n owner: self\r\n });\r\n\r\n self.isMerging = ko.observable(false);\r\n self.lastChecked = ko.observable(null);\r\n self.products = ko.observableArray(products);\r\n self.selectedProducts = ko.observableArray([]);\r\n self.currentPage = ko.observable(currentPage);\r\n self.currentCategory = !_.isUndefined(currentCategory) ? currentCategory : null;\r\n self.totalResults = ko.observable(resultCount);\r\n self.categoryTree = ko.observable(categories);\r\n self.selectedCategory = ko.pureComputed(function () {\r\n return flattenMyTree(self.categoryTree()).filter(function (c) {\r\n return c.checked() === true;\r\n })[0];\r\n });\r\n self.checkedCategories = ko.observableArray([]);\r\n self.pageSize = ko.observable(12);\r\n self.totalPages = ko.observable(pages);\r\n self.pageStart = ko.pureComputed(function () {\r\n return self.pageSize() * (self.currentPage() - 1) + 1;\r\n });\r\n self.pageEnd = ko.pureComputed(function () {\r\n return (self.pageStart() - 1) + self.products().length;\r\n });\r\n // public int PageStart => PageSize * (CurrentPage - 1) + 1;\r\n // public int PageEnd => PageStart -1 + Tiles.Count;\r\n // array of facet names which the user is not allowed to see or change\r\n self.restrictedFacets = ko.observableArray(!_.isEmpty(restrictedFacets) ? restrictedFacets : []);\r\n self.facets = ko.observableArray(facets.map(function (facet) {\r\n return new facetViewModel(facet);\r\n }));\r\n self.favorites = ko.observableArray(favorites);\r\n // undefined OR an array of skus. Should only be set on the favorites page.\r\n // will add a Sku filter with this value to all search request if this is NOT undefined\r\n self.favoriteSkus = favoriteSkus;\r\n\r\n self.loader = ko.observable(0);\r\n self.requestCounter = 0;\r\n\r\n // todo: cart (outside this viewmodel)\r\n\r\n // self.getStandardIcon = function(identifier) {\r\n // return _.find(self.standards(), ['identifier', identifier]).icon;\r\n // };\r\n\r\n self.isFavorite = function (sku) {\r\n return _.includes(self.favorites(), sku);\r\n };\r\n\r\n self.checkedFacets = ko.pureComputed(function () {\r\n var checked = [];\r\n self.facets().forEach(function (facet) {\r\n var selected = _.filter(facet.values(), function (val) {\r\n return val.checked();\r\n });\r\n selected.forEach(function (facetValue) {\r\n checked.push({name: facet.name, value: facetValue.name(), valueLabel: facetValue.label(), label: facet.label});\r\n });\r\n });\r\n return checked;\r\n });\r\n\r\n self.checkedFacetsGrouped = ko.pureComputed(function () {\r\n var groupedAndSorted = _.groupBy(_.sortBy(self.checkedFacets(), (facet) => facet.label), 'label');\r\n return _.map(_.toPairs(groupedAndSorted), (item) => {\r\n var restricted = false;\r\n if (!_.isEmpty(item) && !_.isEmpty(item[1])) {\r\n restricted = _.includes(self.restrictedFacets(), item[1][0].name);\r\n }\r\n return {key: item[0], values: item[1], restricted: restricted};\r\n });\r\n });\r\n /**\r\n * Returns true if selected facets/filters/categories should be visible\r\n */\r\n self.showFilterPills = ko.pureComputed(function () {\r\n if (self.pageType === 'category') {\r\n // category page has different logic to display selected categories. Hide the pills div if no regular facet is selected to prevent only showing a \"clear all filters\" button without any pills\r\n return _.filter(self.checkedFacetsGrouped(), {'restricted': false}).length > 0;\r\n }\r\n // all other pages can show the category pill(s)\r\n return _.filter(self.checkedFacetsGrouped(), {'restricted': false}).length > 0 || self.checkedCategories().length > 0;\r\n });\r\n\r\n /**\r\n * Remove all selected (facet/category)filters except restricted facets\r\n */\r\n self.clearAllFilters = function () {\r\n _.forEach(self.facets(), function (facet) {\r\n // do not clear restricted facets to prevent UI quirks\r\n if (!_.includes(self.restrictedFacets(), facet.name)) {\r\n _.forEach(facet.values(), function (value) {\r\n value.checked(false);\r\n });\r\n }\r\n });\r\n if (self.pageType !== 'category') {\r\n // category should not be unchecked on category pages\r\n flattenMyTree(self.categoryTree()).forEach(function (c) {\r\n c.checked(false);\r\n });\r\n }\r\n $('#search_filters input:checked').prop('checked', false);\r\n self.handleSubmit();\r\n };\r\n self.clearFilter = function (data) {\r\n var facet = _.find(self.facets(), ['name', data.name]);\r\n if (!_.isUndefined(facet)) {\r\n var val = _.find(facet.values(), function (val) {\r\n return val.name() === data.value;\r\n });\r\n if (!_.isUndefined(val)) {\r\n val.checked(false);\r\n }\r\n }\r\n self.handleSubmit();\r\n };\r\n self.selectCategory = function (data) {\r\n flattenMyTree(self.categoryTree()).forEach(function (c) {\r\n // only allow a single category to be selected (for now)\r\n c.checked(c.id === data.id);\r\n });\r\n self.handleSubmit();\r\n };\r\n self.clearCategories = function (data) {\r\n self.checkedCategories(_.filter(self.checkedCategories(), function (cat) {\r\n return cat !== data.id;\r\n }));\r\n flattenMyTree(self.categoryTree()).forEach(function (c) {\r\n // only allow a single category to be selected (for now)\r\n if (c.id === data.id) {\r\n c.checked(false);\r\n }\r\n });\r\n self.handleSubmit();\r\n };\r\n\r\n self.gotoPreviousPage = function () {\r\n if (self.currentPage() === 1) {\r\n return false;\r\n }\r\n self.gotoPage(self.currentPage() - 1);\r\n };\r\n self.gotoNextPage = function () {\r\n if (self.totalPages() === self.currentPage()) {\r\n return false;\r\n }\r\n self.gotoPage(self.currentPage() + 1);\r\n };\r\n self.gotoPage = function (page) {\r\n document.getElementById('products-wrapper').scrollIntoView({\r\n behavior: 'smooth'\r\n });\r\n self.handleSubmit(page);\r\n };\r\n self.gotoFirstPage = function () {\r\n self.gotoPage(1);\r\n };\r\n self.gotoLastPage = function () {\r\n self.gotoPage(self.totalPages());\r\n };\r\n\r\n self.appliedFilters = ko.observableArray([]);\r\n self.handleSubmit = function (page) {\r\n var previousCheckedCat = self.checkedCategories();\r\n self.checkedCategories([]);\r\n\r\n var newSelectedCats = flattenMyTree(self.categoryTree()).filter(function (c) {\r\n return c.checked() === true;\r\n }).map(function (c) {\r\n return c.id;\r\n });\r\n if (newSelectedCats.length > 1) {\r\n _.forEach(newSelectedCats, function (catId) {\r\n if (!_.includes(previousCheckedCat, catId)) {\r\n self.checkedCategories.push(catId);\r\n }\r\n });\r\n } else {\r\n newSelectedCats.forEach(function (id) {\r\n self.checkedCategories.push(id);\r\n });\r\n }\r\n\r\n self.appliedFilters([]);\r\n if (!_.isUndefined(page) && _.parseInt(page) > 0) {\r\n self.currentPage(page);\r\n } else {\r\n // when a filter is applied no page param is provided, reset to 1\r\n self.currentPage(1);\r\n }\r\n self.facets().map(function (facet, i) {\r\n var obj = {};\r\n var checkedValues = facet.getCheckedValues();\r\n if (checkedValues.length > 0) {\r\n obj.name = facet.name;\r\n obj.values = [];\r\n _.forEach(checkedValues, function (checkedValue) {\r\n obj.values.push(checkedValue.name);\r\n });\r\n if (facet.name !== 'category') {\r\n self.appliedFilters.push(obj);\r\n }\r\n }\r\n });\r\n\r\n self.searchProducts();\r\n };\r\n\r\n self.checkedCategoryModels = ko.computed(function () {\r\n var out = [];\r\n flattenMyTree(self.categoryTree()).filter(function (c) {\r\n return c.checked() === true;\r\n }).forEach(function (category) {\r\n out.push(category);\r\n });\r\n return out;\r\n });\r\n self.selectedCategoryTree = ko.pureComputed(function () {\r\n var out = [];\r\n if (_.isUndefined(self.selectedCategory())) {\r\n return out;\r\n }\r\n flattenMyTree(self.categoryTree()).forEach(function (c) {\r\n if (_.includes(self.selectedCategory().pathIds, c.id)) {\r\n out.push(c);\r\n }\r\n });\r\n return _.sortBy(out, function (c) {\r\n return c.pathIds.length;\r\n });\r\n });\r\n\r\n function flattenMyTree(tree) {\r\n function recurse(nodes, path, pathIds, parentId, parentSlug) {\r\n return _.map(nodes, function (node) {\r\n var newPath = _.union(path, [node.name]);\r\n var newPathIds = _.union(pathIds, [node.id]);\r\n var newSlug = _.union(parentSlug, [node.slug]);\r\n return [\r\n _.assign(\r\n {\r\n pathname: newPath.join(' > '),\r\n url: newSlug.join('/'),\r\n level: path.length,\r\n pathIds: newPathIds,\r\n parentId: parentId\r\n },\r\n _.omit(node, 'categories')\r\n ),\r\n recurse(node.categories, newPath, newPathIds, node.id, newSlug),\r\n ];\r\n });\r\n }\r\n\r\n return _.flattenDeep(recurse(tree, []));\r\n }\r\n\r\n // initalize checked categories on page load\r\n _.map(self.checkedFacets(), function (facet) {\r\n if (facet.name === 'category') {\r\n var checkedCategoryId = parseInt(facet.value, 10);\r\n self.checkedCategories.push(checkedCategoryId);\r\n flattenMyTree(self.categoryTree()).filter(function (c) {\r\n return c.id === checkedCategoryId;\r\n }).forEach(function (category) {\r\n category.checked(true);\r\n });\r\n }\r\n });\r\n\r\n self.abortController = new AbortController();\r\n self.abortSignal = self.abortController.signal;\r\n self.searchFavoriteProducts = function () {\r\n self.term(\"\");\r\n self.handleSubmit();\r\n };\r\n self.resetSearchFavoriteProducts = function () {\r\n self.favoriteTermValue(\"\");\r\n self.handleSubmit();\r\n };\r\n self.searchProducts = function () {\r\n\r\n var requestId = self.requestCounter;\r\n self.requestCounter++;\r\n self.loader(self.loader() + 1);\r\n\r\n const data = new URLSearchParams();\r\n var filterIndex = 0;\r\n _.forEach(self.appliedFilters(), function (filter, index) {\r\n data.append(`filters[${index}].Name`, filter.name);\r\n _.forEach(filter.values, function (filterValue) {\r\n data.append(`filters[${index}].Values`, filterValue());\r\n });\r\n filterIndex = index + 1;\r\n });\r\n if (self.checkedCategories().length > 0) {\r\n data.append(`categories[0]`, _.last(self.checkedCategories()));\r\n }\r\n if (self.pageType === 'category' && self.checkedCategories().length === 0) {\r\n data.append(`categories[0]`, self.currentCategory.id);\r\n }\r\n\r\n if (!_.isUndefined(self.favoriteSkus)) {\r\n data.append('favorites', 'true');\r\n data.append('searchterm', self.favoriteTermValue());\r\n } else {\r\n data.append('searchterm', self.term());\r\n }\r\n\r\n data.append('page', self.currentPage());\r\n\r\n // console.debug(data.toString());\r\n\r\n self.abortController.abort(); // abort previous requests\r\n self.abortController = new AbortController();\r\n\r\n fetch('/internal-api/search?', {\r\n method: 'POST',\r\n mode: 'cors',\r\n cache: 'no-cache',\r\n credentials: 'same-origin',\r\n redirect: 'follow',\r\n referrerPolicy: 'no-referrer',\r\n body: data,\r\n signal: self.abortController.signal,\r\n })\r\n .then(response => response.json())\r\n .then(response => {\r\n var shouldProcess = (requestId + 1) === self.requestCounter;\r\n if (!shouldProcess) {\r\n // console.log(`[SKIP] skip request ${requestId}`);\r\n return false;\r\n }\r\n // console.log(`[OK] process request ${requestId}`);\r\n self.products(response.tiles);\r\n\r\n var catTree = window.copyTree(response.categoryFacet, 1);\r\n self.categoryTree(catTree);\r\n\r\n var responseFacetVms = response.facets.map(function (facet) {\r\n return new facetViewModel(facet);\r\n });\r\n let responseFacets = _.keyBy(responseFacetVms, (facet) => facet.name);\r\n var vmFacets = _.keyBy(self.facets(), (facet) => facet.name);\r\n\r\n var vmFacetKeys = _.keys(vmFacets);\r\n var responseKeys = _.keys(responseFacets);\r\n\r\n var vmMissingKeys = _.difference(responseKeys, vmFacetKeys);\r\n var responseMissingKeys = _.difference(vmFacetKeys, responseKeys);\r\n // voeg alle filters toe die niet bestaan maar wel voorkomen in de response\r\n _.forEach(vmMissingKeys, (facetName) => {\r\n // console.log('add newly added facet: ' + facetName, responseFacets[facetName]);\r\n self.facets.push(responseFacets[facetName]);\r\n });\r\n // zet alle filters op 0 die niet voorkomen in de response\r\n _.forEach(responseMissingKeys, (facetName) => {\r\n // console.log('set all values count to 0 for facet: ' + facetName, vmFacets[facetName], vmFacets[facetName].values().length);\r\n _.forEach(vmFacets[facetName].values(), (val) => {\r\n val.count(0);\r\n });\r\n });\r\n // zet alle filters hun count die wel voorkomen in de response\r\n _.forEach(_.intersection(vmFacetKeys, responseKeys), (facetName) => {\r\n let matchingResponseFacet = responseFacets[facetName];\r\n let matchingVmFacet = vmFacets[facetName];\r\n _.forEach(matchingVmFacet.values(), (val) => {\r\n // attempt to find the matching facet value in the response\r\n var matchingValue = _.find(matchingResponseFacet.values(), (rVal) => rVal.name() === val.name());\r\n if (!_.isUndefined(matchingValue)) {\r\n // response has a new count for the facet value\r\n val.count(matchingValue.count());\r\n } else {\r\n\r\n // response doesn't have this facet value, make it 0 in the interface\r\n val.count(0);\r\n }\r\n });\r\n });\r\n // voeg alle filter opties toe die niet bestaan\r\n _.forEach(responseFacetVms, (facet) => {\r\n _.forEach(facet.values(), (val) => {\r\n if (!_.isUndefined(vmFacets[facet.name])) {\r\n var valMatch = _.find((vmFacets[facet.name].values()), (vmVal) => vmVal.name() === val.name());\r\n if (_.isUndefined(valMatch)) {\r\n vmFacets[facet.name].values.push(val);\r\n }\r\n }\r\n });\r\n });\r\n _.forEach(self.facets(), function (facet) {\r\n if (facet.name !== \"stock\" && facet.name !== \"category\") {\r\n facet.values.remove(function (facetValue) {\r\n return facetValue.count() === 0;\r\n });\r\n }\r\n });\r\n self.facets.remove(function (facet) {\r\n if (facet.name === \"stock\" || facet.name === \"category\") {\r\n return false;\r\n }\r\n\r\n return facet.values().length === 0;\r\n });\r\n\r\n self.totalPages(response.pages);\r\n self.currentPage(response.currentPage);\r\n self.totalResults(response.count);\r\n // self.pageSize(data.pageSize);\r\n })\r\n .catch(function (error) {\r\n console.error('fetch error:', error);\r\n })\r\n .finally(function () {\r\n self.loader(self.loader() - 1);\r\n // manually reset location.search to prevent strange issues\r\n const currentUrl = window.location.toString().replace(window.location.search.toString(), '');\r\n const url = new URL(currentUrl);\r\n url.searchParams.set('page', self.currentPage());\r\n\r\n if (!_.isUndefined(self.favoriteSkus)) {\r\n url.searchParams.set('favoriteterm', self.favoriteTermValue());\r\n } else {\r\n url.searchParams.set('searchterm', self.term());\r\n }\r\n\r\n // todo: apply category filters\r\n _.forEach(self.checkedCategories(), function (categoryId, index) {\r\n // console.log('SET URL FOR checked category: ' + categoryId);\r\n url.searchParams.set(`categories[${index}]`, categoryId);\r\n });\r\n _.forEach(self.appliedFilters(), function (filter, index) {\r\n url.searchParams.set(`filters[${index}].Name`, filter.name);\r\n _.forEach(filter.values, function (filterValue) {\r\n url.searchParams.append(`filters[${index}].Values`, filterValue());\r\n });\r\n });\r\n // Replace the category in the URL if path starts with /categorie/ or /categories/\r\n // This fixes: https://github.com/DistilBV/PimShop/issues/132\r\n var isCategoryPage = url.pathname.toLowerCase().startsWith('/categorie')\r\n if (isCategoryPage) {\r\n if (self.selectedCategory()) {\r\n // Update URL with the selected category's URL\r\n url.pathname = '/categories/' + self.selectedCategory().url;\r\n }\r\n }\r\n window.history.replaceState({}, '', url);\r\n });\r\n };\r\n };\r\n});\r\n\r\n","define(['ko'], function(ko) {\r\n return function(tile) {\r\n var self = this;\r\n \r\n console.log('tile', tile);\r\n self.title = tile.title;\r\n self.id = tile.id;\r\n self.instanceCount = tile.instanceCount;\r\n self.thumbnail = tile.thumbnail;\r\n self.standards = tile.standards;\r\n self.highlight = tile.highlight;\r\n self.firstSku = tile.firstSku;\r\n self.allProductsAvailable = tile.availableProducts > 0 && tile.availableProducts === tile.unavailableProducts;\r\n self.availableProducts = tile.availableProducts;\r\n self.unavailableProducts = tile.unavailableProducts;\r\n self.loading = ko.observable(false);\r\n };\r\n});\r\n","define(['ko', 'text!./filter.html', '_'], function(ko, htmlString, _) {\r\n function FacetComponentVM(params) {\r\n var self = this;\r\n self.facet = params.facet;\r\n\r\n self.orderByFields = {\r\n name: \"name\",\r\n count: \"count\"\r\n };\r\n self.orderBy = ko.observable(self.orderByFields.name);\r\n self.orderAsc = ko.observable(true);\r\n // Return asc/desc to use with _.orderBy\r\n self.orderByDirection = ko.pureComputed(function() {\r\n return self.orderAsc() ? \"asc\" : \"desc\";\r\n });\r\n self.toggleOrderBy = function() {\r\n self.orderBy(self.orderBy() === self.orderByFields.count ? self.orderByFields.name : self.orderByFields.count);\r\n self.orderAsc(self.orderBy() !== self.orderByFields.count); // default: order desc on count, asc on name\r\n };\r\n self.toggleOrderDirection = function() {\r\n self.orderAsc(!self.orderAsc());\r\n };\r\n self.setOrderByName = function() {\r\n self.orderAsc(true);\r\n self.orderBy(self.orderByFields.name);\r\n }\r\n self.setOrderByCount = function() {\r\n self.orderAsc(false);\r\n self.orderBy(self.orderByFields.count);\r\n }\r\n\r\n self.facetSearchQuery = ko.observable(\"\");\r\n self.resetFacetSearchQuery = function() {\r\n self.facetSearchQuery(\"\");\r\n };\r\n self.showFacetSearch = ko.pureComputed(function() {\r\n return self.facet.values().length > 5;\r\n });\r\n \r\n self.totalValueCount = ko.pureComputed(function(){\r\n return self.facet.values().length; \r\n });\r\n self.matchingFacetValueCount = ko.pureComputed(function(){\r\n return self.matchingFacetValues().length;\r\n });\r\n \r\n self.facetLimit = ko.pureComputed(function () {\r\n return self.facet.showValues() ? self.totalValueCount() : 5;\r\n })\r\n \r\n self.matchingFacetValues = ko.pureComputed(function () {\r\n // empty query, just return ordered results\r\n if(_.isEmpty(self.facetSearchQuery())){\r\n return self.orderedValues(); \r\n }\r\n \r\n return _.filter(self.orderedValues(), function(facet) {\r\n return _.includes(_.deburr(_.toLower(facet.name())), _.deburr(_.toLower(self.facetSearchQuery()))); \r\n });\r\n });\r\n \r\n self.orderedValues = ko.pureComputed(function () {\r\n return _.orderBy(self.facet.values(), function(facet) {\r\n return self.orderBy() === self.orderByFields.count ? facet.count() : facet.name();\r\n }, self.orderByDirection());\r\n });\r\n }\r\n\r\n return { viewModel: FacetComponentVM, template: htmlString };\r\n});\r\n","module.exports = \"// Module\\nvar code = `<nav class=\\\"pager\\\">\\r\\n <!-- <div class=\\\"pager__amount product-amount\\\">-->\\r\\n <!-- <div class=\\\"product-amount__inner\\\">-->\\r\\n <!-- <label>-->\\r\\n <!-- Toon-->\\r\\n <!-- <select>-->\\r\\n <!-- <option>36</option>-->\\r\\n <!-- <option value=\\\"1\\\">72</option>-->\\r\\n <!-- <option value=\\\"2\\\">108</option>-->\\r\\n <!-- </select>-->\\r\\n <!-- </label>-->\\r\\n <!-- </div>-->\\r\\n <!-- </div>-->\\r\\n <div class=\\\"pagination-count\\\">\\r\\n <span>Pagina <span data-bind=\\\"text: currentPage()\\\"></span> van <span data-bind=\\\"text: totalPages()\\\"></span></span>\\r\\n </div>\\r\\n \\r\\n <ul class=\\\"pagination\\\">\\r\\n <!-- ko if: totalPages() !== 1 && currentPage() === 1-->\\r\\n <li class=\\\"pagination-item gotofirst disabled\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowfirst-grey-12.svg\\\" />\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: currentPage() === 1-->\\r\\n <li class=\\\"pagination-item previous disabled\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowback-grey-12.svg\\\" />\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: currentPage() > 1 -->\\r\\n <li data-bind=\\\"event:\\r\\n {click: \\\\$root.gotoFirstPage}\\\" class=\\\"pagination-item gotofirst\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowfirst-darkgrey-12.svg\\\" />\\r\\n </li>\\r\\n <li data-bind=\\\"event: {click: \\\\$root.gotoPreviousPage}\\\" class=\\\"pagination-item previous\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowback-darkgrey-12.svg\\\" />\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <li class=\\\"pagination-item first\\\"\\r\\n data-bind=\\\"css: {'active': currentPage() == 1}, event: {click: \\\\$root.gotoPage}\\\">\\r\\n <span>1</span>\\r\\n </li>\\r\\n <!-- ko if: (currentPage() >= 4) -->\\r\\n <div class=\\\"pagination-item dots\\\">\\r\\n <div class=\\\"dots__inner\\\">...</div>\\r\\n </div>\\r\\n <!-- /ko -->\\r\\n <!-- ko foreach: pages -->\\r\\n <li class=\\\"pagination-item\\\"\\r\\n data-bind=\\\"css: {'active': \\\\$parent.currentPage() == \\\\$data}, event: {click: \\\\$root.gotoPage}\\\">\\r\\n <span data-bind=\\\"text: \\\\$data\\\"></span>\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: (totalPages() - currentPage() >= 3) -->\\r\\n <div class=\\\"pagination-item dots\\\">\\r\\n <div class=\\\"dots__inner\\\">...</div>\\r\\n </div>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: (totalPages() !== 1) -->\\r\\n <li class=\\\"pagination-item last\\\" data-bind=\\\"css: {'active': currentPage() == totalPages()}, event: {click: \\\\$root.gotoLastPage}\\\">\\r\\n <span data-bind=\\\"text: totalPages()\\\"></span>\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: currentPage() !== totalPages() -->\\r\\n <li data-bind=\\\"event: {click: \\\\$root.gotoNextPage}\\\" class=\\\"pagination-item next\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowforward-darkgrey-12.svg\\\" />\\r\\n </li>\\r\\n <li data-bind=\\\"event: {click: \\\\$root.gotoLastPage}\\\" class=\\\"pagination-item gotolast\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowlast-darkgrey-12.svg\\\" />\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: currentPage() === totalPages() -->\\r\\n <li class=\\\"pagination-item next disabled\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowforward-grey-12.svg\\\" />\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: totalPages() !== 1 && currentPage() === totalPages()-->\\r\\n <li class=\\\"pagination-item gotolast disabled\\\">\\r\\n <img src=\\\"/assets/icons/icon-arrowlast-grey-12.svg\\\" />\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n </ul>\\r\\n</nav>\\r\\n`;\\n// Exports\\nmodule.exports = code;\"","module.exports = \"// Module\\nvar code = `<div class=\\\"subcategories\\\">\\r\\n <div class=\\\"block-heading subcategories-heading\\\">\\r\\n Categorieën:\\r\\n </div>\\r\\n <ul style=\\\"list-style-type: none;\\\" data-bind=\\\"template: { name: 'node', foreach: categoryTree }\\\" id=\\\"subcategories-tree\\\" class=\\\"subcategories-tree level1\\\"></ul>\\r\\n</div>\\r\\n\\r\\n${\\\"<\\\" + \\\"script\\\"} type=\\\"text/html\\\" id=\\\"node\\\">\\r\\n <li class=\\\"tree-item facet-filter-category-option\\\">\\r\\n <!-- ko if: categories.length > 0 -->\\r\\n <label data-bind=\\\"attr: { for: \\\\`category-tree-input-\\\\${id}\\\\` }\\\">\\r\\n <span data-bind=\\\"text: name\\\" class=\\\"subcategory-title\\\"></span>\\r\\n <span data-bind=\\\"text: \\\\`(\\\\${count()})\\\\`\\\" class=\\\"filter-count\\\">()</span>\\r\\n <input data-bind=\\\"value: id, attr: {id: \\\\`category-tree-input-\\\\${id}\\\\`}, checked: \\\\$data.checked, event: {change: \\\\$root.handleSubmit}\\\" class=\\\"hidden\\\" type=\\\"checkbox\\\" />\\r\\n </label>\\r\\n <span data-bind=\\\"click: toggleState, css: {'tree-arrow-collapse': open}\\\" class=\\\"tree-arrow\\\"></span>\\r\\n <ul data-bind=\\\"template: { name: 'node', foreach: categories }, css: {'visible': open(), level2: level == 1, level3: level == 2}\\\" style=\\\"list-style-type: none\\\" class=\\\"nested subcategories-tree\\\" ></ul>\\r\\n <!-- /ko -->\\r\\n\\r\\n <!-- ko if: categories.length === 0 -->\\r\\n <label data-bind=\\\"attr: { for: \\\\`category-tree-input-\\\\${id}\\\\` }, css: {'active': checked}\\\" class=\\\"\\\">\\r\\n <span data-bind=\\\"text: name\\\" class=\\\"subcategory-title\\\"></span>\\r\\n <span data-bind=\\\"text: \\\\`(\\\\${count()})\\\\`\\\" class=\\\"filter-count\\\">()</span>\\r\\n <input data-bind=\\\"value: id, attr: {id: \\\\`category-tree-input-\\\\${id}\\\\`}, checked: \\\\$data.checked, event: {change: \\\\$root.handleSubmit}\\\" class=\\\"hidden\\\" type=\\\"checkbox\\\">\\r\\n </label>\\r\\n <!-- /ko -->\\r\\n </li>\\r\\n${\\\"<\\\" + \\\"/script\\\"}>\\r\\n`;\\n// Exports\\nmodule.exports = code;\"","define(['ko'], function(ko) {\r\n ko.bindingHandlers.stopBinding = {\r\n init: function() {\r\n return { controlsDescendantBindings: true };\r\n }\r\n };\r\n ko.virtualElements.allowedBindings.stopBinding = true;\r\n})","define(['ko', '_', 'text!./pagination.html'], function (ko, _, template) {\r\n function Pagination(params) {\r\n var self = this;\r\n\r\n self.totalPages = params.totalPages;\r\n self.currentPage = params.currentPage;\r\n self.pages = ko.pureComputed(function () {\r\n \r\n var pageArray = [];\r\n for (let i = 0; i < self.totalPages(); i++) {\r\n pageArray[i] = i + 1;\r\n }\r\n\r\n var pageArrayWithStartAndEndRemoved = pageArray\r\n .slice(1)\r\n .slice(0, -1);\r\n\r\n if (pageArrayWithStartAndEndRemoved.length <= 5) {\r\n return pageArrayWithStartAndEndRemoved;\r\n }\r\n\r\n var start = _.slice(\r\n pageArrayWithStartAndEndRemoved,\r\n Math.max(self.currentPage() - 3, 0),\r\n self.currentPage(),\r\n );\r\n var end = _.slice(\r\n pageArrayWithStartAndEndRemoved,\r\n self.currentPage(),\r\n Math.min(self.currentPage() + 4, self.totalPages()),\r\n );\r\n\r\n return _.flatten(start, end);\r\n });\r\n }\r\n\r\n return {viewModel: Pagination, template: template};\r\n});\r\n","// Module\nvar code = `<!-- ko if: hasParent() && level() >= 1 -->\r\n<a data-bind=\"click: function(data, event) { \\$root.selectCategory(parent()) }\" class=\"block-heading parent-heading\" href=\"#!\">\r\n <span>één niveau omhoog naar</span>\r\n <h4 data-bind=\"text: parent().name, attr: {'data-id': parent().id}\"></h4>\r\n</a>\r\n<!-- /ko -->\r\n\r\n<!-- ko if: level() <= 2 -->\r\n<div class=\"subcategories\">\r\n <div class=\"block-heading subcategories-heading\">\r\n Subcategorieën:\r\n </div>\r\n <ul data-bind=\"template: { name: 'nodecat', foreach: subCategories }\" class=\"subcategories-list\">\r\n </ul>\r\n</div>\r\n<!-- /ko -->\r\n\r\n${\"<\" + \"script\"} type=\"text/html\" id=\"nodecat\">\r\n <li>\r\n <label data-bind=\"attr: { for: \\`subcategory-tree-input-\\${id}\\` }\">\r\n <span data-bind=\"text: name\" class=\"subcategory-title\"></span>\r\n <span data-bind=\"text: \\`(\\${count()})\\`\" class=\"filter-count\">()</span>\r\n <input data-bind=\"value: id, attr: {id: \\`subcategory-tree-input-\\${id}\\`}, checked: \\$data.checked, event: {click: \\$root.handleSubmit}\" name=\"subcategory\" class=\"hidden\" type=\"checkbox\">\r\n </label>\r\n </li>\r\n${\"<\" + \"/script\"}>\r\n`;\n// Exports\nmodule.exports = code;","define(['ko'], function (ko) {\r\n return function (price) {\r\n var self = this;\r\n\r\n self.price = price.price;\r\n self.grossPrice = price.grossPrice;\r\n self.uom = price.uom;\r\n self.uomDescription = price.uomDescription;\r\n self.qtyModifier = price.qtyModifier;\r\n self.minOrderQty = price.minOrderQty;\r\n self.hideGrossPrice = price.hideGrossPrice;\r\n self.hideNetPrice = price.hideNetPrice;\r\n self.hidePrices = self.hideGrossPrice && self.hideNetPrice;\r\n \r\n self.displayPrice = ko.pureComputed(function () {\r\n var price = self.price;\r\n if(self.hidePrices) {\r\n return '-';\r\n }\r\n if(self.hideNetPrice) {\r\n price = self.grossPrice;\r\n }\r\n // todo: multilanguage/locales\r\n return new Intl.NumberFormat('nl-NL', {style: 'currency', currency: 'EUR'}).format(price);\r\n });\r\n self.displayGrossPrice = ko.pureComputed(function () {\r\n if(self.hideGrossPrice) {\r\n return '-';\r\n }\r\n // todo: multilanguage/locales\r\n return new Intl.NumberFormat('nl-NL', {style: 'currency', currency: 'EUR'}).format(self.grossPrice);\r\n });\r\n\r\n // todo: add support for incl. tax\r\n self.displayVatText = ko.pureComputed(function () {\r\n if(self.hidePrices) {\r\n return '';\r\n }\r\n return 'excl. BTW';\r\n });\r\n };\r\n});\r\n","define(['ko', '_'], function (ko, _) {\r\n return function (facetValue) {\r\n var self = this;\r\n self.name = ko.observable(facetValue.name);\r\n self.label = ko.observable(facetValue.label);\r\n self.count = ko.observable(facetValue.count);\r\n self.checked = ko.observable(facetValue.checked);\r\n };\r\n});\r\n","define(['ko', 'text!./filter-category-page.html', '_'], function(ko, htmlString, _) {\r\n // todo: remove duplicate function\r\n function flattenMyTree(tree) {\r\n function recurse(nodes, path, pathIds, parentId, parentSlug) {\r\n return _.map(nodes, function(node) {\r\n var newPath = _.union(path, [node.name]);\r\n var newPathIds = _.union(pathIds, [node.id]);\r\n var newSlug = _.union(parentSlug, [node.slug])\r\n return [\r\n _.assign(\r\n { \r\n pathname: newPath.join(' > '), \r\n url: newSlug.join('/'),\r\n level: path.length, \r\n pathIds: newPathIds, \r\n parentId: parentId\r\n }, \r\n _.omit(node, 'categories')\r\n ),\r\n recurse(node.categories, newPath, newPathIds, node.id, newSlug),\r\n ];\r\n });\r\n }\r\n\r\n return _.flattenDeep(recurse(tree, []));\r\n }\r\n function FilterCategoryPageComponentVM(params) {\r\n var self = this;\r\n self.categoryTree = params.categoryTree;\r\n self.currentCategory = params.currentCategory;\r\n self.selectedCategory = ko.pureComputed(function (){\r\n return flattenMyTree(self.categoryTree()).filter(function(c) {\r\n return c.checked() === true;\r\n })[0];\r\n });\r\n self.level = ko.pureComputed(function () {\r\n if(_.isUndefined(self.selectedCategory())) {\r\n return 0;\r\n }\r\n return self.selectedCategory().level;\r\n })\r\n self.hasParent = ko.pureComputed(function () {\r\n return !_.isUndefined(self.selectedCategory()) ? self.selectedCategory().parentId : false;\r\n });\r\n self.parent = ko.pureComputed(function () {\r\n if(!self.hasParent()) {\r\n return null;\r\n }\r\n return _.find(flattenMyTree(self.categoryTree()), function(c) {\r\n return c.id === self.selectedCategory().parentId; \r\n });\r\n });\r\n self.subCategories = ko.pureComputed(function () {\r\n // return params.categoryTree;\r\n if(_.isUndefined(self.selectedCategory())) {\r\n return [];\r\n }\r\n return _.orderBy(flattenMyTree(params.categoryTree()).filter(function(c) {\r\n return c.parentId === self.selectedCategory().id;\r\n }), ['name', 'asc']);\r\n });\r\n }\r\n\r\n return { viewModel: FilterCategoryPageComponentVM, template: htmlString };\r\n});\r\n","module.exports = \"// Module\\nvar code = `<!-- ko if: hasParent() && level() >= 1 -->\\r\\n<a data-bind=\\\"click: function(data, event) { \\\\$root.selectCategory(parent()) }\\\" class=\\\"block-heading parent-heading\\\" href=\\\"#!\\\">\\r\\n <span>één niveau omhoog naar</span>\\r\\n <h4 data-bind=\\\"text: parent().name, attr: {'data-id': parent().id}\\\"></h4>\\r\\n</a>\\r\\n<!-- /ko -->\\r\\n\\r\\n<!-- ko if: level() <= 2 -->\\r\\n<div class=\\\"subcategories\\\">\\r\\n <div class=\\\"block-heading subcategories-heading\\\">\\r\\n Subcategorieën:\\r\\n </div>\\r\\n <ul data-bind=\\\"template: { name: 'nodecat', foreach: subCategories }\\\" class=\\\"subcategories-list\\\">\\r\\n </ul>\\r\\n</div>\\r\\n<!-- /ko -->\\r\\n\\r\\n${\\\"<\\\" + \\\"script\\\"} type=\\\"text/html\\\" id=\\\"nodecat\\\">\\r\\n <li>\\r\\n <label data-bind=\\\"attr: { for: \\\\`subcategory-tree-input-\\\\${id}\\\\` }\\\">\\r\\n <span data-bind=\\\"text: name\\\" class=\\\"subcategory-title\\\"></span>\\r\\n <span data-bind=\\\"text: \\\\`(\\\\${count()})\\\\`\\\" class=\\\"filter-count\\\">()</span>\\r\\n <input data-bind=\\\"value: id, attr: {id: \\\\`subcategory-tree-input-\\\\${id}\\\\`}, checked: \\\\$data.checked, event: {click: \\\\$root.handleSubmit}\\\" name=\\\"subcategory\\\" class=\\\"hidden\\\" type=\\\"checkbox\\\">\\r\\n </label>\\r\\n </li>\\r\\n${\\\"<\\\" + \\\"/script\\\"}>\\r\\n`;\\n// Exports\\nmodule.exports = code;\"","define(['ko', 'text!./filter-category.html', '_'], function(ko, htmlString, _) {\r\n\r\n // todo: remove duplicate function\r\n function flattenMyTree(tree) {\r\n function recurse(nodes, path, pathIds, parentId, parentSlug) {\r\n return _.map(nodes, function(node) {\r\n var newPath = _.union(path, [node.name]);\r\n var newPathIds = _.union(pathIds, [node.id]);\r\n var newSlug = _.union(parentSlug, [node.slug])\r\n return [\r\n _.assign(\r\n {\r\n pathname: newPath.join(' > '),\r\n url: newSlug.join('/'),\r\n level: path.length,\r\n pathIds: newPathIds,\r\n parentId: parentId\r\n },\r\n _.omit(node, 'categories')\r\n ),\r\n recurse(node.categories, newPath, newPathIds, node.id, newSlug),\r\n ];\r\n });\r\n }\r\n\r\n return _.flattenDeep(recurse(tree, []));\r\n }\r\n function FacetFilterComponentVM(params) {\r\n var self = this;\r\n self.categoryTree = params.categoryTree;\r\n self.currentCategory = params.currentCategory;\r\n self.selectedCategory = ko.pureComputed(function (){\r\n return flattenMyTree(self.categoryTree()).filter(function(c) {\r\n return c.checked() === true;\r\n })[0];\r\n });\r\n self.level = ko.pureComputed(function () {\r\n return !_.isUndefined(self.selectedCategory()) ? self.selectedCategory().level : -1;\r\n })\r\n self.hasParent = ko.pureComputed(function () {\r\n return !_.isUndefined(self.selectedCategory()) ? self.selectedCategory().parentId : false;\r\n });\r\n self.selectedCategory.subscribe(function (val) {\r\n if(_.isUndefined(val)) {\r\n return;\r\n }\r\n\r\n flattenMyTree(self.categoryTree()).forEach(function(cat) {\r\n cat.open(_.includes(val.pathIds, cat.id));\r\n });\r\n });\r\n }\r\n\r\n return { viewModel: FacetFilterComponentVM, template: htmlString };\r\n});\r\n","define(['ko'], function(ko) {\r\n ko.bindingHandlers.shiftClick = {\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel) {\r\n var allBindings = allBindingsAccessor();\r\n $(element).click(function (event) {\r\n if (event.shiftKey) {\r\n valueAccessor().call(viewModel, viewModel, event);\r\n return false;\r\n }\r\n return true;\r\n });\r\n }\r\n }\r\n});\r\n","define(['ko'], function(ko) {\r\n ko.bindingHandlers.slideDown = {\r\n init: function(element, valueAccessor) {\r\n // Initially set the element to be instantly visible/hidden depending on the value\r\n var value = valueAccessor();\r\n $(element).toggle(ko.unwrap(value)); // Use \"unwrapObservable\" so we can handle values that may or may not be observable\r\n },\r\n update: function(element, valueAccessor) {\r\n var value = valueAccessor();\r\n ko.unwrap(value) ? $(element).slideDown() : $(element).slideUp();\r\n }\r\n };\r\n});\r\n","// Module\nvar code = `<div class=\"product-tile\">\r\n\r\n <div class=\"product-tile-image-wrapper\">\r\n\r\n <div data-bind=\"visible: instanceCount > 1, attr: {title: instanceCount + ' varianten beschikbaar'}\" class=\"product-tile-instance-count\">\r\n <img class=\"product-tile-instance-icon\" src=\"/assets/icons/icon-variants-white-16.svg\"><span data-bind=\"text: instanceCount\"></span>\r\n </div>\r\n\r\n <button data-bind=\"click: addToFavorites\" class=\"product-tile-add-to-favourites\" type=\"button\">\r\n <!--<span data-bind=\"hidden: !isFavoriteLoading()\" class=\"spinner-border spinner-border-sm text-dark\"></span>-->\r\n <img data-bind=\"visible: !isFavorite() && !isFavoriteLoading()\" src=\"/assets/icons/icon-star-outline-24.svg\" title=\"Voeg toe aan favorieten\" />\r\n <img data-bind=\"visible: isFavorite() && !isFavoriteLoading()\" src=\"/assets/icons/icon-star-blue-24.svg\" title=\"Verwijder uit favorieten\" />\r\n </button>\r\n\r\n <a class=\"product-tile-image\" data-bind=\"attr: {href: slug}\">\r\n <img data-bind=\"attr: {src: thumbnail, alt: title}\" loading=\"lazy\" />\r\n </a>\r\n\r\n <div data-bind=\"visible: standards.length > 0, foreach: {data: standards, as: 'standard', noChildContext: false}\" class=\"product-tile-standards-wrapper\">\r\n <img data-bind=\"attr: {src: standard.icon, alt: standard.name, title: standard.name + ' - ' + \\$parent.displayStandards(standard)}\" class=\"product-tile-standard-icon\" />\r\n </div>\r\n\r\n </div>\r\n\r\n <div class=\"product-tile-info-wrapper\">\r\n\r\n <div class=\"product-tile-info\">\r\n <div data-bind=\"visible: brand !== null, text: brand\" class=\"product-tile-brand\"></div>\r\n <a data-bind=\"visible: categoryText != null, text: categoryText, attr: {href: categorySlug}\" class=\"product-tile-category\"></a>\r\n <a class=\"product-tile-title\" data-bind=\"attr: {href: slug}\" href=\"#\"><h3 data-bind=\"text: title\"></h3></a>\r\n <div data-bind=\"text: \\`Artikelnr. \\${firstSku}\\`\" href=\"#\" class=\"product-tile-data\"></div>\r\n <div data-bind=\"visible: properties !== null, foreach: {data: properties, as:'property', noChildContext: true}\">\r\n <div data-bind=\"text: \\`\\${property.key}: \\${property.value}\\`\" class=\"product-tile-data\"></div>\r\n </div>\r\n <!-- ko if: price !== null && (price.price > 0 || canCheckoutFreeItems) -->\r\n <div class=\"product-tile-stock in-stock\">\r\n <span data-bind=\"text: (stock > 0 ? 'Op voorraad' : 'Levertijd op aanvraag')\"></span>\r\n </div>\r\n <!-- /ko -->\r\n <!-- ko ifnot: price !== null && (price.price > 0 || canCheckoutFreeItems) -->\r\n <div class=\"product-tile-stock\">\r\n <span>Niet leverbaar</span>\r\n </div>\r\n <!-- /ko -->\r\n </div>\r\n\r\n <!-- ko if: price !== null && (price.price > 0 || canCheckoutFreeItems) -->\r\n <div class=\"product-tile-add-to-cart-container\">\r\n <div class=\"product-tile-price-container\">\r\n <div class=\"product-tile-price\">\r\n <span data-bind=\"text: price.displayPrice\" class=\"price\"></span>\r\n <span data-bind=\"visible: price.qtyModifier > 1\" class=\"unit\">\r\n /\r\n <span data-bind=\"text: price.qtyModifier\"></span>\r\n <span data-bind=\"text: price.uomDescription\"></span>\r\n </span>\r\n </div>\r\n <!--<div class=\"product-tile-tax\">\r\n <span data-bind=\"text: price.displayVatText\"></span>\r\n </div>-->\r\n </div>\r\n \r\n \r\n <!--<div class=\"product-tile-attribute-selector\">\r\n <label>Maat</label>\r\n <select>\r\n <option>One</option>\r\n <option value=\"1\">One</option>\r\n <option value=\"2\">Two</option>\r\n </select>\r\n </div>-->\r\n\r\n <!--ko if: price !== null-->\r\n <div class=\"product-tile-quantity-wrapper\">\r\n <form method=\"POST\" class=\"quantity-wrapper\" action=\"#\">\r\n <input data-bind=\"click: decreaseQty, attr: {disabled: quantity() <= 1 ? true : null}\" type=\"button\" class=\"quantity-button decrease\" title=\"Aantal verlagen\" />\r\n <input data-bind=\"value: quantity, numeric: item.quantity\" type=\"text\" inputmode=\"numeric\" pattern=\"[0-9]*\" spellcheck=\"false\" class=\"quantity-input\" />\r\n <input data-bind=\"click: increaseQty\" type=\"button\" class=\"quantity-button increase\" title=\"Aantal verhogen\" />\r\n </form>\r\n <button data-bind=\"click: addToCart\" class=\"primary-button medium add-to-cart-button\" type=\"button\" title=\"Toevoegen aan winkelwagen\">\r\n <img data-bind=\"hidden: isAddToCartLoading() || isAddedToCart()\" src=\"/assets/icons/icon-addtocart-white-32.svg\" />\r\n <img data-bind=\"hidden: !isAddToCartLoading() || isAddedToCart()\" src=\"/assets/icons/icon-loadingcart-white-32.svg\" />\r\n <img data-bind=\"hidden: !isAddedToCart()\" src=\"/assets/icons/icon-checkcart-white-32.svg\" class=\"icon-checkcart\" />\r\n </button>\r\n </div>\r\n <!-- /ko -->\r\n\r\n </div>\r\n <!-- /ko -->\r\n\r\n </div>\r\n\r\n</div>\r\n\r\n`;\n// Exports\nmodule.exports = code;","/*!\r\n Knockout Fast Foreach v0.6.0 (2016-07-28T11:02:54.197Z)\r\n By: Brian M Hunt (C) 2015 | License: MIT\r\n\r\n Adds `fastForEach` to `ko.bindingHandlers`.\r\n*/\r\n(function (root, factory) {\r\n if (typeof define === 'function' && define.amd) {\r\n define(['ko'], factory);\r\n } else if (typeof exports === 'object') {\r\n module.exports = factory(require('ko'));\r\n } else {\r\n root.KnockoutFastForeach = factory(root.ko);\r\n }\r\n}(this, function (ko) {\r\n \"use strict\";\r\n// index.js\r\n// --------\r\n// Fast For Each\r\n//\r\n// Employing sound techniques to make a faster Knockout foreach binding.\r\n// --------\r\n\r\n// Utilities\r\n var MAX_LIST_SIZE = 9007199254740991;\r\n\r\n// from https://github.com/jonschlinkert/is-plain-object\r\n function isPlainObject(o) {\r\n return !!o && typeof o === 'object' && o.constructor === Object;\r\n }\r\n\r\n// From knockout/src/virtualElements.js\r\n var commentNodesHaveTextProperty = document && document.createComment(\"test\").text === \"<!--test-->\";\r\n var startCommentRegex = commentNodesHaveTextProperty ? /^<!--\\s*ko(?:\\s+([\\s\\S]+))?\\s*-->$/ : /^\\s*ko(?:\\s+([\\s\\S]+))?\\s*$/;\r\n var supportsDocumentFragment = document && typeof document.createDocumentFragment === \"function\";\r\n function isVirtualNode(node) {\r\n return (node.nodeType === 8) && startCommentRegex.test(commentNodesHaveTextProperty ? node.text : node.nodeValue);\r\n }\r\n\r\n\r\n// Get a copy of the (possibly virtual) child nodes of the given element,\r\n// put them into a container, then empty the given node.\r\n function makeTemplateNode(sourceNode) {\r\n var container = document.createElement(\"div\");\r\n var parentNode;\r\n if (sourceNode.content) {\r\n // For e.g. <template> tags\r\n parentNode = sourceNode.content;\r\n } else if (sourceNode.tagName === 'SCRIPT') {\r\n parentNode = document.createElement(\"div\");\r\n parentNode.innerHTML = sourceNode.text;\r\n } else {\r\n // Anything else e.g. <div>\r\n parentNode = sourceNode;\r\n }\r\n ko.utils.arrayForEach(ko.virtualElements.childNodes(parentNode), function (child) {\r\n // FIXME - This cloneNode could be expensive; we may prefer to iterate over the\r\n // parentNode children in reverse (so as not to foul the indexes as childNodes are\r\n // removed from parentNode when inserted into the container)\r\n if (child) {\r\n container.insertBefore(child.cloneNode(true), null);\r\n }\r\n });\r\n return container;\r\n }\r\n\r\n// Mimic a KO change item 'add'\r\n function valueToChangeAddItem(value, index) {\r\n return {\r\n status: 'added',\r\n value: value,\r\n index: index\r\n };\r\n }\r\n\r\n// KO 3.4 doesn't seem to export this utility function so it's here just to be sure\r\n function createSymbolOrString(identifier) {\r\n return typeof Symbol === 'function' ? Symbol(identifier) : identifier;\r\n }\r\n\r\n// store a symbol for caching the pending delete info index in the data item objects\r\n var PENDING_DELETE_INDEX_KEY = createSymbolOrString(\"_ko_ffe_pending_delete_index\");\r\n\r\n function FastForEach(spec) {\r\n this.element = spec.element;\r\n this.container = isVirtualNode(this.element) ?\r\n this.element.parentNode : this.element;\r\n this.$context = spec.$context;\r\n this.data = spec.data;\r\n this.as = spec.as;\r\n this.noContext = spec.noContext;\r\n this.noIndex = spec.noIndex;\r\n this.afterAdd = spec.afterAdd;\r\n this.beforeRemove = spec.beforeRemove;\r\n this.templateNode = makeTemplateNode(\r\n spec.templateNode || (spec.name ? document.getElementById(spec.name).cloneNode(true) : spec.element)\r\n );\r\n this.afterQueueFlush = spec.afterQueueFlush;\r\n this.beforeQueueFlush = spec.beforeQueueFlush;\r\n this.changeQueue = [];\r\n this.firstLastNodesList = [];\r\n this.indexesToDelete = [];\r\n this.rendering_queued = false;\r\n this.pendingDeletes = [];\r\n\r\n // Remove existing content.\r\n ko.virtualElements.emptyNode(this.element);\r\n\r\n // Prime content\r\n var primeData = ko.unwrap(this.data);\r\n if (primeData && primeData.map) {\r\n this.onArrayChange(primeData.map(valueToChangeAddItem), true);\r\n }\r\n\r\n // Watch for changes\r\n if (ko.isObservable(this.data)) {\r\n if (!this.data.indexOf) {\r\n // Make sure the observable is trackable.\r\n this.data = this.data.extend({ trackArrayChanges: true });\r\n }\r\n this.changeSubs = this.data.subscribe(this.onArrayChange, this, 'arrayChange');\r\n }\r\n }\r\n\r\n FastForEach.PENDING_DELETE_INDEX_KEY = PENDING_DELETE_INDEX_KEY;\r\n\r\n FastForEach.animateFrame = window.requestAnimationFrame || window.webkitRequestAnimationFrame ||\r\n window.mozRequestAnimationFrame || window.msRequestAnimationFrame ||\r\n function (cb) { return window.setTimeout(cb, 1000 / 60); };\r\n\r\n\r\n FastForEach.prototype.dispose = function () {\r\n if (this.changeSubs) {\r\n this.changeSubs.dispose();\r\n }\r\n this.flushPendingDeletes();\r\n };\r\n\r\n\r\n// If the array changes we register the change.\r\n FastForEach.prototype.onArrayChange = function (changeSet, isInitial) {\r\n var self = this;\r\n var changeMap = {\r\n added: [],\r\n deleted: []\r\n };\r\n\r\n // knockout array change notification index handling:\r\n // - sends the original array indexes for deletes\r\n // - sends the new array indexes for adds\r\n // - sorts them all by index in ascending order\r\n // because of this, when checking for possible batch additions, any delete can be between to adds with neighboring indexes, so only additions should be checked\r\n for (var i = 0, len = changeSet.length; i < len; i++) {\r\n\r\n if (changeMap.added.length && changeSet[i].status == 'added') {\r\n var lastAdd = changeMap.added[changeMap.added.length - 1];\r\n var lastIndex = lastAdd.isBatch ? lastAdd.index + lastAdd.values.length - 1 : lastAdd.index;\r\n if (lastIndex + 1 == changeSet[i].index) {\r\n if (!lastAdd.isBatch) {\r\n // transform the last addition into a batch addition object\r\n lastAdd = {\r\n isBatch: true,\r\n status: 'added',\r\n index: lastAdd.index,\r\n values: [lastAdd.value]\r\n };\r\n changeMap.added.splice(changeMap.added.length - 1, 1, lastAdd);\r\n }\r\n lastAdd.values.push(changeSet[i].value);\r\n continue;\r\n }\r\n }\r\n\r\n changeMap[changeSet[i].status].push(changeSet[i]);\r\n }\r\n\r\n if (changeMap.deleted.length > 0) {\r\n this.changeQueue.push.apply(this.changeQueue, changeMap.deleted);\r\n this.changeQueue.push({ status: 'clearDeletedIndexes' });\r\n }\r\n this.changeQueue.push.apply(this.changeQueue, changeMap.added);\r\n // Once a change is registered, the ticking count-down starts for the processQueue.\r\n if (this.changeQueue.length > 0 && !this.rendering_queued) {\r\n this.rendering_queued = true;\r\n if (isInitial) {\r\n self.processQueue();\r\n } else {\r\n FastForEach.animateFrame.call(window, function () { self.processQueue(); });\r\n }\r\n }\r\n };\r\n\r\n\r\n// Reflect all the changes in the queue in the DOM, then wipe the queue.\r\n FastForEach.prototype.processQueue = function () {\r\n var self = this;\r\n var lowestIndexChanged = MAX_LIST_SIZE;\r\n\r\n // Callback so folks can do things before the queue flush.\r\n if (typeof this.beforeQueueFlush === 'function') {\r\n this.beforeQueueFlush(this.changeQueue);\r\n }\r\n\r\n ko.utils.arrayForEach(this.changeQueue, function (changeItem) {\r\n if (typeof changeItem.index === 'number') {\r\n lowestIndexChanged = Math.min(lowestIndexChanged, changeItem.index);\r\n }\r\n // console.log(self.data(), \"CI\", JSON.stringify(changeItem, null, 2), JSON.stringify($(self.element).text()))\r\n self[changeItem.status](changeItem);\r\n // console.log(\" ==> \", JSON.stringify($(self.element).text()))\r\n });\r\n this.flushPendingDeletes();\r\n this.rendering_queued = false;\r\n\r\n // Update our indexes.\r\n if (!this.noIndex) {\r\n this.updateIndexes(lowestIndexChanged);\r\n }\r\n\r\n // Callback so folks can do things.\r\n if (typeof this.afterQueueFlush === 'function') {\r\n this.afterQueueFlush(this.changeQueue);\r\n }\r\n this.changeQueue = [];\r\n };\r\n\r\n\r\n function extendWithIndex(context) {\r\n context.$index = ko.observable();\r\n };\r\n\r\n\r\n// Process a changeItem with {status: 'added', ...}\r\n FastForEach.prototype.added = function (changeItem) {\r\n var index = changeItem.index;\r\n var valuesToAdd = changeItem.isBatch ? changeItem.values : [changeItem.value];\r\n var referenceElement = this.getLastNodeBeforeIndex(index);\r\n // gather all childnodes for a possible batch insertion\r\n var allChildNodes = [];\r\n\r\n for (var i = 0, len = valuesToAdd.length; i < len; ++i) {\r\n var childNodes;\r\n\r\n // we check if we have a pending delete with reusable nodesets for this data, and if yes, we reuse one nodeset\r\n var pendingDelete = this.getPendingDeleteFor(valuesToAdd[i]);\r\n if (pendingDelete && pendingDelete.nodesets.length) {\r\n childNodes = pendingDelete.nodesets.pop();\r\n } else {\r\n var templateClone = this.templateNode.cloneNode(true);\r\n var childContext;\r\n\r\n if (this.noContext) {\r\n childContext = this.$context.extend({\r\n $item: valuesToAdd[i],\r\n $index: this.noIndex ? undefined : ko.observable()\r\n });\r\n } else {\r\n childContext = this.$context.createChildContext(valuesToAdd[i], this.as || null, this.noIndex ? undefined : extendWithIndex);\r\n }\r\n\r\n // apply bindings first, and then process child nodes, because bindings can add childnodes\r\n ko.applyBindingsToDescendants(childContext, templateClone);\r\n\r\n childNodes = ko.virtualElements.childNodes(templateClone);\r\n }\r\n\r\n // Note discussion at https://github.com/angular/angular.js/issues/7851\r\n allChildNodes.push.apply(allChildNodes, Array.prototype.slice.call(childNodes));\r\n this.firstLastNodesList.splice(index + i, 0, { first: childNodes[0], last: childNodes[childNodes.length - 1] });\r\n }\r\n\r\n if (typeof this.afterAdd === 'function') {\r\n this.afterAdd({\r\n nodeOrArrayInserted: this.insertAllAfter(allChildNodes, referenceElement),\r\n foreachInstance: this\r\n }\r\n );\r\n } else {\r\n this.insertAllAfter(allChildNodes, referenceElement);\r\n }\r\n };\r\n\r\n FastForEach.prototype.getNodesForIndex = function (index) {\r\n var result = [],\r\n ptr = this.firstLastNodesList[index].first,\r\n last = this.firstLastNodesList[index].last;\r\n result.push(ptr);\r\n while (ptr && ptr !== last) {\r\n ptr = ptr.nextSibling;\r\n result.push(ptr);\r\n }\r\n return result;\r\n };\r\n\r\n FastForEach.prototype.getLastNodeBeforeIndex = function (index) {\r\n if (index < 1 || index - 1 >= this.firstLastNodesList.length)\r\n return null;\r\n return this.firstLastNodesList[index - 1].last;\r\n };\r\n\r\n FastForEach.prototype.insertAllAfter = function (nodeOrNodeArrayToInsert, insertAfterNode) {\r\n var frag, len, i,\r\n containerNode = this.element;\r\n\r\n // poor man's node and array check, should be enough for this\r\n if (nodeOrNodeArrayToInsert.nodeType === undefined && nodeOrNodeArrayToInsert.length === undefined) {\r\n throw new Error(\"Expected a single node or a node array\");\r\n }\r\n if (nodeOrNodeArrayToInsert.nodeType !== undefined) {\r\n ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert, insertAfterNode);\r\n return [nodeOrNodeArrayToInsert];\r\n } else if (nodeOrNodeArrayToInsert.length === 1) {\r\n ko.virtualElements.insertAfter(containerNode, nodeOrNodeArrayToInsert[0], insertAfterNode);\r\n } else if (supportsDocumentFragment) {\r\n frag = document.createDocumentFragment();\r\n\r\n for (i = 0, len = nodeOrNodeArrayToInsert.length; i !== len; ++i) {\r\n frag.appendChild(nodeOrNodeArrayToInsert[i]);\r\n }\r\n ko.virtualElements.insertAfter(containerNode, frag, insertAfterNode);\r\n } else {\r\n // Nodes are inserted in reverse order - pushed down immediately after\r\n // the last node for the previous item or as the first node of element.\r\n for (i = nodeOrNodeArrayToInsert.length - 1; i >= 0; --i) {\r\n var child = nodeOrNodeArrayToInsert[i];\r\n if (!child) { break; }\r\n ko.virtualElements.insertAfter(containerNode, child, insertAfterNode);\r\n }\r\n }\r\n return nodeOrNodeArrayToInsert;\r\n };\r\n\r\n// checks if the deleted data item should be handled with delay for a possible reuse at additions\r\n FastForEach.prototype.shouldDelayDeletion = function (data) {\r\n return data && (typeof data === \"object\" || typeof data === \"function\");\r\n };\r\n\r\n// gets the pending deletion info for this data item\r\n FastForEach.prototype.getPendingDeleteFor = function (data) {\r\n var index = data && data[PENDING_DELETE_INDEX_KEY];\r\n if (index === undefined) return null;\r\n return this.pendingDeletes[index];\r\n };\r\n\r\n// tries to find the existing pending delete info for this data item, and if it can't, it registeres one\r\n FastForEach.prototype.getOrCreatePendingDeleteFor = function (data) {\r\n var pd = this.getPendingDeleteFor(data);\r\n if (pd) {\r\n return pd;\r\n }\r\n pd = {\r\n data: data,\r\n nodesets: []\r\n };\r\n data[PENDING_DELETE_INDEX_KEY] = this.pendingDeletes.length;\r\n this.pendingDeletes.push(pd);\r\n return pd;\r\n };\r\n\r\n// Process a changeItem with {status: 'deleted', ...}\r\n FastForEach.prototype.deleted = function (changeItem) {\r\n // if we should delay the deletion of this data, we add the nodeset to the pending delete info object\r\n if (this.shouldDelayDeletion(changeItem.value)) {\r\n var pd = this.getOrCreatePendingDeleteFor(changeItem.value);\r\n pd.nodesets.push(this.getNodesForIndex(changeItem.index));\r\n } else { // simple data, just remove the nodes\r\n this.removeNodes(this.getNodesForIndex(changeItem.index));\r\n }\r\n this.indexesToDelete.push(changeItem.index);\r\n };\r\n\r\n// removes a set of nodes from the DOM\r\n FastForEach.prototype.removeNodes = function (nodes) {\r\n if (!nodes.length) { return; }\r\n\r\n var removeFn = function () {\r\n var parent = nodes[0].parentNode;\r\n for (var i = nodes.length - 1; i >= 0; --i) {\r\n ko.cleanNode(nodes[i]);\r\n parent.removeChild(nodes[i]);\r\n }\r\n };\r\n\r\n if (this.beforeRemove) {\r\n var beforeRemoveReturn = this.beforeRemove({\r\n nodesToRemove: nodes, foreachInstance: this\r\n }) || {};\r\n // If beforeRemove returns a `then`–able e.g. a Promise, we remove\r\n // the nodes when that thenable completes. We pass any errors to\r\n // ko.onError.\r\n if (typeof beforeRemoveReturn.then === 'function') {\r\n beforeRemoveReturn.then(removeFn, ko.onError ? ko.onError : undefined);\r\n }\r\n } else {\r\n removeFn();\r\n }\r\n };\r\n\r\n// flushes the pending delete info store\r\n// this should be called after queue processing has finished, so that data items and remaining (not reused) nodesets get cleaned up\r\n// we also call it on dispose not to leave any mess\r\n FastForEach.prototype.flushPendingDeletes = function () {\r\n for (var i = 0, len = this.pendingDeletes.length; i != len; ++i) {\r\n var pd = this.pendingDeletes[i];\r\n while (pd.nodesets.length) {\r\n this.removeNodes(pd.nodesets.pop());\r\n }\r\n if (pd.data && pd.data[PENDING_DELETE_INDEX_KEY] !== undefined)\r\n delete pd.data[PENDING_DELETE_INDEX_KEY];\r\n }\r\n this.pendingDeletes = [];\r\n };\r\n\r\n// We batch our deletion of item indexes in our parallel array.\r\n// See brianmhunt/knockout-fast-foreach#6/#8\r\n FastForEach.prototype.clearDeletedIndexes = function () {\r\n // We iterate in reverse on the presumption (following the unit tests) that KO's diff engine\r\n // processes diffs (esp. deletes) monotonically ascending i.e. from index 0 -> N.\r\n for (var i = this.indexesToDelete.length - 1; i >= 0; --i) {\r\n this.firstLastNodesList.splice(this.indexesToDelete[i], 1);\r\n }\r\n this.indexesToDelete = [];\r\n };\r\n\r\n\r\n FastForEach.prototype.getContextStartingFrom = function (node) {\r\n var ctx;\r\n while (node) {\r\n ctx = ko.contextFor(node);\r\n if (ctx) { return ctx; }\r\n node = node.nextSibling;\r\n }\r\n };\r\n\r\n\r\n FastForEach.prototype.updateIndexes = function (fromIndex) {\r\n var ctx;\r\n for (var i = fromIndex, len = this.firstLastNodesList.length; i < len; ++i) {\r\n ctx = this.getContextStartingFrom(this.firstLastNodesList[i].first);\r\n if (ctx) { ctx.$index(i); }\r\n }\r\n };\r\n\r\n\r\n ko.bindingHandlers.fastForEach = {\r\n // Valid valueAccessors:\r\n // []\r\n // ko.observable([])\r\n // ko.observableArray([])\r\n // ko.computed\r\n // {data: array, name: string, as: string}\r\n init: function init(element, valueAccessor, bindings, vm, context) {\r\n var ffe, value = valueAccessor();\r\n if (isPlainObject(value)) {\r\n value.element = value.element || element;\r\n value.$context = context;\r\n ffe = new FastForEach(value);\r\n } else {\r\n ffe = new FastForEach({\r\n element: element,\r\n data: ko.unwrap(context.$rawData) === value ? context.$rawData : value,\r\n $context: context\r\n });\r\n }\r\n\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function () {\r\n ffe.dispose();\r\n });\r\n return { controlsDescendantBindings: true };\r\n },\r\n\r\n // Export for testing, debugging, and overloading.\r\n FastForEach: FastForEach\r\n };\r\n\r\n ko.virtualElements.allowedBindings.fastForEach = true;\r\n}));\r\n","module.exports = \"// Module\\nvar code = `<div class=\\\"filter\\\">\\r\\n <div data-bind=\\\"text: facet.label\\\" class=\\\"filter-heading\\\"></div>\\r\\n <div class=\\\"filter-panel\\\">\\r\\n <input data-bind=\\\"attr: { name: 'filters[' + \\\\$index() + '].Name', value: facet.name }\\\" type=\\\"hidden\\\"/>\\r\\n <form data-bind=\\\"visible: showFacetSearch\\\" class=\\\"filter-search\\\">\\r\\n <input data-bind=\\\"textInput: facetSearchQuery, attr: {placeholder: 'Zoeken naar ' + _.toLower(facet.label)}\\\" class=\\\"filter-search-input\\\" type=\\\"search\\\" name=\\\"searchterm\\\" placeholder=\\\"Zoeken\\\" autocomplete=\\\"off\\\" autocapitalize=\\\"off\\\">\\r\\n <button data-bind=\\\"click: resetFacetSearchQuery\\\" type=\\\"reset\\\" class=\\\"clear-icon\\\"></button>\\r\\n </form>\\r\\n <ul data-bind=\\\"css: {'open': facet.showValues()}\\\" class=\\\"facets-list\\\">\\r\\n <!-- ko foreach: matchingFacetValues().slice(0, facetLimit()) -->\\r\\n <li class=\\\"facet-item\\\">\\r\\n <input data-bind=\\\"\\r\\n attr: {\\r\\n id: \\\\$parent.facet.name + '_' + \\\\$data.name(),\\r\\n name: 'filters['+\\\\$parentContext.\\\\$index()+'].Values',\\r\\n value: \\\\$data.name()\\r\\n },\\r\\n checked: \\\\$data.checked,\\r\\n event: {change: \\\\$root.handleSubmit}\\\"\\r\\n type=\\\"checkbox\\\">\\r\\n <label data-bind=\\\"text: label, attr: { for: \\\\$parent.facet.name + '_' + \\\\$data.name() }\\\"></label>\\r\\n <!-- ko if: \\\\$parent.facet.name != 'stock' -->\\r\\n <span data-bind=\\\"text: \\\\`(\\\\${count()})\\\\`\\\" class=\\\"filter-count\\\">0</span>\\r\\n <!-- /ko -->\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: matchingFacetValueCount() > 5 -->\\r\\n <!-- ko ifnot: facet.showValues -->\\r\\n <li data-bind=\\\"click: facet.toggleValue\\\" class=\\\"facet-toggle facet-toggle-open\\\">\\r\\n <a data-bind=\\\"text: \\\\`toon meer (\\\\${matchingFacetValueCount()-5})\\\\`\\\" href=\\\"#!toggle\\\">toon meer</a>\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- ko if: facet.showValues() -->\\r\\n <li class=\\\"facet-toggle facet-toggle-closed\\\">\\r\\n <a data-bind=\\\"click: facet.toggleValue\\\" href=\\\"#!toggle\\\">toon minder</a>\\r\\n </li>\\r\\n <!-- /ko -->\\r\\n <!-- /ko -->\\r\\n <li data-bind=\\\"visible: _.isEmpty(matchingFacetValues()) && !_.isEmpty(facetSearchQuery())\\\">\\r\\n Geen opties gevonden voor \\\"<span data-bind=\\\"text: facetSearchQuery\\\">.</span>\\\"\\r\\n </li>\\r\\n </ul>\\r\\n \\r\\n </div>\\r\\n</div>\\r\\n`;\\n// Exports\\nmodule.exports = code;\""],"names":["module","exports","ko","_","facetValueVM","facet","self","this","name","label","count","values","observableArray","map","val","showValues","observable","getCheckedValues","filter","checked","toggleValue","priceViewModel","htmlString","viewModel","params","product","title","brand","id","categoryId","category","categories","price","quantity","parseInt","minOrderQty","instanceCount","thumbnail","standards","highlight","firstSku","stock","properties","canCheckoutFreeItems","isFavorite","isFavoriteLoading","isAddToCartLoading","isAddedToCart","finishLoading","finishAnimation","src","Math","random","delay","slug","categoryText","pureComputed","isEmpty","categorySlug","catUrl","forEach","reverse","cat","i","displayStandards","standard","join","isNull","value","increaseQty","decreaseQty","addToCart","event","data","currentTarget","querySelector","url","fetch","method","mode","cache","credentials","redirect","referrerPolicy","then","response","json","document","getElementById","innerText","sumBy","items","Intl","NumberFormat","style","currency","format","total","finally","addToFavorites","isArray","includes","console","log","template","bindingHandlers","numeric","init","element","valueAccessor","$","on","keyCode","ctrlKey","shiftKey","preventDefault","level","parent","open","toggleState","undefined","facetViewModel","facetValueViewModel","categoryViewModel","components","register","window","copyTree","originalTree","isUndefined","vm","length","pageType","term","products","pages","currentPage","resultCount","facets","favorites","restrictedFacets","favoriteSkus","currentCategory","flattenMyTree","tree","flattenDeep","recurse","nodes","path","pathIds","parentId","parentSlug","node","newPath","union","newPathIds","newSlug","assign","pathname","omit","debug","favoriteTerm","replace","favoriteTermValue","computed","read","write","handleSubmit","owner","isMerging","lastChecked","selectedProducts","totalResults","categoryTree","selectedCategory","c","checkedCategories","pageSize","totalPages","pageStart","pageEnd","loader","requestCounter","sku","checkedFacets","facetValue","push","valueLabel","checkedFacetsGrouped","groupedAndSorted","groupBy","sortBy","toPairs","item","restricted","key","showFilterPills","clearAllFilters","prop","clearFilter","find","selectCategory","clearCategories","gotoPreviousPage","gotoPage","gotoNextPage","page","scrollIntoView","behavior","gotoFirstPage","gotoLastPage","appliedFilters","previousCheckedCat","newSelectedCats","catId","obj","checkedValues","checkedValue","searchProducts","checkedCategoryModels","out","selectedCategoryTree","checkedCategoryId","abortController","AbortController","abortSignal","signal","searchFavoriteProducts","resetSearchFavoriteProducts","requestId","URLSearchParams","index","append","filterValue","last","abort","body","tiles","catTree","categoryFacet","responseFacetVms","responseFacets","keyBy","vmFacets","vmFacetKeys","keys","responseKeys","vmMissingKeys","difference","responseMissingKeys","facetName","intersection","matchingResponseFacet","matchingVmFacet","matchingValue","rVal","valMatch","vmVal","remove","catch","error","currentUrl","location","toString","search","URL","searchParams","set","toLowerCase","startsWith","history","replaceState","tile","allProductsAvailable","availableProducts","unavailableProducts","loading","orderByFields","orderBy","orderAsc","orderByDirection","toggleOrderBy","toggleOrderDirection","setOrderByName","setOrderByCount","facetSearchQuery","resetFacetSearchQuery","showFacetSearch","totalValueCount","matchingFacetValueCount","matchingFacetValues","facetLimit","orderedValues","deburr","toLower","stopBinding","controlsDescendantBindings","virtualElements","allowedBindings","pageArray","pageArrayWithStartAndEndRemoved","slice","start","max","end","min","flatten","grossPrice","uom","uomDescription","qtyModifier","hideGrossPrice","hideNetPrice","hidePrices","displayPrice","displayGrossPrice","displayVatText","hasParent","subCategories","subscribe","shiftClick","allBindingsAccessor","click","call","slideDown","toggle","unwrap","update","slideUp","commentNodesHaveTextProperty","createComment","text","startCommentRegex","supportsDocumentFragment","createDocumentFragment","valueToChangeAddItem","status","identifier","PENDING_DELETE_INDEX_KEY","Symbol","FastForEach","spec","sourceNode","parentNode","container","nodeType","test","nodeValue","$context","as","noContext","noIndex","afterAdd","beforeRemove","templateNode","cloneNode","createElement","content","tagName","innerHTML","utils","arrayForEach","childNodes","child","insertBefore","afterQueueFlush","beforeQueueFlush","changeQueue","firstLastNodesList","indexesToDelete","rendering_queued","pendingDeletes","emptyNode","primeData","onArrayChange","isObservable","indexOf","extend","trackArrayChanges","changeSubs","extendWithIndex","context","$index","animateFrame","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","msRequestAnimationFrame","cb","setTimeout","prototype","dispose","flushPendingDeletes","changeSet","isInitial","changeMap","added","deleted","len","lastAdd","isBatch","splice","apply","processQueue","lowestIndexChanged","changeItem","updateIndexes","valuesToAdd","referenceElement","getLastNodeBeforeIndex","allChildNodes","pendingDelete","getPendingDeleteFor","nodesets","pop","childContext","templateClone","$item","createChildContext","applyBindingsToDescendants","Array","first","nodeOrArrayInserted","insertAllAfter","foreachInstance","getNodesForIndex","result","ptr","nextSibling","nodeOrNodeArrayToInsert","insertAfterNode","frag","containerNode","Error","insertAfter","appendChild","shouldDelayDeletion","getOrCreatePendingDeleteFor","pd","removeNodes","removeFn","cleanNode","removeChild","beforeRemoveReturn","nodesToRemove","onError","clearDeletedIndexes","getContextStartingFrom","ctx","contextFor","fromIndex","fastForEach","bindings","ffe","o","constructor","Object","$rawData","domNodeDisposal","addDisposeCallback"],"sourceRoot":""}