{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./Typescript/Shared/Trbo/TrboRequestBuilder.js","webpack:///./Typescript/Shared/Trbo/TrboResponseMapper.ts","webpack:///./Typescript/OneClickCheckout/oneClickCheckoutTracking.ts","webpack:///./Typescript/Shared/Slider.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/swiper/swiperconfig.ts","webpack:///./Typescript/Shared/PriceHelper.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","15","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","dataLayer","event","eventCategory","eventAction","eventLabel","ecCustomProperties","Target","rqtype","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","produktPrice","ProduktPrice","tabsRenderer","TabsRenderer","productInfoRenderer","ProductInfoRenderer","slider","SliderRenderer","combinationProductsRenderer","CombinationProductsRenderer","RenderRelatedProducts","getGesamtwerkTab","getAutorenInfoTab","getRezensionenTab","getCombinationProducts","getProductFamily","getTrboProducts","getTrboLastSeenProducts","productGoogleTracking","on","inactiveButtonClickTracking","height","hide","$this","this","$content","linkText","text","document","documentElement","body","animate","scrollTop","offset","top","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","first","switcherClass","hasNoContent","predecessorIds","descandantId","relatedProucts","createRelatedProductsHtml","fillDescendantProductBox","descendantProduct","relatedProducts","descendantLink","BuildRelatedProductClone","predecessorLinks","forEach","link","index","relatedProduct","descendantPrototype","nachauflage_container","getImagePath","authorList","titleMain","edition","publicationYear","seoOptimizedUrlPart","trboId","productFamilyIds","initSwiperLarge","getTopProducts","update","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","eventValue","fixedPriceValue","toFixed","setSlideGroupBig","setSlideGroupSmall","karussellElementsLarge","karussellElementsSmall","swiperElements","carouselbig","carouselsmall","lazyloadKarussell","karussellTop","karussell","getBoundingClientRect","innerHeight","pageYOffset","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","resize","width","params","render","frequency","windowWidth","addEventListener","k","isCentPrice","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.29ed1e52dbbfbc3cf041.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\t15: 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([279,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","declare var dataLayer: any[];\r\n\r\n/**\r\n * Klick auf Express-Kauf-Button im inaktiven Zustand\r\n */\r\nexport function inactiveButtonClickTracking() {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'express-kauf',\r\n eventLabel: 'button-click_inactive',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'express-kauf' + '/' + 'button-click_inactive', 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Klick auf Express-Kauf-Button im aktiven Zustand\r\n */\r\nexport function activeButtonClickTracking() {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'express-kauf',\r\n eventLabel: 'button-click_active',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'express-kauf' + '/' + 'button-click_active', 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\r\n}\r\n\r\n/**\r\n * Abgeschlossene Konfiguration der Express-Kauf-Daten in Meine Daten\r\n */\r\nexport function saveConfigTracking() {\r\n dataLayer.push({\r\n event: 'event',\r\n eventCategory: 'user data',\r\n eventAction: 'express-kauf',\r\n eventLabel: 'config_done',\r\n });\r\n\r\n dataLayer.push({\r\n event: 'econdaEvent',\r\n ecCustomProperties: {\r\n Target: ['user data', 'express-kauf' + '/' + 'config_done', 0, 'd'],\r\n rqtype: 'hiddenpi',\r\n },\r\n });\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","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\nimport { inactiveButtonClickTracking } from '../OneClickCheckout/oneClickCheckoutTracking';\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 * Track Event wenn der inaktive Express-Kauf angeklickt wird\r\n *\r\n */\r\n $('a.inactive_express').on('click', function() {\r\n inactiveButtonClickTracking();\r\n });\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 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","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\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 }\r\n else if (windowWidth <= 1200) {\r\n setSlideGroupBig = 3;\r\n setSlideGroupSmall = 1;\r\n }\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\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\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 {\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).find('.swiper-wrapper').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 {\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).find('.swiper-wrapper').removeClass('hide');\r\n return swiper;\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 * 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":""}