{"version":3,"sources":["webpack:///./app/components/o/product-comparison/index.js"],"names":["$","ProductComparison","element","options","__e","__o","__s","extend","loglevel","minProductsToCompare","maxProductsToCompare","fps","labels","AddProduct","AddAnotherProduct","CompareProducts","ComparisonNotPossible","urlParamName","comparisonURL","sameCcatComparisionIds","__c","idle","idleChanged","products","productsChanged","displayListChanged","displayListUpdating","activeCategory","activeCategoryChanged","modal","modalType","modalChanged","modalProducts","modalProductsChanged","modalCommitBtn","modalElements","dragSrcElement","pending_product_id","deleteModal","brandName","productcategory","TYPE_ADD_PRODUCTS","TYPE_CHANGE_ORDER","reloadPage","params","getProductList","redirectTo","__buildQueryString","__info","window","location","href","isEnoughToCompare","numProductSelected","toggleProduct","product_id","arguments","length","undefined","__debug","isProductSelected","removeProduct","addProduct","selected","indexOf","RESULT","n","Object","fromEntries","Map","find","toArray","map","checkBox","index","array","$checkBox","value","attr","name","hasOwnProperty","join","moveSelectedProduct","after_product_id","invalidate","__warning","currIdx","afterIdx","console","log","__invalidateDisplayList","push","setActiveCategory","__getProductCategory","i","splice","rejectProducts","JSON","parse","stringify","ccat_id","__commitModalProducts","event","data","eventtype","selectedfilteroptions","brandname","track","setTimeout","createCompareLink","delim","encodeURIComponent","__areModalProductsDifferent","__handleLabelClick","a","link","split","product1","product2","product3","product4","product5","product6","productamount","__initCollection","search","each","decodeURIComponent","checkbox","ccatHolder","closest","parseInt","__handleDragEvent","type","originalEvent","dataTransfer","effectAllowed","setData","html","innerHTML","addClass","classList","add","preventDefault","dropEffect","removeClass","stopPropagation","dragData","getData","item","__getQueryString","key","res","itm","qs","substring","pattern","exec","override","entries","url","protocol","host","pathname","urlVars","encodeURI","__toggleProductHandler","currentTarget","val","__updateDisplayList","css","on","off","allowAdd","otherCategory","checked","disabled","prop","differ","cards","overviewItems","tableItems","card","label","text","overviewItem","is","fadeOut","tableItem","checkboxes","__tick","__log","Array","prototype","slice","call","__error","p","info","apply","warn","error","__construct","toString","productOverviewContainer","hasClass","setInterval","fn","productComparison","e","config","document","jQuery","initializeTags","card_id","$card","row_id","$row","isHeadline","filterByTags","showTag","parent","id","active","visible","trigger"],"mappings":"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","file":"product-comparison.chunk.js","sourcesContent":["/*!\r\n * @link https://www.kittelberger.de/\r\n * @copyright Copyright (c) 2020 Kittelberger media solutions GmbH\r\n */\r\nimport { track } from '../../../core/js/libs/TrackingService';\r\n\r\n(function ($) {\r\n  /**\r\n   * The [ProductComparison] class manages the functionality for product comparison.\r\n   * @class\r\n   * @param {HTMLElement} element The HTML element to which the class is applied.\r\n   * @param {object} options The properties for this class instance.\r\n   */\r\n  const ProductComparison = function (element, options) {\r\n    /**\r\n     * @property {array} __e - jQuery Selector of the selected HTML element.\r\n     */\r\n    const __e = $(element);\r\n\r\n    /**\r\n     * @property {ProductComparison} __o - Instance of this class.\r\n     */\r\n    const __o = this;\r\n\r\n    /**\r\n     * @private\r\n     * @property {ProductComparison} __s - Class settings which can be overwritten by [o] in the class constructor.\r\n     * @property {int} __s.loglevel - Log level of the class, a value between 0 and 3. The smaller the value, the more talkative the class is.\r\n     * @property {int} __s.minProductsToCompare - The minimum number of products required for a product comparison.\r\n     * @property {int} __s.maxProductsToCompare - The maximum number of products allowed for product comparison.\r\n     * @property {int} __s.fps - Immitating frames per second; the interval to update the views. See [__updateDisplayList].\r\n     * @property {string[]} __s.labels - All translatable texts\r\n     * @property {string} __s.urlParamName - Name of the URL-Parameter to pass the collected products\r\n     * @property {array} __s.sameCcatComparisionIds - The ID's of the categories whose products can be compared only within the same category\r\n     */\r\n    const __s = $.extend(\r\n      {\r\n        loglevel: 1,\r\n        minProductsToCompare: 2,\r\n        maxProductsToCompare: 2,\r\n        fps: 24,\r\n        labels: {\r\n          AddProduct: 'Vergleichen',\r\n          AddAnotherProduct: 'Mindestens {n} Produkte auswählen',\r\n          CompareProducts: 'Produktvergleich starten',\r\n          ComparisonNotPossible: 'Kein Vergleich möglich',\r\n        },\r\n        urlParamName: 'compare',\r\n        comparisonURL: './T-Product-Comparison.html',\r\n        sameCcatComparisionIds: [],\r\n      },\r\n      options || {}\r\n    );\r\n\r\n    /**\r\n     * @private\r\n     * Internal namespace for private class properties.\r\n     */\r\n    const __c = {\r\n      idle: false,\r\n      idleChanged: false,\r\n      products: [],\r\n      productsChanged: true,\r\n      displayListChanged: false,\r\n      displayListUpdating: false,\r\n\r\n      activeCategory: null,\r\n      activeCategoryChanged: false,\r\n\r\n      modal: null,\r\n      modalType: null, // either __c.TYPE_ADD_PRODUCTS or __c.CHANGE_ORDER\r\n      modalChanged: false,\r\n      modalProducts: [], // temporary collection for the products in the modal view (addProduct, changeOrder)\r\n      modalProductsChanged: false,\r\n      modalCommitBtn: null,\r\n      modalElements: [],\r\n      dragSrcElement: null,\r\n      pending_product_id: null,\r\n      deleteModal: null,\r\n\r\n      brandName: null,\r\n      productcategory: null,\r\n\r\n      TYPE_ADD_PRODUCTS: 'ADD_PRODUCTS',\r\n      TYPE_CHANGE_ORDER: 'CHANGE_ORDER',\r\n    };\r\n\r\n    /**\r\n     * Reload the page\r\n     * @public\r\n     */\r\n    this.reloadPage = function () {\r\n      const params = {};\r\n      params[__s.urlParamName] = __o.getProductList();\r\n      const redirectTo = __buildQueryString(params);\r\n      __info('Page will redirect to \"' + redirectTo + '\"...');\r\n      window.location.href = redirectTo;\r\n    };\r\n\r\n    /**\r\n     * Checks if enough products were collected to display a product comparison.\r\n     * @public\r\n     * @return {bool} Whether enough products were collected to display a product comparison.\r\n     */\r\n    this.isEnoughToCompare = function () {\r\n      return __o.numProductSelected() >= __s.minProductsToCompare;\r\n    };\r\n\r\n    /**\r\n     * Adds a product to the collection or removes it from the list if it is already in the list\r\n     * @public\r\n     * @param {string} product_id - The ID of the product\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @return {ProductComparison} The instance of the ProductComparison class for method chaining.\r\n     */\r\n    this.toggleProduct = function (product_id, modal = false) {\r\n      __debug('ProductComparison->toggleProduct()', {\r\n        product_id: product_id,\r\n        modal: modal,\r\n      });\r\n      if (__o.isProductSelected(product_id, modal)) {\r\n        __o.removeProduct(product_id, modal, true);\r\n      } else {\r\n        __o.addProduct(product_id, modal, true);\r\n      }\r\n      __info(__o.numProductSelected(modal) + ' Products selected.');\r\n      return this;\r\n    };\r\n\r\n    /**\r\n     * Checks whether the product has already been collected.\r\n     * @public\r\n     * @param {string} product_id - The ID of the product\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @return {bool} Whether the product has already been collected.\r\n     */\r\n    this.isProductSelected = function (product_id, modal = false) {\r\n      const products = modal ? __c.modalProducts : __c.products;\r\n      const selected = products.indexOf(product_id) > -1;\r\n      __debug('ProductComparison->isProductSelected()', {\r\n        product_id: product_id,\r\n        modal: modal,\r\n        RESULT: selected,\r\n      });\r\n      return selected;\r\n    };\r\n\r\n    /**\r\n     * Returns the number of collected products.\r\n     * @public\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @return {int} The number of collected products.\r\n     */\r\n    this.numProductSelected = function (modal = false) {\r\n      const products = modal ? __c.modalProducts : __c.products;\r\n      const n = products.length;\r\n      __debug('ProductComparison->numProductSelected()', {\r\n        modal: modal,\r\n        RESULT: n,\r\n      });\r\n      return n;\r\n    };\r\n\r\n    /**\r\n     * Returns the product_id´s of collected products as comma-separated list.\r\n     * @public\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @param {bool} labels - When true, returns the names of the products instead of the product ids (e.g. for tracking)\r\n     * @return {int} The product_id´s or product names of collected products as comma-separated list.\r\n     */\r\n    this.getProductList = function (modal, labels = false) {\r\n      let products = modal ? __c.modalProducts : __c.products;\r\n      if (labels) {\r\n        // labels = key-value pairs of all checkboxes where the key is the id of the product\r\n        // and the value is the data-productname or id\r\n        const labels = Object.fromEntries(\r\n          new Map(\r\n            __e\r\n              .find('input:checkbox[name=product_compare]')\r\n              .toArray()\r\n              .map(function (checkBox, index, array) {\r\n                const $checkBox = $(checkBox);\r\n                const value = $checkBox.attr('value');\r\n                const name = $checkBox.attr('data-productname');\r\n                return [value, name || value];\r\n              })\r\n          )\r\n        );\r\n        products = products.map((product_id) => {\r\n          return labels.hasOwnProperty(product_id) ? labels[product_id] : product_id;\r\n        });\r\n      }\r\n      return products.join(',');\r\n    };\r\n\r\n    /**\r\n     * Adds a product to the collection, if it is not already collected.\r\n     * @public\r\n     * @param {string} product_id - The ID of the product\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @param {boolean} invalidate - Either to force an view update (default) or not\r\n     * @return {ProductComparison} The instance of the ProductComparison class for method chaining.\r\n     */\r\n    this.moveSelectedProduct = function (product_id, after_product_id, modal = false, invalidate = true) {\r\n      if (typeof product_id !== 'string' || product_id == '') {\r\n        return;\r\n      }\r\n      __debug('ProductComparison->moveSelectedProduct()', {\r\n        product_id: product_id,\r\n        after_product_id: after_product_id,\r\n        modal: modal,\r\n        invalidate: invalidate,\r\n      });\r\n      if (!__o.isProductSelected(product_id, modal) || !__o.isProductSelected(after_product_id, modal)) {\r\n        __warning('None or not all given products are selected at the moment.');\r\n        return this;\r\n      }\r\n      if (modal) {\r\n        const currIdx = __c.modalProducts.indexOf(product_id);\r\n        const afterIdx = __c.modalProducts.indexOf(after_product_id);\r\n\r\n        console.log({\r\n          modal: modal,\r\n          currIdx: currIdx,\r\n          afterIdx: afterIdx,\r\n        });\r\n      } else {\r\n        const currIdx = __c.products.indexOf(product_id);\r\n        const afterIdx = __c.products.indexOf(after_product_id);\r\n        console.log({\r\n          modal: modal,\r\n          currIdx: currIdx,\r\n          afterIdx: afterIdx,\r\n        });\r\n      }\r\n    };\r\n\r\n    /**\r\n     * Adds a product to the collection, if it is not already collected.\r\n     * @public\r\n     * @param {string} product_id - The ID of the product\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @param {boolean} invalidate - Either to force an view update (default) or not\r\n     * @return {ProductComparison} The instance of the ProductComparison class for method chaining.\r\n     */\r\n    this.addProduct = function (product_id, modal = false, invalidate = true) {\r\n      if (typeof product_id !== 'string' || product_id == '') {\r\n        return;\r\n      }\r\n      __debug(\r\n        'ProductComparison->addProduct()',\r\n        product_id,\r\n        modal ? 'MODAL_COLLECTION' : 'GENERAL_COLLECTION',\r\n        invalidate ? 'INVALIDATE' : 'NO_INVALIDATE'\r\n      );\r\n      if (__o.isProductSelected(product_id, modal)) {\r\n        return this;\r\n      }\r\n      if (__o.numProductSelected(modal) >= __s.maxProductsToCompare) {\r\n        __warning(\r\n          `A maximum of ${\r\n            __s.maxProductsToCompare\r\n          } products can be compared! You have already collected ${__o.numProductSelected()} products.`\r\n        );\r\n        // have to invalidate html, but not to save/load\r\n        __c.productsChanged = true;\r\n        __invalidateDisplayList();\r\n        return this;\r\n      }\r\n      if (modal) {\r\n        __c.modalProducts.push(product_id);\r\n      } else {\r\n        __c.products.push(product_id);\r\n      }\r\n\r\n      if (invalidate) {\r\n        if (modal) {\r\n          __c.modalProductsChanged = true;\r\n        } else {\r\n          __c.productsChanged = true;\r\n        }\r\n        __invalidateDisplayList();\r\n      }\r\n      __o.setActiveCategory(__getProductCategory(product_id));\r\n      return this;\r\n    };\r\n\r\n    /**\r\n     * Removes a product from the collection.\r\n     * @public\r\n     * @param {string} product_id - The ID of the product\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @param {boolean} invalidate - Either to force an view update (default) or not\r\n     * @return {ProductComparison} The instance of the ProductComparison class for method chaining.\r\n     */\r\n    this.removeProduct = function (product_id, modal = false, invalidate = true) {\r\n      __debug('ProductComparison->removeProduct()', {\r\n        product_id: product_id,\r\n        modal: modal,\r\n        invalidate: invalidate,\r\n      });\r\n      if (modal) {\r\n        const i = __c.modalProducts.indexOf(product_id);\r\n        if (i > -1) {\r\n          __c.modalProducts.splice(i, 1);\r\n          if (invalidate) {\r\n            __c.modalProductsChanged = true;\r\n            __invalidateDisplayList();\r\n          }\r\n        }\r\n      } else {\r\n        const i = __c.products.indexOf(product_id);\r\n        if (i > -1) {\r\n          __c.products.splice(i, 1);\r\n          if (invalidate) {\r\n            __c.productsChanged = true;\r\n            __invalidateDisplayList();\r\n          }\r\n        }\r\n      }\r\n\r\n      if (__o.numProductSelected(modal) == 0) {\r\n        __o.setActiveCategory(null);\r\n      }\r\n      return this;\r\n    };\r\n\r\n    /**\r\n     * Resets the list of collected products. For the general list, this means that the list will be emptied completely.\r\n     * For the list of products in the modal window, it means that the list is set to the entries of the general products.\r\n     * @public\r\n     * @param {bool} modal - When true, use the collection of the modal products, otherwise global products (default)\r\n     * @param {boolean} invalidate - Either to force an view update (default) or not\r\n     * @return {ProductComparison} The instance of the ProductComparison class for method chaining.\r\n     */\r\n    this.rejectProducts = function (modal = false, invalidate = true) {\r\n      __debug('ProductComparison->rejectProducts()', {\r\n        modal: modal,\r\n        invalidate: invalidate,\r\n      });\r\n\r\n      if (modal) {\r\n        __c.modalProducts = JSON.parse(JSON.stringify(__c.products));\r\n        if (invalidate) {\r\n          __c.modalProductsChanged = true;\r\n          __invalidateDisplayList();\r\n        }\r\n      } else {\r\n        __c.products = [];\r\n        if (invalidate) {\r\n          __c.productsChanged = true;\r\n          __invalidateDisplayList();\r\n        }\r\n      }\r\n\r\n      return this;\r\n    };\r\n\r\n    this.setActiveCategory = function (ccat_id) {\r\n      if (__c.activeCategory === ccat_id) {\r\n        return;\r\n      }\r\n      __c.activeCategory = ccat_id;\r\n      __c.activeCategoryChanged = true;\r\n      if (__c.activeCategory === null) {\r\n        __info('The current category has been reset.');\r\n      } else {\r\n        __info('The current category has been changed to \"' + ccat_id + '\".');\r\n      }\r\n      __invalidateDisplayList();\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Applies the changes of the modified modal product collection to the general product selection\r\n     */\r\n    const __commitModalProducts = function (event) {\r\n      __info('The changes to the product list from the modal are now applied. The page must be updated afterwards.');\r\n      __c.products = JSON.parse(JSON.stringify(__c.modalProducts));\r\n      __c.productsChanged = true;\r\n      __c.modalProductsChanged = true;\r\n      __invalidateDisplayList();\r\n\r\n      __debug('ProductComparison->__commitModalProducts()', {\r\n        event: event,\r\n        products: __c.products,\r\n        modalProducts: __c.modalProducts,\r\n      });\r\n\r\n      const products = __o.getProductList(true, true);\r\n      const data = {\r\n        eventtype: 'confirmproductselectionbuttonclick',\r\n        selectedfilteroptions: products,\r\n        brandname: __c.brandName,\r\n      };\r\n      __info('tracking', JSON.stringify(data));\r\n\r\n      track(data);\r\n\r\n      setTimeout(() => {\r\n        __o.reloadPage();\r\n      }, 250);\r\n    };\r\n\r\n    this.createCompareLink = function () {\r\n      const delim = __s.comparisonURL.indexOf('?') > -1 ? '&' : '?';\r\n      return [__s.comparisonURL, delim, __s.urlParamName, '=', encodeURIComponent(__o.getProductList())].join('');\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Checks if the selection of products in the modal is different from the global product selection.\r\n     * @return {boolean} if the selection of products in the modal is different from the global product selection.\r\n     */\r\n    const __areModalProductsDifferent = function () {\r\n      return JSON.stringify(__c.products) !== JSON.stringify(__c.modalProducts);\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     */\r\n    const __handleLabelClick = function (a) {\r\n      __debug('__handleLabelClick');\r\n      const link = a.attr('href');\r\n      if (link) {\r\n        const products = __o.getProductList(false, true).split(',');\r\n        const data = {\r\n          eventtype: 'productcomparisonbuttonclick',\r\n          product1: products.length > 0 ? products[0] : '',\r\n          product2: products.length > 1 ? products[1] : '',\r\n          product3: products.length > 2 ? products[2] : '',\r\n          product4: products.length > 3 ? products[3] : '',\r\n          product5: products.length > 4 ? products[4] : '',\r\n          product6: products.length > 5 ? products[5] : '',\r\n          productamount: products.length,\r\n          brandname: __c.brandName,\r\n          productcategory: __c.productcategory ? 'c-' + __c.productcategory : '',\r\n        };\r\n        __info('tracking', JSON.stringify(data));\r\n        track(data);\r\n        window.location.href = link;\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Initializes the product collection.\r\n     * The method first checks the parameters passed in the URL. After that it checks all checkboxes and merges both values.\r\n     * The checkboxes are always evaluated more than the URL parameters.\r\n     * This method should be called at the first position in the constructor if possible!\r\n     * @param {boolean} invalidate - Either to force an view update (default) or not\r\n     */\r\n    const __initCollection = function (invalidate = true) {\r\n      // reset list\r\n      __o.rejectProducts(false, false);\r\n      // check url for passed product collection\r\n      const products = (location.search.split(__s.urlParamName + '=')[1] || '').split('&')[0];\r\n      $.each(products ? decodeURIComponent(products).split(',') : [], function (index, product_id) {\r\n        __o.addProduct(product_id, false, false);\r\n      });\r\n      // second: check checkboxes\r\n      __e.find('input:checkbox:checked[name=product_compare]').each(function () {\r\n        const product_id = $(this).attr('value');\r\n        __o.addProduct(product_id, false, false);\r\n      });\r\n      if (invalidate) {\r\n        __c.productsChanged = true;\r\n        __invalidateDisplayList();\r\n      }\r\n      __debug('ProductComparison->__initCollection()', __c.products);\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Finds the ID of the category of the specified product.\r\n     * @param {string} product_id - ID of the product whose category is being searched\r\n     * @return {string} the ID of the category of the specified product or null.\r\n     */\r\n    const __getProductCategory = function (product_id) {\r\n      const checkbox = __e.find('input:checkbox[name=product_compare][value=' + product_id + ']');\r\n      const ccatHolder = checkbox ? checkbox.closest('*[data-ccatid]') : null;\r\n      const ccat_id = ccatHolder ? parseInt(ccatHolder.attr('data-ccatid')) : null;\r\n      // If a ccat_id was found, it must be in the list __s.sameCcatComparisionIds, otherwise the\r\n      // products of the category can also be compared with products from other categories.\r\n      if (ccat_id && __s.sameCcatComparisionIds.indexOf(ccat_id) > -1) {\r\n        return ccat_id;\r\n      }\r\n      return 'UNRESTRICTED';\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * ...\r\n     * @param {object} event - The drag event\r\n     */\r\n    const __handleDragEvent = function (event) {\r\n      __debug('ProductComparison->__handleDragEvent()', { type: event.type });\r\n      if (event.type === 'dragstart') {\r\n        __c.dragSrcElement = this;\r\n        event.originalEvent.dataTransfer.effectAllowed = 'move';\r\n        event.originalEvent.dataTransfer.setData(\r\n          'text/plain',\r\n          JSON.stringify({\r\n            product_id: $(this).attr('data-product-id'),\r\n            html: this.innerHTML,\r\n          })\r\n        );\r\n      } else if (event.type === 'dragenter') {\r\n        $(__c.dragSrcElement).addClass('over');\r\n        this.classList.add('over');\r\n      } else if (event.type === 'dragover') {\r\n        if (event.preventDefault) {\r\n          event.preventDefault();\r\n        }\r\n        event.originalEvent.dataTransfer.dropEffect = 'move';\r\n        return false;\r\n      } else if (event.type === 'dragleave') {\r\n        $(__c.dragSrcElement).removeClass('over');\r\n      } else if (event.type === 'drop') {\r\n        if (event.stopPropagation) {\r\n          event.stopPropagation();\r\n        }\r\n        if (__c.dragSrcElement != this) {\r\n          const dragData = JSON.parse(event.originalEvent.dataTransfer.getData('text/plain'));\r\n          $(__c.dragSrcElement).attr('data-product-id', $(this).attr('data-product-id')).html($(this).html());\r\n          $(this).attr('data-product-id', dragData.product_id).html(dragData.html);\r\n        }\r\n        return false;\r\n      } else if (event.type === 'dragend') {\r\n        __c.modalProducts = [];\r\n        __c.modalElements = __c.modal.find('.changeOrder__drag-elements__item[data-product-id]');\r\n        __c.modalElements.each(function (index, item) {\r\n          $(this).removeClass('over');\r\n          __o.addProduct($(this).attr('data-product-id'), true, false);\r\n        });\r\n        __c.modalProductsChanged = true;\r\n        __invalidateDisplayList();\r\n      }\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Get all or an specific url parameter.\r\n     * @param {string} key - The name of a specific url parameter\r\n     * @return {object}\r\n     */\r\n    const __getQueryString = function (key = null) {\r\n      const res = {};\r\n      let itm = null;\r\n      const qs = location.search.substring(1);\r\n      const pattern = /([^&=]+)=([^&]*)/g;\r\n      while ((itm = pattern.exec(qs))) {\r\n        if (key !== null && decodeURIComponent(itm[1]) === key) return decodeURIComponent(itm[2]);\r\n        else if (key === null) res[decodeURIComponent(itm[1])] = decodeURIComponent(itm[2]);\r\n      }\r\n      return key === null ? res : null;\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Creates an url with an key-value object of url parameters to override or add\r\n     * @param {object|null} override - Optional. A key-value object of url parameters to override or add\r\n     * @return {string} the new url\r\n     */\r\n    const __buildQueryString = function (override = null) {\r\n      const params = __getQueryString();\r\n      if (override) {\r\n        for (const [key, value] of Object.entries(override)) {\r\n          params[key] = value;\r\n        }\r\n      }\r\n      const url = location.protocol + '//' + location.host + location.pathname;\r\n      const urlVars = [];\r\n      if (params) {\r\n        for (const [key, value] of Object.entries(params)) {\r\n          urlVars.push(key + '=' + encodeURI(value));\r\n        }\r\n      }\r\n      const delim = urlVars.length ? '?' : '';\r\n      return url + delim + urlVars.join('&');\r\n    };\r\n\r\n    const __toggleProductHandler = function (event) {\r\n      const product_id = $(event.currentTarget).val();\r\n      const modal = __c.modal !== null && __c.modalType !== null;\r\n      __o.toggleProduct(product_id, modal);\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Sets a flag to activate the update process [__updateDisplayList].\r\n     */\r\n    const __invalidateDisplayList = function () {\r\n      __c.displayListChanged = true;\r\n      __debug('ProductComparison->__invalidateDisplayList()');\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Updates HTML markup, CSS etc. for all changed properties.\r\n     */\r\n    const __updateDisplayList = function () {\r\n      if (!__c.displayListChanged || __c.displayListUpdating) {\r\n        return;\r\n      }\r\n      __c.displayListUpdating = true;\r\n      __c.displayListChanged = false;\r\n      __debug('ProductComparison->__updateDisplayList()');\r\n\r\n      if (__c.idleChanged) {\r\n        if (__c.idle) {\r\n          __e.css('cursor', 'wait');\r\n        } else {\r\n          __e.css('cursor', 'pointer');\r\n        }\r\n      }\r\n\r\n      if (__c.modalChanged) {\r\n        if (__c.modal !== null && __c.modalType !== null) {\r\n          __info('Modal #\"' + __c.modalType + '\" opens...');\r\n\r\n          __o.rejectProducts(true, true);\r\n\r\n          if (__c.modalType === __c.TYPE_ADD_PRODUCTS) {\r\n            __c.modalElements = __c.modal.find('input:checkbox[name=product_compare]');\r\n            __c.modalElements.on('change', __toggleProductHandler);\r\n          } else if (__c.modalType === __c.TYPE_CHANGE_ORDER) {\r\n            __c.modalElements = __c.modal.find('.changeOrder__drag-elements__item[data-product-id]');\r\n            __c.modalElements\r\n              .on('dragstart', __handleDragEvent)\r\n              .on('dragenter', __handleDragEvent)\r\n              .on('dragover', __handleDragEvent)\r\n              .on('dragleave', __handleDragEvent)\r\n              .on('drop', __handleDragEvent)\r\n              .on('dragend', __handleDragEvent);\r\n          }\r\n        } else if (__c.modal === null && __c.modalType !== null) {\r\n          __info('Modal #\"' + __c.modalType + '\" closes...');\r\n          __o.rejectProducts(true, true);\r\n          __c.modalCommitBtn = null;\r\n          if (__c.modalType === __c.TYPE_ADD_PRODUCTS) {\r\n            __c.modalElements.off('change', __toggleProductHandler);\r\n          } else if (__c.modalType === __c.TYPE_CHANGE_ORDER) {\r\n            __c.modalElements\r\n              .off('dragstart', __handleDragEvent)\r\n              .off('dragenter', __handleDragEvent)\r\n              .off('dragover', __handleDragEvent)\r\n              .off('dragleave', __handleDragEvent)\r\n              .off('drop', __handleDragEvent)\r\n              .off('dragend', __handleDragEvent);\r\n          }\r\n          __c.modalElements = [];\r\n        }\r\n        __c.modalChanged = false;\r\n      }\r\n\r\n      if (__c.modalProductsChanged) {\r\n        if (__c.modalType === __c.TYPE_ADD_PRODUCTS) {\r\n          __debug({\r\n            modalProducts: __c.modalProducts,\r\n            minProductsToCompare: __s.minProductsToCompare,\r\n            maxProductsToCompare: __s.maxProductsToCompare,\r\n          });\r\n          if (__c.modalElements && __c.modalElements.length) {\r\n            const allowAdd = __o.numProductSelected(true) < __s.maxProductsToCompare; // if maximum reached, set to false!\r\n            const numProductSelected = __o.numProductSelected(true);\r\n            __c.modalElements.each(function (index) {\r\n              const checkbox = $(this);\r\n              const product_id = checkbox.attr('value');\r\n              const ccat_id = __getProductCategory(product_id);\r\n              const otherCategory = __c.activeCategory && ccat_id !== __c.activeCategory;\r\n              const isProductSelected = __o.isProductSelected(product_id, true);\r\n              const checked = !otherCategory && isProductSelected ? true : false;\r\n              const disabled = (!checked && !allowAdd) || otherCategory ? true : false;\r\n              checkbox.attr('checked', checked);\r\n              checkbox.prop('disabled', disabled);\r\n            });\r\n          }\r\n        } else if (__c.modalType === __c.TYPE_CHANGE_ORDER) {\r\n          //\r\n        }\r\n        if (__c.modalCommitBtn) {\r\n          const differ = __areModalProductsDifferent();\r\n          __debug('Commit-Button is ' + (differ ? 'active' : 'disabled'));\r\n          __c.modalCommitBtn.prop('disabled', !differ);\r\n        }\r\n        __c.modalProductsChanged = false;\r\n      }\r\n\r\n      if (__c.productsChanged || __c.activeCategoryChanged) {\r\n        // Products-Tile-View\r\n        const cards = __e.find('.product-tile__card');\r\n        // T-Product-Comparison: Overview\r\n        const overviewItems = __e.find('.product-overview__item');\r\n        // M-024-Table-Single-B-Products-Left\r\n        const tableItems = __e.find('.table-left');\r\n\r\n        // @var bool allowAdd Defines whether or not additional products can be added to the product comparison\r\n        const allowAdd = __o.numProductSelected() < __s.maxProductsToCompare; // if maximum reached, set to false!\r\n\r\n        if (cards && cards.length) {\r\n          cards.each(function (index) {\r\n            const card = $(this);\r\n            const checkbox = card.find('.product-tile__card__control input:checkbox[name=product_compare]');\r\n            const label = card.find('.product-tile__card__control label');\r\n            if (checkbox && checkbox.length) {\r\n              const product_id = checkbox.attr('value');\r\n              const ccat_id = __getProductCategory(product_id);\r\n              const otherCategory = __c.activeCategory && ccat_id !== __c.activeCategory;\r\n              const isProductSelected = __o.isProductSelected(product_id, false);\r\n              const checked = !otherCategory && isProductSelected ? true : false;\r\n              const disabled = (!checked && !allowAdd) || otherCategory ? true : false;\r\n              let text = __s.labels.AddProduct;\r\n              if (disabled) {\r\n                text = __s.labels.ComparisonNotPossible;\r\n              } else if (checked && __o.isEnoughToCompare()) {\r\n                text = `<a href=\"${__o.createCompareLink()}\">${__s.labels.CompareProducts}</a>`;\r\n              } else if (checked && !__o.isEnoughToCompare()) {\r\n                text = __s.labels.AddAnotherProduct.split('{n}').join(__s.minProductsToCompare);\r\n              } else {\r\n                text = __s.labels.AddProduct;\r\n              }\r\n              checkbox.prop('checked', checked);\r\n              checkbox.prop('disabled', disabled);\r\n              label.html(text);\r\n              label.css('cursor', disabled ? 'not-allowed' : 'pointer');\r\n            }\r\n          });\r\n        } else if (overviewItems && overviewItems.length) {\r\n          overviewItems.each(function (index) {\r\n            const overviewItem = $(this);\r\n            const product_id = overviewItem.attr('data-product-id');\r\n            const ccat_id = __getProductCategory(product_id);\r\n            const otherCategory = __c.activeCategory && ccat_id !== __c.activeCategory;\r\n            const checked = !otherCategory && __o.isProductSelected(product_id, false) ? true : false;\r\n            if (!checked && overviewItem.is(':visible')) {\r\n              overviewItem.fadeOut();\r\n            } else if (checked && !overviewItem.is(':visible')) {\r\n              overviewItem.fadeOut();\r\n            }\r\n          });\r\n        } else if (tableItems && tableItems.length) {\r\n          tableItems.each(function (index) {\r\n            const tableItem = $(this);\r\n            const checkboxes = tableItem.find('input:checkbox[name=product_compare]');\r\n            checkboxes.each(function (index) {\r\n              const checkbox = $(this);\r\n              const label = tableItem.find('label[for=' + checkbox.attr('id') + ']');\r\n              const product_id = checkbox.attr('value');\r\n              const ccat_id = __getProductCategory(product_id);\r\n              const otherCategory = __c.activeCategory && ccat_id !== __c.activeCategory;\r\n              const isProductSelected = __o.isProductSelected(product_id, false);\r\n              const checked = !otherCategory && isProductSelected ? true : false;\r\n              const disabled = (!checked && !allowAdd) || otherCategory ? true : false;\r\n              let text = __s.labels.AddProduct;\r\n              if (disabled) {\r\n                text = __s.labels.ComparisonNotPossible;\r\n              } else if (checked && __o.isEnoughToCompare()) {\r\n                text = `<a href=\"${__o.createCompareLink()}\">${__s.labels.CompareProducts}</a>`;\r\n              } else if (checked && !__o.isEnoughToCompare()) {\r\n                text = __s.labels.AddAnotherProduct.split('{n}').join(__s.minProductsToCompare);\r\n              } else {\r\n                text = __s.labels.AddProduct;\r\n              }\r\n              checkbox.prop('checked', checked);\r\n              checkbox.prop('disabled', disabled);\r\n              label.html(text);\r\n              label.css('cursor', disabled ? 'not-allowed' : 'pointer');\r\n            });\r\n          });\r\n        }\r\n\r\n        __c.productsChanged = false;\r\n        __c.activeCategoryChanged = false;\r\n      }\r\n      __c.displayListUpdating = false;\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Interval function which is called at intervals of [__s.fps].\r\n     */\r\n    const __tick = function () {\r\n      __updateDisplayList();\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Console logging for messages from [__s.loglevel] 0.\r\n     */\r\n    const __debug = function () {\r\n      __log(0, Array.prototype.slice.call(arguments));\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Console logging for messages from [__s.loglevel] 1.\r\n     */\r\n    const __info = function () {\r\n      __log(1, Array.prototype.slice.call(arguments));\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Console logging for messages from [__s.loglevel] 2.\r\n     */\r\n    const __warning = function () {\r\n      __log(2, Array.prototype.slice.call(arguments));\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Console logging for messages from [__s.loglevel] 3.\r\n     */\r\n    const __error = function () {\r\n      __log(3, Array.prototype.slice.call(arguments));\r\n    };\r\n\r\n    /**\r\n     * @private\r\n     * Console logging for all messages. The priority of the message must be equal or higher\r\n     * than [__s.loglevel] to pass the function.\r\n     * @param {int} type - The log level\r\n     * @param {any} p - All arguments to be logged in the console.\r\n     */\r\n    const __log = function (type, p) {\r\n      if (/*@cc_on!@*/ false)\r\n        // ie exit here\r\n        return;\r\n\r\n      if (window.console && type >= __s.loglevel) {\r\n        switch (type) {\r\n          case 1:\r\n            if (window.console.info) window.console.info.apply(null, p);\r\n            break;\r\n          case 2:\r\n            if (window.console.warn) window.console.warn.apply(null, p);\r\n            break;\r\n          case 3:\r\n            if (window.console.error) window.console.error.apply(null, p);\r\n            break;\r\n          default:\r\n            if (window.console.log) window.console.log.apply(null, p);\r\n            break;\r\n        }\r\n      }\r\n    };\r\n\r\n    /** @constructs */\r\n    const __construct = function () {\r\n      __info('Product comparison initialized');\r\n      __initCollection();\r\n\r\n      if (Object.prototype.toString.call(__s.sameCcatComparisionIds) !== '[object Array]') {\r\n        __warning('The configuration parameter \"sameCcatComparisionIds\" must be an array!');\r\n        __s.sameCcatComparisionIds = [];\r\n      }\r\n\r\n      __c.brandName = $('body').data('track_brandname');\r\n      __c.productcategory = $('body').data('track_productcategory');\r\n\r\n      __e.on(\r\n        'click',\r\n        '.product-tile__card__control label a, .table-left__product-comparison label a',\r\n        function (event) {\r\n          event.preventDefault();\r\n          event.stopPropagation();\r\n          __handleLabelClick($(event.currentTarget));\r\n          return false;\r\n        }\r\n      );\r\n\r\n      // Page: Product-Cards\r\n      __e.on('change', '.product-tile__card__control input:checkbox[name=product_compare]', function (event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        __o.toggleProduct($(event.currentTarget).val());\r\n      });\r\n\r\n      // Page: M-024-Table-Single-B-Products-Left\r\n      __e.on('change', '.table-left input:checkbox[name=product_compare]', function (event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        __o.toggleProduct($(event.currentTarget).val());\r\n      });\r\n\r\n      // Page: Product-Comparison\r\n      __c.productOverviewContainer = __e.find('.product-overview');\r\n      __e.on('click', '.product-overview__item[data-product-id] .product-overview__icon', function (event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n\r\n        const product_id = $(this).closest('.product-overview__item[data-product-id]').attr('data-product-id');\r\n        if (product_id && __c.deleteModal) {\r\n          __c.pending_product_id = product_id;\r\n          __c.deleteModal.modal('show');\r\n        } else {\r\n          __warning('Missing or empty data-product-id!');\r\n        }\r\n      });\r\n\r\n      __c.deleteModal = __e.find('#deleteProduct:first');\r\n      __e.on('click', '#deleteProduct:first .btn.btn-primary', function (event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        __o.removeProduct(__c.pending_product_id);\r\n        __c.pending_product_id = null;\r\n        __o.reloadPage();\r\n      });\r\n\r\n      __e\r\n        .find('.modal')\r\n        .on('show.bs.modal', function (event) {\r\n          const modal = $(this);\r\n          let modalType = null;\r\n          if (modal.hasClass('addProducts')) {\r\n            modalType = __c.TYPE_ADD_PRODUCTS;\r\n          } else if (modal.hasClass('changeOrder')) {\r\n            modalType = __c.TYPE_CHANGE_ORDER;\r\n          }\r\n          if (modalType) {\r\n            __c.modal = modal;\r\n            __c.modalType = modalType;\r\n            __c.modalChanged = true;\r\n            __c.modalCommitBtn = modal.find('.btn.btn-primary');\r\n            if (__c.modalCommitBtn) {\r\n              __c.modalCommitBtn.on('click', __commitModalProducts);\r\n            }\r\n            __invalidateDisplayList();\r\n          }\r\n        })\r\n        .on('hide.bs.modal hidePrevented.bs.modal', function (event) {\r\n          const modal = $(this);\r\n          let modalType = null;\r\n          if (modal.hasClass('addProducts')) {\r\n            modalType = __c.TYPE_ADD_PRODUCTS;\r\n          } else if (modal.hasClass('changeOrder')) {\r\n            modalType = __c.TYPE_CHANGE_ORDER;\r\n          }\r\n          if (modalType) {\r\n            __c.modal = null;\r\n            __c.modalChanged = true;\r\n            if (__c.modalCommitBtn) {\r\n              __c.modalCommitBtn.off('click', __commitModalProducts);\r\n            }\r\n            __c.modalCommitBtn = null;\r\n            __invalidateDisplayList();\r\n          }\r\n        });\r\n\r\n      setInterval(function () {\r\n        __tick();\r\n      }, 1000 / __s.fps);\r\n\r\n      __invalidateDisplayList();\r\n    };\r\n\r\n    __construct();\r\n  };\r\n\r\n  /**\r\n   * jQuery function that applies the ProductComparison class to the selected elements.\r\n   * @param {object} options - Settings for each new class instance. The settings overwrite the properties of the class [ProductComparison] defined in Scope [__s].\r\n   */\r\n  $.fn.productComparison = function (options) {\r\n    return this.each(function () {\r\n      const e = $(this);\r\n      if (e.data('productComparison')) return;\r\n      const productComparison = new ProductComparison(this, options);\r\n      e.data('productComparison', productComparison);\r\n    });\r\n  };\r\n\r\n  let config = {};\r\n  if (typeof document.productComparison !== 'undefined') {\r\n    config = document.productComparison;\r\n  } else if (window.console) {\r\n    window.console.error(\r\n      'Missing Configuration Object \"document.productComparison\" for ProductComparison/ProductComparisonSelection Plugin! Make sure to define document.productComparison = {...} before Plugin is initialized.'\r\n    );\r\n  }\r\n  $('body').productComparison(config);\r\n})(jQuery);\r\n\r\n$.fn.initializeTags = function () {\r\n  return this.each(function () {\r\n    let card_id = 0;\r\n    $(this)\r\n      .find('.card')\r\n      .each(function () {\r\n        const $card = $(this);\r\n        let row_id = 0;\r\n        $card.find('.stickytable__row.table-body').each(function () {\r\n          const $row = $(this);\r\n          const isHeadline = $row.find('.stickytable__headline--info').length > 0;\r\n          if (isHeadline) {\r\n            row_id++;\r\n            // $row.attr('data-parent-of', 'row-' + card_id + '-' + row_id);\r\n            $row.find('a.tag').attr('data-parent-of', 'row-' + card_id + '-' + row_id);\r\n          } else {\r\n            $row.attr('data-belongs-to', 'row-' + card_id + '-' + row_id);\r\n          }\r\n        });\r\n        card_id++;\r\n      });\r\n  });\r\n};\r\n\r\n$.fn.filterByTags = function () {\r\n  return this.each(function () {\r\n    this.showTag = function (parent, id) {\r\n      $(this)\r\n        .find('.tagcontainer .tag[data-parent-of=\"' + parent + '\"]')\r\n        .each(function () {\r\n          const active = $(this).text() == id;\r\n          if (active) {\r\n            $(this).addClass('active');\r\n            $(this).removeClass('disabled');\r\n          } else {\r\n            $(this).addClass('disabled');\r\n            $(this).removeClass('active');\r\n          }\r\n        });\r\n      $(this)\r\n        .find('div[data-belongs-to=\"' + parent + '\"][data-tag]')\r\n        .each(function () {\r\n          const visible = $(this).attr('data-tag') == id;\r\n          if (visible) {\r\n            $(this).removeClass('d-none');\r\n          } else {\r\n            $(this).addClass('d-none');\r\n          }\r\n        });\r\n    };\r\n    $(this)\r\n      .on('filter.activate', function (event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        this.showTag(event.parent, event.id);\r\n      })\r\n      .on('click', '.tagcontainer .tag', function (event) {\r\n        event.preventDefault();\r\n        event.stopPropagation();\r\n        $(this).trigger({\r\n          type: 'filter.activate',\r\n          parent: $(this).attr('data-parent-of'),\r\n          id: $(this).text(),\r\n        });\r\n      });\r\n  });\r\n};\r\n\r\n// put data-parent-of and data-belongs-to to corresponding elements. this is because otherwise\r\n// the elements do not correspond to each other\r\n$(document).initializeTags();\r\n$('.filter-tags').filterByTags().find('.tagcontainer .tag:first').trigger('click');\r\n"],"sourceRoot":""}