{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./Typescript/Shared/Trbo/TrboRequestBuilder.js","webpack:///./Typescript/Shared/Trbo/TrboResponseMapper.ts","webpack:///./Typescript/Shared/PriceHelper.ts","webpack:///./Typescript/Shared/Slider.ts","webpack:///./Typescript/swiper/swiperconfig.ts","webpack:///./Typescript/Produktdetails/productdetail.ts","webpack:///./Typescript/Produktdetails/productprice.ts","webpack:///./Typescript/Produktdetails/TabsRenderer.ts","webpack:///./Typescript/Produktdetails/ProductInfoRenderer.ts","webpack:///./Typescript/Produktdetails/SliderRenderer.ts","webpack:///./Typescript/Produktdetails/CombinationProductsRenderer.ts","webpack:///./Typescript/Produktdetails/Tracking/produktdetailtracking.ts","webpack:///./Typescript/Tracking/GoogleTracking.ts","webpack:///./Typescript/Shared/ProductHelper.ts","webpack:///./Typescript/Produktdetails/ProductGoogleTracking.ts"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","14","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","buildTrboRequestUrl","slot","productId","requestUrl","JSON","stringify","parseGlobalData","parseSessionData","parseProductData","parseDataLayerData","parseSegments","Cookies","console","log","segments","_trbo","udp","segmentData","st","encodeURIComponent","location","href","pt","Math","floor","Date","getTime","sh","u","get_user_id","ts","get_sale_count","ust","get_user_start_time","sdt","get_session_duration_total","sc","get_session_count","sid","get_session_id","get_page_type_id","cb","get_current_basket","bw","bh","cic","cic2","get_cic2","ref","session_data","getSessions","localStorage","sst","parse","_trbo_ud","session","createTime","pvc","sessionSummary","pageViewCount","sd","sessionDuration","passt_sessions","sessions","keys","sessionkey","product_data","now","app","opts","requestDataTransformer","getProducts","data_layer","_local_storage_data_layer","getUserSummary","externalData","data_layer_key","toString","replace","user","userId","sessionId","num","voucher","userSummary","saleCount","userCreateTime","sessionDurationTotal","sessionCount","getChannelData","showBezugsartOverlay","trboProduct","custom15","parseFloat","price","custom7","custom11","mapTrboResponseToProduktkarussellModel","trboResponse","response","tracking","campaignId","campaign_id","campaignName","campaign_name","module_id","moduleName","module_name","userType","user_type","tr","karussellItems","authorstring","brand","imageUrl","image_url","isAnkuendigung","custom3","isEbook","isNew","custom2","isStandardwerk","isTopTitel","custom1","toLocaleString","style","currency","pricePrefix","custom6","productDetailUrl","deeplink_orig","parseInt","article","title","label","warenkorbAnzeigen","isBeckOnline","custom10","kupOrderNo","custom12","dateOfPublicationDescription","lieferstatus","custom14","lieferstatusId","auflage","custom4","releaseYear","custom5","medium","publisher","error","isCentPrice","toFixed","getAvailabilityInfoText","product","productItem","find","html","addClass","nullOrEmpty","element","getEditionText","CreateSliderContent","products","container","sliderPrototype","sliderId","trbotracking","sliderPrototypes","clone","labelWrapper","newLabel","append","topLabel","standardwerkLabel","ankuendigungLabel","ebookLabel","id","attr","remove","addToCartButton","removeClass","trim","$","loginPageUrl","includes","addContainerViewTracking","setSlideGroupBig","setSlideGroupSmall","karussellElementsLarge","karussellElementsSmall","swiperElements","carouselbig","carouselsmall","lazyloadKarussell","index","karussellTop","karussell","getBoundingClientRect","top","innerHeight","pageYOffset","initSwiperLarge","classList","add","initSwiperSmall","filter","configureSwiperSlider","autoplay","effect","elements","Swiper","navigation","nextEl","prevEl","loop","delay","autoplayDisableOnInteraction","elem","swiper","slidesPerView","spaceBetween","slidesPerGroup","loopFillGroupWithBlank","pagination","el","clickable","observer","observeParents","breakpoints","1200","1024","768","640","320","on","resize","width","this","params","update","render","frequency","first","windowWidth","addEventListener","k","produktPrice","ProduktPrice","tabsRenderer","TabsRenderer","productInfoRenderer","ProductInfoRenderer","slider","SliderRenderer","combinationProductsRenderer","CombinationProductsRenderer","RenderRelatedProducts","getGesamtwerkTab","getAutorenInfoTab","getRezensionenTab","getCombinationProducts","getProductFamily","getTrboProducts","getTrboLastSeenProducts","productGoogleTracking","height","hide","$this","$content","linkText","text","document","documentElement","body","animate","scrollTop","offset","click","e","ShowPriceDetailsMobileClicked","currentTarget","print","preventDefault","hasClass","stopPropagation","change","UpdateDisplayedPriceDetailsMobile","val","engagementId","specialConditions","at","pdfTracking","Number","testAboTracking","recommendationTracking","service","socialShareButtonTracking","recensionNavClick","showPricedetailsDiv","priceId","show","toggleClass","selectedValue","currentProductId","isPartOfSeries","isHeadOfSeries","seriesId","kopfproduktId","apiUrl","ajax","method","dataType","url","success","gesamtwerk","createGesamtwerkTabContent","autorenInfo","createAutorenInfoTabContent","rezensionen","createRezensionenTabContent","tab","kopfprodukt","protKopfprodukt","displayName","gesamtwerkTitel","titel","protTitel","showTabIfNotEmpty","model","heading","autorList","autorInfo","listElement","profileLink","preText","preTextTitle","next","firstname","firstName","prefix","birthname","birthName","postText","rezension","setFocusAndShowTabs","switcherClass","hasNoContent","predecessorIds","descandantId","relatedProucts","createRelatedProductsHtml","fillDescendantProductBox","descendantProduct","relatedProducts","descendantLink","BuildRelatedProductClone","predecessorLinks","forEach","link","relatedProduct","descendantPrototype","nachauflage_container","getImagePath","hasProduktabbildung","imagePath","split","authorList","titleMain","edition","publicationYear","seoOptimizedUrlPart","productFamilyIds","getTopProducts","setTimeout","tracking_eecPromotionview","undefined","__ucCmp","isInitialized","getConsentDetails","details","trboAllowed","services","consent","given","encodeURI","trboProducts","trboslider","headIds","childIds","queryString","createCombinationProductsContent","combinationProducts","combinationProductsPrototypes","headProducts","headProductsContainer","head","childProducts","childProductsContainer","child","attachement_type","dataLayer","event","eventCategory","eventAction","eventLabel","eventValue","ecCustomProperties","Target","rqtype","fixedPriceValue","windowHeight","trackGooglePromotionEvent_view","eventName","ecommerce","promoView","promotions","icampv","trackGooglePromotionEvent_click","promoClick","icampc","trboPromotionViewTracking","each","IsVisibleElement","usertype","_trboq","tracker","trackExternalView","top_of_element","bottom_of_element","outerHeight","top_of_screen","loginTracking","pageType","loggedInResult","pushTrboId","eId","external_user_id","trackIdLayerComplete","hId","hMail","hKid","externalIdHash","emailHash","kupCustomerNumberHash","trackIdLayerReduced","trackingParam","action","searchQuery","availabilityStatusId","Promise","resolve","reject","storedAvailabilityStatusList","sessionStorage","getItem","x","availabilityStatusList","setItem","drmId","drmMapping","drmMappingItem","DRmid","AnzeigeText","systemanforderungenLink","storedOrderableAvailabilityStatusList","some","orderableAvailabilityStatusList","deliverytypeId","priceinfo","tocId","breadcrumb","imageSize","DeliveryTypeID","Bruttopreis","PreisvariantenMerkmal","Urheberzeile","Verlag","productsGoogleTrackingContainer","formatPrice2Digits","category","displayFormat","variant","detail","dimension8"],"mappings":"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","file":"produktdetail.aeb446b9492193d68a19.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t14: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([280,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","\r\n\r\nexport const buildTrboRequestUrl = (slot, productId) => {\r\n let requestUrl = 'https://api-v4.trbo.com/s2s.php';\r\n\r\n requestUrl +=\r\n '?g=' + JSON.stringify(parseGlobalData());\r\n requestUrl +=\r\n '&s=' + JSON.stringify(parseSessionData());\r\n requestUrl +=\r\n '&p=' + JSON.stringify(parseProductData(productId));\r\n requestUrl +=\r\n '&dl=' +\r\n JSON.stringify(parseDataLayerData(slot));\r\n requestUrl +=\r\n '&seg=' +\r\n JSON.stringify(parseSegments());\r\n\r\n if (Cookies.get(\"trbodebug\")) {\r\n console.log(requestUrl);\r\n }\r\n return requestUrl;\r\n}\r\n\r\nconst parseSegments = function() {\r\n var segments = {};\r\n if (typeof window !== 'undefined' && window && window._trbo) {\r\n segments = window._trbo.udp.data.segmentData;\r\n }\r\n\r\n return segments;\r\n}\r\n\r\nconst parseGlobalData = function() {\r\n var global_data = {\r\n st: 0,\r\n p: encodeURIComponent(window.location.href),\r\n pt: encodeURIComponent(window.location.href), // current URL with URL parameters\r\n t: Math.floor((new Date()).getTime() / 1000),\r\n sh: 13017, // shop_id from trbo interface : TODO \r\n u: get_user_id(), // trbo user_id\r\n ts: get_sale_count(), // sale count number of sales per User\r\n ust: get_user_start_time(), // user start time\r\n sdt: get_session_duration_total(), // session duration total of all sessions in seconds\r\n sc: get_session_count(), // session count, number of total sessions\r\n sid: get_session_id(),\r\n pt: get_page_type_id(),\r\n cb: get_current_basket(),\r\n bw: 1440, // browser / viewport with\r\n bh: 768, // browser / viewport height\r\n cic: [], // click in channel - legacy\r\n cic2: get_cic2(), // click in channel v2\r\n ref: \"\", // page referrer\r\n };\r\n\r\n return global_data;\r\n};\r\n\r\nconst parseSessionData = function() {\r\n var session_data = [];\r\n // if window._trbo is available :\r\n if (typeof window !== 'undefined' && window && window._trbo) {\r\n session_data = window._trbo.udp.getSessions().slice(0,5);\r\n } else if (typeof localStorage !== 'undefined') {\r\n // else use local storage\r\n session_data.push({\r\n sst: JSON.parse(localStorage._trbo_ud).session.createTime,\r\n pvc: JSON.parse(localStorage._trbo_ud).session.sessionSummary.pageViewCount,\r\n sd: JSON.parse(localStorage._trbo_ud).session.sessionSummary.sessionDuration\r\n });\r\n var passt_sessions = JSON.parse(localStorage._trbo_ud).sessions;\r\n if (Object.keys(passt_sessions).length > 0) {\r\n for (var sessionkey in passt_sessions) {\r\n if (session_data.length >= 5) continue;\r\n session_data.push({\r\n sst: passt_sessions[sessionkey].createTime,\r\n pvc: passt_sessions[sessionkey].sessionSummary.pageViewCount,\r\n sd: passt_sessions[sessionkey].sessionSummary.sessionDuration \r\n });\r\n }\r\n }\r\n }\r\n\r\n return session_data;\r\n};\r\n\r\nconst parseProductData = function(productId) {\r\n var product_data = {};\r\n\r\n if (productId) {\r\n product_data = {\r\n [productId]: Date.now()\r\n };\r\n\r\n return product_data;\r\n }\r\n\r\n \r\n // if window._trbo is available :\r\n if (typeof window !== 'undefined' && window && window._trbo) {\r\n product_data = window._trbo.app.opts.requestDataTransformer.getProducts()\r\n } else if (typeof localStorage !== 'undefined') {\r\n }\r\n\r\n return product_data;\r\n};\r\n\r\nconst parseDataLayerData = function(slot) {\r\n var data_layer = {};\r\n \r\n if (typeof window !== 'undefined' && window && window._trbo) {\r\n var _local_storage_data_layer = _trbo.udp.getUserSummary().externalData;\r\n if (_local_storage_data_layer && Object.keys(_local_storage_data_layer).length > 0) {\r\n for (var data_layer_key in _local_storage_data_layer) {\r\n if (_local_storage_data_layer[data_layer_key] !== 'n/a' && \r\n _local_storage_data_layer[data_layer_key] !== '' && \r\n data_layer_key !== 'external_user_id') {\r\n if (typeof _local_storage_data_layer[data_layer_key] === 'object' && \r\n _local_storage_data_layer[data_layer_key] !== null) {\r\n data_layer[data_layer_key] = _local_storage_data_layer[data_layer_key]\r\n }\r\n else {\r\n data_layer[data_layer_key] = _local_storage_data_layer[data_layer_key].toString().replace(\"&\", \"%26\");\r\n }\r\n \r\n }\r\n }\r\n }\r\n }\r\n \r\n if (slot) {\r\n data_layer[\"slot\"] = slot;\r\n }\r\n\r\n return data_layer;\r\n};\r\n\r\n/**\r\n * unique trbo user id\r\n */\r\nconst get_user_id = function() {\r\n return JSON.parse(localStorage._trbo_ud).user.userId;;\r\n};\r\n\r\n/**\r\n * current session id of user\r\n */\r\nconst get_session_id = function() {\r\n return JSON.parse(localStorage._trbo_ud).session.sessionId;\r\n};\r\n\r\n/**\r\n * id of current page type\r\n */\r\nconst get_page_type_id = function() {\r\n var page_type_mapping = {\r\n 'detail': 1,\r\n 'search': 2,\r\n 'basket': 3,\r\n 'home': 4,\r\n 'other': 5,\r\n 'checkout': 6,\r\n 'static': 7,\r\n 'category': 8,\r\n 'unknown': 9,\r\n 'confirmation': 10,\r\n 'account': 12\r\n };\r\n var page_type_id = page_type_mapping.detail;\r\n // TODO return correct page type\r\n\r\n return page_type_id;\r\n};\r\n\r\n/**\r\n * value, number and items of current basket\r\n */\r\nconst get_current_basket = function() {\r\n var current_basket_data = {\r\n value: 0, // absolut value of current basket\r\n num: 0, // number of products within current basket\r\n voucher: 0, // is voucher within basket : 0 = no : 1 = yes\r\n p: [] // array of product_ids within current basket \r\n };\r\n // TODO fill data\r\n return current_basket_data;\r\n};\r\n\r\n\r\n/**\r\n * total number of sale conversions\r\n */\r\nconst get_sale_count = function() {\r\n return JSON.parse(localStorage._trbo_ud).user.userSummary.saleCount;\r\n};\r\n\r\n/**\r\n * timestamp when user was created \r\n */ \r\nconst get_user_start_time = function() {\r\n return JSON.parse(localStorage._trbo_ud).user.userSummary.userCreateTime;\r\n};\r\n\r\n/**\r\n * total session duration from all sessions in seconds\r\n */\r\nconst get_session_duration_total = function() {\r\n return JSON.parse(localStorage._trbo_ud).user.userSummary.sessionDurationTotal;\r\n};\r\n\r\n/**\r\n * get number of sessions for this user\r\n */\r\nconst get_session_count = function() {\r\n return JSON.parse(localStorage._trbo_ud).user.userSummary.sessionCount;\r\n};\r\n\r\nconst get_cic2 = function() {\r\n let cic2 = [];\r\n\r\n if (typeof window !== 'undefined' && window && window._trbo) {\r\n cic2 = window._trbo.udp.getChannelData()\r\n } \r\n\r\n return cic2;\r\n}\r\n","import { Datum, ITrboResonse } from '../../Checkout/Models/Trbo/ITrboResonse';\r\nimport { ProduktkarussellItem, ProduktkarussellModel } from '../../Produktdetails/Models/Produktkarussell';\r\n\r\nexport const mapTrboResponseToProduktkarussellModel = (trboResponse: ITrboResonse): ProduktkarussellModel => {\r\n let response = {} as ProduktkarussellModel;\r\n response.karussellItems = [] as ProduktkarussellItem[];\r\n if (trboResponse.tracking.length > 0) {\r\n response.campaignId = trboResponse.tracking[0].campaign_id;\r\n response.campaignName = trboResponse.tracking[0].campaign_name;\r\n response.moduleId = trboResponse.tracking[0].module_id;\r\n response.moduleName = trboResponse.tracking[0].module_name;\r\n response.userType = trboResponse.tracking[0].user_type;\r\n }\r\n\r\n if (trboResponse.data) {\r\n for (let i = 0; i < trboResponse.data.length; i++) {\r\n for (let tr = 0; tr < trboResponse.data[i].length; tr++) {\r\n try {\r\n const trboProduct = trboResponse.data[i][tr];\r\n response.karussellItems.push({\r\n authorstring: trboProduct.brand,\r\n imageUrl: trboProduct.image_url,\r\n isAnkuendigung: trboProduct.custom3 === 'True',\r\n isEbook: false,\r\n isNew: trboProduct.custom2 === 'True',\r\n isStandardwerk: false,\r\n isTopTitel: trboProduct.custom1 === 'True',\r\n price: parseFloat(trboProduct.price).toLocaleString('de-De', {\r\n style: 'currency',\r\n currency: 'EUR',\r\n }),\r\n pricePrefix:\r\n trboProduct.custom6 === 'True' ? 'ca. ' : trboProduct.custom7 === 'True' ? 'ab ' : '',\r\n productDetailUrl: trboProduct.deeplink_orig,\r\n productId: parseInt(trboProduct.article),\r\n showBezugsartOverlay: showBezugsartOverlay(trboProduct),\r\n title: trboProduct.label,\r\n warenkorbAnzeigen: true,\r\n isBeckOnline: trboProduct.custom10 === 'beck-online-Modul',\r\n kupOrderNo: trboProduct.custom12,\r\n dateOfPublicationDescription: '',\r\n lieferstatus: trboProduct.custom14,\r\n lieferstatusId: 0,\r\n auflage: trboProduct.custom4,\r\n releaseYear: trboProduct.custom5,\r\n medium: trboProduct.custom10,\r\n publisher: trboProduct.custom11,\r\n });\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n return response;\r\n};\r\nfunction showBezugsartOverlay(trboProduct: Datum): boolean {\r\n return (\r\n trboProduct.custom15 === '5' &&\r\n parseFloat(trboProduct.price) > 0 &&\r\n trboProduct.custom7 === 'False' &&\r\n (trboProduct.custom11 === 'C.H.BECK' || trboProduct.custom11 === 'Vahlen')\r\n );\r\n}\r\n","/**\r\n * Formatiert den Übergebenen Betrag in das Format 0.00.\r\n * Wenn es sich um einen Cent-Betrag handelt wird vorher /100 geteilt\r\n * @param price\r\n * @param isCentPrice\r\n */\r\nexport function formatPrice2Digits(price: number, isCentPrice?: boolean) {\r\n try {\r\n if (!price && price != 0) {\r\n return null;\r\n }\r\n if (isCentPrice) {\r\n price = price / 100;\r\n }\r\n return price.toFixed(2);\r\n } catch (error) {\r\n return null;\r\n }\r\n}","import { ProduktkarussellItem, ProduktkarussellModel } from '../Produktdetails/Models/Produktkarussell';\r\n\r\nexport const CreateSliderContent = (\r\n products: ProduktkarussellModel,\r\n container,\r\n sliderPrototype,\r\n sliderId,\r\n trbotracking: boolean = false\r\n): void => {\r\n var container = container;\r\n if (!nullOrEmpty(products) && !nullOrEmpty(products.karussellItems) && products.karussellItems.length > 0) {\r\n var sliderPrototypes = sliderPrototype.clone();\r\n for (let product of products.karussellItems) {\r\n var productItem = sliderPrototypes.find('.productItem').clone();\r\n //Labels\r\n var labelWrapper = productItem.find('.labelWrapper');\r\n if (product.isNew) {\r\n var newLabel = sliderPrototypes.find('.statusLabel.red').clone();\r\n newLabel.find('.txt').html('Neu');\r\n labelWrapper.append(newLabel);\r\n }\r\n if (product.isTopTitel) {\r\n var topLabel = sliderPrototypes.find('.statusLabel.gold').clone();\r\n topLabel.find('.txt').html('Toptitel');\r\n labelWrapper.append(topLabel);\r\n }\r\n if (product.isStandardwerk) {\r\n var standardwerkLabel = sliderPrototypes.find('.statusLabel.gold').clone();\r\n standardwerkLabel.find('.txt').html('Standardwerk');\r\n labelWrapper.append(standardwerkLabel);\r\n }\r\n if (product.isAnkuendigung) {\r\n var ankuendigungLabel = sliderPrototypes.find('.statusLabel.red').clone();\r\n ankuendigungLabel.find('.txt').html('Ankündigung');\r\n labelWrapper.append(ankuendigungLabel);\r\n }\r\n if (product.isEbook) {\r\n var ebookLabel = sliderPrototypes.find('.mediaTypeLabel.gold').clone();\r\n ebookLabel.html('eBook');\r\n productItem.find('.imgWrapper').append(ebookLabel);\r\n }\r\n if (sliderId == 'merklisteSlider') {\r\n productItem.find('.title a').addClass('merklisteTracking');\r\n }\r\n if (container[0].id == 'productTopReihen') {\r\n productItem\r\n .find('.title a')\r\n .html(product.title)\r\n .attr('href', product.productDetailUrl)\r\n .addClass('topProductTracking')\r\n .attr('data-trackingevent', 'PDP_top-products_static-reco');\r\n } else if (container[0].id == 'productTrbo' || container[0].id == 'productTrboLastSeen' || trbotracking) {\r\n productItem\r\n .find('.title a')\r\n .html(product.title)\r\n .attr('href', product.productDetailUrl)\r\n .addClass('trboClickTracking')\r\n .attr('data-campaignid', products.campaignId)\r\n .attr('data-campaignname', products.campaignName)\r\n .attr('data-moduleid', products.moduleId)\r\n .attr('data-modulename', products.moduleName)\r\n .attr('data-productid', product.productId)\r\n .attr('data-usertype', products.userType);\r\n } else {\r\n productItem\r\n .find('.title a')\r\n .html(product.title)\r\n .attr('href', product.productDetailUrl);\r\n }\r\n\r\n productItem.find('.author').html(product.authorstring);\r\n if (product.pricePrefix === 'ca. ') {\r\n productItem.find('.price .ca').append(product.pricePrefix + product.price);\r\n } else {\r\n productItem.find('.price .ca').remove();\r\n productItem.find('.price').append(product.pricePrefix + product.price);\r\n }\r\n\r\n productItem.find('.imgWrapper img').attr('src', product.imageUrl);\r\n productItem.find('.imgWrapper img').attr('alt', `Cover ${product.title}`);\r\n productItem.find('.imgWrapper').attr('href', product.productDetailUrl);\r\n if (container[0].id == 'productTopReihen') {\r\n productItem\r\n .find('.imgWrapper')\r\n .addClass('topProductTracking')\r\n .attr('data-trackingevent', 'PDP_top-products_static-reco');\r\n productItem.find('.addToCard').addClass('promotionClick');\r\n } else if (container[0].id == 'productTrbo' || container[0].id == 'productTrboLastSeen' || trbotracking) {\r\n productItem\r\n .find('.imgWrapper')\r\n .addClass('trboClickTracking')\r\n .attr('data-campaignid', products.campaignId)\r\n .attr('data-campaignname', products.campaignName)\r\n .attr('data-moduleid', products.moduleId)\r\n .attr('data-modulename', products.moduleName)\r\n .attr('data-productid', product.productId)\r\n .attr('data-usertype', products.userType);\r\n } else if (container[0].id == 'productFamilyContainer') {\r\n productItem.find('.imgWrapper').addClass('promotionClick');\r\n productItem.find('.remember').addClass('promotionClick');\r\n productItem.find('.title').addClass('promotionClick');\r\n productItem.find('.addToCard').addClass('promotionClick');\r\n }\r\n\r\n if (sliderId == 'merklisteSlider') {\r\n productItem.find('.imgWrapper').addClass('merklisteTracking');\r\n }\r\n\r\n if (product.warenkorbAnzeigen && product.isBeckOnline !== true) {\r\n let addToCartButton = productItem.find('.addToCard.shop');\r\n if (sliderId == 'merklisteSlider') {\r\n addToCartButton.addClass('merklisteTracking');\r\n }\r\n addToCartButton.attr('data-productid', product.productId);\r\n if (product.showBezugsartOverlay) {\r\n addToCartButton.addClass('ajax_checkout_bezugsart');\r\n addToCartButton.attr('data-toggle', 'modal').attr('data-target', '#modalBezugsart-01');\r\n } else {\r\n addToCartButton.addClass('ajax_checkout_add');\r\n }\r\n if (container[0].id == 'productTrbo' || container[0].id == 'productTrboLastSeen' || trbotracking) {\r\n addToCartButton\r\n .addClass('trboClickTracking')\r\n .attr('data-campaignid', products.campaignId)\r\n .attr('data-campaignname', products.campaignName)\r\n .attr('data-moduleid', products.moduleId)\r\n .attr('data-modulename', products.moduleName)\r\n .attr('data-productid', product.productId)\r\n .attr('data-usertype', products.userType);\r\n\r\n productItem\r\n .find('.remember')\r\n .addClass('trboClickTracking')\r\n .attr('data-campaignid', products.campaignId)\r\n .attr('data-campaignname', products.campaignName)\r\n .attr('data-moduleid', products.moduleId)\r\n .attr('data-modulename', products.moduleName)\r\n .attr('data-productid', product.productId)\r\n .attr('data-usertype', products.userType);\r\n }\r\n productItem.find('.addToCard.screen').addClass('hide');\r\n } else {\r\n productItem.find('.addToCard').addClass('hide');\r\n }\r\n\r\n if (product.isBeckOnline) {\r\n productItem.find('.addToCard.screen').removeClass('hide');\r\n productItem.find('.addToCard.screen').attr('data-productid', product.productId);\r\n productItem\r\n .find('.addToCard.screen')\r\n .attr(\r\n 'href',\r\n `https://shop.beck-online.de/?crop=${product.kupOrderNo}&chk=${\r\n product.kupOrderNo\r\n }&usr=1&cid=BS&uid=`\r\n )\r\n .attr(\r\n 'data-price',\r\n product.price\r\n .replace('€', '')\r\n .replace(',', '.')\r\n .trim()\r\n );\r\n }\r\n\r\n productItem.find('.remember').attr('data-id', product.productId);\r\n if ($('#loggedInFlag').length) {\r\n productItem.find('.remember').addClass('addToMerkliste');\r\n } else {\r\n productItem\r\n .find('.remember')\r\n .attr(\r\n 'href',\r\n products.loginPageUrl\r\n ? products.loginPageUrl + '?merklisteId=' + product.productId\r\n : '/meine-daten/meine-daten-login/' + '?merklisteId=' + product.productId\r\n );\r\n }\r\n\r\n if (\r\n product.lieferstatusId !== 3 &&\r\n product.lieferstatusId !== 5 &&\r\n !product.lieferstatus.includes('vorbestell')\r\n ) {\r\n productItem.find('.reminder').addClass('hide');\r\n } else {\r\n productItem.find('.reminder').attr('data-id', product.productId);\r\n }\r\n\r\n getAvailabilityInfoText(product, productItem);\r\n getEditionText(product, productItem);\r\n\r\n container.append(productItem);\r\n }\r\n\r\n addContainerViewTracking(container, trbotracking, products);\r\n $('.productFamily.ajaxSpinner_Loading').addClass('hide');\r\n } else {\r\n if (container[0].id == sliderId) {\r\n var topProductsKarussel = $('slider');\r\n topProductsKarussel.addClass('hide');\r\n }\r\n }\r\n};\r\n\r\nfunction addContainerViewTracking(container: any, trbotracking: boolean, products: ProduktkarussellModel) {\r\n if (container[0].id == 'productTrbo' || container[0].id == 'productTrboLastSeen' || trbotracking) {\r\n container\r\n .addClass('trboPromotionTracking')\r\n .attr('data-campaignid', products.campaignId)\r\n .attr('data-campaignname', products.campaignName)\r\n .attr('data-moduleid', products.moduleId)\r\n .attr('data-modulename', products.moduleName)\r\n .attr('data-usertype', products.userType);\r\n } else if (container[0].id == 'productTopReihen') {\r\n container\r\n .addClass('googleTracking')\r\n .addClass('promotionTracking')\r\n .attr('data-trackingevent', 'PDP_top-products_static-reco');\r\n } else if (container[0].id == 'productFamilyContainer') {\r\n container\r\n .addClass('googleTracking')\r\n .addClass('promotionTracking')\r\n .attr('data-trackingevent', 'PDP_product-family_static-reco');\r\n }\r\n}\r\n\r\nfunction getAvailabilityInfoText(product: ProduktkarussellItem, productItem: any) {\r\n if (product.lieferstatus && product.lieferstatus.length > 0) {\r\n if (\r\n product.lieferstatusId === 3 &&\r\n product.dateOfPublicationDescription &&\r\n product.dateOfPublicationDescription.length > 0\r\n ) {\r\n productItem\r\n .find('.lieferStatus span')\r\n .html(`${product.lieferstatus} (${product.dateOfPublicationDescription})`);\r\n } else {\r\n productItem.find('.lieferStatus span').html(product.lieferstatus);\r\n if (\r\n product.lieferstatusId === 1 ||\r\n product.lieferstatusId === 4 ||\r\n product.lieferstatus === 'sofort lieferbar!'\r\n ) {\r\n productItem.find('.lieferStatus span').addClass('availabilityStatusColorGreen');\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction nullOrEmpty(element) {\r\n return element === null || element === '' || typeof element === 'undefined';\r\n}\r\nfunction getEditionText(product: ProduktkarussellItem, productItem: any) {\r\n if (product.auflage) {\r\n productItem.find('.edition span').html(product.auflage);\r\n }\r\n}\r\n","declare var Swiper: any;\r\nvar inAdvance = 700;\r\n\r\nvar setSlideGroupBig, setSlideGroupSmall;\r\nvar carouselbig = [];\r\nvar carouselsmall = [];\r\nvar karussellElementsLarge: JQuery;\r\nvar karussellElementsSmall: JQuery;\r\nvar swiperElements: JQuery;\r\n$(() => {\r\n checkForSwiperSlider();\r\n\r\n let windowWidth = $(window).width();\r\n if (windowWidth <= 768) {\r\n setSlideGroupBig = 1;\r\n setSlideGroupSmall = 1;\r\n } else if (windowWidth <= 1200) {\r\n setSlideGroupBig = 3;\r\n setSlideGroupSmall = 1;\r\n } else {\r\n setSlideGroupBig = 4;\r\n setSlideGroupSmall = 3;\r\n }\r\n\r\n //Produktkarussell\r\n karussellElementsLarge = $('[id^=produktkarussellLarge]:not(.initialized):not(.trboDynamicSlider)');\r\n karussellElementsSmall = $('[id^=produktkarussellSmall]:not(.initialized):not(.trboDynamicSlider)');\r\n lazyloadKarussell();\r\n\r\n window.addEventListener('scroll', function() {\r\n lazyloadKarussell();\r\n });\r\n\r\n /**\r\n * Beim window resize müssen die Produktkarussel aktualisiert werden,\r\n * ansonsten passt die Darstellung nicht mehr\r\n */\r\n $(window).resize(() => {\r\n for (var j = 0; j < carouselbig.length; j++) {\r\n carouselbig[j].pagination.render();\r\n carouselbig[j].pagination.update();\r\n carouselbig[j].update();\r\n }\r\n for (var k = 0; k < carouselsmall.length; k++) {\r\n carouselsmall[k].pagination.render();\r\n carouselsmall[k].pagination.update();\r\n carouselsmall[k].update();\r\n }\r\n });\r\n});\r\n\r\nfunction lazyloadKarussell() {\r\n for (let index = 0; index < karussellElementsLarge.length; index++) {\r\n try {\r\n const karussell = karussellElementsLarge[index];\r\n let karussellTop = karussell.getBoundingClientRect().top;\r\n if (karussellTop < window.innerHeight + window.pageYOffset + inAdvance && karussellTop > 0) {\r\n carouselbig.push(initSwiperLarge(karussell));\r\n karussell.classList.add('initialized');\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n for (let index = 0; index < karussellElementsSmall.length; index++) {\r\n try {\r\n const karussell = karussellElementsSmall[index];\r\n let karussellTop = karussell.getBoundingClientRect().top;\r\n if (karussellTop < window.innerHeight + window.pageYOffset + inAdvance && karussellTop > 0) {\r\n carouselsmall.push(initSwiperSmall(karussell));\r\n karussell.classList.add('initialized');\r\n }\r\n } catch (error) {\r\n console.error(error);\r\n }\r\n }\r\n karussellElementsLarge = karussellElementsLarge.filter(':not(.initialized)');\r\n karussellElementsSmall = karussellElementsSmall.filter(':not(.initialized)');\r\n}\r\n\r\n/**\r\n * Überprüft ob es auf der Seite Slider gibt, falls ja, werden diese konfiguriert\r\n */\r\nfunction checkForSwiperSlider() {\r\n swiperElements = $('[id^=bannerSwiper]:not(.trboDynamicBuehne)');\r\n var frequency = swiperElements.first().data('frequency');\r\n if (swiperElements.length > 0) {\r\n configureSwiperSlider(frequency, 'fade', swiperElements);\r\n }\r\n}\r\n\r\n/**\r\n * Konfiguriert alle Swiper Slider auf der Seite\r\n * @param autoplay Die Anzeigedauer eines Bildes\r\n * @param effect Der Transition effekt\r\n * @param elements Die Swiper slider Elemente\r\n */\r\nexport function configureSwiperSlider(autoplay: number, effect: string, elements: any) {\r\n for (var i = 0; i < elements.length; i++) {\r\n var swiper = new Swiper(elements[i] as any, {\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n },\r\n loop: true,\r\n autoplay: {\r\n delay: autoplay,\r\n },\r\n autoplayDisableOnInteraction: true,\r\n effect: effect,\r\n });\r\n }\r\n}\r\n\r\n/**\r\n * Initialisierungsfunktion für das kleine karussel\r\n * @param elem\r\n */\r\nexport function initSwiperSmall(elem: any) {\r\n let swiper = new Swiper(elem, {\r\n slidesPerView: setSlideGroupSmall,\r\n spaceBetween: 30,\r\n slidesPerGroup: setSlideGroupSmall,\r\n loop: true,\r\n loopFillGroupWithBlank: true,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true,\r\n },\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n },\r\n observer: true,\r\n observeParents: true,\r\n breakpoints: {\r\n 1200: {\r\n slidesPerView: 2,\r\n spaceBetween: 40,\r\n },\r\n 1024: {\r\n slidesPerView: 2,\r\n spaceBetween: 40,\r\n },\r\n 768: {\r\n slidesPerView: 2,\r\n spaceBetween: 30,\r\n },\r\n 640: {\r\n slidesPerView: 1,\r\n spaceBetween: 20,\r\n },\r\n 320: {\r\n slidesPerView: 1,\r\n spaceBetween: 10,\r\n },\r\n },\r\n on: {\r\n resize: function() {\r\n if ($(window).width() > 1200) {\r\n setSlideGroupSmall = 3;\r\n this.params.slidesPerView = 3;\r\n } else if ($(window).width() < 1200 && $(window).width() > 1024) {\r\n setSlideGroupSmall = 2;\r\n this.params.slidesPerView = 2;\r\n } else if ($(window).width() < 1024) {\r\n this.params.slidesPerView = 1;\r\n setSlideGroupSmall = 1;\r\n }\r\n this.params.slidesPerGroup = setSlideGroupSmall;\r\n this.update();\r\n this.pagination.update();\r\n this.pagination.render();\r\n },\r\n },\r\n });\r\n $(elem)\r\n .find('.swiper-wrapper')\r\n .removeClass('hide');\r\n return swiper;\r\n}\r\n\r\n/**\r\n * Initialisierungsfunktion für das große karussel\r\n * @param elem\r\n */\r\nexport function initSwiperLarge(elem: any) {\r\n let swiper = new Swiper(elem, {\r\n slidesPerView: setSlideGroupBig,\r\n spaceBetween: 30,\r\n slidesPerGroup: setSlideGroupBig,\r\n loop: false,\r\n loopFillGroupWithBlank: false,\r\n pagination: {\r\n el: '.swiper-pagination',\r\n clickable: true,\r\n },\r\n navigation: {\r\n nextEl: '.swiper-button-next',\r\n prevEl: '.swiper-button-prev',\r\n },\r\n observer: true,\r\n observeParents: true,\r\n breakpoints: {\r\n //1400: {\r\n // slidesPerView: 4,\r\n // spaceBetween: 30\r\n //},\r\n 1200: {\r\n slidesPerView: 4,\r\n spaceBetween: 40,\r\n },\r\n 1024: {\r\n slidesPerView: 3,\r\n spaceBetween: 30,\r\n },\r\n 768: {\r\n slidesPerView: 2,\r\n spaceBetween: 30,\r\n },\r\n 640: {\r\n slidesPerView: 1,\r\n spaceBetween: 20,\r\n },\r\n 320: {\r\n slidesPerView: 1,\r\n spaceBetween: 10,\r\n },\r\n },\r\n on: {\r\n resize: function() {\r\n if ($(window).width() > 1200) {\r\n setSlideGroupBig = 4;\r\n this.params.slidesPerView = 4;\r\n } else if ($(window).width() < 1200 && $(window).width() > 1024) {\r\n setSlideGroupBig = 3;\r\n this.params.slidesPerView = 3;\r\n } else if ($(window).width() < 1024 && $(window).width() > 768) {\r\n this.params.slidesPerView = 2;\r\n setSlideGroupBig = 3;\r\n } else {\r\n this.params.slidesPerView = 1;\r\n setSlideGroupBig = 1;\r\n }\r\n this.params.slidesPerGroup = setSlideGroupBig;\r\n this.update();\r\n this.pagination.update();\r\n this.pagination.render();\r\n },\r\n },\r\n });\r\n $(elem)\r\n .find('.swiper-wrapper')\r\n .removeClass('hide');\r\n return swiper;\r\n}\r\n","import { ProduktPrice } from './productprice';\r\nimport { TabsRenderer } from './TabsRenderer';\r\nimport { ProductInfoRenderer } from './ProductInfoRenderer';\r\nimport { SliderRenderer } from './SliderRenderer';\r\nimport { CombinationProductsRenderer } from './CombinationProductsRenderer';\r\nimport { productGoogleTracking } from './ProductGoogleTracking';\r\nimport {\r\n pdfTracking,\r\n recommendationTracking,\r\n testAboTracking,\r\n recensionNavClick,\r\n socialShareButtonTracking,\r\n} from './Tracking/produktdetailtracking';\r\nimport { checkForRecaptcha, recaptchaId } from '../Shared/userCentrics';\r\n\r\nconst trboId = 'ryxCCtrEX';\r\n\r\nconst produktPrice = new ProduktPrice();\r\nconst tabsRenderer = new TabsRenderer();\r\nconst productInfoRenderer = new ProductInfoRenderer();\r\nconst slider = new SliderRenderer();\r\nconst combinationProductsRenderer = new CombinationProductsRenderer();\r\n\r\n$(async () => {\r\n productInfoRenderer.RenderRelatedProducts();\r\n tabsRenderer.getGesamtwerkTab();\r\n tabsRenderer.getAutorenInfoTab();\r\n tabsRenderer.getRezensionenTab();\r\n combinationProductsRenderer.getCombinationProducts();\r\n slider.getProductFamily();\r\n await slider.getTrboProducts();\r\n await slider.getTrboLastSeenProducts();\r\n await productGoogleTracking();\r\n\r\n /**\r\n * Event wenn Prduktdetailstext zu lang ist\r\n */\r\n if ($('.details.description').height() < 340) {\r\n $('.show-more1 a').hide();\r\n }\r\n /**\r\n * Event wenn auf \"mehr\" button gedrückt wird\r\n */\r\n $('.show-more1 a').on('click', function() {\r\n var $this = $(this);\r\n var $content = $('.produktbeschreibung');\r\n var linkText = $this.text();\r\n\r\n if (linkText === 'Mehr anzeigen') {\r\n linkText = 'Weniger anzeigen';\r\n $content.removeClass('hide-produktbeschreibung');\r\n $content.addClass('show-produktbeschreibung');\r\n } else {\r\n linkText = 'Mehr anzeigen';\r\n $content.removeClass('show-produktbeschreibung');\r\n $content.addClass('hide-produktbeschreibung');\r\n\r\n $([document.documentElement, document.body]).animate(\r\n {\r\n scrollTop: $('.description').offset().top,\r\n },\r\n 300\r\n );\r\n }\r\n\r\n $this.text(linkText);\r\n });\r\n\r\n /**\r\n * Event wenn \"Preisdetails anzeigen\" auf Mobile geklickt wird\r\n */\r\n $('.priceDetailsMobile').click(e => {\r\n produktPrice.ShowPriceDetailsMobileClicked(e.currentTarget);\r\n });\r\n\r\n $('#print_button').click(e => {\r\n window.print();\r\n });\r\n\r\n $('body').click(e => {\r\n $('.social-menu-bubble').addClass('hidden');\r\n $('.social-menu-bubble').removeClass('active');\r\n });\r\n\r\n $('.shareButton').click(e => {\r\n e.preventDefault();\r\n if ($('.social-menu-bubble').hasClass('active')) {\r\n $('.social-menu-bubble').addClass('hidden');\r\n $('.social-menu-bubble').removeClass('active');\r\n $('.social-menu-bubble').removeClass('active');\r\n } else {\r\n $('.social-menu-bubble').removeClass('hidden');\r\n $('.social-menu-bubble').addClass('active');\r\n $('.social-menu-bubble').addClass('active');\r\n }\r\n e.stopPropagation();\r\n });\r\n\r\n /**\r\n * Event wenn der Preis im Dropdown auf Mobile geändert wird\r\n */\r\n $('#mobilePriceSelect').change(e => {\r\n produktPrice.UpdateDisplayedPriceDetailsMobile($(e.currentTarget).val());\r\n });\r\n\r\n $('#seminar_terminwahl').on('change', function() {\r\n var engagementId = $(this).val();\r\n $('.ajax_checkout_add_seminar').attr(\r\n 'href',\r\n 'https://www.beck-seminare.de/warenkorb.aspx?action=add&id=' + engagementId\r\n );\r\n var specialConditions = $(this)\r\n .find(`option[value=${engagementId}]`)\r\n .data('special-conditions');\r\n $('.specialConditions').html(specialConditions);\r\n });\r\n\r\n $('.attachmenttracking').on('click', function() {\r\n let productId = +$(this).attr('data-productid');\r\n let at = $(this).attr('data-attachementtype');\r\n pdfTracking(productId, at);\r\n });\r\n\r\n $('.probeabotracking').on('click', function() {\r\n const price = Number.parseFloat($(this).attr('data-price'));\r\n let productId = +$(this).attr('data-productid');\r\n\r\n testAboTracking(productId, price);\r\n });\r\n\r\n $('.empfehlungtracking').on('click', function() {\r\n let productId = +$(this).attr('data-productid');\r\n recommendationTracking(productId);\r\n });\r\n\r\n $('.socialShareTracking').on('click', function() {\r\n const service = $(this).attr('data-social');\r\n socialShareButtonTracking(service);\r\n });\r\n\r\n $('.rezensionen-nav').click(function() {\r\n $([document.documentElement, document.body]).animate(\r\n {\r\n scrollTop: $('#infoTabs').offset().top,\r\n },\r\n 200\r\n );\r\n let productId = +$(this).attr('data-productid');\r\n recensionNavClick(productId);\r\n $('#infoTabs .rezensionenSwitcher a').click();\r\n });\r\n});\r\n","/** \r\n * Die Klasse enthält Methoden die für die Preisdarstellung auf der Produktdetailseite verwendet werden.\r\n*/\r\nexport class ProduktPrice {\r\n\r\n /**\r\n * Zeigt den passenden Beschreibungstext zu den ausgewählten Preis in der Mobile ansicht an\r\n * @param showPricedetailsDiv Das Element welches angeklickt wurde. In diesen Fall der Container des Buttons\r\n */\r\n ShowPriceDetailsMobileClicked(showPricedetailsDiv: HTMLElement): void {\r\n var priceId = $(\"#mobilePriceSelect\").val();\r\n $(\".mobilePriceDescription\").hide();\r\n\r\n if ($(showPricedetailsDiv).hasClass(\"pricesHidden\")) {\r\n $(\"div.mobilePriceDescription[data-id='\" + priceId + \"']\").show();\r\n $(showPricedetailsDiv).removeClass(\"pricesHidden\");\r\n } else {\r\n $(showPricedetailsDiv).addClass(\"pricesHidden\");\r\n }\r\n\r\n $(showPricedetailsDiv).find(\"i\").toggleClass(\"fa-angle-down fa-angle-up\");\r\n }\r\n\r\n /**\r\n * Ist der Preisdetailtext ausgeklappt und der Preis wird geändert, wird der Text aktualisiert\r\n * @param selectedValue Die Id des neu ausgewählten Preises\r\n */\r\n UpdateDisplayedPriceDetailsMobile(selectedValue: string | number | string[]) {\r\n if (!$(\"div.priceDetailsMobile\").hasClass(\"pricesHidden\")) {\r\n $(\".mobilePriceDescription\").hide();\r\n $(\"div.mobilePriceDescription[data-id='\" + selectedValue + \"']\").show();\r\n }\r\n }\r\n}","import { Gesamtwerk } from './Models/Gesamtwerk';\r\nimport { AutorenInfo } from './Models/AutorenInfo';\r\nimport { RezensionenModel } from './Models/Rezensionen';\r\nimport 'bootstrap';\r\n\r\n/**\r\n * Enthält Logiken die für das Rendern der Tabs zuständig sind\r\n */\r\nexport class TabsRenderer {\r\n currentProductId: any;\r\n\r\n constructor() {\r\n this.currentProductId = $('#currentProductId').val();\r\n }\r\n\r\n /**\r\n * Holt die Daten für das Gesamtwerk von der Api. Unterscheidet dabei, ob es ein Kopfprodukt ist oder nicht\r\n * Baut bei Success das Gesamtwerk-Tab zusammen.\r\n */\r\n getGesamtwerkTab() {\r\n var isPartOfSeries = $('#partOfSeries').val();\r\n var isHeadOfSeries = $('#headOfSeries').val();\r\n var seriesId = $('#seriesId').val();\r\n var kopfproduktId = $('#kopfproduktId').val();\r\n\r\n var apiUrl = isPartOfSeries\r\n ? '/Umbraco/api/ProduktdetailApi/GetGesamtwerkByPartOfSeriesId?id=' + seriesId\r\n : isHeadOfSeries\r\n ? '/Umbraco/api/ProduktdetailApi/GetGesamtwerkByHeadOfSeriesId?id=' + kopfproduktId\r\n : '';\r\n\r\n if (apiUrl !== '') {\r\n //die CurrentProductId braucht man, weil das aktuelle Produkt selbst nicht in der Gesamtwerk-Auflistung vorkommen soll.\r\n apiUrl += '¤tProductId=' + this.currentProductId;\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: apiUrl,\r\n success: data => {\r\n var gesamtwerk = data as Gesamtwerk;\r\n this.createGesamtwerkTabContent(gesamtwerk);\r\n },\r\n });\r\n }\r\n }\r\n /**\r\n * Holt die Daten für die AutorenInfo von der Api\r\n * Baut bei Success das AutorenInfo-Tab zusammen.\r\n */\r\n getAutorenInfoTab() {\r\n var apiUrl = '/Umbraco/api/ProduktdetailApi/GetAutorenInfoByProductId?id=' + this.currentProductId;\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: apiUrl,\r\n success: data => {\r\n var autorenInfo = data as AutorenInfo;\r\n this.createAutorenInfoTabContent(autorenInfo);\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * Holt die Daten für die Rezensionen von der Api\r\n * Baut bei Success das Rezensionen-Tab zusammen.\r\n */\r\n getRezensionenTab() {\r\n var apiUrl = '/Umbraco/api/ProduktdetailApi/GetRezensionen?id=' + this.currentProductId;\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: apiUrl,\r\n success: data => {\r\n var rezensionen = data as RezensionenModel;\r\n this.createRezensionenTabContent(rezensionen);\r\n },\r\n error: () => {\r\n $('.accordion.ajaxSpinner_Loading').addClass('hide');\r\n },\r\n });\r\n }\r\n\r\n private createGesamtwerkTabContent(gesamtwerk: Gesamtwerk) {\r\n var tab = $('#tab-gesamtwerk');\r\n if (!this.nullOrEmpty(gesamtwerk)) {\r\n //Handelt es sich bei dem aktuellen Produkt nicht um das Gesamtwerk, muss es als erstes eine Verlinkung zum Gesamtwerk geben.\r\n if (!this.nullOrEmpty(gesamtwerk.kopfprodukt)) {\r\n var protKopfprodukt = $('#ProduktdetailPrototypes #GesamtwerkPrototypes p').clone();\r\n protKopfprodukt.find('a').attr('href', gesamtwerk.kopfprodukt.href);\r\n protKopfprodukt.find('.txt').html(gesamtwerk.kopfprodukt.displayName);\r\n tab.find('.heading').html('Weitere Titel im Gesamtwerk\\n');\r\n tab.append(protKopfprodukt);\r\n }\r\n if (!this.nullOrEmpty(gesamtwerk.gesamtwerkTitel) && gesamtwerk.gesamtwerkTitel.length > 0) {\r\n //Listet die einzelnen Produkte der Reihe auf\r\n tab.find('.heading').html('Weitere Titel im Gesamtwerk\\n');\r\n for (let titel of gesamtwerk.gesamtwerkTitel) {\r\n var protTitel = $('#ProduktdetailPrototypes #GesamtwerkPrototypes p').clone();\r\n protTitel.find('a').attr('href', titel.href);\r\n protTitel.find('.txt').html(titel.displayName);\r\n tab.append(protTitel);\r\n }\r\n }\r\n }\r\n this.showTabIfNotEmpty(tab, '.gesamtwerkSwitcher');\r\n }\r\n private createAutorenInfoTabContent(model: AutorenInfo) {\r\n var tab = $('#tab-autorenInfo');\r\n if (!this.nullOrEmpty(model) && !this.nullOrEmpty(model.autorenInfo) && model.autorenInfo.length > 0) {\r\n var heading = $('#ProduktdetailPrototypes #AutorenInfoPrototypes .heading').clone();\r\n if ($('#isELearning').val() == 'True') {\r\n heading.text('Referenten');\r\n }\r\n tab.append(heading);\r\n var autorList = $('#ProduktdetailPrototypes #AutorenInfoPrototypes ul').clone();\r\n for (let autorInfo of model.autorenInfo) {\r\n var listElement = $('#ProduktdetailPrototypes #AutorenInfoPrototypes li').clone();\r\n\r\n listElement.find('a').attr('href', autorInfo.profileLink);\r\n\r\n var preText = listElement.find('span');\r\n preText.html(autorInfo.preText);\r\n\r\n var preTextTitle = preText.next().find('span');\r\n preTextTitle.html(autorInfo.preTextTitle);\r\n\r\n var firstname = preTextTitle.next();\r\n firstname.html(autorInfo.firstName);\r\n\r\n var prefix = firstname.next();\r\n prefix.html(autorInfo.prefix);\r\n\r\n var name = prefix.next();\r\n\r\n name.html(autorInfo.name);\r\n\r\n const birthname = name.next();\r\n if (autorInfo.birthName) {\r\n birthname.html(` (geb. ${autorInfo.birthName}) `);\r\n } else {\r\n birthname.html(' ');\r\n }\r\n\r\n var postText = birthname.next();\r\n postText.html(autorInfo.postText);\r\n\r\n autorList.append(listElement);\r\n }\r\n tab.append(autorList);\r\n }\r\n this.showTabIfNotEmpty(tab, '.autorenInfoSwitcher');\r\n }\r\n\r\n private createRezensionenTabContent(model: RezensionenModel) {\r\n if (model.rezensionen.length > 0) {\r\n var tab = $('#tab-Rezesionen');\r\n var heading = $('#ProduktdetailPrototypes #RezensionenPrototypes .heading').clone();\r\n tab.append(heading);\r\n if (!this.nullOrEmpty(model) && !this.nullOrEmpty(model.rezensionen) && model.rezensionen.length > 0) {\r\n for (let rezension of model.rezensionen) {\r\n var prototype = $('#ProduktdetailPrototypes #RezensionenPrototypes .rezension').clone();\r\n prototype.find('.rezensionText').html(rezension.text);\r\n tab.append(prototype);\r\n }\r\n }\r\n $('.rezensionenSwitcher').removeClass('hide');\r\n } else {\r\n $('.rezensionen-nav').addClass('hide');\r\n }\r\n //Muss hier aufgerufen werden, da es sich um das letzte Tab handelt\r\n this.setFocusAndShowTabs();\r\n }\r\n\r\n //Die Tabs dürfen erst angezeigt werden, wenn alles fertig geladen hat, sonst tauchen Tabs auf und verschwinden direkt wieder.\r\n //Muss als allerletztes aufgerufen werden\r\n private setFocusAndShowTabs() {\r\n $('#infoTabs').show();\r\n $('#infoTabs .nav-tabs li:visible')\r\n .first()\r\n .find('a')\r\n .tab('show');\r\n $('#infoTabs .tab-switcher-mobile:visible')\r\n .first()\r\n .find('a')\r\n .tab('show');\r\n $('.accordion.ajaxSpinner_Loading').addClass('hide');\r\n }\r\n\r\n /**\r\n * Wenn ein Tab leer ist wird es zusammen mit seinem switcher ausgeblendet. Der Fokus wird dannach per click() auf das nächste sichtbare Tab gelegt.\r\n * @param switcher\r\n * @param tab\r\n */\r\n private showTabIfNotEmpty(tab, switcherClass) {\r\n if (!this.hasNoContent(tab)) {\r\n $(switcherClass).removeClass('hide');\r\n tab.removeClass('hide');\r\n }\r\n }\r\n\r\n private nullOrEmpty(element) {\r\n return element === null || element === '' || typeof element === 'undefined';\r\n }\r\n\r\n /**\r\n * Überprüft ob ein Element Inhalt hat. Leerzeichen und Zeilenumbrüche werden dabei ignoriert.\r\n * @param element\r\n */\r\n private hasNoContent(element) {\r\n return !$.trim(element.html());\r\n }\r\n}\r\n","import { RelatedProducts } from './Models/RelatedProducts';\r\nimport { StandardLink } from './Models/StandardLink';\r\nimport { ShortListProduct } from '../Shared/Models/ShortListProduct';\r\nimport { getImagePath } from '../Shared/ProductHelper';\r\n\r\n/**\r\n * Enthält Logiken die für das Rendern der einzelner Produktinfos\r\n */\r\nexport class ProductInfoRenderer {\r\n /**\r\n * Gibt es Vor- bzw. Nachfolger werden diese geladen und angezeigt\r\n */\r\n RenderRelatedProducts() {\r\n var predecessorIds = null;\r\n var descandantId: any = 0;\r\n var productId = $('#productGoogleTracking').data('id');\r\n if ($('#predecessorContainer').length) {\r\n predecessorIds = $('#predecessorContainer').data('id');\r\n }\r\n if ($('#descendantContainer').length) {\r\n descandantId = $('#descendantContainer').data('id');\r\n }\r\n if (descandantId > 0 || predecessorIds) {\r\n if (descandantId > 0) {\r\n $('.nachauflage_container').removeClass('hide'); //Spinner wird angezeigt\r\n }\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: `/Umbraco/api/ProduktdetailApi/GetRelatedProducts?productId=${productId}&predecessors=${\r\n predecessorIds ? predecessorIds : ''\r\n }&descendant=${descandantId}`,\r\n success: data => {\r\n var relatedProucts = data as RelatedProducts;\r\n this.createRelatedProductsHtml(relatedProucts);\r\n this.fillDescendantProductBox(relatedProucts.descendantProduct);\r\n },\r\n error: () => {\r\n $('.relatedproducts.ajaxSpinner_Loading').addClass('hide');\r\n $('.nachauflage_container').addClass('hide');\r\n },\r\n });\r\n }\r\n }\r\n\r\n private createRelatedProductsHtml(relatedProducts: RelatedProducts) {\r\n $('.relatedproducts.ajaxSpinner_Loading').addClass('hide');\r\n if (relatedProducts) {\r\n if (relatedProducts.descendantLink) {\r\n this.BuildRelatedProductClone(\r\n relatedProducts.descendantLink,\r\n 'Nachauflage:',\r\n $('#descendantContainer')\r\n );\r\n }\r\n if (relatedProducts.predecessorLinks && relatedProducts.predecessorLinks.length > 0) {\r\n var BuildRelatedProductClone = this.BuildRelatedProductClone;\r\n relatedProducts.predecessorLinks.forEach(function(link, index) {\r\n BuildRelatedProductClone(link, index == 0 ? 'Vorauflage:' : '', $('#predecessorContainer'));\r\n });\r\n }\r\n }\r\n }\r\n\r\n private BuildRelatedProductClone(relatedProduct: StandardLink, preText: string, container: JQuery) {\r\n var descendantPrototype = $('#ProduktdetailPrototypes #relatedProductPrototype p').clone();\r\n descendantPrototype.find('span.preTextRelatedProduct').html(preText);\r\n descendantPrototype.find('span.txt').html(relatedProduct.displayName);\r\n descendantPrototype.find('a').attr('href', relatedProduct.href);\r\n container.append(descendantPrototype);\r\n }\r\n\r\n private async fillDescendantProductBox(product: ShortListProduct) {\r\n let nachauflage_container = $('.nachauflage_container');\r\n\r\n if (!product) {\r\n nachauflage_container.addClass('hide');\r\n return;\r\n }\r\n\r\n var imagePath = await getImagePath(product.hasProduktabbildung ? product.productId : -1, 50);\r\n if (!product.hasProduktabbildung) {\r\n imagePath = `${imagePath.split('?')[0]}?width=60&height=50&quality=80`;\r\n }\r\n\r\n nachauflage_container.find('img').attr('src', imagePath);\r\n\r\n nachauflage_container.find('.authorlist').html(product.authorList);\r\n nachauflage_container.find('.haupttitel').html(product.titleMain);\r\n if (product.edition) {\r\n if (product.publicationYear) {\r\n nachauflage_container.find('.bibData').html(`${product.edition} ${product.publicationYear}`);\r\n } else {\r\n nachauflage_container.find('.bibData').html(`${product.edition}`);\r\n }\r\n } else {\r\n nachauflage_container.find('.bibData').html(`${product.publicationYear}`);\r\n }\r\n nachauflage_container\r\n .find('.nachauflage_link')\r\n .attr('href', `/${product.seoOptimizedUrlPart}/product/${product.productId}`);\r\n nachauflage_container.find('.ajaxSpinner_Loading').addClass('hide');\r\n nachauflage_container.find('.nachauflage_box').removeClass('hide');\r\n }\r\n}\r\n","import { ProduktkarussellModel } from './Models/Produktkarussell';\r\nimport { initSwiperLarge } from '../swiper/swiperconfig';\r\nimport { CreateSliderContent } from '../Shared/Slider';\r\nimport { tracking_eecPromotionview } from '../Tracking/GoogleTracking';\r\nimport { mapTrboResponseToProduktkarussellModel } from '../Shared/Trbo/TrboResponseMapper';\r\nimport { buildTrboRequestUrl } from '../Shared/Trbo/TrboRequestBuilder';\r\n\r\ndeclare var __ucCmp: any;\r\nconst trboId = 'ryxCCtrEX';\r\n\r\nexport class SliderRenderer {\r\n /**\r\n * Holt die Produkte der Produktfamilie zu einem Produkt von der Api anhand ihrer Ids.\r\n * Die Ids werden in einem Hidden-Input zwischengespeichert\r\n */\r\n getProductFamily() {\r\n var productFamilyIds = $('#productFamilyIds').val();\r\n if (!this.nullOrEmpty(productFamilyIds)) {\r\n var apiUrl = '/Umbraco/api/ProduktdetailApi/GetProductFamily?productids=' + productFamilyIds;\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: apiUrl,\r\n success: data => {\r\n var products = data as ProduktkarussellModel;\r\n \r\n if (products?.karussellItems.length === 0) {\r\n $('#productFamily_wrapper').addClass('hide');\r\n return;\r\n \r\n }\r\n\r\n CreateSliderContent(\r\n products,\r\n $('#productFamilyContainer'),\r\n $('#ProduktdetailPrototypes #SliderPrototypes'),\r\n 'productFamilyContainer',\r\n false\r\n );\r\n //Karussell muss neu initialisiert werden, da der Inhalt bei Document.ready noch nicht verfügbar ist.\r\n initSwiperLarge($('#produktkarussellLarge'));\r\n },\r\n error: () => {\r\n $('.slider-section').addClass('hide');\r\n },\r\n });\r\n }\r\n }\r\n\r\n getTopProducts() {\r\n var productFamilyIds = $('#productTopKategorieUmbracoNodeId').val();\r\n let productId = $('#productTopKategorieProductId').val();\r\n if (!productId || !productFamilyIds) {\r\n return;\r\n }\r\n if (!this.nullOrEmpty(productFamilyIds)) {\r\n var apiUrl =\r\n '/Umbraco/api/ProduktdetailApi/GetRelatedTopProducts?contentId=' +\r\n productFamilyIds +\r\n '&productId=' +\r\n productId;\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: apiUrl,\r\n success: async data => {\r\n var products = data as ProduktkarussellModel;\r\n $('.topReihenSlider').removeClass('hidden');\r\n CreateSliderContent(\r\n products,\r\n $('#productTopReihen'),\r\n $('#ProduktdetailPrototypes #SliderPrototypes'),\r\n 'productTopReihen',\r\n false\r\n );\r\n //Karussell muss neu initialisiert werden, da der Inhalt bei Document.ready noch nicht verfügbar ist.\r\n let topslider = initSwiperLarge($('#produktkarussellLarge'));\r\n\r\n topslider.update();\r\n setTimeout(function() {\r\n // nasty hack aber keinen weg gefunden das karussell auf seite 1 springt...\r\n $('.slider .swiper-pagination-bullet')\r\n .first()\r\n .click();\r\n }, 100);\r\n await tracking_eecPromotionview();\r\n },\r\n error: () => {\r\n $('.slider').addClass('hide');\r\n },\r\n });\r\n }\r\n }\r\n\r\n async getTrboProducts() {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized() == false)) {\r\n setTimeout(this.getTrboProducts.bind(this), 200);\r\n return;\r\n }\r\n\r\n const details = await __ucCmp.getConsentDetails();\r\n const trboAllowed = details.services[trboId].consent.given;\r\n\r\n if (\r\n trboAllowed &&\r\n window['_trbo'] === undefined\r\n ) {\r\n setTimeout(this.getTrboProducts.bind(this), 100);\r\n return;\r\n } else {\r\n try {\r\n if (!trboAllowed) {\r\n $('.trboProductsSlider').addClass('hide');\r\n this.getTopProducts();\r\n return;\r\n }\r\n $('.trboProductsSlider').removeClass('hide');\r\n const requestUrl = buildTrboRequestUrl('Product_Reco_PDP_s2s');\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: encodeURI(requestUrl),\r\n success: async data => {\r\n var trboProducts = mapTrboResponseToProduktkarussellModel(data) as ProduktkarussellModel;\r\n if (trboProducts.karussellItems.length === 0) {\r\n $('.trboProductsSlider').addClass('hide');\r\n this.getTopProducts();\r\n return;\r\n }\r\n $('.topReihenSlider').addClass('hidden');\r\n CreateSliderContent(\r\n trboProducts,\r\n $('#productTrbo'),\r\n $('#ProduktdetailPrototypes #SliderPrototypes'),\r\n 'productTrbo',\r\n false\r\n );\r\n //Karussell muss neu initialisiert werden, da der Inhalt bei Document.ready noch nicht verfügbar ist.\r\n let trboslider = initSwiperLarge($('#produktkarussellLargeTrbo'));\r\n\r\n await tracking_eecPromotionview();\r\n\r\n trboslider.update();\r\n setTimeout(function() {\r\n // nasty hack aber keinen weg gefunden das karussell auf seite 1 springt...\r\n $('.trboProductsSlider .swiper-pagination-bullet')\r\n .first()\r\n .click();\r\n }, 100);\r\n },\r\n error: () => {\r\n $('.trboProductsSlider').addClass('hide');\r\n this.getTopProducts();\r\n },\r\n });\r\n } catch {\r\n $('.trboProductsSlider').addClass('hide');\r\n }\r\n }\r\n }\r\n\r\n async getTrboLastSeenProducts() {\r\n if (window['__ucCmp'] === undefined || (await __ucCmp.isInitialized() == false)) {\r\n setTimeout(this.getTrboLastSeenProducts.bind(this), 200);\r\n return;\r\n }\r\n \r\n const details = await __ucCmp.getConsentDetails();\r\n const trboAllowed = details.services[trboId].consent.given;\r\n\r\n if (\r\n trboAllowed &&\r\n window['_trbo'] === undefined\r\n ) {\r\n setTimeout(this.getTrboLastSeenProducts.bind(this), 100);\r\n return;\r\n }\r\n\r\n try {\r\n if (!trboAllowed) {\r\n $('.trboLastSeen').addClass('hide');\r\n return;\r\n }\r\n $('.trboLastSeen').removeClass('hide');\r\n const requestUrl = buildTrboRequestUrl('Product_Last-Seen_PDP_s2s');\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: encodeURI(requestUrl),\r\n success: async data => {\r\n var trboProducts = mapTrboResponseToProduktkarussellModel(data) as ProduktkarussellModel;\r\n if (trboProducts.karussellItems.length > 0) {\r\n CreateSliderContent(\r\n trboProducts,\r\n $('#productTrboLastSeen'),\r\n $('#ProduktdetailPrototypes #SliderPrototypes'),\r\n 'productTrboLastSeen',\r\n false\r\n );\r\n //Karussell muss neu initialisiert werden, da der Inhalt bei Document.ready noch nicht verfügbar ist.\r\n let trboslider = initSwiperLarge($('#produktkarussellLargeTrboLastSeen'));\r\n await tracking_eecPromotionview();\r\n\r\n trboslider.update();\r\n setTimeout(function() {\r\n // nasty hack aber keinen weg gefunden das karussell auf seite 1 springt...\r\n $('.trboLastSeen .swiper-pagination-bullet')\r\n .first()\r\n .click();\r\n }, 100);\r\n } else {\r\n $('.trboLastSeen').addClass('hide');\r\n }\r\n },\r\n error: () => {\r\n $('.trboLastSeen').addClass('hide');\r\n },\r\n });\r\n } catch {}\r\n }\r\n\r\n private nullOrEmpty(element) {\r\n return element === null || element === '' || typeof element === 'undefined';\r\n }\r\n}\r\n","import { CombinationProducts } from \"./Models/CombinationProducts\";\r\n\r\nexport class CombinationProductsRenderer {\r\n\r\n /**\r\n * Holt die Kombinationsprodukte zu einem Produkt von der Api anhand ihrer Ids.\r\n * Die Ids werden in Hidden-Inputs zwischengespeichert\r\n */\r\n getCombinationProducts() {\r\n var headIds = $(\"#headProductIdsInput\").val();\r\n var childIds = $(\"#childProductIdsInput\").val();\r\n \r\n var queryString = \"?\" + (!this.nullOrEmpty(headIds) ? \"&headProductIds=\" + headIds : \"\") + (!this.nullOrEmpty(childIds) ? \"&childProductIds=\" + childIds : \"\");\r\n if (queryString !== \"?\") {\r\n var apiUrl = \"/Umbraco/api/ProduktdetailApi/GetCombinationProducts\" + queryString.replace(\"?&\",\"?\");\r\n $.ajax({\r\n method: \"GET\",\r\n dataType: 'JSON',\r\n url: apiUrl,\r\n success: data => {\r\n var products = data as CombinationProducts;\r\n this.createCombinationProductsContent(products);\r\n }\r\n });\r\n }\r\n }\r\n\r\n private createCombinationProductsContent(combinationProducts: CombinationProducts) {\r\n var container = $(\"#combinationProductsContainer\");\r\n if (!this.nullOrEmpty(combinationProducts)) {\r\n var combinationProductsPrototypes = $('#ProduktdetailPrototypes #CombinationProductsPrototypes').clone();\r\n if (!this.nullOrEmpty(combinationProducts.headProducts)) {\r\n var headProductsContainer = combinationProductsPrototypes.find(\".combinationProductsHead\");\r\n for (let product of combinationProducts.headProducts) {\r\n var head = $('#ProduktdetailPrototypes #CombinationProductsPrototypes').find(\"li\").clone();\r\n head.find(\"a\").html(product.displayName).attr(\"href\", product.href);\r\n headProductsContainer.find(\"ul\").append(head);\r\n }\r\n container.append(headProductsContainer);\r\n }\r\n if (!this.nullOrEmpty(combinationProducts.childProducts)) {\r\n var childProductsContainer = combinationProductsPrototypes.find(\".combinationProductsChilds\").clone();\r\n for (let product of combinationProducts.childProducts) {\r\n var child = $('#ProduktdetailPrototypes #CombinationProductsPrototypes').find(\"li\").clone();\r\n child.find(\"a\").html(product.displayName).attr(\"href\", product.href);\r\n childProductsContainer.find(\"ul\").append(child);\r\n }\r\n container.append(childProductsContainer);\r\n }\r\n }\r\n $(\".combinationProducts.ajaxSpinner_Loading\").addClass(\"hide\");\r\n }\r\n\r\n private nullOrEmpty(element) {\r\n return element === null || element === \"\" || typeof (element) === 'undefined';\r\n }\r\n}","declare var dataLayer: any[];\r\n\r\n/**\r\n * Tracking für Leseproben auf Produktseite\r\n */\r\nexport function pdfTracking(productId: number, attachement_type: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: 'pdf download',\r\n eventLabel: `pdf_${attachement_type}_${productId}`,\r\n eventValue: '14.0',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'pdf download' + '/' + `pdf_${attachement_type}_${productId}`, 14.0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Tracking für \"beck-online 14-Tage-Test\"\r\n */\r\nexport function testAboTracking(productId: number, price: number) {\r\n const priceValue = price * 12;\r\n const fixedPriceValue = priceValue.toFixed(2);\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: 'click on bo button',\r\n eventLabel: `click_bo_${productId}`,\r\n eventValue: fixedPriceValue,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: [\r\n 'product data',\r\n 'click on bo button' + '/' + `click_bo_${productId}`,\r\n Number.parseFloat(fixedPriceValue),\r\n 'd',\r\n ],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Tracking für Social Sharing auf Produktseite\r\n */\r\nexport function recommendationTracking(productId: number) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: 'email_empfehlung',\r\n eventLabel: `email_empfehlung_${productId}`,\r\n eventValue: '14.0',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'email_empfehlung' + '/' + `email_empfehlung_${productId}`, 14.0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function recensionNavClick(productId: number) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: 'test_review-hint',\r\n eventLabel: `test_review-hint_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'test_review-hint' + '/' + `test_review-hint_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function socialShareButtonTracking(service: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: `share_${service}`,\r\n eventLabel: `share_${service}_pdp`,\r\n eventValue: '1.0',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', `share_${service}` + '/' + `share_${service}_pdp`, 1.0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n","import * as Cookies from 'js-cookie';\r\n\r\ndeclare var dataLayer: any[];\r\nvar windowHeight = $(window).innerHeight();\r\ndeclare var _trboq: any;\r\ndeclare var _trbo: any;\r\ndeclare var __ucCmp: any;\r\n\r\n/**\r\n * Googletracking für ein Promotionevent\r\n * @param eventName Der Name des Trackingevents\r\n */\r\nexport async function trackGooglePromotionEvent_view(eventName: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized())) {\r\n dataLayer.push({\r\n event: 'eec.promotionView',\r\n ecommerce: {\r\n promoView: {\r\n promotions: [\r\n {\r\n name: eventName,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampv: [[eventName]],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n } else {\r\n setTimeout(trackGooglePromotionEvent_view.bind(null, eventName), 100);\r\n }\r\n}\r\nexport function trackGooglePromotionEvent_click(eventName: string) {\r\n dataLayer.push({\r\n event: 'eec.promotionClick',\r\n ecommerce: {\r\n promoClick: {\r\n promotions: [\r\n {\r\n name: eventName,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampc: [[eventName]],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackGoogleAddToMerkliste_click(productId: number) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: 'add to wishlist',\r\n eventLabel: `add_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'add to wishlist' + '/' + `add_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackMerklisteInteraction_click(eventLabel: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'interaction_wishlist',\r\n eventLabel: eventLabel,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'interaction_wishlist' + '/' + eventLabel, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport async function MerklisteKarusellInViewTracking() {\r\n await trackGooglePromotionEvent_view('all_merklisten_static');\r\n}\r\n\r\nexport function MerklisteKarusellProductClickedTracking() {\r\n trackGooglePromotionEvent_click('all_merklisten_static');\r\n}\r\n\r\nexport function trackNaviEvent_click(eventName: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'navigation data',\r\n eventAction: 'navigation_click',\r\n eventLabel: eventName,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['navigation data', 'navigation_click' + '/' + eventName, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport async function loginTracking(pageType: string, loggedInResult: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized())) {\r\n if (pageType.includes('meine-daten')) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'login_meine-daten',\r\n eventLabel: loggedInResult == 'failed' ? 'login_failed' : 'login_success',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: [\r\n 'user data',\r\n 'login_meine-daten' + '/' + (loggedInResult == 'failed' ? 'login_failed' : 'login_success'),\r\n 0,\r\n 'd',\r\n ],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n } else {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'login_checkout',\r\n eventLabel: loggedInResult == 'failed' ? 'login_failed' : 'login_success',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: [\r\n 'user data',\r\n 'login_checkout' + '/' + (loggedInResult == 'failed' ? 'login_failed' : 'login_success'),\r\n 0,\r\n 'd',\r\n ],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n }\r\n Cookies.remove('LoggedInPageType');\r\n Cookies.remove('LoggedInResult');\r\n } else {\r\n setTimeout(loginTracking.bind(null, pageType, loggedInResult), 100);\r\n }\r\n}\r\n\r\nexport async function pushTrboId(eId: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized())) {\r\n _trboq = _trboq || [];\r\n _trboq.push([\r\n 'dataMatching',\r\n {\r\n external_user_id: eId,\r\n },\r\n ]);\r\n } else {\r\n setTimeout(pushTrboId.bind(null, eId), 100);\r\n }\r\n}\r\n\r\nexport async function trackIdLayerComplete(hId: string, hMail: string, hKid: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized())) {\r\n dataLayer.push({\r\n event: 'idLayer_complete_login',\r\n externalIdHash: hId,\r\n emailHash: hMail,\r\n kupCustomerNumberHash: hKid,\r\n });\r\n } else {\r\n setTimeout(trackIdLayerComplete.bind(null, hId, hMail, hKid), 100);\r\n }\r\n}\r\n\r\nexport async function trackIdLayerReduced(hMail: string, eventName: string) {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized())) {\r\n dataLayer.push({\r\n event: eventName,\r\n emailHash: hMail,\r\n });\r\n } else {\r\n setTimeout(trackIdLayerReduced.bind(null, hMail, eventName), 100);\r\n }\r\n}\r\n\r\nexport function trackNewsletterRegisterEvent(eventName: string) {\r\n if (eventName) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'newsletter_registrierung',\r\n eventLabel: eventName,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'newsletter_registrierung' + '/' + eventName, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n }\r\n}\r\n\r\nexport async function tracking_eecPromotionview() {\r\n const promotionElements = $('.googleTracking.promotionTracking:not(.promoted)');\r\n promotionElements.each(function() {\r\n if (IsVisibleElement(this)) {\r\n const trackingParam = $(this).data('trackingevent');\r\n if (trackingParam) {\r\n trackGooglePromotionEvent_view(trackingParam);\r\n }\r\n $(this).addClass('promoted');\r\n }\r\n });\r\n\r\n await trboPromotionViewTracking();\r\n}\r\n\r\nasync function trboPromotionViewTracking() {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized())) {\r\n const promotionTrboElements = $('.trboPromotionTracking:not(.promoted)');\r\n promotionTrboElements.each(function() {\r\n if (IsVisibleElement(this)) {\r\n const moduleId = $(this).data('moduleid');\r\n const moduleName = $(this).data('modulename');\r\n const campaignId = $(this).data('campaignid');\r\n const campaignName = $(this).data('campaignname');\r\n const usertype = $(this).data('usertype');\r\n\r\n if (window['_trboq'] !== undefined && window['_trbo'] !== undefined) {\r\n _trboq.push(['layerView', { moduleId: moduleId, campaignId: campaignId }]);\r\n _trbo.app.tracker.trackExternalView(usertype, campaignId, campaignName, moduleId, moduleName);\r\n $(this).addClass('promoted');\r\n }\r\n }\r\n });\r\n } else {\r\n setTimeout(trboPromotionViewTracking, 100);\r\n }\r\n}\r\n\r\nexport function trackExternalBasketClick(productId: number, eventLabel: string, eventAction: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: eventAction,\r\n eventLabel: `${eventLabel}_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', 'newsletter_registrierung' + '/' + `${eventLabel}_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackPrefixNameProblem() {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'interaction_forms',\r\n eventLabel: 'problem_name-prefix',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'interaction_forms' + '/' + 'problem_name-prefix', 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function trackLageRegistrationAccount(action: string, label: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: action,\r\n eventLabel: label,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', action + '/' + label, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nexport function searchResultClickTracking(searchQuery: string) {\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n icampc: [[searchQuery ? `Suchergebnis/${searchQuery}` : 'Suchergebnis']],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\nfunction IsVisibleElement(element) {\r\n if ($(element).hasClass('hide')) {\r\n return false;\r\n }\r\n var top_of_element = $(element).offset().top;\r\n var bottom_of_element = $(element).offset().top + $(element).outerHeight();\r\n var top_of_screen = $(window).scrollTop();\r\n var bottom_of_screen = top_of_screen + windowHeight;\r\n\r\n if (bottom_of_screen > top_of_element && top_of_screen < bottom_of_element) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n}\r\n","import request = require('request');\r\nimport { DummyImageSize } from '../Shared/Models/DummyImageSizeEnum';\r\nimport { IAvailabilityStatus } from './Models/AvailabilityStatus';\r\nimport { IDRMMapping } from './Models/DRMMapping';\r\nimport { StandardLink } from '../Produktdetails/Models/StandardLink';\r\n\r\n/**\r\n * Holt den availabilityStatus zur übergebenen Id\r\n * @param availabilityStatusId\r\n */\r\nexport function getAvailabilityStatus(availabilityStatusId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var storedAvailabilityStatusList = JSON.parse(\r\n sessionStorage.getItem('availabilityStatusList')\r\n ) as IAvailabilityStatus[];\r\n if (storedAvailabilityStatusList) {\r\n resolve(storedAvailabilityStatusList.filter(x => x.id == availabilityStatusId)[0].text);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetAvailabilityStatusList',\r\n success: (availabilityStatusList: IAvailabilityStatus[]) => {\r\n sessionStorage.setItem('availabilityStatusList', JSON.stringify(availabilityStatusList));\r\n resolve(availabilityStatusList.filter(x => x.id == availabilityStatusId)[0].text);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die DRM-Info zur übergebenen Id\r\n * @param availabilityStatusId\r\n */\r\nexport function getDRMInfo(drmId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var drmMapping = JSON.parse(sessionStorage.getItem('drmMapping')) as IDRMMapping[];\r\n if (drmMapping) {\r\n let drmMappingItem = drmMapping.filter(x => x.DRmid == drmId)[0];\r\n if (drmMappingItem) {\r\n resolve(drmMappingItem.AnzeigeText);\r\n }\r\n resolve(null);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetDRMMapping',\r\n success: (drmMapping: IDRMMapping[]) => {\r\n sessionStorage.setItem('drmMapping', JSON.stringify(drmMapping));\r\n let drmMappingItem = drmMapping.filter(x => x.DRmid == drmId)[0];\r\n if (drmMappingItem) {\r\n resolve(drmMappingItem.AnzeigeText);\r\n }\r\n resolve(null);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt den Link zu den Systemanforderungen (In Umbraco hinterlegt)\r\n * @param availabilityStatusId\r\n */\r\nexport function getSystemanforderungenLink(): Promise {\r\n return new Promise((resolve, reject) => {\r\n var systemanforderungenLink = JSON.parse(sessionStorage.getItem('systemanforderungenLink')) as StandardLink;\r\n if (systemanforderungenLink) {\r\n resolve(systemanforderungenLink);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetSystemanforderungenLink',\r\n success: (systemanforderungenLink: StandardLink) => {\r\n sessionStorage.setItem('systemanforderungenLink', JSON.stringify(systemanforderungenLink));\r\n resolve(systemanforderungenLink);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Checkt, ob die übergene availabilityStatusId lieferbar ist oder nicht\r\n * @param availabilityStatusId\r\n */\r\nexport function checkAvailabilityStatus(availabilityStatusId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n var storedOrderableAvailabilityStatusList = JSON.parse(\r\n sessionStorage.getItem('orderableAvailabilityStatusList')\r\n ) as number[];\r\n if (storedOrderableAvailabilityStatusList) {\r\n resolve(storedOrderableAvailabilityStatusList.some(x => x == availabilityStatusId));\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/Settings/GetOrderableAvailabilityStatusList',\r\n success: (orderableAvailabilityStatusList: number[]) => {\r\n sessionStorage.setItem(\r\n 'orderableAvailabilityStatusList',\r\n JSON.stringify(orderableAvailabilityStatusList)\r\n );\r\n resolve(orderableAvailabilityStatusList.includes(availabilityStatusId));\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die AdditionalPriceInfo zu dem Deliverytype. Daten sind in Backend Pflegbar\r\n * @param availabilityStatusId\r\n */\r\nexport function getAdditionalPriceInfoByDelivertypeId(deliverytypeId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n let priceinfo = sessionStorage.getItem('priceinfo_' + deliverytypeId) as string;\r\n if (priceinfo) {\r\n resolve(priceinfo);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/Settings/GetAdditionalPriceInfoByDelivertypeId?deliverytypeId=' + deliverytypeId,\r\n success: (priceinfo: any) => {\r\n sessionStorage.setItem('priceinfo_' + deliverytypeId, priceinfo);\r\n resolve(priceinfo);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Holt die AdditionalPriceInfo zu dem Deliverytype. Daten sind in Backend Pflegbar\r\n * @param availabilityStatusId\r\n */\r\nexport function getBreadcrumbByTocId(tocId: number): Promise {\r\n return new Promise((resolve, reject) => {\r\n if (!tocId) {\r\n resolve('Produkt ohne Kategorie');\r\n }\r\n let breadcrumb = sessionStorage.getItem('breadcrumb_' + tocId) as string;\r\n if (breadcrumb) {\r\n resolve(breadcrumb);\r\n } else {\r\n $.ajax({\r\n method: 'GET',\r\n url: '/Umbraco/api/Settings/GetBreadcrumbByTocId?tocId=' + tocId,\r\n success: (breadcrumb: string) => {\r\n sessionStorage.setItem('breadcrumb_' + tocId, breadcrumb);\r\n resolve(breadcrumb);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n }\r\n });\r\n}\r\n\r\n/**\r\n * Baut den Link zu einem Produktbild zusammen.\r\n * @param productId\r\n * @param width\r\n * @param height\r\n */\r\nexport function getImagePath(productId: number, width: number = -1, height: number = -1): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url:\r\n '/Umbraco/api/ImageServerApi/GetImageUrl?productId=' +\r\n productId +\r\n '&width=' +\r\n width +\r\n '&height=' +\r\n height,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * gibt den Pfad des Dummybildes passend zur übergebenen Größe zurück\r\n * @param imageSize\r\n */\r\nexport function getDummyImage(imageSize: DummyImageSize): Promise {\r\n return new Promise((resolve, reject) => {\r\n $.ajax({\r\n method: 'GET',\r\n dataType: 'JSON',\r\n url: '/Umbraco/api/ImageServerApi/GetDummyImage?imageSize=' + imageSize,\r\n success: data => {\r\n resolve(data);\r\n },\r\n error: () => {\r\n reject();\r\n },\r\n });\r\n });\r\n}\r\n\r\n/**\r\n * gilt für Factfinder-Produkte\r\n * @param product\r\n */\r\nexport function showBezugsartOverlay(product): boolean {\r\n return (\r\n product.DeliveryTypeID == '5' &&\r\n product.Bruttopreis != null &&\r\n product.PreisvariantenMerkmal == 'false' &&\r\n product.Urheberzeile != null &&\r\n (product.Verlag == 'C.H.BECK' || product.Verlag == 'Vahlen')\r\n );\r\n}\r\n","import { formatPrice2Digits } from '../Shared/PriceHelper';\r\n\r\ndeclare var dataLayer: any[];\r\ndeclare var __ucCmp: any;\r\n\r\n/**\r\n * Googletracking für ein Promotionevent\r\n */\r\nexport async function productGoogleTracking() {\r\n if (window['__ucCmp'] !== undefined && (await __ucCmp.isInitialized())) {\r\n let productsGoogleTrackingContainer = $('#productGoogleTracking');\r\n let name =\r\n productsGoogleTrackingContainer.data('name') !== '' ? productsGoogleTrackingContainer.data('name') : null;\r\n let id = productsGoogleTrackingContainer.data('id') !== '' ? productsGoogleTrackingContainer.data('id') : null;\r\n let price =\r\n productsGoogleTrackingContainer.data('price') !== ''\r\n ? formatPrice2Digits(parseFloat(productsGoogleTrackingContainer.data('price')))\r\n : null;\r\n let brand =\r\n productsGoogleTrackingContainer.data('brand') !== '' ? productsGoogleTrackingContainer.data('brand') : null;\r\n let category =\r\n productsGoogleTrackingContainer.data('category') !== ''\r\n ? productsGoogleTrackingContainer.data('category')\r\n : 'Produkt ohne Kategorie';\r\n let displayFormat =\r\n productsGoogleTrackingContainer.data('displayformat') !== ''\r\n ? productsGoogleTrackingContainer.data('displayformat')\r\n : null;\r\n let variant = null;\r\n if (productsGoogleTrackingContainer.data('producttype') == 'SEMINAR') {\r\n variant = 'Seminar/Tagung';\r\n } else {\r\n if (productsGoogleTrackingContainer.data('variant') !== '') {\r\n variant = productsGoogleTrackingContainer.data('variant');\r\n }\r\n }\r\n\r\n dataLayer.push({\r\n event: 'eec.productDetailImpression',\r\n ecommerce: {\r\n detail: {\r\n products: [\r\n {\r\n name: name, // Name or ID is required.\r\n id: id,\r\n price: price,\r\n brand: brand,\r\n category: category,\r\n variant: variant,\r\n dimension8: displayFormat,\r\n },\r\n ],\r\n },\r\n },\r\n });\r\n } else {\r\n setTimeout(productGoogleTracking, 100);\r\n }\r\n}\r\n\r\nexport function availabilityReminderSubmitTracking(productId: string, eventAction: string) {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'product data',\r\n eventAction: eventAction,\r\n eventLabel: `reminder_${productId}`,\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['product data', eventAction + '/' + `reminder_${productId}`, 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n"],"sourceRoot":""}