PageSourceSearch

https://www.kiwi-space.de/_astro/cart.BddRzh9w.js

js kiwi-space.de collected 2026-09-26 15:03:30 UTC 21,730 bytes, 161 lines download raw bytes

1globalThis.process??={},globalThis.process.env??={};import{t as e}from"./notification.BTtIu9l4.js";import{b as t,i as n,m as r}from"./store.CyWqYA5G.js";import{a as i,t as a}from"./get-deliverability.vtzkdskv.js";import{n as o,t as s}from"./imageservice.DfKtKgks.js";import{t as c}from"./quantity-control.ocJ876iS.js";import{n as l}from"./datalayer.Ct9Q_26a.js";import{n as u}from"./prefetch.BvVJ_NFL.js";var d=(function(){var e=window.MutationObserver||window.WebKitMutationObserver;return function(t,n){if(!(!t||t.nodeType!==1))if(e){var r=new e(n);return r.observe(t,{childList:!0,subtree:!0}),r}else window.addEventListener&&(t.addEventListener(`DOMNodeInserted`,n,!1),t.addEventListener(`DOMNodeRemoved`,n,!1))}})(),f={async init(){try{let e=await fetch(`/api/tracking/cart`,{method:`GET`,credentials:`include`});if(!e.ok){console.warn(`Failed to fetch cart data for tracking:`,e.status);return}let t=await e.json();t.success&&t.cartData&&(window.dataLayer=window.dataLayer||[],window.dataLayer.push(t.cartData),console.log(`Cart tracking data added to dataLayer:`,t.cartData))}catch(e){console.warn(`Error fetching cart data for tracking:`,e)}},async refresh(){await this.init()},async pushViewCart(){try{let e=await fetch(`/api/tracking/cart`,{method:`GET`,credentials:`include`});if(!e.ok){console.warn(`Failed to fetch cart data for view_cart tracking:`,e.status);return}let t=await e.json();t.success&&t.cartData&&(window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:`view_cart`,...t.cartData}))}catch(e){console.warn(`Error fetching cart data for view_cart tracking:`,e)}}};document.readyState===`loading`?document.addEventListener(`DOMContentLoaded`,()=>{f.init()}):f.init();var p={vars:{componentQuery:`*[data-js=offcanvas]`,bodyQuery:`*[data-offcanvas-body]`,closeQuery:`*[data-offcanvas-close]`,idAttribute:`data-offcanvas-id`,triggerOpenIdAttribute:`data-offcanvas-trigger-open-id`,scrollToTopAttribute:`data-offcanvas-scroll-top-on-change`,setInitialCartLayerDataAttribute:`data-offcanvas-set-cart-layer-data`,openInitially:`data-offcanvas-open-initially`,showClass:`offcanvas--show`,htmlTagShowClass:`offcanvas-is-visible`},init(){p.addEventTrigger()},addEventTrigger(){document.body.addEventListener(`click`,e=>{if(e.pointerId===-1)return!1;let t=e.target||e.currentTarget;p.clickOutside(t)});let e=document.querySelectorAll(`*[${p.vars.triggerOpenIdAttribute}]`);if(e.length===0)return!1;for(let t of e)t.addEventListener(`click`,e=>{e.preventDefault();let n=t.getAttribute(p.vars.triggerOpenIdAttribute);p.closeAll(),p.open(n);let r=document.querySelector(`*[${p.vars.idAttribute}="${n}"]`);r&&r.getAttribute(p.vars.setInitialCartLayerDataAttribute)===`true`&&f.pushViewCart()});let t=document.querySelectorAll(p.vars.closeQuery);if(t.length===0)return!1;for(let e of t)e.addEventListener(`click`,()=>{p.closeAll()});let n=document.querySelectorAll(p.vars.componentQuery);for(let e of n){let t=1;if(e.getAttribute(p.vars.scrollToTopAttribute)===`true`&&d(e,()=>{t%2==0&&e.classList.contains(p.vars.showClass)&&window.scroll({top:0,behavior:`smooth`}),t++}),e.getAttribute(p.vars.openInitially)===`true`){let t=e.getAttribute(p.vars.idAttribute);p.open(t)}}},clickOutside(e){let t=e.closest(p.vars.componentQuery),n=e.closest(`*[${p.vars.triggerOpenIdAttribute}]`);!t&&!n&&p.closeAll()},closeAll(){let e=document.querySelectorAll(p.vars.componentQuery);if(e.length===0)return!1;for(let t of e)t.classList.remove(p.vars.showClass),document.documentElement.classList.remove(p.vars.htmlTagShowClass)},open(e=``){let t=document.querySelector(`*[${p.vars.idAttribute}="${e}"]`);if(!t)return!1;t.getAttribute(p.vars.setInitialCartLayerDataAttribute)===`true`&&!_.vars.dataInitialized&&_.setInitialCartLayerData(),t.classList.add(p.vars.showClass),document.documentElement.classList.add(p.vars.htmlTagShowClass)}},m=class{constructor(e){this.data=e}get id(){return this.data.id||``}get title(){return this.data.label||``}get quantity(){return this.data.quantity||``}get price(){return this.data.price?.totalPrice?.toFixed(2).replace(`.`,`,`)||``}get unitPrice(){return`${this.data.price?.unitPrice.toFixed(2).replace(`.`,`,`)||``}`}get deliveryTime(){return a(this.deliveryMessage,``,this.reportingKey,this.isEmbargoProduct,this.releaseDate,this.formattedReleaseDate,this.type,this.stock).message||``}get cover(){return this.data.payload?.customFields?.av_middleware_integration_coverlink||``}get authorNames(){return this.data.payload?.customFields?.av_middleware_integration_author_names||``}get seoUrl(){return this.data.payload?.customFields?.av_middleware_integration_frontend_url||``}get type(){return this.data.payload?.customFields?.av_middleware_integration_producttype||this.data.type||``}get trackingData(){let e=this.seoUrl.slice(-13),t=this.data?.label?.replace(/'/g,`´`)||``,n={id:this.data.id,item_id:e,item_name:t,price:this.data.price.unitPrice,quantity:this.data.price.quantity};return JSON.stringify(n).replace(/"/g,`'`)}getPictureHTML(e,t,n=`lazy`){return`
2        <picture>
3            ${o({min:1280,src:this.cover,width:88,format:`best`})}
4            ${o({min:0,src:this.cover,width:72,format:`best`})}
5            <img src="${s({src:this.cover,width:88,format:`jpg`,noRetina:!0})}" alt="${this.title}" width="${e}" height="${t}" loading=${n} decoding="async">
6        </picture>
7        `}get maxPurchase(){return this.data.quantityInformation?.maxPurchase||1}get authors(){return this.data.authors||`CLARE MACHINTOSH ##static##`}
7get shopId(){return this.data.id||``}get deliveryMessage(){return this.data.payload?.customFields?.av_middleware_integration_libri_delivery_message||``}get isEmbargoProduct(){return this.data.payload?.customFields?.av_middleware_integration_is_embargo_product||``}get reportingKey(){return this.data.payload?.customFields?.av_middleware_integration_libri_reporting_key||``}get releaseDate(){return this.data.payload?.customFields?.av_middleware_integration_release_date||``}get formattedReleaseDate(){let e=this.data.payload?.customFields?.av_middleware_integration_release_date||``;return e?new Date(e).toLocaleString(`de-DE`,{year:`numeric`,month:`2-digit`,day:`2-digit`,timeZone:`Europe/Berlin`}):null}get url(){return this.data.payload?.customFields?.av_middleware_integration_frontend_url?`/buch/${this.data.payload.customFields.av_middleware_integration_frontend_url}`:null}get getEBookFileFormat(){return this.type===`E-Book`?`EPUB`:``}get stock(){return this.data?.payload?.stock||0}},h=class{constructor(e){this.data=e}get products(){let e=this.data.lineItems||[],t=[];if(e.length>0)for(let n of e)t.push(new m(n));return t}get productQuantity(){return this.products?.length||0}get netPrice(){return this.data.price?.netPrice?.toFixed(2).replace(`.`,`,`)||``}get totalPrice(){return this.data.price?.totalPrice?.toFixed(2).replace(`.`,`,`)||``}get shippingCosts(){return this.data.deliveries[0]?.shippingCosts?.totalPrice?.toFixed(2).replace(`.`,`,`)||`0,00`}get shippingMethod(){return this.data.deliveries[0]?.shippingMethod?.name||``}};function g(e=null){return e?e.addEventListener(`mouseover`,e=>{let t=e.target;if(t.closest(`a`)){let e=t.closest(`a`).href;e?.length>0&&u(e)}}):``}var _={vars:{componentQuery:`*[data-js=cart]`,addVoucherButtonQuery:`*[data-cart-voucher-button]`,voucherInputQuery:`*[data-cart-voucher-input]`,reloadLinkQuery:`*[data-cart-reload-link]`,cartNumberAttribute:`data-cart-number`,addItemTriggerAttribute:`data-cart-add`,productItemTriggerAttribute:`data-cart-product`,removeItemTriggerAttribute:`data-cart-remove`,removeAllItemsTriggerAttribute:`data-cart-remove-all`,addItemApi:`/api/cart/additem?id=`,removeItemApi:`/api/cart/removeitem?id=`,removeAllItemsApi:`/api/cart/deletecart`,getItemsApi:`/api/cart/getcart`,updateItemApi:`/api/cart/updateitem`,addPromotionApi:`/api/cart/addpromotion?id=`,contextToken:`sw-context-token`,lastContextToken:`sw-last-context-token`,loginToken:`sw-login-token`,lastLoginToken:`sw-last-login-token`,offcanvasId:`cart`,dataInitialized:!1,alertText:{update:`Warenkorb aktualisiert.`,add:`1 Produkt zum Warenkorb hinzugefügt.`,remove:`1 Produkt vom Warenkorb entfernt.`,removeAll:`Warenkorb geleert`,noProducts:`Keine Produkte im Warenkorb.`,addVoucher:`Gutschein hinzugefügt.`,voucherNotFound:`Gutschein nicht gefunden.`},loadingIconSvg:`
8            <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" width="50"
9             height="50"
10             style="shape-rendering: auto; display: block; background: rgb(255, 255, 255);margin: 50px auto;">
11                <g>
12                    <circle cx="50" cy="50" fill="none" stroke="#000000" stroke-width="10" r="35"
13                            stroke-dasharray="164.93361431346415 56.97787143782138">
14                        <animateTransform attributeName="transform" type="rotate" repeatCount="indefinite" dur="1s"
15                                          values="0 50 50;360 50 50" keyTimes="0;1"></animateTransform>
16                    </circle>
17                    <g></g>
18                </g>
19            </svg>
20        `,templates:{base(e,t=``){let n=new h(e);if(n.products.length===0)return`
21                        <div class="offcanvas__body__no-items-in-cart-text"><br>${_.vars.alertText.noProducts}
22                            <br>
23                            <br>
24                            <a href="/buch" class="offcanvas__body__explore-more-link">Jetzt Bücher entdecken</a>    
25                        </div>
26                    `;let r=``;for(let e of n.products){let t=e.type;t===`promotion`?r+=`
27                            <li>
28                                ${_.vars.templates.promotion(e)}
29                            </li>
30                        `:t===`ebook`||(r+=`
31                            <li>
32                                ${_.vars.templates.default(e)}
33                            </li>
34                        `)}return`
35                <!--<div class="offcanvas__body__product-quantity">
36                    ${n.productQuantity} Artikel
37                </div>-->
38                <ul>
39                    ${r}
40                </ul>
41                <div class="offcanvas__body__summary"> 
42                    <div class="offcanvas__body__summary__subtotal">
43                        <span>
44                            Zwischensumme
45                        </span>
46                        <span>
47                            ${n.totalPrice} €
48                        </span>
49                    </div>
50                    <div class="offcanvas__body__summary__shipping">
51                        <span>
52                            Versandkosten
53                            <span></span>
54                        </span>
55                        <span>
56                            ${n.shippingCosts} €
57                        </span>
58                    </div>
59                    <div class="offcanvas__body__summary__total">
60                        <span>
61                            Gesamtsumme
62                            <span>inkl. MwSt.</span>
63                        </span>
64                        <span>
65                            ${n.totalPrice} €
66                        </span>
67                    </div>
68                    <div class="offcanvas__body__summary__actions">
69                        <!--
70                        <div class="offcanvas__body__summary__actions__voucher">
71                            <div class="form">
72                                <div class="input w24">
73                                    <label>
74                                        <input type="text" data-cart-voucher-input value="" oninput="this.setAttribute('value', this.value)">
75                                        <span>Gutschein-Code eingeben</span>
76                                    </label>
77                                </div>
78                                <button data-cart-voucher-button>
79                                    <svg width="12" height="12" xmlns="http://www.w3.org/2000/svg"><path d="m6 1 5 5-5 5m5-5H1" stroke="#FFF" stroke-width="1.5" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round"/></svg>
80                                </button>
81                            </div>
82                        </div>
83                        -->
84
85                        ${_.getCheckoutButtonsHtml()}
86                        
87                        <a href="/shop/cart" class="button button--outlined">Warenkorb ansehen</a>
88                    </div>
89                </div>
90            `},default(e){let t=e.title,n=e.getPictureHTML(72,109);e.url&&(t=` 
91                        <a href="${e.url}" data-astro-prefetch="hover">
92                            ${t}
93                        </a>
94                    `,n=` 
95                        <a href="${e.url}" data-astro-prefetch="hover">
96                            ${n}
97                        </a>
98                    `);let r=``;e.getEBookFileFormat&&(r=`(${e.getEBookFileFormat})`);let i=e.deliveryTime?.match(/\d{2}\.\d{2}\.\d{4}/),a=``;i&&(a=`cart-item__info__description__delivery-status--purple`);let o=e.deliveryTime;return o.includes(`Lieferung`)&&!o.includes(`Lieferung ab`)&&e.reportingKey!==180&&(o=o.replace(`Lieferung`,`Lieferung ab`)),`
99                    <div class="cart-item cart-item--${e.type}">
100                        <figure class="cart-item__image">
101                            ${n}
102                        </figure>
103                        <div class="cart-item__info">
104                            <div class="cart-item__info__description">
105                                <div class="cart-item__info__description__authors">
106                                    ${e.authorNames}
107                                </div>
108                                <div class="cart-item__info__description__title">
109                                    ${t} 
110                                </div>
111                                <div class="cart-item__info__description__product-type">
112                                    ${e.type}
113                                    ${r}
114                                </div>
115                                <div class="cart-item__info__description__delivery-status ${a}">
116                                    ${o}
117                                </div>
118                            </div>
119                            <div class="cart-item__info__quantity">
120                                <div data-js="quantity-control" class="quantity-control">
121                                    <button data-quantity-control-decrease data-quantity-control-button class="quantity-control__decrease-button">−</button>
122                                    <label>
123                                        <input data-quantity-control-input aria-label="Anzahl des Produkts" class="quantity-control__input" type="number" data-cart-product="{item_id: '${e?.data?.payload?.productNumber}', item_name: '${e?.title}', price: '${e?.unitPrice}'}" name="${e.id}" value="${e.quantity}" min="1" max="${e.maxPurchase}">
124                                    </label>
125                                    <button data-quantity-control-increase data-quantity-control-button class="quantity-control__increase-button">+</button>
126                                </div>
127                            </div>
128                            <div class="cart-item__info__price">
129                                ${e.price} €
130                            </div>
131                            <div class="cart-item__info__unit-price">
132                                ${e.unitPrice} € / Stück
133                            </div>
134                            <div class="cart-item__info__actions">
135                                <button data-cart-remove="${e.trackingData}" class="cart-item__info__actions__remove">Entfernen</button>
136                            </div>
137                        </div>
138                    </div>
139                `},promotion(e){return`
140                    <div class="cart-item cart-item--${e.type}">
141                        <div class="cart-item__info">
142                            <div class="cart-item__info__description">
143                                <div class="cart-item__info__description__title">
144                                    ${e.title}
145                                </div>
146                            </div>
147                            <div class="cart-item__info__price">
148                                ${e.price} €
149                            </div>
150                            <div class="cart-item__info__actions">
151                                <button data-cart-remove="${e.trackingData}" class="cart-item__info__actions__remove">Entfernen</button>
152                            </div>
153                        </div>
154                    </div>
155                `}},cartOffcanvasTimeout:null},init(){_.watchCartNumberAndSyncWithBadge(),c.init(),_.addEventTrigger()},watchCartNumberAndSyncWithBadge(){let e=document.querySelector(`*[${_.vars.cartNumberAttribute}]`);if(!e)return!1;t.subscribe(t=>{e.setAttribute(_.vars.cartNumberAttribute,t.shopItems)})},addEventTrigger(){let e=document.body;e.addEventListener(`click`,e=>{let t=e.target;_.eventHandler(t)}
155),e.addEventListener(`keydown`,e=>{let t=e.key;if(t===`Enter`){let n=e.target;_.eventHandler(n,t)}}),e.addEventListener(`input`,e=>{let t=e.target;if(t.closest(c.vars.componentQuery)){let n=t.name,r=parseInt(t.value),i=e.detail?.trigger||`update_cart`,a=t.getAttribute(`data-cart-product`).match(/(\w+):\s*'([^']+)'/g),o={};a&&a.forEach(e=>{let[t,n]=e.split(`:`).map(e=>e.trim());o[t]=n.replace(/'/g,``)});let s={id:n,item_id:o?.item_id,item_name:o?.item_name,price:o?.price?.replace(`,`,`.`),quantity:r,trigger:i};_.updateItem(s,750)}}),g(document.querySelector(`*[${p.vars.idAttribute}=${_.vars.offcanvasId}]`))},eventHandler(e,t=``){if(e.closest(`*[${_.vars.addItemTriggerAttribute}]`))_.addItem(e.closest(`*[${_.vars.addItemTriggerAttribute}]`).getAttribute(_.vars.addItemTriggerAttribute));else if(e.closest(`*[${_.vars.removeItemTriggerAttribute}]`))_.removeItem(e.closest(`*[${_.vars.removeItemTriggerAttribute}]`).getAttribute(_.vars.removeItemTriggerAttribute));else if(e.closest(`*[${_.vars.removeAllItemsTriggerAttribute}]`))_.removeAllItems();else if(e.closest(_.vars.addVoucherButtonQuery)||e.closest(_.vars.voucherInputQuery)&&t===`Enter`){let e=document.querySelector(_.vars.voucherInputQuery).value;_.addVoucher(e)}},async setInitialCartLayerData(){let e=await(await fetch(`${_.vars.getItemsApi}`)).json();e.lineItems&&r(e.lineItems.length),_.updateCartOffcanvas(e,``,750),_.vars.cartLayerInitialized=!0},async addItem(t,{redirectToCart:n=!1}={}){let i=JSON.parse(t.replace(/'/g,`"`)),a=i.id;n||(_.showLoadingAnimation(),setTimeout(()=>{_.vars.dataInitialized=!0,p.open(_.vars.offcanvasId);let e=document.querySelector(`.offcanvas__body__no-items-in-cart-text`);e&&e.remove()},50));let o=await fetch(`${_.vars.addItemApi}${a}&qty=1`),s=``,c=!1;if(o)if(s=await o.json(),o.status!=`200`)e.show({gravity:`top`,position:`right`,errorcode:s,type:`error`}),s=await _.getCurrentCartData();else{let e=1;s.lineItems&&(e=s.lineItems.length),r(e),_.pushDataLayer(`add_to_cart`,i),c=!0}n||window.location.pathname===`/shop/cart`?_.reloadCartPage():(_.updateCartOffcanvas(s,`add`),c&&e.show({gravity:`top`,position:`right`,text:_.vars.alertText.add,type:`success`}))},pushDataLayer(e,t){t.item_source=i(location.pathname),t.item_source_path=`https://www.kiwi-space.de`+location.pathname;let n=l(e,t);n&&(n.path=window.location.pathname,window.dataLayer?.push(n))},async removeItem(e){let t=JSON.parse(e.replace(/'/g,`"`)),n=t.id,i=await(await fetch(`${_.vars.removeItemApi}${n}`)).json(),a=1;i.lineItems&&(a=i.lineItems.length),r(a),_.pushDataLayer(`remove_from_cart`,t),window.location.pathname===`/shop/cart`?_.reloadCartPage():_.updateCartOffcanvas(i)},async removeAllItems(){await fetch(`${_.vars.removeAllItemsApi}`),r(0),window.location.pathname===`/shop/cart`?_.reloadCartPage():_.updateCartOffcanvas(null)},async updateItem(e,t=0){let n=await(await fetch(`${_.vars.updateItemApi}?id=${e.id}&qty=${e.quantity}`)).json(),i=1;n.lineItems&&(i=n.lineItems.length),r(i),_.pushDataLayer(e.trigger,e),window.location.pathname===`/shop/cart`?_.reloadCartPage():(_.updateCartOffcanvas(n,``,t),_.vars.dataInitialized=!0,p.open(_.vars.offcanvasId))},async addVoucher(t){let n=await(await fetch(`${_.vars.addPromotionApi}${t}`)).json();n.errors[`promotion-not-found`]||n.errors[`auto-promotion-not-found-promotion-`]||n.errors.length===0?e.show({gravity:`top`,position:`right`,text:_.vars.alertText.voucherNotFound,type:`error`}):(window.location.pathname===`/shop/cart`?_.reloadCartPage():e.show({gravity:`top`,position:`right`,text:_.vars.alertText.addVoucher,type:`success`}),_.updateCartOffcanvas(n))},updateCartOffcanvas(e=null,t=``,n=0){let r=document.querySelector(`*[${p.vars.idAttribute}=${_.vars.offcanvasId}]`);if(!r)return!1;let i=r.querySelector(p.vars.bodyQuery);if(!i)return!1;clearTimeout(_.vars.cartOffcanvasTimeout),_.vars.cartOffcanvasTimeout=setTimeout(()=>{i.innerHTML=_.vars.templates.base(e,t)},n)},reloadCartPage(){window.location.href=`/shop/cart`},async getCurrentCartData(){return await(await fetch(`${_.vars.getItemsApi}`)).json()},showLoadingAnimation(){let e=document.querySelector(`*[${p.vars.idAttribute}=${_.vars.offcanvasId}]`).querySelector(p.vars.bodyQuery);e.innerHTML=_.vars.loadingIconSvg},getCheckoutButtonsHtml(){return n(),`
156                <div>
157                    <a href="/shop/checkout/confirm" class="button datalayer-to-checkout-button">
158                        Zur Kasse
159                    </a>
160                </div>
161            `}};export{d as a,p as i,g as n,h as r,_ as t};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.