vendor: 641 bytes, lines 1-11
1/* 2 * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). 3 * This devtool is neither made for production nor for readable output files. 4 * It uses "eval()" calls to create a separate source file in the browser devtools. 5 * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) 6 * or disable the default devtool with "devtool: false". 7 * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). 8 */ 9/******/ (() => { // webpackBootstrap 10/******/ var __webpack_modules__ = ({ 11
vendor: 8,035 bytes, lines 12-21
12/***/ "./node_modules/tingle.js/dist/tingle.min.js": 13/*!***************************************************!*\ 14 !*** ./node_modules/tingle.js/dist/tingle.min.js ***! 15 \***************************************************/ 16/***/ (function(module, exports, __webpack_require__) { 17 18eval("var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;!function(t,o){ true?!(__WEBPACK_AMD_DEFINE_FACTORY__ = (o),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?\n\t\t(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :\n\t\t__WEBPACK_AMD_DEFINE_FACTORY__),\n\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):0}(this,function(){function t(t){var o={onClose:null,onOpen:null,beforeOpen:null,beforeClose:null,stickyFooter:!1,footer:!1,cssClass:[],closeLabel:\"Close\",closeMethods:[\"overlay\",\"button\",\"escape\"]};this.opts=r({},o,t),this.init()}function o(){this.modalBoxFooter&&(this.modalBoxFooter.style.width=this.modalBox.clientWidth+\"px\",this.modalBoxFooter.style.left=this.modalBox.offsetLeft+\"px\")}function e(){this.modal=document.createElement(\"div\"),this.modal.classList.add(\"tingle-modal\"),0!==this.opts.closeMethods.length&&this.opts.closeMethods.indexOf(\"overlay\")!==-1||this.modal.classList.add(\"tingle-modal--noOverlayClose\"),this.modal.style.display=\"none\",this.opts.cssClass.forEach(function(t){\"string\"==typeof t&&this.modal.classList.add(t)},this),this.opts.closeMethods.indexOf(\"button\")!==-1&&(this.modalCloseBtn=document.createElement(\"button\"),this.modalCloseBtn.classList.add(\"tingle-modal__close\"),this.modalCloseBtnIcon=document.createElement(\"span\"),this.modalCloseBtnIcon.classList.add(\"tingle-modal__closeIcon\"),this.modalCloseBtnIcon.innerHTML=\"Ã\",this.modalCloseBtnLabel=document.createElement(\"span\"),this.modalCloseBtnLabel.classList.add(\"tingle-modal__closeLabel\"),this.modalCloseBtnLabel.innerHTML=this.opts.closeLabel,this.modalCloseBtn.appendChild(this.modalCloseBtnIcon),this.modalCloseBtn.appendChild(this.modalCloseBtnLabel)),this.modalBox=document.createElement(\"div\"),this.modalBox.classList.add(\"tingle-modal-box\"),this.modalBoxContent=document.createElement(\"div\"),this.modalBoxContent.classList.add(\"tingle-modal-box__content\"),this.modalBox.appendChild(this.modalBoxContent),this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modal.appendChild(this.modalCloseBtn),this.modal.appendChild(this.modalBox)}function s(){this.modalBoxFooter=document.createElement(\"div\"),this.modalBoxFooter.classList.add(\"tingle-modal-box__footer\"),this.modalBox.appendChild(this.modalBoxFooter)}function i(){this._events={clickCloseBtn:this.close.bind(this),clickOverlay:l.bind(this),resize:this.checkOverflow.bind(this),keyboardNav:n.bind(this)},this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modalCloseBtn.addEventListener(\"click\",this._events.clickCloseBtn),this.modal.addEventListener(\"mousedown\",this._events.clickOverlay),window.addEventListener(\"resize\",this._events.resize),document.addEventListener(\"keydown\",this._events.keyboardNav)}function n(t){this.opts.closeMethods.indexOf(\"escape\")!==-1&&27===t.which&&this.isOpen()&&this.close()}function l(t){this.opts.closeMethods.indexOf(\"overlay\")!==-1&&!d(t.target,\"tingle-modal\")&&t.clientX<this.modal.clientWidth&&this.close()}function d(t,o){for(;(t=t.parentElement)&&!t.classList.contains(o););return t}function a(){this.opts.closeMethods.indexOf(\"button\")!==-1&&this.modalCloseBtn.removeEventListener(\"click\",this._events.clickCloseBtn),this.modal.removeEventListener(\"mousedown\",this._events.clickOverlay),window.removeEventListener(\"resize\",this._events.resize),document.removeEventListener(\"keydown\",this._events.keyboardNav)}function r(){for(var t=1;t<arguments.length;t++)for(var o in arguments[t])arguments[t].hasOwnProperty(o)&&(arguments[0][o]=arguments[t][o]);return arguments[0]}function h(){var t,o=document.createElement(\"tingle-test-transition\"),e={transition:\"transitionend\",OTransition:\"oTransitionEnd\",MozTransition:\"transitionend\",WebkitTransition:\"webkitTransitionEnd\"};for(t in e)if(void 0!==o.style[t])return e[t]}var c=h();return t.prototype.init=function(){this.modal||(e.call(this),i.call(this),document.body.insertBefore(this.modal,document.body.firstChild),this.opts.footer&&this.addFooter())},t.prototype.destroy=function(){null!==this.modal&&(a.call(this),this.modal.parentNode.removeChild(this.modal),this.modal=null)},t.prototype.open=function(){var t=this;\"function\"==typeof t.opts.beforeOpen&&t.opts.beforeOpen(),this.modal.style.removeProperty?this.modal.style.removeProperty(\"display\"):this.modal.style.removeAttribute(\"display\"),this._scrollPosition=window.pageYOffset,document.body.classList.add(\"tingle-enabled\"),document.body.style.top=-this._scrollPosition+\"px\",this.setStickyFooter(this.opts.stickyFooter),this.modal.classList.add(\"tingle-modal--visible\"),c?this.modal.addEventListener(c,function o(){\"function\"==typeof t.opts.onOpen&&t.opts.onOpen.call(t),t.modal.removeEventListener(c,o,!1)},!1):\"function\"==typeof t.opts.onOpen&&t.opts.onOpen.call(t),this.checkOverflow()},t.prototype.isOpen=function(){return!!this.modal.classList.contains(\"tingle-modal--visible\")},t.prototype.close=function(){if(\"function\"==typeof this.opts.beforeClose){var t=this.opts.beforeClose.call(this);if(!t)return}document.body.classList.remove(\"tingle-enabled\"),window.scrollTo(0,this._scrollPosition),document.body.style.top=null,this.modal.classList.remove(\"tingle-modal--visible\");var o=this;c?this.modal.addEventListener(c,function t(){o.modal.removeEventListener(c,t,!1),o.modal.style.display=\"none\",\"function\"==typeof o.opts.onClose&&o.opts.onClose.call(this)},!1):(o.modal.style.display=\"none\",\"function\"==typeof o.opts.onClose&&o.opts.onClose.call(this))},t.prototype.setContent=function(t){\"string\"==typeof t?this.modalBoxContent.innerHTML=t:(this.modalBoxContent.innerHTML=\"\",this.modalBoxContent.appendChild(t))},t.prototype.getContent=function(){return this.modalBoxContent},t.prototype.addFooter=function(){s.call(this)},t.prototype.setFooterContent=function(t){this.modalBoxFooter.innerHTML=t},t.prototype.getFooterContent=function(){return this.modalBoxFooter},t.prototype.setStickyFooter=function(t){this.isOverflow()||(t=!1),t?this.modalBox.contains(this.modalBoxFooter)&&(this.modalBox.removeChild(this.modalBoxFooter),this.modal.appendChild(this.modalBoxFooter),this.modalBoxFooter.classList.add(\"tingle-modal-box__footer--sticky\"),o.call(this),this.modalBoxContent.style[\"padding-bottom\"]=this.modalBoxFooter.clientHeight+20+\"px\"):this.modalBoxFooter&&(this.modalBox.contains(this.modalBoxFooter)||(this.modal.removeChild(this.modalBoxFooter),this.modalBox.appendChild(this.modalBoxFooter),this.modalBoxFooter.style.width=\"auto\",this.modalBoxFooter.style.left=\"\",this.modalBoxContent.style[\"padding-bottom\"]=\"\",this.modalBoxFooter.classList.remove(\"tingle-modal-box__footer--sticky\")))},t.prototype.addFooterBtn=function(t,o,e){var s=document.createElement(\"button\");return s.innerHTML=t,s.addEventListener(\"click\",e),\"string\"==typeof o&&o.length&&o.split(\" \").forEach(function(t){s.classList.add(t)}),this.modalBoxFooter.appendChild(s),s},t.prototype.resize=function(){console.warn(\"Resize is deprecated and will be removed in version 1.0\")},t.prototype.isOverflow=function(){var t=window.innerHeight,o=this.modalBox.clientHeight;return o>=t},t.prototype.checkOverflow=function(){this.modal.classList.contains(\"tingle-modal--visible\")&&(this.isOverflow()?this.modal.classList.add(\"tingle-modal--overflow\"):this.modal.classList.remove(\"tingle-modal--overflow\"),!this.isOverflow()&&this.opts.stickyFooter?this.setStickyFooter(!1):this.isOverflow()&&this.opts.stickyFooter&&(o.call(this),this.setStickyFooter(!0)))},{modal:t}});\n\n//# sourceURL=webpack://kits/./node_modules/tingle.js/dist/tingle.min.js?"); 19 20/***/ }), 21
22/***/ "./src/kits.ts": 23/*!*********************!*\ 24 !*** ./src/kits.ts ***! 25 \*********************/ 26/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 27 28"use strict"; 29eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nconst TrackingService_1 = __webpack_require__(/*! ./service/TrackingService */ \"./src/service/TrackingService.ts\");\nconst TealiumTracker_1 = __webpack_require__(/*! ./tracker/TealiumTracker */ \"./src/tracker/TealiumTracker.ts\");\nconst TealiumParamResolver_1 = __webpack_require__(/*! ./resolver/TealiumParamResolver */ \"./src/resolver/TealiumParamResolver.ts\");\nconst DocumentationService_1 = __webpack_require__(/*! ./service/documentationServices/DocumentationService */ \"./src/service/documentationServices/DocumentationService.ts\");\nconst TealiumBaseTrackingParamResolver_1 = __webpack_require__(/*! ./resolver/TealiumBaseTrackingParamResolver */ \"./src/resolver/TealiumBaseTrackingParamResolver.ts\");\nconst GTMTracker_1 = __webpack_require__(/*! ./tracker/GTMTracker */ \"./src/tracker/GTMTracker.ts\");\nconst GTMParamResolver_1 = __webpack_require__(/*! ./resolver/GTMParamResolver */ \"./src/resolver/GTMParamResolver.ts\");\nconst GTMOptionsService_1 = __webpack_require__(/*! ./service/optionServices/GTMOptionsService */ \"./src/service/optionServices/GTMOptionsService.ts\");\nconst OfficeOnOptionsService_1 = __webpack_require__(/*! ./service/optionServices/OfficeOnOptionsService */ \"./src/service/optionServices/OfficeOnOptionsService.ts\");\nconst OfficeOnTracker_1 = __webpack_require__(/*! ./tracker/OfficeOnTracker */ \"./src/tracker/OfficeOnTracker.ts\");\nconst TealiumOptionsService_1 = __webpack_require__(/*! ./service/optionServices/TealiumOptionsService */ \"./src/service/optionServices/TealiumOptionsService.ts\");\nconst OfficeOnParamResolver_1 = __webpack_require__(/*! ./resolver/OfficeOnParamResolver */ \"./src/resolver/OfficeOnParamResolver.ts\");\nconst trackingService = new TrackingService_1.TrackingService(window);\nconst tealiumTracker = new TealiumTracker_1.TealiumTracker(window);\ntealiumTracker.setParamResolver(new TealiumParamResolver_1.TealiumParamResolver());\ntealiumTracker.setOptionsService(new TealiumOptionsService_1.TealiumOptionsService(window));\ntealiumTracker.registerAtService(trackingService);\ntealiumTracker.onPageLoadEvents();\nconst officeOnTracker = new OfficeOnTracker_1.OfficeOnTracker(window);\nofficeOnTracker.setParamResolver(new OfficeOnParamResolver_1.OfficeOnParamResolver());\nofficeOnTracker.setOptionsService(new OfficeOnOptionsService_1.OfficeOnOptionsService(window));\nofficeOnTracker.registerAtService(trackingService);\nconst gtmTracker = new GTMTracker_1.GTMTracker(window);\ngtmTracker.setParamResolver(new GTMParamResolver_1.GTMParamResolver(window));\ngtmTracker.setOptionsService(new GTMOptionsService_1.GTMOptionsService(window));\ngtmTracker.registerAtService(trackingService);\ngtmTracker.onPageLoadEvents();\ntrackingService.registerEvents();\nglobalThis.trackingService = trackingService;\nconst kitsDocumentation = new DocumentationService_1.DocumentationService();\nkitsDocumentation.addBaseTrackingParamresolver(new TealiumBaseTrackingParamResolver_1.TealiumBaseTrackingParamResolver());\nkitsDocumentation.run();\n\n\n//# sourceURL=webpack://kits/./src/kits.ts?"); 30 31/***/ }), 32
33/***/ "./src/model/DataTuple.ts": 34/*!********************************!*\ 35 !*** ./src/model/DataTuple.ts ***! 36 \********************************/ 37/***/ ((__unused_webpack_module, exports) => { 38 39"use strict"; 40eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DataTuple = void 0;\nclass DataTuple {\n constructor() {\n }\n get key() {\n return this._key;\n }\n set key(value) {\n this._key = value;\n }\n get value() {\n return this._value;\n }\n set value(value) {\n this._value = value;\n }\n}\nexports.DataTuple = DataTuple;\n\n\n//# sourceURL=webpack://kits/./src/model/DataTuple.ts?"); 41 42/***/ }), 43
44/***/ "./src/model/GTMDataLayer.ts": 45/*!***********************************!*\ 46 !*** ./src/model/GTMDataLayer.ts ***! 47 \***********************************/ 48/***/ ((__unused_webpack_module, exports) => { 49 50"use strict"; 51eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMDataLayer = void 0;\nclass GTMDataLayer {\n constructor(ecommerceData, trackingEvent) {\n this.event = trackingEvent;\n this.ecommerce = ecommerceData;\n }\n}\nexports.GTMDataLayer = GTMDataLayer;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMDataLayer.ts?"); 52 53/***/ }), 54
55/***/ "./src/model/GTMEcommerce.ts": 56/*!***********************************!*\ 57 !*** ./src/model/GTMEcommerce.ts ***! 58 \***********************************/ 59/***/ ((__unused_webpack_module, exports) => { 60 61"use strict"; 62eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMEcommerce = void 0;\nclass GTMEcommerce {\n constructor(instantiateItemsList = true) {\n if (instantiateItemsList) {\n this.items = [];\n }\n }\n}\nexports.GTMEcommerce = GTMEcommerce;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMEcommerce.ts?"); 63 64/***/ }), 65
66/***/ "./src/model/GTMEcommerceItem.ts": 67/*!***************************************!*\ 68 !*** ./src/model/GTMEcommerceItem.ts ***! 69 \***************************************/ 70/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 71 72"use strict"; 73eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMEcommerceItem = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nclass GTMEcommerceItem {\n constructor(options) {\n this.item_name = this.getStringFromArrayOrString(options.product_name);\n this.item_id = this.getStringFromArrayOrString(options.product_id);\n this.price = DataUtils_1.DataUtils.convertEmptyPriceToZero(this.getStringFromArrayOrString(options.product_price));\n this.item_brand = this.getStringFromArrayOrString(options.product_brand);\n this.item_category = this.getStringFromArrayOrString(options.product_category);\n this.item_category_id = this.getStringFromArrayOrString(options.product_category_id);\n this.item_category2 = this.getStringFromArrayOrString(options.product_main_category);\n this.item_list_name = this.getStringFromArrayOrString(options.product_list_name);\n this.item_list_id = this.getStringFromArrayOrString(options.product_list_section_id);\n this.index = options.product_list_id || \"\";\n this.quantity = \"1\";\n this.product_availability = DataUtils_1.DataUtils.mapAvailability(this.getStringFromArrayOrString(options.product_availability));\n const cordlessTool = this.getStringFromArrayOrString(options.cordless_tool);\n if (cordlessTool !== \"\") {\n this.cordless_tool = cordlessTool;\n }\n this.baretool_number = this.getStringFromArrayOrString(options.baretool_number);\n this.battery_voltage = this.getStringFromArrayOrString(options.battery_voltage);\n this.master_order_number = this.getStringFromArrayOrString(options.master_order_number);\n }\n getStringFromArrayOrString(stringOrArray) {\n if (stringOrArray === undefined || stringOrArray === null) {\n return \"\";\n }\n if (Array.isArray(stringOrArray)) {\n if (stringOrArray.length > 0) {\n return stringOrArray[0];\n }\n else {\n return \"\";\n }\n }\n else {\n return stringOrArray;\n }\n }\n}\nexports.GTMEcommerceItem = GTMEcommerceItem;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMEcommerceItem.ts?"); 74 75/***/ }), 76
77/***/ "./src/model/GTMFilterClick.ts": 78/*!*************************************!*\ 79 !*** ./src/model/GTMFilterClick.ts ***! 80 \*************************************/ 81/***/ ((__unused_webpack_module, exports) => { 82 83"use strict"; 84eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMFilterClick = void 0;\nclass GTMFilterClick {\n}\nexports.GTMFilterClick = GTMFilterClick;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMFilterClick.ts?"); 85 86/***/ }), 87
88/***/ "./src/model/GTMFormInitialized.ts": 89/*!*****************************************!*\ 90 !*** ./src/model/GTMFormInitialized.ts ***! 91 \*****************************************/ 92/***/ ((__unused_webpack_module, exports) => { 93 94"use strict"; 95eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMFormInitialized = void 0;\nclass GTMFormInitialized {\n constructor(formName, formType) {\n this.event = \"PT_Form_Initialized\";\n this.form_name = formName || \"\";\n this.form_type = formType || \"\";\n }\n}\nexports.GTMFormInitialized = GTMFormInitialized;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMFormInitialized.ts?"); 96 97/***/ }), 98
99/***/ "./src/model/GTMFormSubmit.ts": 100/*!************************************!*\ 101 !*** ./src/model/GTMFormSubmit.ts ***! 102 \************************************/ 103/***/ ((__unused_webpack_module, exports) => { 104 105"use strict"; 106eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMFormSubmit = void 0;\nclass GTMFormSubmit {\n constructor(formName, formType, formStepName, email) {\n this.event = \"PT_FormSubmit_Click\";\n this.form_name = formName || \"\";\n this.form_type = formType || \"\";\n this.form_step_name = formStepName || \"\";\n if (email) {\n this.email = email;\n }\n }\n}\nexports.GTMFormSubmit = GTMFormSubmit;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMFormSubmit.ts?"); 107 108/***/ }), 109
110/***/ "./src/model/GTMRetailConnect.ts": 111/*!***************************************!*\ 112 !*** ./src/model/GTMRetailConnect.ts ***! 113 \***************************************/ 114/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 115 116"use strict"; 117eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMRetailConnect = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nclass GTMRetailConnect {\n constructor(options, eventName) {\n this.event = eventName;\n this.product_availability = DataUtils_1.DataUtils.mapAvailability(this.getStringFromArrayOrString(options.product_availability));\n this.product_bi_trade_code = this.getConcatStringFromArray(options.product_bi_trade_code);\n this.product_bi_trade_name = this.getConcatStringFromArray(options.product_bi_trade_name);\n this.product_bi_trade_relevance = this.getConcatStringFromArray(options.product_bi_trade_relevance);\n this.product_price = DataUtils_1.DataUtils.convertEmptyPriceToZero(this.getStringFromArrayOrString(options.product_price));\n this.product_category = this.getStringFromArrayOrString(options.product_category);\n this.product_brand = this.getStringFromArrayOrString(options.product_brand);\n this.product_category_id = this.getStringFromArrayOrString(options.product_category_id);\n this.product_id = this.getStringFromArrayOrString(options.product_id);\n this.product_name = this.getStringFromArrayOrString(options.product_name);\n }\n getStringFromArrayOrString(stringOrArray) {\n if (stringOrArray === undefined) {\n return \"\";\n }\n if (Array.isArray(stringOrArray)) {\n if (stringOrArray.length > 0) {\n return stringOrArray[0];\n }\n else {\n return \"\";\n }\n }\n else {\n return stringOrArray;\n }\n }\n getConcatStringFromArray(arrayOrString) {\n if (arrayOrString === undefined) {\n return \"\";\n }\n if (Array.isArray(arrayOrString)) {\n return arrayOrString.join(\", \");\n }\n else {\n return arrayOrString;\n }\n }\n}\nexports.GTMRetailConnect = GTMRetailConnect;\n\n\n//# sourceURL=webpack://kits/./src/model/GTMRetailConnect.ts?"); 118 119/***/ }), 120
121/***/ "./src/observer/PromotionTeaserTrackingObserver.ts": 122/*!*********************************************************!*\ 123 !*** ./src/observer/PromotionTeaserTrackingObserver.ts ***! 124 \*********************************************************/ 125/***/ ((__unused_webpack_module, exports) => { 126 127"use strict"; 128eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.PromotionTeaserTrackingObserver = void 0;\nclass PromotionTeaserTrackingObserver {\n constructor(jQueryInstance, documentRef, onVisible) {\n this.jQ = jQueryInstance;\n this.documentRef = documentRef;\n this.callback = onVisible;\n if (typeof IntersectionObserver !== \"undefined\") {\n this.intersectionObserver = new IntersectionObserver(this.handleIntersection.bind(this), {\n root: null,\n rootMargin: \"0px\",\n threshold: 0.7,\n });\n }\n if (typeof MutationObserver !== \"undefined\") {\n this.mutationObserver = new MutationObserver(this.handleMutations.bind(this));\n }\n }\n start() {\n if (this.intersectionObserver) {\n this.observeExistingTeasers();\n }\n if (this.mutationObserver) {\n this.mutationObserver.observe(this.documentRef.body, {\n childList: true,\n subtree: true,\n });\n }\n }\n stop() {\n var _a, _b;\n (_a = this.intersectionObserver) === null || _a === void 0 ? void 0 : _a.disconnect();\n (_b = this.mutationObserver) === null || _b === void 0 ? void 0 : _b.disconnect();\n }\n observeExistingTeasers(root = this.documentRef) {\n if (!this.intersectionObserver) {\n return;\n }\n const elements = root.querySelectorAll(\"[data-track_dyn_teaserid]\");\n elements.forEach((el) => this.observeIfNotNested(el));\n }\n observeIfNotNested(el) {\n if (this.hasAncestorWithSameTeaserId(el)) {\n return;\n }\n this.intersectionObserver.observe(el);\n }\n hasAncestorWithSameTeaserId(el) {\n const teaserId = el.getAttribute(\"data-track_dyn_teaserid\");\n if (!teaserId) {\n return false;\n }\n let parent = el.parentElement;\n while (parent) {\n if (parent.getAttribute(\"data-track_dyn_teaserid\") === teaserId) {\n return true;\n }\n parent = parent.parentElement;\n }\n return false;\n }\n handleMutations(mutations) {\n if (!this.intersectionObserver) {\n return;\n }\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (!(node instanceof HTMLElement)) {\n return;\n }\n if (node.matches(\"[data-track_dyn_teaserid]\")) {\n this.observeIfNotNested(node);\n }\n node\n .querySelectorAll(\"[data-track_dyn_teaserid]\")\n .forEach((child) => this.observeIfNotNested(child));\n });\n });\n }\n handleIntersection(entries, obs) {\n entries.forEach((entry) => {\n if (!entry.isIntersecting) {\n return;\n }\n const element = entry.target;\n const $element = this.jQ(element);\n this.callback($element);\n obs.unobserve(element);\n });\n }\n}\nexports.PromotionTeaserTrackingObserver = PromotionTeaserTrackingObserver;\n\n\n//# sourceURL=webpack://kits/./src/observer/PromotionTeaserTrackingObserver.ts?"); 129 130/***/ }), 131
132/***/ "./src/resolver/AbstractResolver.ts": 133/*!******************************************!*\ 134 !*** ./src/resolver/AbstractResolver.ts ***! 135 \******************************************/ 136/***/ ((__unused_webpack_module, exports) => { 137 138"use strict"; 139eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AbstractResolver = void 0;\nclass AbstractResolver {\n resolve(paramKey) {\n return this.paramMapping[paramKey];\n }\n}\nexports.AbstractResolver = AbstractResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/AbstractResolver.ts?"); 140 141/***/ }), 142
143/***/ "./src/resolver/GTMParamResolver.ts": 144/*!******************************************!*\ 145 !*** ./src/resolver/GTMParamResolver.ts ***! 146 \******************************************/ 147/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 148 149"use strict"; 150eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMParamResolver = void 0;\nconst AbstractResolver_1 = __webpack_require__(/*! ./AbstractResolver */ \"./src/resolver/AbstractResolver.ts\");\nclass GTMParamResolver extends AbstractResolver_1.AbstractResolver {\n constructor(...args) {\n super();\n this.paramMapping = {\n baretoolnumber: \"baretool_number\",\n batteryvoltage: \"battery_voltage\",\n cordlesstool: \"cordless_tool\",\n event_type: \"event_type\",\n filterattribute: \"filter_value\",\n filtercategory: \"filter_category\",\n filtercomb: \"filter_set\",\n filtername: \"filter_name\",\n onoff: \"filter_action\",\n productaction: \"product_action\",\n producttradename: \"product_bi_trade_name\",\n producttradecode: \"product_bi_trade_code\",\n producttraderelevance: \"product_bi_trade_relevance\",\n productavailability: \"product_availability\",\n productbrand: \"product_brand\",\n productcategory: \"product_category\",\n productmaincategory: \"product_main_category\",\n productcategoryid: \"product_category_id\",\n productid: \"product_id\",\n productname: \"product_name\",\n productprice: \"product_price\",\n productquantity: \"product_quantity\",\n productsku: \"product_sku\",\n subteasercontent: \"teaser_subcontent\",\n logged_in_user: \"logged_in_user\",\n clickelementclass: \"click_element_class\",\n clickelementid: \"click_element_id\",\n clickname: \"click_name\",\n clicktargettype: \"click_target_type\",\n clicktargeturl: \"click_target_url\",\n clicktargeturlhost: \"click_target_url_host\",\n currency: \"currency\",\n contacttype: \"contact_type\",\n masterordernumber: \"master_order_number\",\n tealiumevent: \"tealium_event\",\n retailername: \"retailer_name\",\n product_list_sku: \"product_list_sku\",\n product_list_id: \"product_list_id\",\n product_list_section_id: \"product_list_section_id\",\n product_list_name: \"product_list_name\",\n teaserid: \"promotion_id\",\n teasername: \"promotion_name\",\n creativename: \"creative_name\",\n form_name: \"form_name\",\n form_type: \"form_type\",\n form_step_name: \"form_step_name\",\n email: \"email\",\n };\n if (typeof globalThis !== \"undefined\" &&\n globalThis.tealiumParamMapping !== null &&\n typeof globalThis.tealiumParamMapping === \"object\") {\n for (const key of Object.keys(globalThis.tealiumParamMapping)) {\n this.paramMapping[key] = globalThis.tealiumParamMapping[key];\n }\n }\n if (typeof globalThis !== \"undefined\" &&\n globalThis.linkDecoration !== null &&\n typeof globalThis.linkDecoration === \"object\") {\n for (const key of Object.keys(globalThis.linkDecoration)) {\n this.paramMapping[key] = globalThis.linkDecoration[key];\n }\n }\n if (args.length > 0) {\n const pMapping = args[0];\n if (typeof pMapping === \"object\") {\n for (const key of Object.keys(pMapping)) {\n this.paramMapping[key] = pMapping[key];\n }\n }\n }\n }\n}\nexports.GTMParamResolver = GTMParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/GTMParamResolver.ts?"); 151 152/***/ }), 153
154/***/ "./src/resolver/OfficeOnParamResolver.ts": 155/*!***********************************************!*\ 156 !*** ./src/resolver/OfficeOnParamResolver.ts ***! 157 \***********************************************/ 158/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 159 160"use strict"; 161eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.OfficeOnParamResolver = void 0;\nconst AbstractResolver_1 = __webpack_require__(/*! ./AbstractResolver */ \"./src/resolver/AbstractResolver.ts\");\nclass OfficeOnParamResolver extends AbstractResolver_1.AbstractResolver {\n constructor(...args) {\n super();\n this.paramMapping = {\n productaction: \"product_action\",\n productavailability: \"product_availability\",\n productbrand: \"product_brand\",\n sortby: \"sort_by\",\n sorttype: \"sort_type\",\n subteasercontent: \"teaser_subcontent\",\n logged_in_user: \"logged_in_user\",\n clickelementclass: \"click_element_class\",\n clickelementid: \"click_element_id\",\n clickname: \"click_name\",\n clicktargettype: \"click_target_type\",\n clicktargeturl: \"click_target_url\",\n clicktargeturlhost: \"click_target_url_host\",\n currency: \"currency\",\n contacttype: \"contact_type\",\n masterordernumber: \"master_order_number\",\n tealiumevent: \"tealium_event\",\n };\n if (typeof globalThis !== \"undefined\"\n && globalThis.tealiumParamMapping !== null\n && typeof globalThis.tealiumParamMapping === \"object\") {\n for (const key of Object.keys(globalThis.tealiumParamMapping)) {\n this.paramMapping[key] = globalThis.tealiumParamMapping[key];\n }\n }\n if (typeof globalThis !== \"undefined\"\n && globalThis.linkDecoration !== null\n && typeof globalThis.linkDecoration === \"object\") {\n for (const key of Object.keys(globalThis.linkDecoration)) {\n this.paramMapping[key] = globalThis.linkDecoration[key];\n }\n }\n if (args.length > 0) {\n const pMapping = args[0];\n if (typeof pMapping === \"object\") {\n for (const key of Object.keys(pMapping)) {\n this.paramMapping[key] = pMapping[key];\n }\n }\n }\n }\n}\nexports.OfficeOnParamResolver = OfficeOnParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/OfficeOnParamResolver.ts?"); 162 163/***/ }), 164
165/***/ "./src/resolver/TealiumBaseTrackingParamResolver.ts": 166/*!**********************************************************!*\ 167 !*** ./src/resolver/TealiumBaseTrackingParamResolver.ts ***! 168 \**********************************************************/ 169/***/ ((__unused_webpack_module, exports) => { 170 171"use strict"; 172eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumBaseTrackingParamResolver = void 0;\nclass TealiumBaseTrackingParamResolver {\n constructor() {\n this.objectNameInWindow = \"utag_data\";\n this.trackerName = \"Tealium\";\n }\n getBaseTrackingPrams() {\n const params = {};\n if (globalThis.hasOwnProperty(this.objectNameInWindow)) {\n params[this.trackerName] = globalThis[this.objectNameInWindow];\n return params;\n }\n return {};\n }\n getTrackerName() {\n return this.trackerName;\n }\n setTrackerName(name) {\n this.trackerName = name;\n }\n}\nexports.TealiumBaseTrackingParamResolver = TealiumBaseTrackingParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/TealiumBaseTrackingParamResolver.ts?"); 173 174/***/ }), 175
176/***/ "./src/resolver/TealiumParamResolver.ts": 177/*!**********************************************!*\ 178 !*** ./src/resolver/TealiumParamResolver.ts ***! 179 \**********************************************/ 180/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 181 182"use strict"; 183eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumParamResolver = void 0;\nconst AbstractResolver_1 = __webpack_require__(/*! ./AbstractResolver */ \"./src/resolver/AbstractResolver.ts\");\nclass TealiumParamResolver extends AbstractResolver_1.AbstractResolver {\n constructor(...args) {\n super();\n this.paramMapping = {\n baretoolnumber: \"baretool_number\",\n batteryvoltage: \"battery_voltage\",\n cordlesstool: \"cordless_tool\",\n filterattribute: \"filter_value\",\n filtercategory: \"filter_category\",\n filtercomb: \"filter_set\",\n onoff: \"filter_action\",\n productaction: \"product_action\",\n productavailability: \"product_availability\",\n producttradename: \"product_bi_trade_name\",\n producttradecode: \"product_bi_trade_code\",\n producttraderelevance: \"product_bi_trade_relevance\",\n productbrand: \"product_brand\",\n productcategory: \"product_category\",\n productmaincategory: \"product_main_category\",\n productcategoryid: \"product_category_id\",\n productid: \"product_id\",\n productname: \"product_name\",\n productprice: \"product_price\",\n productquantity: \"product_quantity\",\n productsku: \"product_sku\",\n searchcategory: \"search_category\",\n searchterm: \"search_term\",\n sortby: \"sort_by\",\n sorttype: \"sort_type\",\n subteasercontent: \"teaser_subcontent\",\n logged_in_user: \"logged_in_user\",\n clickelementclass: \"click_element_class\",\n clickelementid: \"click_element_id\",\n clickname: \"click_name\",\n clicktargettype: \"click_target_type\",\n clicktargeturl: \"click_target_url\",\n clicktargeturlhost: \"click_target_url_host\",\n currency: \"currency\",\n contacttype: \"contact_type\",\n masterordernumber: \"master_order_number\",\n tealiumevent: \"tealium_event\",\n retailername: \"retailer_name\",\n product_list_name: \"product_list_name\",\n product_list_id: \"product_list_id\",\n product_index: \"product_index\",\n form_name: \"form_name\",\n form_type: \"form_type\",\n form_step_name: \"form_step_name\",\n email: \"email\",\n teaserid: \"promotion_id\",\n teasername: \"promotion_name\",\n creativename: \"creative_name\",\n };\n if (typeof globalThis !== \"undefined\" &&\n globalThis.tealiumParamMapping !== null &&\n typeof globalThis.tealiumParamMapping === \"object\") {\n for (const key of Object.keys(globalThis.tealiumParamMapping)) {\n this.paramMapping[key] = globalThis.tealiumParamMapping[key];\n }\n }\n if (typeof globalThis !== \"undefined\" &&\n globalThis.linkDecoration !== null &&\n typeof globalThis.linkDecoration === \"object\") {\n for (const key of Object.keys(globalThis.linkDecoration)) {\n this.paramMapping[key] = globalThis.linkDecoration[key];\n }\n }\n if (args.length > 0) {\n const pMapping = args[0];\n if (typeof pMapping === \"object\") {\n for (const key of Object.keys(pMapping)) {\n this.paramMapping[key] = pMapping[key];\n }\n }\n }\n }\n}\nexports.TealiumParamResolver = TealiumParamResolver;\n\n\n//# sourceURL=webpack://kits/./src/resolver/TealiumParamResolver.ts?"); 184 185/***/ }), 186
187/***/ "./src/service/TrackingService.ts": 188/*!****************************************!*\ 189 !*** ./src/service/TrackingService.ts ***! 190 \****************************************/ 191/***/ ((__unused_webpack_module, exports) => { 192 193"use strict"; 194eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TrackingService = void 0;\nclass TrackingService {\n constructor(windowObject) {\n this.TRACKINGELEMENT_CSS_CLASS = \"trackingElement\";\n this.ONCE_ONLY_EVENTS = [\"input\"];\n if (typeof windowObject !== \"undefined\") {\n this.localWindow = windowObject;\n }\n else {\n if (typeof window !== \"undefined\") {\n this.localWindow = window;\n }\n else {\n }\n }\n this.trackers = [];\n this._$ = this.localWindow.$;\n this.registerDomObserver();\n }\n registerTracker(tracker) {\n this.trackers.push(tracker);\n }\n registerEvents() {\n const jQ = this._$;\n const localTrackers = this.trackers;\n const onceOnlyEvents = this.ONCE_ONLY_EVENTS;\n this._$(\".\" + this.TRACKINGELEMENT_CSS_CLASS).each(function (index, htmlElem) {\n const jqueryElement = jQ(htmlElem);\n const eventType = jqueryElement.data(\"track_domevent\");\n if (typeof eventType !== \"undefined\" && eventType.length > 0) {\n const handler = (eventObject) => {\n const jquerElem = jQ(this);\n for (const tracker of localTrackers) {\n if (tracker.shouldTrack()) {\n tracker.track(jquerElem);\n }\n }\n };\n jqueryElement.off(eventType + \".tracking\");\n if (onceOnlyEvents.indexOf(eventType) !== -1) {\n jqueryElement.one(eventType + \".tracking\", handler);\n }\n else {\n jqueryElement.on(eventType + \".tracking\", handler);\n }\n }\n });\n }\n getTrackingParams(...args) {\n const retval = {};\n if (args != null && \"undefined\" !== typeof args) {\n for (const t of this.trackers) {\n const tmpTrackingParams = t.getTrackingParams(args);\n if (null != tmpTrackingParams && \"object\" === typeof tmpTrackingParams) {\n for (const key in tmpTrackingParams) {\n retval[key] = tmpTrackingParams[key];\n }\n }\n }\n }\n return retval;\n }\n track(...args) {\n if (args.length > 0) {\n for (const tracker of this.trackers) {\n if (tracker.shouldTrack()) {\n tracker.track(args);\n }\n }\n }\n }\n registerAjaxEvents(html) {\n if (this._$(html).hasClass(this.TRACKINGELEMENT_CSS_CLASS)) {\n this.registerEventsForCallback(0, html);\n }\n else {\n const elems = this._$(html).find(\".\" + this.TRACKINGELEMENT_CSS_CLASS);\n if (elems != null && elems.length > 0) {\n for (const element of elems) {\n const elem = element;\n this.registerEventsForCallback(0, elem);\n }\n }\n }\n }\n registerEventsForCallback(index, htmlElem) {\n const jQ = this._$;\n const localTrackers = this.trackers;\n const jqueryElement = jQ(htmlElem);\n const eventType = jqueryElement.data(\"track_domevent\");\n if (typeof eventType !== \"undefined\" && eventType.length > 0) {\n const handler = (eventObject) => {\n const jquerElem = jQ(eventObject.currentTarget);\n for (const tracker of localTrackers) {\n if (tracker.shouldTrack()) {\n tracker.track(jquerElem);\n }\n }\n };\n jqueryElement.off(eventType + \".tracking\");\n if (this.ONCE_ONLY_EVENTS.indexOf(eventType) !== -1) {\n jqueryElement.one(eventType + \".tracking\", handler);\n }\n else {\n jqueryElement.on(eventType + \".tracking\", handler);\n }\n const event = new CustomEvent(\"kitsAjaxEventsRegistered\", { detail: jqueryElement });\n window.dispatchEvent(event);\n }\n }\n registerDomObserver() {\n try {\n MutationObserver\n = this.localWindow.MutationObserver || this.localWindow.WebKitMutationObserver;\n const localThis = this;\n this.localWindow.observer = new MutationObserver((mutations, observer) => {\n const arrayLength = mutations.length;\n for (let i = 0; i < arrayLength;
194 i++) {\n const mutation = mutations[i];\n if (mutation.type === \"childList\") {\n const innerArrayLength = mutation.addedNodes.length;\n for (let j = 0; j < innerArrayLength; j++) {\n const addedNode = mutation.addedNodes[j];\n localThis.registerAjaxEvents((addedNode));\n }\n }\n }\n });\n this.localWindow.observer.observe(document, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n }\n catch (e) {\n console.debug(e);\n }\n }\n}\nexports.TrackingService = TrackingService;\n\n\n//# sourceURL=webpack://kits/./src/service/TrackingService.ts?"); 195 196/***/ }), 197
198/***/ "./src/service/documentationServices/DocumentationService.ts": 199/*!*******************************************************************!*\ 200 !*** ./src/service/documentationServices/DocumentationService.ts ***! 201 \*******************************************************************/ 202/***/ (function(__unused_webpack_module, exports, __webpack_require__) { 203 204"use strict"; 205eval("\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DocumentationService = void 0;\nconst tingle = __importStar(__webpack_require__(/*! tingle.js */ \"./node_modules/tingle.js/dist/tingle.min.js\"));\nclass DocumentationService {\n constructor(...args) {\n this.config = {\n documentationEnabled: false,\n enablePattern: \"1\",\n paramName: \"kitEnableDoku\",\n trackingElements: {\n classNames: {\n element: \"trackingElement\",\n module: \"trackingModule\",\n teaser: \"trackingTeaser\",\n },\n cssFiles: [\"/kits/css/kits_documentation.css\"],\n },\n trackingOverlay: {\n cssFiles: [\n \"/kits/css/custom.css\",\n ],\n },\n };\n this.baseTrackingParamResolvers = [];\n if (args.length > 0) {\n const dokConfig = args[0];\n if (\"object\" === typeof dokConfig) {\n this.extendConfiguration(dokConfig);\n }\n }\n if (globalThis.hasOwnProperty(\"kitsDocConfig\")) {\n this.extendConfiguration(globalThis.kitsDocConfig);\n }\n this.toggleDokModus();\n }\n applyParameterPopups() {\n this.loadCssFiles(this.config.trackingOverlay.cssFiles);\n this.createPopUps();\n }\n markElements() {\n this.loadCssFiles(this.config.trackingElements.cssFiles);\n }\n run() {\n if (this.config.documentationEnabled) {\n this.markElements();\n this.applyParameterPopups();\n window.addEventListener(\"kitsAjaxEventsRegistered\", (event) => {\n this.createPopup(event.detail[0]);\n });\n this.createBaseTrackingPopup();\n }\n }\n addBaseTrackingParamresolver(resolver) {\n this.baseTrackingParamResolvers.push(resolver);\n }\n getParamValue(url) {\n const regexS = \"[\\\\?&]\" + this.config.paramName + \"=([^&#]*)\";\n const regex = new RegExp(regexS);\n const results = regex.exec(url);\n return results == null ? null : results[1];\n }\n eraseCookie() {\n document.cookie = this.config.paramName + \"=; Max-Age=-99999999;\";\n }\n getCookie() {\n const nameEQ = this.config.paramName + \"=\";\n const ca = document.cookie.split(\";\");\n for (let i = 0; i < ca.length;
205 i++) {\n let c = ca[i];\n while (c.charAt(0) === \" \") {\n c = c.substring(1, c.length);\n }\n if (c.indexOf(nameEQ) === 0) {\n return c.substring(nameEQ.length, c.length);\n }\n }\n return null;\n }\n extendConfiguration(sourceObject) {\n if (null != sourceObject && \"object\" === typeof sourceObject) {\n for (const key in sourceObject) {\n this.config[key] = sourceObject[key];\n }\n }\n }\n toggleDokModus() {\n const url = window.location.href;\n const paramValue = this.getParamValue(url) + \"\";\n if (null !== paramValue) {\n if (paramValue === this.config.enablePattern) {\n document.cookie =\n this.config.paramName + \"=\" + this.config.enablePattern + \"; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/\";\n this.config.documentationEnabled = true;\n }\n else {\n this.config.documentationEnabled = false;\n if (!this.config.documentationEnabled) {\n this.eraseCookie();\n }\n }\n }\n }\n loadCssFiles(cssFiles) {\n if (null != cssFiles && Array.isArray(cssFiles)) {\n for (const key in cssFiles) {\n this.loadCssFile(cssFiles[key]);\n }\n }\n }\n loadCssFile(cssFile) {\n if (null != cssFile && \"string\" === typeof cssFile) {\n const link = document.createElement(\"link\");\n link.href = cssFile;\n link.type = \"text/css\";\n link.rel = \"stylesheet\";\n link.media = \"screen\";\n document.getElementsByTagName(\"head\")[0].appendChild(link);\n }\n }\n createBaseTrackingPopup() {\n document.addEventListener(\"click\", (event) => {\n if (event.altKey) {\n const params = {};\n for (const resolver of this.baseTrackingParamResolvers) {\n const btp = resolver.getBaseTrackingPrams();\n console.debug(\"btp Params\", btp);\n for (const key in btp) {\n params[key] = btp[key];\n }\n }\n const modal = new tingle.modal({\n footer: true,\n stickyFooter: true,\n });\n let content = \"<h2 class='kits-doc-h2'>Base Tracking Params: </h2>\";\n content += this.createTrackingParamContent(params);\n modal.setContent(content);\n modal.addFooterBtn(\"OK\", \"tingle-btn tingle-btn--primary tingle-btn--pull-right\", () => {\n modal.close();\n });\n modal.open();\n }\n });\n }\n createPopUps() {\n for (const className in this.config.trackingElements.classNames) {\n const fullClassName = \".\" + this.config.trackingElements.classNames[className];\n const elements = document.querySelectorAll(fullClassName);\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n this.createPopup(element);\n }\n }\n }\n createPopup(element) {\n const classNames = element.classList;\n const fullClassNames = [];\n for (let i = 0; i < classNames.length; i++) {\n for (const key in this.config.trackingElements.classNames) {\n if (this.config.trackingElements.classNames[key] === classNames[i]) {\n fullClassNames.push(classNames[i]);\n break;\n }\n }\n }\n element.addEventListener(\"click\", (eventParam) => {\n if (eventParam.ctrlKey) {\n eventParam.stopPropagation();\n const trackingParams = globalThis.trackingService.getTrackingParams(element);\n const modal = new tingle.modal({\n footer: true,\n stickyFooter: true,\n });\n let content = \"<h2 class='kits-doc-h2'>Tracking Params: \" +\n element.tagName + \"/\" + fullClassNames.join(\";\") + \"</h2><p class='kits-doc-dompath'>\" +\n \" with DOM path: \" + this.getDomPath(element).join(\"
205->\") + \"</p>\";\n content += this.createTrackingParamContent(trackingParams);\n modal.setContent(content);\n modal.addFooterBtn(\"OK\", \"tingle-btn tingle-btn--primary tingle-btn--pull-right\", () => {\n modal.close();\n });\n modal.open();\n }\n });\n }\n createTrackingParamContent(trackingParams) {\n if (null != trackingParams && \"object\" === typeof trackingParams) {\n let content = \"\";\n for (const trackerName in trackingParams) {\n content += \"<table class='kits-doc-table'><thead><tr><td class='kits-doc-td' colspan='2'><h3>\" +\n trackerName + \"</h3></td></tr></thead>\" +\n \"<tbody><tr><td colspan='2'><pre class='kits-doc-pre'>\" +\n JSON.stringify(trackingParams[trackerName], null, 2) +\n \"</pre></td></tr></tbody></table>\";\n }\n return content;\n }\n return \"\";\n }\n getDomPath(el) {\n const stack = [];\n while (el.parentNode != null) {\n let sibCount = 0;\n let sibIndex = 0;\n for (let i = 0; i < el.parentNode.childNodes.length; i++) {\n const sib = el.parentNode.childNodes[i];\n if (sib.nodeName === el.nodeName) {\n if (sib === el) {\n sibIndex = sibCount;\n }\n sibCount++;\n }\n }\n let classNames = \"\";\n if (el.classList.length > 0) {\n const tmpArr = [];\n for (let i = 0; i < el.classList.length; i++) {\n tmpArr.push(el.classList[i]);\n }\n classNames += \".\" + tmpArr.join(\".\");\n }\n if (el.hasAttribute(\"id\") && el.id !== \"\") {\n stack.unshift(el.nodeName.toLowerCase() + \"#\" + el.id + \" \" + classNames);\n }\n else if (sibCount > 1) {\n stack.unshift(el.nodeName.toLowerCase() + \":eq(\" + sibIndex + \")\" + classNames);\n }\n else {\n stack.unshift(el.nodeName.toLowerCase() + classNames);\n }\n el = el.parentNode;\n }\n return stack.slice(1);\n }\n}\nexports.DocumentationService = DocumentationService;\n\n\n//# sourceURL=webpack://kits/./src/service/documentationServices/DocumentationService.ts?"); 206 207/***/ }), 208
209/***/ "./src/service/optionServices/AbstractOptionsService.ts": 210/*!**************************************************************!*\ 211 !*** ./src/service/optionServices/AbstractOptionsService.ts ***! 212 \**************************************************************/ 213/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 214 215"use strict"; 216eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AbstractOptionsService = void 0;\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nclass AbstractOptionsService {\n handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost) {\n if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)) {\n this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"basket\");\n }\n else if (PageUtils_1.PageUtils.isContactLink(jQueryElmen, this.localWindow)) {\n this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"contact\");\n }\n else if (PageUtils_1.PageUtils.isDownloadLink(jQueryElmen)) {\n this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"download\");\n }\n else if (PageUtils_1.PageUtils.isSocialExit(jQueryElmen)) {\n this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"social_exit\");\n }\n else if (PageUtils_1.PageUtils.isSocialShare(jQueryElmen)) {\n this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"social_share\");\n }\n else if (PageUtils_1.PageUtils.isOtherHost(clickTargetUrlHost, this.localWindow)) {\n this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"external\");\n }\n else {\n this.appendValueToOptionsIfAbsent(retval, \"clicktargettype\", \"onsite\");\n }\n }\n handleCommonAttributes(retval, jQueryElmen) {\n this.appendValueToOptions(retval, \"clickelementclass\", PageUtils_1.PageUtils.getClickElementClass(jQueryElmen));\n this.appendValueToOptions(retval, \"clickelementid\", PageUtils_1.PageUtils.getClickElementId(jQueryElmen));\n const elementInfo = PageUtils_1.PageUtils.getElementInfo(jQueryElmen);\n if (typeof elementInfo !== \"undefined\" && elementInfo.length > 0) {\n this.appendValueToOptions(retval, \"clickname\", elementInfo.trim());\n }\n this.appendValueToOptions(retval, \"clicktargeturl\", PageUtils_1.PageUtils.getClickTargetUrl(jQueryElmen, this.localWindow));\n }\n addParamsFromPDLWithGivenDecorator(options, linkDecoration, pdlData) {\n this.addParams(options, linkDecoration, pdlData);\n }\n addParamsFromPDL(options, pdlData) {\n var _a;\n const linkDecoration = (_a = this.localWindow) === null || _a === void 0 ? void 0 : _a.linkDecoration;\n this.addParams(options, linkDecoration, pdlData);\n }\n appendValueToOptionsIfAbsent(options, key, value) {\n if (key !== null && typeof key !== \"undefined\" && value !== null && typeof value !== \"undefined\") {\n if (options[key] === undefined) {\n options[key] = value;\n }\n }\n }\n appendValueToOptions(options, key, value) {\n if (key !== null && typeof key !== \"undefined\" && value !== null && typeof value !== \"undefined\") {\n options[key] = value;\n }\n }\n addParams(options, linkDecoration, pdlData) {\n if (typeof this.localWindow !== \"undefined\" &&\n linkDecoration !== null &&\n typeof linkDecoration === \"object\") {\n for (const key of Object.keys(linkDecoration)) {\n const keyFromPdl = linkDecoration[key];\n const pdlElement = pdlData ? pdlData[keyFromPdl] : undefined;\n this.appendValueToOptions(options, key, pdlElement);\n }\n }\n }\n}\nexports.AbstractOptionsService = AbstractOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/AbstractOptionsService.ts?"); 217 218/***/ }), 219
220/***/ "./src/service/optionServices/GTMOptionsService.ts": 221/*!*********************************************************!*\ 222 !*** ./src/service/optionServices/GTMOptionsService.ts ***! 223 \*********************************************************/ 224/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 225 226"use strict"; 227eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMOptionsService = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst ProductCartMapUtils_1 = __webpack_require__(/*! ../../util/ProductCartMapUtils */ \"./src/util/ProductCartMapUtils.ts\");\nconst AbstractOptionsService_1 = __webpack_require__(/*! ./AbstractOptionsService */ \"./src/service/optionServices/AbstractOptionsService.ts\");\nclass GTMOptionsService extends AbstractOptionsService_1.AbstractOptionsService {\n constructor(windowObject) {\n super();\n if (typeof windowObject !== \"undefined\") {\n this.localWindow = windowObject;\n }\n else {\n if (typeof window !== \"undefined\") {\n this.localWindow = window;\n }\n }\n this._$ = this.localWindow.$;\n }\n createOptions(jQueryElmen) {\n const retval = {};\n if (jQueryElmen !== null && typeof jQueryElmen !== \"undefined\") {\n const data = jQueryElmen.data();\n const dyndata = DataUtils_1.DataUtils.extractDyndata(data);\n this.handleCommonAttributes(retval, jQueryElmen);\n const clickTargetUrlHost = PageUtils_1.PageUtils.getClickTargetUrlHost(jQueryElmen, this.localWindow);\n this.appendValueToOptions(retval, \"clicktargeturlhost\", clickTargetUrlHost);\n if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)) {\n this.appendValueToOptions(retval, \"tealiumevent\", \"PT_BasketAdd_Click\");\n }\n else if (PageUtils_1.PageUtils.isRetailConnectOpenLayerClick(jQueryElmen)) {\n this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_RetailConnectOpenLayer_Click\");\n }\n else {\n this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_Generic_Click\");\n }\n for (const key of Object.keys(dyndata)) {\n this.appendValueToOptions(retval, key, dyndata[key]);\n }\n this.handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost);\n if (PageUtils_1.PageUtils.isContactPhoneLink(jQueryElmen, this.localWindow)) {\n this.appendValueToOptions(retval, \"contacttype\", \"call\");\n }\n else if (PageUtils_1.PageUtils.isContactEmailLink(jQueryElmen, this.localWindow)) {\n this.appendValueToOptions(retval, \"contacttype\", \"email\");\n }\n const filterParams = PageUtils_1.PageUtils.getFilterParams(jQueryElmen, this._$);\n for (const key of Object.keys(filterParams)) {\n this.appendValueToOptions(retval, key, filterParams[key]);\n }\n this.addParamsFromPDL(retval, this.localWindow.kb_data);\n if (retval.tealiumevent === \"PT_RetailConnectOpenLayer_Click\"\n || retval.tealiumevent === \"PT_RetailConnectRetailLink_Click\") {\n const retailConnectResolver = {};\n retailConnectResolver.baretoolnumber = \"baretool_number\";\n retailConnectResolver.batteryvoltage = \"battery_voltage\";\n retailConnectResolver.masterordernumber = \"master_order_number\";\n retailConnectResolver.productavailability = \"product_availability\";\n retailConnectResolver.producttradecode = \"product_bi_trade_code\";\n retailConnectResolver.producttradename = \"product_bi_trade_name\";\n retailConnectResolver.producttraderelevance = \"product_bi_trade_relevance\";\n retailConnectResolver.productbrand = \"product_brand\";\n retailConnectResolver.productcategory = \"product_category\";\n retailConnectResolver.productcategoryid = \"product_category_id\";\n retailConnectResolver.productid = \"product_id\";\n retailConnectResolver.productname = \"product_name\";\n retailConnectResolver.productprice = \"product_price\";\n this.addParamsFromPDLWithGivenDecorator(retval, retailConnectResolver, this.localWindow.kb_data);\n }\n this.handleGTMSpecificStuff(retval, jQueryElmen);\n }\n return retval;\n }\n handleGTMSpecificStuff(retval, jQueryElmen) {\n if (!PageUtils_1.PageUtils.isGTMTracking(this.localWindow)) {\n return;\n }\n this.appendValueToOptions(retval, \"product_list_sku\", PageUtils_1.PageUtils.getClickedElementSkuForGTM(jQueryElmen));\n this.appendValueToOptions(retval, \"product_list_id\", PageUtils_1.PageUtils.getClickedElementIndexF
227orGTM(jQueryElmen));\n this.appendValueToOptions(retval, \"product_list_name\", PageUtils_1.PageUtils.getClickedElementListNameForGTM(jQueryElmen));\n this.appendValueToOptions(retval, \"product_list_section_id\", PageUtils_1.PageUtils.getParentElementIdForGTM(jQueryElmen));\n if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)\n || retval.tealiumevent === \"PT_RetailConnectOpenLayer_Click\"\n || retval.tealiumevent === \"PT_RetailConnectRetailLink_Click\") {\n this.appendValueToOptions(retval, \"product_list_sku\", PageUtils_1.PageUtils.getClickedElementAddToCartSku(jQueryElmen));\n }\n if (retval.teaserid) {\n const imageFilename = DataUtils_1.DataUtils.findClosestImageFilename(jQueryElmen);\n this.appendValueToOptions(retval, \"creativename\", imageFilename);\n }\n const cartMapParams = ProductCartMapUtils_1.ProductCartMapUtils.collectProductParams(this.localWindow.productCartMap, retval.product_list_sku);\n for (const key of Object.keys(cartMapParams)) {\n this.appendValueToOptions(retval, key, cartMapParams[key]);\n }\n }\n}\nexports.GTMOptionsService = GTMOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/GTMOptionsService.ts?"); 228 229/***/ }), 230
231/***/ "./src/service/optionServices/OfficeOnOptionsService.ts": 232/*!**************************************************************!*\ 233 !*** ./src/service/optionServices/OfficeOnOptionsService.ts ***! 234 \**************************************************************/ 235/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 236 237"use strict"; 238eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.OfficeOnOptionsService = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst AbstractOptionsService_1 = __webpack_require__(/*! ./AbstractOptionsService */ \"./src/service/optionServices/AbstractOptionsService.ts\");\nclass OfficeOnOptionsService extends AbstractOptionsService_1.AbstractOptionsService {\n constructor(windowObject) {\n super();\n if (typeof windowObject !== \"undefined\") {\n this.localWindow = windowObject;\n }\n else {\n if (typeof window !== \"undefined\") {\n this.localWindow = window;\n }\n }\n this._$ = this.localWindow.$;\n }\n createOptions(jQueryElmen) {\n const retval = {};\n if (jQueryElmen !== null && typeof jQueryElmen !== \"undefined\") {\n const data = jQueryElmen.data();\n const dyndata = DataUtils_1.DataUtils.extractDyndata(data);\n this.appendValueToOptions(retval, \"tealiumevent\", dyndata.eventaction);\n this.handleCommonAttributes(retval, jQueryElmen);\n const clickTargetUrlHost = PageUtils_1.PageUtils.getClickTargetUrlHost(jQueryElmen, this.localWindow);\n this.appendValueToOptions(retval, \"clicktargeturlhost\", clickTargetUrlHost);\n for (const key of Object.keys(dyndata)) {\n this.appendValueToOptions(retval, key, dyndata[key]);\n }\n this.handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost);\n if (PageUtils_1.PageUtils.isContactPhoneLink(jQueryElmen, this.localWindow)) {\n this.appendValueToOptions(retval, \"contacttype\", \"call\");\n }\n else if (PageUtils_1.PageUtils.isContactEmailLink(jQueryElmen, this.localWindow)) {\n this.appendValueToOptions(retval, \"contacttype\", \"email\");\n }\n if (this.localWindow.utag_data\n && this.localWindow.utag_data.page_name\n && this.localWindow.utag_data.page_name.length > 0) {\n retval.event_source = this.localWindow.utag_data.page_name;\n }\n this.addParamsFromPDL(retval, this.localWindow.utag_data);\n }\n return retval;\n }\n}\nexports.OfficeOnOptionsService = OfficeOnOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/OfficeOnOptionsService.ts?"); 239 240/***/ }), 241
242/***/ "./src/service/optionServices/TealiumOptionsService.ts": 243/*!*************************************************************!*\ 244 !*** ./src/service/optionServices/TealiumOptionsService.ts ***! 245 \*************************************************************/ 246/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 247 248"use strict"; 249eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumOptionsService = void 0;\nconst DataUtils_1 = __webpack_require__(/*! ../../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst AbstractOptionsService_1 = __webpack_require__(/*! ./AbstractOptionsService */ \"./src/service/optionServices/AbstractOptionsService.ts\");\nclass TealiumOptionsService extends AbstractOptionsService_1.AbstractOptionsService {\n constructor(windowObject) {\n super();\n if (typeof windowObject !== \"undefined\") {\n this.localWindow = windowObject;\n }\n else {\n if (typeof window !== \"undefined\") {\n this.localWindow = window;\n }\n }\n this._$ = this.localWindow.$;\n }\n createOptions(jQueryElmen) {\n const retval = {};\n if (jQueryElmen !== null && typeof jQueryElmen !== \"undefined\") {\n const data = jQueryElmen.data();\n const dyndata = DataUtils_1.DataUtils.extractDyndata(data);\n this.handleCommonAttributes(retval, jQueryElmen);\n const clickTargetUrlHost = PageUtils_1.PageUtils.getClickTargetUrlHost(jQueryElmen, this.localWindow);\n this.appendValueToOptions(retval, \"clicktargeturlhost\", clickTargetUrlHost);\n if (PageUtils_1.PageUtils.isAddToCart(jQueryElmen)) {\n this.appendValueToOptions(retval, \"tealiumevent\", \"PT_BasketAdd_Click\");\n }\n else if (PageUtils_1.PageUtils.isRetailConnectOpenLayerClick(jQueryElmen)) {\n this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_RetailConnectOpenLayer_Click\");\n }\n else {\n this.appendValueToOptionsIfAbsent(retval, \"tealiumevent\", \"PT_Generic_Click\");\n }\n for (const key of Object.keys(dyndata)) {\n this.appendValueToOptions(retval, key, dyndata[key]);\n }\n this.handleCommonClickTargetType(jQueryElmen, retval, clickTargetUrlHost);\n if (PageUtils_1.PageUtils.isContactPhoneLink(jQueryElmen, this.localWindow)) {\n this.appendValueToOptions(retval, \"contacttype\", \"call\");\n }\n else if (PageUtils_1.PageUtils.isContactEmailLink(jQueryElmen, this.localWindow)) {\n this.appendValueToOptions(retval, \"contacttype\", \"email\");\n }\n const filterParams = PageUtils_1.PageUtils.getFilterParams(jQueryElmen, this._$);\n for (const key of Object.keys(filterParams)) {\n this.appendValueToOptions(retval, key, filterParams[key]);\n }\n if (this.localWindow.utag_data\n && this.localWindow.utag_data.page_name\n && this.localWindow.utag_data.page_name.length > 0) {\n retval.event_source = this.localWindow.utag_data.page_name;\n }\n this.addParamsFromPDL(retval, this.localWindow.utag_data);\n if (retval.tealiumevent === \"PT_RetailConnectOpenLayer_Click\"\n || retval.tealiumevent === \"PT_RetailConnectRetailLink_Click\") {\n const retailConnectResolver = {};\n retailConnectResolver.baretoolnumber = \"baretool_number\";\n retailConnectResolver.batteryvoltage = \"battery_voltage\";\n retailConnectResolver.masterordernumber = \"master_order_number\";\n retailConnectResolver.productavailability = \"product_availability\";\n retailConnectResolver.producttradecode = \"product_bi_trade_co
249de\";\n retailConnectResolver.producttradename = \"product_bi_trade_name\";\n retailConnectResolver.producttraderelevance = \"product_bi_trade_relevance\";\n retailConnectResolver.productbrand = \"product_brand\";\n retailConnectResolver.productcategory = \"product_category\";\n retailConnectResolver.productcategoryid = \"product_category_id\";\n retailConnectResolver.productid = \"product_id\";\n retailConnectResolver.productname = \"product_name\";\n retailConnectResolver.productprice = \"product_price\";\n this.addParamsFromPDLWithGivenDecorator(retval, retailConnectResolver, this.localWindow.utag_data);\n }\n }\n return retval;\n }\n}\nexports.TealiumOptionsService = TealiumOptionsService;\n\n\n//# sourceURL=webpack://kits/./src/service/optionServices/TealiumOptionsService.ts?"); 250 251/***/ }), 252
253/***/ "./src/tracker/AbstractTracker.ts": 254/*!****************************************!*\ 255 !*** ./src/tracker/AbstractTracker.ts ***! 256 \****************************************/ 257/***/ ((__unused_webpack_module, exports) => { 258 259"use strict"; 260eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.AbstractTracker = void 0;\nclass AbstractTracker {\n isDOM(obj) {\n if (\"HTMLElement\" in this.localWindow) {\n return (obj && obj instanceof this.localWindow.HTMLElement);\n }\n return !!(obj && typeof obj === \"object\" && obj.nodeType === 1 && obj.nodeName);\n }\n appendValueToOptions(options, key, value) {\n if (key !== null && typeof key !== \"undefined\" && value !== null && typeof value !== \"undefined\") {\n options[key] = value;\n }\n }\n resolveParams(trackingParams) {\n const options = {};\n if (trackingParams !== null && typeof trackingParams === \"object\") {\n for (const key of Object.keys(trackingParams)) {\n const resolved = this.paramResolver.resolve(key);\n if (resolved !== null && typeof resolved !== \"undefined\") {\n options[resolved] = trackingParams[key];\n }\n }\n }\n return options;\n }\n getTrackingParams(...args) {\n let trackingElem = null;\n let trackingParams = {};\n let trackingOptions = {};\n for (const entry of args) {\n if (entry instanceof this._$) {\n trackingElem = entry;\n }\n if (this.isDOM(entry)) {\n trackingElem = this._$(entry);\n }\n if (typeof entry === \"object\" && (!(entry instanceof this._$) || !(this.isDOM(entry)))) {\n trackingParams = entry;\n }\n }\n if (trackingElem !== null && typeof trackingElem !== \"undefined\") {\n trackingOptions = this.optionsService.createOptions(trackingElem);\n }\n for (const key of Object.keys(trackingParams)) {\n this.appendValueToOptions(trackingOptions, key, trackingParams[key]);\n }\n const resolvedParams = {};\n resolvedParams[this.trackerName] = this.resolveParams(trackingOptions);\n return resolvedParams;\n }\n fetchTrackingOptions(args) {\n let trackingElem = null;\n let trackingParams = {};\n let trackingOptions = {};\n for (const entry of args) {\n if (entry instanceof this._$) {\n trackingElem = entry;\n }\n if (this.isDOM(entry)) {\n trackingElem = this._$(entry);\n }\n if (typeof entry === \"object\" && (!(entry instanceof this._$) || !(this.isDOM(entry)))) {\n trackingParams = entry;\n }\n }\n if (trackingElem !== null && typeof trackingElem !== \"undefined\") {\n trackingOptions = this.optionsService.createOptions(trackingElem);\n }\n for (const key of Object.keys(trackingParams)) {\n this.appendValueToOptions(trackingOptions, key, trackingParams[key]);\n }\n return trackingOptions;\n }\n}\nexports.AbstractTracker = AbstractTracker;\n\n\n//# sourceURL=webpack://kits/./src/tracker/AbstractTracker.ts?"); 261 262/***/ }), 263
264/***/ "./src/tracker/GTMTracker.ts": 265/*!***********************************!*\ 266 !*** ./src/tracker/GTMTracker.ts ***! 267 \***********************************/ 268/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 269 270"use strict"; 271eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GTMTracker = void 0;\nconst GTMDataLayer_1 = __webpack_require__(/*! ../model/GTMDataLayer */ \"./src/model/GTMDataLayer.ts\");\nconst GTMRetailConnect_1 = __webpack_require__(/*! ../model/GTMRetailConnect */ \"./src/model/GTMRetailConnect.ts\");\nconst GTMEcommerceItem_1 = __webpack_require__(/*! ../model/GTMEcommerceItem */ \"./src/model/GTMEcommerceItem.ts\");\nconst GTMEcommerce_1 = __webpack_require__(/*! ../model/GTMEcommerce */ \"./src/model/GTMEcommerce.ts\");\nconst GtmEventBuffer_1 = __webpack_require__(/*! ../util/GtmEventBuffer */ \"./src/util/GtmEventBuffer.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst GTMFilterClick_1 = __webpack_require__(/*! ../model/GTMFilterClick */ \"./src/model/GTMFilterClick.ts\");\nconst GTMFormInitialized_1 = __webpack_require__(/*! ../model/GTMFormInitialized */ \"./src/model/GTMFormInitialized.ts\");\nconst GTMFormSubmit_1 = __webpack_require__(/*! ../model/GTMFormSubmit */ \"./src/model/GTMFormSubmit.ts\");\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst PromotionTeaserTrackingObserver_1 = __webpack_require__(/*! ../observer/PromotionTeaserTrackingObserver */ \"./src/observer/PromotionTeaserTrackingObserver.ts\");\nconst AbstractTracker_1 = __webpack_require__(/*! ./AbstractTracker */ \"./src/tracker/AbstractTracker.ts\");\nconst ECOMMERCE_NULL_TRACKING_DATA = { ecommerce: null };\nclass GTMTracker extends AbstractTracker_1.AbstractTracker {\n constructor(windowObject) {\n super();\n this.trackerName = \"GTM\";\n this.localWindow = windowObject === undefined ? globalThis : windowObject;\n this._$ = this.localWindow.$;\n this.gtm = new GtmEventBuffer_1.GtmEventBuffer(this.localWindow);\n }\n track(...args) {\n let actualArgs = args;\n if (args.length === 1 && Array.isArray(args[0])) {\n actualArgs = args[0];\n }\n if (actualArgs.length > 0) {\n const trackingOptions = this.fetchTrackingOptions(actualArgs);\n return this.trackInternal(trackingOptions);\n }\n return false;\n }\n shouldTrack() {\n return PageUtils_1.PageUtils.isGTMTracking(this.localWindow);\n }\n registerAtService(trackingService) {\n trackingService.registerTracker(this);\n }\n setParamResolver(resolver) {\n this.paramResolver = resolver;\n }\n getParamResolver() {\n return this.paramResolver;\n }\n setOptionsService(optionsService) {\n this.optionsService = optionsService;\n }\n getTrackerName() {\n return this.trackerName;\n }\n getTrackingParams(...args) {\n const tName = this.trackerName;\n const trackingParams = {};\n let internalParams = {};\n trackingParams[tName] = {};\n if (\"undefined\" !== typeof args) {\n for (const entry of args) {\n if (typeof entry === \"object\" && !(entry instanceof this._$)) {\n internalParams = entry;\n }\n }\n trackingParams[tName] = this.resolveParams(internalParams);\n }\n return trackingParams;\n }\n setTrackerName(trackerName) {\n this.trackerName = trackerName;\n }\n onPageLoadEvents() {\n if (!this.shouldTrack()) {\n return false;\n }\n this.localWindow.document.addEventListener(\"DOMContentLoaded\", () => {\n this.trackViewItemListEvent();\n this.trackViewPromotionEvent();\n });\n this.localWindow.document.addEventListener(\"LoadMoreCompleted\", (event) => {\n this.trackViewItemListEvent(event.detail || null);\n });\n }\n trackInternal(params) {\n if (params != null) {\n let options = {};\n let trackMe;\n if (this.isTrackingParamsAlreadyResolved(params)) {\n trackMe = params;\n }\n else {\n options = this.resolveParams(params);\n trackMe = this.convert(options);\n }\n if (trackMe === undefined || trackMe === null) {\n return false;\n }\n this.trackGTM(ECOMMERCE_NULL_TRACKING_DATA);\n return this.trackGTM(trackMe);\n }\n return false;\n }\n trackViewPromotionEvent() {\n const promotionTeaserTrackingObserver = new PromotionTeaserTrackingObserver_1.PromotionTeaserTrackingObserver(this._$, this.localWindow.document, ($element) => {\n const promotionId = $element.data(\"track_dyn_teaserid\");\n const promotionName = $element.data(\"track_dyn_teasername\");\n const promotionCreative = $element.data(\"track_dyn_creativename\");\n const imageFilename = promotionCreative || DataUtils_1.DataUtils.findClosestImageFilename($element);\n if (promotionId || promotionName) {\n const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce(false);\n gtmEcommerce.promotion_id = promotionId || \"\";\n gtmEcommerce.promotion_name = promotionName || \"\";\n gtmEcommerce.creative_name = imageFilename || \"\";\n this.trackGTM(ECOMMERCE_NULL_TRACKING_DATA);\n this.trackGTM(new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"view_promotion\"));\n }\n });\n promotionTeaserTrackingObserver.start();\n }\n trackViewItemListEvent(productListElements = null) {\n const jQ = this._$;\n const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce();\n const productLists = productListElements !== null && productListElements !== void 0 ? productListElements : Array.from(this.localWindow.document.querySelectorAll(\"[data-track_gtm_list_name]\"));
271\n productLists.forEach((value) => {\n const listElements = value.querySelectorAll(\"[data-track_product_list_sku]\");\n listElements.forEach((item) => {\n const jqueryElement = jQ(item);\n const options = this.optionsService.createOptions(jqueryElement);\n const resolvedParams = this.resolveParams(options);\n gtmEcommerce.currency = globalThis.gtm_data.currency || \"\";\n gtmEcommerce.items.push(new GTMEcommerceItem_1.GTMEcommerceItem(resolvedParams));\n });\n });\n if (gtmEcommerce.items.length > 0) {\n this.trackGTM(ECOMMERCE_NULL_TRACKING_DATA);\n this.trackGTM(new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"view_item_list\"));\n }\n }\n convert(options) {\n if (options.tealium_event && options.tealium_event === \"PT_Form_Initialized\") {\n return new GTMFormInitialized_1.GTMFormInitialized(options.form_name, options.form_type);\n }\n if (options.tealium_event && options.tealium_event === \"PT_FormSubmit_Click\") {\n return new GTMFormSubmit_1.GTMFormSubmit(options.form_name, options.form_type, options.form_step_name, options.email);\n }\n if (options.tealium_event && options.tealium_event === \"PT_RetailConnectOpenLayer_Click\") {\n return new GTMRetailConnect_1.GTMRetailConnect(options, \"retail_connect_open_layer\");\n }\n if (options.tealium_event && options.tealium_event === \"PT_RetailConnectRetailLink_Click\") {\n return new GTMRetailConnect_1.GTMRetailConnect(options, \"retail_connect_link_click\");\n }\n if (options.tealium_event && options.tealium_event === \"PT_BasketAdd_Click\") {\n const ecommerceItem = new GTMEcommerceItem_1.GTMEcommerceItem(options);\n const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce();\n gtmEcommerce.currency = globalThis.gtm_data.currency || \"\";\n gtmEcommerce.items.push(ecommerceItem);\n return new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"add_to_cart\");\n }\n if (options.event_type && options.event_type === \"product_click\") {\n const ecommerceItem = new GTMEcommerceItem_1.GTMEcommerceItem(options);\n const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce();\n gtmEcommerce.currency = globalThis.gtm_data.currency || \"\";\n gtmEcommerce.items.push(ecommerceItem);\n return new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"select_item\");\n }\n if (options.promotion_id || options.promotion_name) {\n const gtmEcommerce = new GTMEcommerce_1.GTMEcommerce(false);\n gtmEcommerce.promotion_id = options.promotion_id || \"\";\n gtmEcommerce.promotion_name = options.promotion_name || \"\";\n gtmEcommerce.creative_name = options.creative_name || \"\";\n return new GTMDataLayer_1.GTMDataLayer(gtmEcommerce, \"select_promotion\");\n }\n if (options.filter_action) {\n const gtmFilterClick = new GTMFilterClick_1.GTMFilterClick();\n gtmFilterClick.event = options.filter_action === \"Add\" ? \"add_filter\" : \"remove_filter\";\n gtmFilterClick.filter_category = options.filter_category || \"\";\n gtmFilterClick.filter_name = options.filter_name || \"\";\n gtmFilterClick.filter_value = options.filter_value || \"\";\n return gtmFilterClick;\n }\n }\n isTrackingParamsAlreadyResolved(trackingParams) {\n return trackingParams.event === \"view_item\"\n || trackingParams.event === \"select_item\";\n }\n trackGTM(trackingObject) {\n const stringify = JSON.stringify(trackingObject);\n console.debug(\"gtm options:\", stringify);\n if (stringify !== undefined) {\n this.gtm.push(JSON.parse(stringify));\n return true;\n }\n return false;\n }\n}\nexports.GTMTracker = GTMTracker;\n\n\n//# sourceURL=webpack://kits/./src/tracker/GTMTracker.ts?"); 272 273/***/ }), 274
275/***/ "./src/tracker/OfficeOnTracker.ts": 276/*!****************************************!*\ 277 !*** ./src/tracker/OfficeOnTracker.ts ***! 278 \****************************************/ 279/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 280 281"use strict"; 282eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.OfficeOnTracker = void 0;\nconst PageUtils_1 = __webpack_require__(/*! ../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst AbstractTracker_1 = __webpack_require__(/*! ./AbstractTracker */ \"./src/tracker/AbstractTracker.ts\");\nclass OfficeOnTracker extends AbstractTracker_1.AbstractTracker {\n constructor(windowObject) {\n super();\n this.trackerName = \"OfficeOn\";\n this.localWindow = windowObject === undefined ? globalThis : windowObject;\n this._$ = this.localWindow.$;\n }\n track(...args) {\n let actualArgs = args;\n if (args.length === 1 && Array.isArray(args[0])) {\n actualArgs = args[0];\n }\n if (actualArgs.length > 0) {\n const trackingOptions = this.fetchTrackingOptions(actualArgs);\n return this.trackInternal(trackingOptions);\n }\n return false;\n }\n shouldTrack() {\n return PageUtils_1.PageUtils.isBoschOfficeOn(this.localWindow);\n }\n registerAtService(trackingService) {\n trackingService.registerTracker(this);\n }\n setParamResolver(resolver) {\n this.paramResolver = resolver;\n }\n getParamResolver() {\n return this.paramResolver;\n }\n getTrackerName() {\n return this.trackerName;\n }\n getTrackingParams(...args) {\n return super.getTrackingParams(args);\n }\n setTrackerName(trackerName) {\n this.trackerName = trackerName;\n }\n setOptionsService(optionsService) {\n this.optionsService = optionsService;\n }\n trackInternal(params) {\n if (params != null) {\n let options = {};\n console.debug(\"Raw Options 'track':\", params);\n options = this.resolveParams(params);\n console.debug(this.trackerName + \" options:\", options);\n if (this.localWindow.utag &&\n this.localWindow.utag.link && typeof this.localWindow.utag.link === \"function\") {\n this.localWindow.utag.link(options);\n return true;\n }\n else {\n return false;\n }\n }\n return false;\n }\n}\nexports.OfficeOnTracker = OfficeOnTracker;\n\n\n//# sourceURL=webpack://kits/./src/tracker/OfficeOnTracker.ts?"); 283 284/***/ }), 285
286/***/ "./src/tracker/TealiumTracker.ts": 287/*!***************************************!*\ 288 !*** ./src/tracker/TealiumTracker.ts ***! 289 \***************************************/ 290/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 291 292"use strict"; 293eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumTracker = void 0;\nconst AbstractTracker_1 = __webpack_require__(/*! ./AbstractTracker */ \"./src/tracker/AbstractTracker.ts\");\nconst PageUtils_1 = __webpack_require__(/*! ../util/PageUtils */ \"./src/util/PageUtils.ts\");\nconst DataUtils_1 = __webpack_require__(/*! ../util/DataUtils */ \"./src/util/DataUtils.ts\");\nconst ProductCartMapUtils_1 = __webpack_require__(/*! ../util/ProductCartMapUtils */ \"./src/util/ProductCartMapUtils.ts\");\nconst TealiumEventBuffer_1 = __webpack_require__(/*! ../util/TealiumEventBuffer */ \"./src/util/TealiumEventBuffer.ts\");\nconst PromotionTeaserTrackingObserver_1 = __webpack_require__(/*! ../observer/PromotionTeaserTrackingObserver */ \"./src/observer/PromotionTeaserTrackingObserver.ts\");\nclass TealiumTracker extends AbstractTracker_1.AbstractTracker {\n constructor(windowObject) {\n super();\n this.trackerName = \"Tealium\";\n this.localWindow = windowObject === undefined ? globalThis : windowObject;\n this._$ = this.localWindow.$;\n this.eventBuffer = new TealiumEventBuffer_1.TealiumEventBuffer(this.localWindow);\n }\n track(...args) {\n let actualArgs = args;\n if (args.length === 1 && Array.isArray(args[0])) {\n actualArgs = args[0];\n }\n if (actualArgs.length > 0) {\n const trackingOptions = this.fetchTrackingOptions(actualArgs);\n return this.trackInternal(trackingOptions);\n }\n return false;\n }\n shouldTrack() {\n return (!PageUtils_1.PageUtils.isBoschOfficeOn(this.localWindow) &&\n !PageUtils_1.PageUtils.isGTMTracking(this.localWindow));\n }\n registerAtService(trackingService) {\n trackingService.registerTracker(this);\n }\n setParamResolver(resolver) {\n this.paramResolver = resolver;\n }\n getParamResolver() {\n return this.paramResolver;\n }\n getTrackerName() {\n return this.trackerName;\n }\n setOptionsService(optionsService) {\n this.optionsService = optionsService;\n }\n getTrackingParams(...args) {\n const tName = this.trackerName;\n const trackingParams = {};\n let internalParams = {};\n trackingParams[tName] = {};\n if (args.length > 0) {\n for (const entry of args) {\n if (typeof entry === \"object\" && !(entry instanceof this._$)) {\n internalParams = entry;\n }\n }\n trackingParams[tName] = this.resolveParams(internalParams);\n }\n return trackingParams;\n }\n setTrackerName(trackerName) {\n this.trackerName = trackerName;\n }\n trackViewPromotionEvent() {\n const promotionTeaserTrackingObserver = new PromotionTeaserTrackingObserver_1.PromotionTeaserTrackingObserver(this._$, this.localWindow.document, ($element) => {\n const promotionId = $element.data(\"track_dyn_teaserid\");\n const promotionName = $element.data(\"track_dyn_teasername\");\n const promotionCreative = $element.data(\"track_dyn_creativename\");\n const creativeName = promotionCreative || DataUtils_1.DataUtils.findClosestImageFilename($element);\n if (promotionId || promotionName) {\n this.trackInternal({\n creativename: creativeName || \"\",\n tealiumevent: \"PT_Promotion_View\",\n teaserid: promotionId || \"\",\n teasername: promotionName || \"\",\n });\n }\n });\n promotionTeaserTrackingObserver.start();\n }\n trackInternal(params) {\n if (params != null) {\n let options = {};\n console.debug(\"Raw Options 'track':\", params);\n options = this.resolveParams(params);\n console.debug(this.trackerName + \" options:\", options);\n const utagFunction = this.isPageLoadEvent(options, params) ? \"view\" : \"link\";\n return this.eventBuffer.push(utagFunction, options);\n }\n return false;\n }\n isPageLoadEvent(resolvedOptions, rawParams) {\n var _a;\n const event = (_a = resolvedOptions.tealium_event) !== null && _a !== void 0 ? _a : rawParams.tealiumevent;\n return typeof event === \"string\" && event.trim().endsWith(\"_Pageload\");\n }\n onPageLoadEvents() {\n if (!this.shouldTrack()) {\n return false;\n }\n this.localWindow.document.addEventListener(\"DOMContentLoaded\", () => {\n this.trackViewItemListEvent();\n this.trackViewPromotionEvent();\n });\n this.localWindow.document.addEventListener(\"LoadMoreCompleted\", (event) => {\n this.trackViewItemListEvent(event.detail || null);\n });\n }\n trackViewItemListEvent(productListElements = null) {\n const jQ = this._$;\n const productCartMap = this.localWindow.productCartMap;\n const listNames = [];\n const listIds = [];\n const indices = [];\n const productIds = [];\n const productNames = [];\n const prices = [];\n const brands = [];\n const categories = [];\n const categoryIds = [];\n const availabilities = [];\n const quantities = [];\n const cordlessTools = [];\n const baretoolNumbers = [];\n const batteryVoltages = [];
293\n const masterOrderNumbers = [];\n const productLists = productListElements !== null && productListElements !== void 0 ? productListElements : Array.from(this.localWindow.document.querySelectorAll(\"[data-track_gtm_list_name]\"));\n productLists.forEach((container) => {\n const listItems = container.querySelectorAll(\"[data-track_product_list_sku]\");\n listItems.forEach((item) => {\n const jqItem = jQ(item);\n const product = this.collectProductParams(jqItem, productCartMap);\n const single = ProductCartMapUtils_1.ProductCartMapUtils.toSingleValue;\n listNames.push(PageUtils_1.PageUtils.getClickedElementListNameForGTM(jqItem) || \"\");\n listIds.push(PageUtils_1.PageUtils.getParentElementIdForGTM(jqItem) || \"\");\n indices.push(PageUtils_1.PageUtils.getClickedElementIndexForGTM(jqItem) || \"\");\n productIds.push(single(product.productid));\n productNames.push(single(product.productname));\n prices.push(DataUtils_1.DataUtils.convertEmptyPriceToZero(DataUtils_1.DataUtils.normalizePrice(single(product.productprice))));\n brands.push(single(product.productbrand));\n categories.push(single(product.productcategory));\n categoryIds.push(single(product.productcategoryid));\n availabilities.push(single(product.productavailability));\n quantities.push(\"1\");\n cordlessTools.push(single(product.cordlesstool));\n baretoolNumbers.push(single(product.baretoolnumber));\n batteryVoltages.push(single(product.batteryvoltage));\n masterOrderNumbers.push(single(product.masterordernumber));\n });\n });\n if (listNames.length === 0) {\n return;\n }\n const options = {};\n const linkDecoration = this.localWindow.linkDecoration;\n const utagData = this.localWindow.utag_data;\n if (linkDecoration && typeof linkDecoration === \"object\" && utagData) {\n for (const key of Object.keys(linkDecoration)) {\n const utagKey = linkDecoration[key];\n if (utagData[utagKey] !== undefined) {\n options[key] = utagData[utagKey];\n }\n }\n }\n options.tealiumevent = \"PT_ProductList_Pageload\";\n options.product_list_name = listNames;\n options.product_list_id = listIds;\n options.product_index = indices;\n options.productid = productIds;\n options.productname = productNames;\n options.productprice = prices;\n options.productbrand = brands;\n options.productcategory = categories;\n options.productcategoryid = categoryIds;\n options.productavailability = availabilities;\n options.productquantity = quantities;\n options.cordlesstool = cordlessTools;\n options.baretoolnumber = baretoolNumbers;\n options.batteryvoltage = batteryVoltages;\n options.masterordernumber = masterOrderNumbers;\n this.trackInternal(options);\n }\n collectProductParams(jqItem, productCartMap) {\n const params = {};\n const dyndata = DataUtils_1.DataUtils.extractDyndata(jqItem.data());\n for (const key of TealiumTracker.PRODUCT_ITEM_KEYS) {\n if (typeof dyndata[key] !== \"undefined\") {\n params[key] = dyndata[key];\n }\n }\n const sku = PageUtils_1.PageUtils.getClickedElementSkuForGTM(jqItem);\n const fromCartMap = ProductCartMapUtils_1.ProductCartMapUtils.collectProductParams(productCartMap, sku);\n for (const key of Object.keys(fromCartMap)) {\n params[key] = fromCartMap[key];\n }\n return params;\n }\n}\nexports.TealiumTracker = TealiumTracker;\nTealiumTracker.PRODUCT_ITEM_KEYS = [\n \"productid\",\n \"productname\",\n \"productprice\",\n \"productbrand\",\n \"productcategory\",\n \"productcategoryid\",\n \"productavailability\",\n \"productquantity\",\n \"cordlesstool\",\n \"baretoolnumber\",\n \"batteryvoltage\",\n \"masterordernumber\",\n];\n\n\n//# sourceURL=webpack://kits/./src/tracker/TealiumTracker.ts?"); 294 295/***/ }), 296
297/***/ "./src/util/DataUtils.ts": 298/*!*******************************!*\ 299 !*** ./src/util/DataUtils.ts ***! 300 \*******************************/ 301/***/ ((__unused_webpack_module, exports, __webpack_require__) => { 302 303"use strict"; 304eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.DataUtils = void 0;\nconst DataTuple_1 = __webpack_require__(/*! ../model/DataTuple */ \"./src/model/DataTuple.ts\");\nclass DataUtils {\n static extractData(data, marker) {\n if (typeof data !== \"undefined\") {\n const extractedData = {};\n const regExp = new RegExp(\"^track_\" + marker, \"g\");\n for (const key of Object.keys(data)) {\n const found = regExp.test(key);\n if (found) {\n const strings = key.split(\"_\");\n if (strings.length === 4) {\n this.createDataTuple(extractedData, strings[3]);\n if (strings[2] === \"key\") {\n const usedTuple = extractedData[strings[3]];\n usedTuple.key = data[key];\n extractedData[strings[3]] = usedTuple;\n }\n if (strings[2] === \"value\") {\n const usedTuple = extractedData[strings[3]];\n usedTuple.value = data[key];\n extractedData[strings[3]] = usedTuple;\n }\n }\n }\n }\n return extractedData;\n }\n return {};\n }\n static extractDyndata(data) {\n if (typeof data !== \"undefined\") {\n const extractedData = {};\n for (const key of Object.keys(data)) {\n const regExp = new RegExp(\"^track_dyn_\", \"g\");\n const found = regExp.test(key);\n if (found) {\n const strings = key.split(new RegExp(\"^track_dyn_\", \"g\"));\n extractedData[strings[1]] = data[key];\n }\n }\n return extractedData;\n }\n return {};\n }\n static createDataTuple(resultObject, key) {\n const testTuple = resultObject[key];\n if (typeof testTuple === \"undefined\") {\n resultObject[key] = new DataTuple_1.DataTuple();\n }\n }\n static mapAvailability(availability) {\n let mappedAvailability;\n switch (availability) {\n case \"in_stock\": {\n mappedAvailability = \"in stock\";\n break;\n }\n case \"limited_availability\": {\n mappedAvailability = \"out of stock\";\n break;\n }\n case \"low\": {\n mappedAvailability = \"in stock\";\n break;\n }\n default: {\n mappedAvailability = \"out of stock\";\n break;\n }\n }\n return mappedAvailability;\n }\n static normalizePrice(price) {\n if (price === undefined || price === null) {\n return \"\";\n }\n const cleaned = String(price).replace(/[^\\d,.\\-]/g, \"\");\n if (cleaned === \"\") {\n return \"\";\n }\n const lastComma = cleaned.lastIndexOf(\",\");\n const lastDot = cleaned.lastIndexOf(\".\");\n if (lastComma > -1 && lastDot > -1) {\n return lastComma > lastDot\n ? cleaned.replace(/\\./g, \"\").replace(\",\", \".\")\n : cleaned.replace(/,/g, \"\");\n }\n if (lastComma > -1) {\n return /,\\d{1,2}$/.test(cleaned)\n ? cleaned.replace(\",\", \".\")\n : cleaned.replace(/,/g, \"\");\n }\n return cleaned;\n }\n static convertEmptyPriceToZero(price) {\n if (price === \"\") {\n return \"0.00\";\n }\n else {\n return price;\n }\n }\n static findClosestImageFilename(jqueryElement) {\n if (!jqueryElement || jqueryElement.length === 0)\n return null;\n const extractFromStyle = (jqueryElement) => {\n const style = jqueryElement.css(\"background-image\") || \"\";\n const match = style.match(/url\\([\"']?(.*?)[\"']?\\)/i);\n return match ? match[1] : null;\n };\n const findImageInDescendants = (jqueryElement) => {\n const $img = jqueryElement.find(\"img\").first();\n if ($img.length > 0)\n return $img.attr(\"src\") || null;\n const bg = extractFromStyle(jqueryElement);\n if (bg)\n return bg;\n return null;\n };\n const extractFilename = (url) => {\n try {\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\n return cleanUrl.substring(cleanUrl.lastIndexOf(\"/\") + 1);\n }\n catch (_a) {\n return null;\n }\n };\n let $current = jqueryElement;\n while ($current && $current.length > 0 && $current[0] && $current[0].nodeType === 1) {\n const foundUrl = findImageInDescendants($current);\n if (foundUrl) {\n const filename = extractFilename(foundUrl);\n if (filename)\n return filename;\n }\n $current = $current.parent();\n }\n return null;\n }\n}\nexports.DataUtils = DataUtils;\n\n\n//# sourceURL=webpack://kits/./src/util/DataUtils.ts?"); 305 306/***/ }), 307
308/***/ "./src/util/GtmEventBuffer.ts": 309/*!************************************!*\ 310 !*** ./src/util/GtmEventBuffer.ts ***! 311 \************************************/ 312/***/ ((__unused_webpack_module, exports) => { 313 314"use strict"; 315eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.GtmEventBuffer = void 0;\nclass GtmEventBuffer {\n constructor(window) {\n this.queue = [];\n this.flushed = false;\n this.window = window;\n this.dataLayer = (window.dataLayer = window.dataLayer || []);\n this.monitorGtmLoad();\n }\n push(event) {\n if (this.flushed || this.hasGtmLoaded()) {\n this.pushToDataLayer(event);\n }\n else {\n this.queue.push(event);\n }\n }\n monitorGtmLoad() {\n const intervalId = this.window.setInterval(() => {\n if (this.hasGtmLoaded()) {\n this.window.clearInterval(intervalId);\n this.flushQueue();\n }\n }, GtmEventBuffer.CHECK_INTERVAL);\n }\n flushQueue() {\n this.queue.forEach(this.pushToDataLayer.bind(this));\n this.queue = [];\n this.flushed = true;\n console.info('[GTM] Events erfolgreich übergeben nach gtm.load.');\n }\n hasGtmLoaded() {\n return this.dataLayer.some(e => (e === null || e === void 0 ? void 0 : e.event) === 'bosch_privacy_update_analysis_on');\n }\n pushToDataLayer(event) {\n this.dataLayer.push(event);\n console.debug('[GTM] Event gepusht:', event);\n }\n}\nexports.GtmEventBuffer = GtmEventBuffer;\nGtmEventBuffer.CHECK_INTERVAL = 200;\n\n\n//# sourceURL=webpack://kits/./src/util/GtmEventBuffer.ts?"); 316 317/***/ }), 318
319/***/ "./src/util/PageUtils.ts": 320/*!*******************************!*\ 321 !*** ./src/util/PageUtils.ts ***! 322 \*******************************/ 323/***/ ((__unused_webpack_module, exports) => { 324 325"use strict"; 326eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.PageUtils = void 0;\nclass PageUtils {\n static getPageName(localWindow) {\n const PAGENAME_ATTRIBUTE_NAME = \"track_pagename\";\n const bodyElements = localWindow.document.getElementsByTagName(\"body\");\n if (bodyElements.length === 1) {\n const bodyElement = bodyElements[0];\n const dataset = bodyElement.dataset;\n if (PAGENAME_ATTRIBUTE_NAME in dataset) {\n return dataset[PAGENAME_ATTRIBUTE_NAME];\n }\n }\n return \"\";\n }\n static getTrackingModulePosition(jqueryElem, jquery) {\n return this.findElemPos(this.TRACKING_MODULE_CSS_NAME, jqueryElem, jquery);\n }\n static getTrackingTeaserPosition(jqueryElem, jquery) {\n let position = 0;\n const moduleElem = jqueryElem.closest(\".\" + this.TRACKING_MODULE_CSS_NAME);\n if (moduleElem.length > 0) {\n moduleElem.find(\".\" + this.TRACKING_TEASER_CSS_NAME).each((index, elem) => {\n const trackingElem = jquery(elem);\n if (jqueryElem.is(trackingElem)) {\n position = index + 1;\n return false;\n }\n const found = trackingElem.find(jqueryElem);\n if (found.length > 0) {\n position = index + 1;\n return false;\n }\n });\n }\n return position;\n }\n static getElementType(jqueryElem) {\n return this.getElementData(this.TRACKING_ELEMENT_TYPE, jqueryElem);\n }\n static getElementInfo(jqueryElem) {\n return this.getElementData(this.TRACKING_ELEMENT_INFO, jqueryElem);\n }\n static getLinkType(jqueryElem) {\n let lType = this.getElementData(this.TRACKING_LINK_TYPE, jqueryElem);\n if (!lType || lType.length === 0) {\n lType = this.DEFAULT_LINK_TYPE;\n }\n return lType;\n }\n static getTeaserType(jqueryElem) {\n const parentsElem = jqueryElem.closest(\".trackingTeaser\");\n return parentsElem.data(\"track_teasertype\");\n }\n static getTeaserContent(jqueryElem) {\n const parentsElem = jqueryElem.closest(\".trackingTeaser\");\n return parentsElem.data(\"track_teasercontent\");\n }\n static getModuleType(jqueryElem) {\n return jqueryElem.parents(\".trackingModule\").data(\"track_moduletype\");\n }\n static getFilterParams(jqueryElem, jquery) {\n if (jqueryElem.hasClass(this.TRACKING_FILTER_ELEMENT_CSS_NAME)) {\n const filterParams = {};\n const filterAttr = this.getElementData(this.TRACKING_FILTER_ATTRIBUTE, jqueryElem);\n if (filterAttr.length > 0) {\n filterParams.filterattribute = filterAttr;\n }\n if (jqueryElem.prop(\"checked\") === true\n || jqueryElem.find(\":selected\").length > 0\n || (jqueryElem.prop(\"tagName\") === \"LABEL\" && !jqueryElem.hasClass(\"active\"))\n || (jqueryElem.prop(\"tagName\") === \"A\" && jqueryElem.hasClass(\"active\"))\n || (jqueryElem.prop(\"tagName\") === \"DIV\" && jqueryElem.hasClass(\"active\"))) {\n filterParams.onoff = \"Add\";\n }\n else if (jqueryElem.prop(\"checked\") === false\n || jqueryElem.find(\":selected\").length === 0\n || (jqueryElem.prop(\"tagName\") === \"LABEL\" && jqueryElem.hasClass(\"active\"))\n || (jqueryElem.prop(\"tagName\") === \"A\" && !jqueryElem.hasClass(\"active\"))\n || (jqueryElem.prop(\"tagName\") === \"DIV\" && !jqueryElem.hasClass(\"active\"))) {\n filterParams.onoff = \"Remove\";\n }\n filterParams.filtercategory = this.findFilterInformationByKey(jqueryElem, jquery, \"data-track-filter_category\");\n filterParams.filtername = this.findFilterInformationByKey(jqueryElem, jquery, \"data-track-filter_name\");\n const elVals = [];\n const body = jqueryElem.parents(\"body\");\n body.find(\"[data-track-filter_category]\").filter((index, elem) => {\n const catElem = jquery(elem);\n const checkedElems = catElem.find(\"input.\" + this.TRACKING_FILTER_ELEMENT_CSS_NAME + \":checked\");\n if (checkedElems.length > 0) {\n const comboCat = catElem.data(this.TRACKING_FILTER_CATEGORY);\n elVals.push(comboCat);\n }\n else {\n }\n const selectedElems = catElem.find(\".\" + this.TRACKING_FILTER_ELEMENT_CSS_NAME + \":selected\");\n if (selectedElems.length > 0) {\n selectedElems.each((i, el) => {\n const optionElem = jquery(el);\n elVals.push(optionElem.val());\n });\n }\n return false;\n });\n if (elVals.length > 0) {\n filterParams.filtercomb = elVals.join(\"_\");\n }\n return filterParams;\n }\n return {};\n }
326\n static getClickTargetUrl(jQueryElmen, window) {\n if (typeof jQueryElmen === \"undefined\") {\n return null;\n }\n const href = jQueryElmen.attr(\"href\");\n if (href === undefined) {\n return null;\n }\n if (this.isAnchorLink(href)) {\n return this.getCurrentUrl(window) + href;\n }\n if (this.isRelativeLink(href)) {\n return window.location.protocol + href;\n }\n return href;\n }\n static getCurrentUrl(window) {\n return window.location.href;\n }\n static getClickTargetUrlHost(jQueryElmen, window) {\n if (typeof jQueryElmen === \"undefined\") {\n return null;\n }\n const url = this.getClickTargetUrl(jQueryElmen, window);\n if (url === null || !(url.startsWith(\"http\") && url.startsWith(\"https\"))) {\n return null;\n }\n return this.getExtractProtocol(url) + \"://\" + this.getExtractHostname(url);\n }\n static isOtherHost(clickTargetUrlHost, window) {\n if (clickTargetUrlHost == null) {\n return false;\n }\n return !clickTargetUrlHost.includes(window.location.hostname);\n }\n static getClickElementClass(jQueryElmen) {\n if (typeof jQueryElmen === \"undefined\") {\n return null;\n }\n return jQueryElmen.attr(\"class\") || \"\";\n }\n static isAddToCart(jQueryElmen) {\n const clickElementClass = this.getClickElementClass(jQueryElmen);\n return clickElementClass.includes(\"addToCart\");\n }\n static isRetailConnectOpenLayerClick(jQueryElmen) {\n const clickElementClass = PageUtils.getClickElementClass(jQueryElmen);\n return clickElementClass.includes(\"o-dealer-bc__opener\");\n }\n static isBoschOfficeOn(window) {\n return window.location.host.includes(\"bosch-officeon.com\") || window.location.host.includes(\"qa-officeon.kittelberger.net\");\n }\n static isContactLink(jQueryElmen, window) {\n return this.isContactPhoneLink(jQueryElmen, window) || this.isContactEmailLink(jQueryElmen, window);\n }\n static isContactPhoneLink(jQueryElmen, window) {\n const url = this.getClickTargetUrl(jQueryElmen, window);\n return url === null\n ? false\n : url.startsWith(\"tel:\");\n }\n static isContactEmailLink(jQueryElmen, window) {\n const url = this.getClickTargetUrl(jQueryElmen, window);\n return url === null\n ? false\n : url.startsWith(\"mailto:\");\n }\n static isDownloadLink(jQueryElmen) {\n if (typeof jQueryElmen === \"undefined\") {\n return null;\n }\n const downloadAttribute = jQueryElmen.attr(\"download\");\n const clickElementClass = this.getClickElementClass(jQueryElmen).includes(\"m-a-download_teaser__link\");\n return (typeof downloadAttribute !== \"undefined\" && downloadAttribute !== false) || clickElementClass;\n }\n static isSocialExit(jQueryElmen) {\n const clickElementClass = this.getClickElementClass(jQueryElmen);\n return clickElementClass.includes(\"tracking_social_exit\");\n }\n static isSocialShare(jQueryElmen) {\n const clickElementClass = this.getClickElementClass(jQueryElmen);\n return clickElementClass.includes(\"tracking_social_share\");\n }\n static getClickElementId(jQueryElmen) {\n if (typeof jQueryElmen === \"undefined\") {\n return null;\n }\n return jQueryElmen.attr(\"id\") || null;\n }\n static getClickedElementSkuForGTM(jQueryElmen) {\n const selectedSku = jQueryElmen.data(this.TRACKING_GTM_PRODUCT_LIST_SKU);\n const selectedSkuInParent = jQueryElmen\n .closest(this.TRACKING_GTM_PRODUCT_LIST_SKU_SELECTOR)\n .data(this.TRACKING_GTM_PRODUCT_LIST_SKU);\n if (selectedSku !== undefined) {\n return selectedSku;\n }\n if (selectedSkuInParent !== undefined) {\n return selectedSkuInParent;\n }\n return \"\";\n }\n static getClickedElementAddToCartSku(jQueryElmen) {\n const selectedSku = jQueryElmen.data(this.TRACKING_GTM_ADD_TO_CART_SKU);\n if (selectedSku !== undefined) {\n return selectedSku;\n }\n return \"\";\n }
326\n static getClickedElementIndexForGTM(jQueryElmen) {\n const selectedIndex = jQueryElmen.data(this.TRACKING_GTM_PRODUCT_LIST_ID);\n const selectedIndexInParent = jQueryElmen\n .closest(this.TRACKING_GTM_PRODUCT_LIST_ID_SELECTOR)\n .data(this.TRACKING_GTM_PRODUCT_LIST_ID);\n if (selectedIndex !== undefined) {\n return selectedIndex;\n }\n if (selectedIndexInParent !== undefined) {\n return selectedIndexInParent;\n }\n return null;\n }\n static getClickedElementListNameForGTM(jQueryElmen) {\n const gtmListContainer = jQueryElmen.closest(this.TRACKING_GTM_PRODUCT_LIST_NAME_SELECTOR);\n if (gtmListContainer !== undefined) {\n return gtmListContainer.data(this.TRACKING_GTM_PRODUCT_LIST_NAME);\n }\n return \"\";\n }\n static getParentElementIdForGTM(jQueryElmen) {\n let id = \"\";\n const gtmListContainer = jQueryElmen.closest(this.TRACKING_GTM_PRODUCT_LIST_NAME_SELECTOR);\n if (gtmListContainer !== undefined) {\n id = gtmListContainer.attr(\"id\") || \"\";\n }\n if (!id && gtmListContainer.length > 0) {\n const sectionElement = jQueryElmen.closest(\"section\");\n if (sectionElement !== undefined) {\n id = sectionElement.attr(\"id\") || \"\";\n }\n }\n return id;\n }\n static isGTMTracking(localWindow) {\n return localWindow.gtm_data !== undefined;\n }\n static getElementData(dataKey, jqueryElem) {\n const data = jqueryElem.data(dataKey);\n if (typeof data !== \"undefined\") {\n return data.toString();\n }\n return \"\";\n }\n static findElemPos(containerCssName, jqueryElem, jquery) {\n let position = 0;\n jquery(\".\" + containerCssName).each((index, elem) => {\n const find = jquery(elem).find(jqueryElem);\n if (find.length > 0) {\n position = index + 1;\n return false;\n }\n });\n return position;\n }\n static findFilterInformationByKey(parent, jquery, key) {\n if (parent.prop(\"tagName\") === \"HTML\") {\n return \"\";\n }\n if (parent.attr(key)) {\n return parent.attr(key);\n }\n let cat = \"\";\n parent.siblings().each((index, sibling) => {\n const sblElem = jquery(sibling);\n cat = sblElem.attr(key);\n if (typeof cat !== \"undefined\" && cat.length > 0) {\n return false;\n }\n sblElem.find(\"[\" + key + \"]\").each((innerIdx, child) => {\n const childElem = jquery(child);\n cat = childElem.attr(key);\n if (typeof cat !== \"undefined\" && cat.length > 0) {\n return false;\n }\n });\n });\n if (typeof cat !== \"undefined\" && cat.length > 0) {\n return cat;\n }\n return this.findFilterInformationByKey(parent.parent(), jquery, key);\n }\n static isAnchorLink(href) {\n return href.startsWith(\"#\");\n }\n static isRelativeLink(href) {\n return href.startsWith(\"//\");\n }\n static getExtractHostname(url) {\n const match = url.match(/^(?:https?:\\/\\/)?(?:[^@\\n]+@)?([^:\\/\\n]+)/im);\n return match ? match[1] : null;\n }\n static getExtractProtocol(url) {\n const match = url.match(/^([a-z]+):\\/\\//i);\n return match ? match[1] : null;\n }\n}\nexports.PageUtils = PageUtils;\nPageUtils.TRACKING_MODULE_CSS_NAME = \"trackingModule\";\nPageUtils.TRACKING_TEASER_CSS_NAME = \"trackingTeaser\";\nPageUtils.TRACKING_ELEMENT_TYPE = \"track_elementtype\";\nPageUtils.TRACKING_ELEMENT_INFO = \"track_elementinfo\";\nPageUtils.TRACKING_LINK_TYPE = \"track_elementlinktype\";
326\nPageUtils.DEFAULT_LINK_TYPE = \"internal\";\nPageUtils.TRACKING_FILTER_ELEMENT_CSS_NAME = \"filterElement\";\nPageUtils.TRACKING_FILTER_ATTRIBUTE = \"track-filter-attribute\";\nPageUtils.TRACKING_FILTER_NAME = \"track-filter-name\";\nPageUtils.TRACKING_FILTER_CATEGORY = \"track-filter_category\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_SKU = \"track_product_list_sku\";\nPageUtils.TRACKING_GTM_ADD_TO_CART_SKU = \"sku\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_ID = \"track_product_list_id\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_NAME = \"track_gtm_list_name\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_SKU_SELECTOR = \"[data-track_product_list_sku]\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_ID_SELECTOR = \"[data-track_product_list_id]\";\nPageUtils.TRACKING_GTM_PRODUCT_LIST_NAME_SELECTOR = \"[data-track_gtm_list_name]\";\n\n\n//# sourceURL=webpack://kits/./src/util/PageUtils.ts?"); 327 328/***/ }), 329
330/***/ "./src/util/ProductCartMapUtils.ts": 331/*!*****************************************!*\ 332 !*** ./src/util/ProductCartMapUtils.ts ***! 333 \*****************************************/ 334/***/ ((__unused_webpack_module, exports) => { 335 336"use strict"; 337eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.ProductCartMapUtils = void 0;\nclass ProductCartMapUtils {\n static collectProductParams(productCartMap, sku) {\n const options = {};\n if (productCartMap === undefined ||\n productCartMap === null ||\n sku === undefined) {\n return options;\n }\n const product = productCartMap[sku] || {};\n this.append(options, \"productid\", product.productSku);\n this.append(options, \"productname\", product.productName);\n this.append(options, \"productprice\", product.price);\n this.append(options, \"productbrand\", \"Professional\");\n this.append(options, \"productcategory\", product.productCategoryName);\n this.append(options, \"productquantity\", product.quantity);\n this.append(options, \"baretoolnumber\", product.baretoolNumber);\n this.append(options, \"masterordernumber\", product.masterOrderNumber);\n this.append(options, \"cordlesstool\", product.cordless_tool);\n this.append(options, \"batteryvoltage\", product.battery_voltage);\n this.append(options, \"productavailability\", product.product_availability);\n this.append(options, \"productcategoryid\", product.product_category_id);\n this.append(options, \"productmaincategory\", product.productMainCategoryName);\n this.append(options, \"productbitradename\", product.product_trade_name);\n this.append(options, \"productbitradecode\", product.product_trade_code);\n this.append(options, \"productbitraderelevance\", product.product_trade_relevance);\n return options;\n }\n static toSingleValue(value) {\n if (value === undefined || value === null) {\n return \"\";\n }\n if (Array.isArray(value)) {\n return value.length > 0 ? value[0] : \"\";\n }\n return value;\n }\n static append(options, key, value) {\n if (value !== null && typeof value !== \"undefined\") {\n options[key] = value;\n }\n }\n}\nexports.ProductCartMapUtils = ProductCartMapUtils;\n\n\n//# sourceURL=webpack://kits/./src/util/ProductCartMapUtils.ts?"); 338 339/***/ }), 340
341/***/ "./src/util/TealiumEventBuffer.ts": 342/*!****************************************!*\ 343 !*** ./src/util/TealiumEventBuffer.ts ***! 344 \****************************************/ 345/***/ ((__unused_webpack_module, exports) => { 346 347"use strict"; 348eval("\nObject.defineProperty(exports, \"__esModule\", ({ value: true }));\nexports.TealiumEventBuffer = void 0;\nclass TealiumEventBuffer {\n constructor(window) {\n this.queue = [];\n this.intervalId = null;\n this.waited = 0;\n this.window = window;\n }\n push(utagFunction, payload) {\n if (this.isReady(utagFunction)) {\n return this.sendToUtag({ utagFunction, payload });\n }\n this.queue.push({ utagFunction, payload });\n this.monitorUtagLoad();\n return true;\n }\n monitorUtagLoad() {\n if (this.intervalId !== null) {\n return;\n }\n this.intervalId = this.window.setInterval(() => {\n if (this.hasUtagLoaded()) {\n this.stopMonitoring();\n this.flushQueue();\n return;\n }\n this.waited += TealiumEventBuffer.CHECK_INTERVAL;\n if (this.waited >= TealiumEventBuffer.MAX_WAIT) {\n this.stopMonitoring();\n console.warn(\"[Tealium] utag.js wurde nicht geladen - \" + this.queue.length + \" Event(s) verworfen.\");\n this.queue = [];\n }\n }, TealiumEventBuffer.CHECK_INTERVAL);\n }\n stopMonitoring() {\n if (this.intervalId !== null) {\n this.window.clearInterval(this.intervalId);\n this.intervalId = null;\n }\n }\n flushQueue() {\n const pending = this.queue;\n this.queue = [];\n pending.forEach((call) => this.sendToUtag(call));\n console.info(\"[Tealium] Events erfolgreich übergeben nach utag.js load.\");\n }\n isReady(utagFunction) {\n const utag = this.window.utag;\n return !!utag && typeof utag[utagFunction] === \"function\";\n }\n hasUtagLoaded() {\n return this.queue.every((call) => this.isReady(call.utagFunction));\n }\n sendToUtag(call) {\n const utag = this.window.utag;\n if (utag && typeof utag[call.utagFunction] === \"function\") {\n utag[call.utagFunction](call.payload);\n console.debug(\"[Tealium] Event gesendet via utag.\" + call.utagFunction + \":\", call.payload);\n return true;\n }\n return false;\n }\n}\nexports.TealiumEventBuffer = TealiumEventBuffer;\nTealiumEventBuffer.CHECK_INTERVAL = 200;\nTealiumEventBuffer.MAX_WAIT = 30000;\n\n\n//# sourceURL=webpack://kits/./src/util/TealiumEventBuffer.ts?"); 349 350/***/ })
350 351 352/******/ }); 353/************************************************************************/ 354/******/ // The module cache 355/******/ var __webpack_module_cache__ = {}; 356/******/ 357/******/ // The require function 358/******/ function __webpack_require__(moduleId) { 359/******/ // Check if module is in cache 360/******/ var cachedModule = __webpack_module_cache__[moduleId]; 361/******/ if (cachedModule !== undefined) { 362/******/ return cachedModule.exports; 363/******/ } 364/******/ // Create a new module (and put it into the cache) 365/******/ var module = __webpack_module_cache__[moduleId] = { 366/******/ // no module.id needed 367/******/ // no module.loaded needed 368/******/ exports: {} 369/******/ }; 370/******/ 371/******/ // Execute the module function 372/******/ __webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__); 373/******/ 374/******/ // Return the exports of the module 375/******/ return module.exports; 376/******/ } 377/******/ 378/************************************************************************/ 379/******/ 380/******/ // startup 381/******/ // Load entry module and return exports 382/******/ // This entry module can't be inlined because the eval devtool is used. 383/******/ var __webpack_exports__ = __webpack_require__("./src/kits.ts"); 384/******/ 385/******/ })() 386;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.