{"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","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","authorList","titleMain","edition","publicationYear","seoOptimizedUrlPart","trboId","productFamilyIds","getTopProducts","setTimeout","tracking_eecPromotionview","undefined","UC_UI","isInitialized","getServicesBaseInfo","consent","status","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","remove","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.8b57a0c847823d2ff2bf.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 productItem.find('.price').html(product.pricePrefix + product.price);\r\n productItem.find('.imgWrapper img').attr('src', product.imageUrl);\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\ndeclare var UC_UI: any;\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$(() => {\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 slider.getTrboProducts();\r\n slider.getTrboLastSeenProducts();\r\n 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 ? \"/Umbraco/api/ProduktdetailApi/GetGesamtwerkByPartOfSeriesId?id=\" + seriesId\r\n : isHeadOfSeries ? \"/Umbraco/api/ProduktdetailApi/GetGesamtwerkByHeadOfSeriesId?id=\" + kopfproduktId : \"\";\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 /**\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 \r\n var listElement = $('#ProduktdetailPrototypes #AutorenInfoPrototypes li').clone();\r\n\r\n \r\n listElement.find(\"a\").attr(\"href\", autorInfo.profileLink);\r\n \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 }\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 \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 }\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\").first().find(\"a\").tab(\"show\");\r\n $(\"#infoTabs .tab-switcher-mobile:visible\").first().find(\"a\").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}","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=${predecessorIds ? predecessorIds : \"\"}&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(relatedProducts.descendantLink, \"Nachauflage:\", $(\"#descendantContainer\"));\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 nachauflage_container.find('img').attr('src', await getImagePath(product.productId,50));\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 }\r\n else {\r\n nachauflage_container.find('.bibData').html(`${product.publicationYear}`);\r\n }\r\n nachauflage_container.find('.nachauflage_link').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 _trboq: any;\r\ndeclare var _trbo: any;\r\ndeclare var usercentrics: any;\r\ndeclare var UC_UI: 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: 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 tracking_eecPromotionview();\r\n },\r\n error: () => {\r\n $('.slider').addClass('hide');\r\n },\r\n });\r\n }\r\n }\r\n\r\n getTrboProducts() {\r\n if (window['UC_UI'] === undefined || !UC_UI.isInitialized) {\r\n setTimeout(this.getTrboProducts.bind(this), 200);\r\n return;\r\n }\r\n\r\n if (\r\n UC_UI.getServicesBaseInfo().find(service => service.id === trboId).consent.status &&\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 (!UC_UI.getServicesBaseInfo().find(service => service.id === trboId).consent.status) {\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: 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 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 getTrboLastSeenProducts() {\r\n if (window['UC_UI'] === undefined || !UC_UI.isInitialized) {\r\n setTimeout(this.getTrboLastSeenProducts.bind(this), 200);\r\n return;\r\n }\r\n\r\n if (\r\n UC_UI.getServicesBaseInfo().find(service => service.id === trboId).consent.status &&\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 (!UC_UI.getServicesBaseInfo().find(service => service.id === trboId).consent.status) {\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: 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 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 UC_UI: any;\r\n\r\n/**\r\n * Googletracking für ein Promotionevent\r\n * @param eventName Der Name des Trackingevents\r\n */\r\nexport function trackGooglePromotionEvent_view(eventName: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.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 function MerklisteKarusellInViewTracking() {\r\n 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 function loginTracking(pageType: string, loggedInResult: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.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 function pushTrboId(eId: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.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 function trackIdLayerComplete(hId: string, hMail: string, hKid: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.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 function trackIdLayerReduced(hMail: string, eventName: string) {\r\n if (window['UC_UI'] !== undefined && UC_UI.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 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 trboPromotionViewTracking();\r\n}\r\n\r\nfunction trboPromotionViewTracking() {\r\n if (window['UC_UI'] !== undefined && UC_UI.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 UC_UI: any;\r\n\r\n/**\r\n * Googletracking für ein Promotionevent\r\n */\r\nexport function productGoogleTracking() {\r\n if (window['UC_UI'] !== undefined && UC_UI.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":""}