https://www.meinherzschlag.de/cdn/shop/t/21/assets/mhsys-produkt.js?v=115858709354194789181790149705
1(()=>{"use strict";const text=(schluessel,rueckfall)=>window.mhsysTexte&&window.mhsysTexte[schluessel]||rueckfall;class MhsysGalerie{constructor(wurzel){if(this.wurzel=wurzel,this.bilder=[...wurzel.querySelectorAll("[data-mhsys-galerie-bild]")],this.thumbs=[...wurzel.querySelectorAll("[data-mhsys-galerie-thumb]")],this.buehne=wurzel.querySelector("[data-mhsys-galerie-buehne]"),this.zoomKnopf=wurzel.querySelector("[data-mhsys-galerie-zoom]"),this.zoomText=wurzel.querySelector("[data-mhsys-galerie-zoomtext]"),this.spur=wurzel.querySelector("[data-mhsys-galerie-spur]"),this.punkte=[...wurzel.querySelectorAll("[data-mhsys-galerie-punkt]")],this.zaehler=wurzel.querySelector("[data-mhsys-galerie-zaehler]"),this.aktiv=0,this.thumbs.forEach(t=>t.addEventListener("click",()=>this.zeigen(Number(t.dataset.mhsysGalerieThumb)))),this.punkte.forEach(p=>p.addEventListener("click",()=>this.zeigen(Number(p.dataset.mhsysGaleriePunkt)))),this.zoomKnopf&&this.zoomKnopf.addEventListener("click",()=>this.zoomen()),this.buehne&&this.buehne.addEventListener("click",e=>{e.target.closest("[data-mhsys-galerie-zoom]")||e.target.closest("[data-mhsys-galerie-punkt]")||e.target.closest("[data-mhsys-galerie-bild]")&&this.zoomen()}),this.spur&&this.bilder.length>1&&typeof IntersectionObserver<"u"){const beobachter=new IntersectionObserver(eintraege=>{eintraege.forEach(e=>{e.isIntersecting&&this.markieren(this.bilder.indexOf(e.target))})},{root:this.spur,threshold:.6});this.bilder.forEach(b=>beobachter.observe(b))}this.vorschauVerbinden(),this.wischHinweis()}wischHinweis(){if(!this.spur||this.bilder.length<2||!this.wischbar()||window.matchMedia("(prefers-reduced-motion: reduce)").matches)return;const SCHLUESSEL="mhsysWischHinweis";try{if(sessionStorage.getItem(SCHLUESSEL))return}catch{return}let beruehrt=!1;const stopp=()=>beruehrt=!0;this.spur.addEventListener("pointerdown",stopp,{once:!0,passive:!0}),this.spur.addEventListener("touchstart",stopp,{once:!0,passive:!0});const los=()=>{if(!(beruehrt||document.visibilityState!=="visible"||this.spur.scrollLeft>0)){try{sessionStorage.setItem(SCHLUESSEL,"1")}catch{return}this.spur.style.scrollSnapType="none",this.spur.scrollTo({left:30,behavior:"smooth"}),window.setTimeout(()=>{beruehrt||this.spur.scrollTo({left:0,behavior:"smooth"}),window.setTimeout(()=>this.spur.style.scrollSnapType="",450)},450)}};window.setTimeout(los,1200)}vorschauVerbinden(){if(this.vSpur=this.wurzel.querySelector("[data-mhsys-vorschau-spur]"),!this.vSpur||this.thumbs.length<2)return;const zurueck=this.wurzel.querySelector("[data-mhsys-vorschau-zurueck]"),weiter=this.wurzel.querySelector("[data-mhsys-vorschau-weiter]"),ruhig=()=>window.matchMedia("(prefers-reduced-motion: reduce)").matches,blaettern=richtung=>this.vSpur.scrollBy({left:richtung*this.vSpur.clientWidth*.8,behavior:ruhig()?"auto":"smooth"});if(zurueck&&zurueck.addEventListener("click",()=>blaettern(-1)),weiter&&weiter.addEventListener("click",()=>blaettern(1)),weiter&&(weiter.hidden=this.vSpur.scrollWidth<=this.vSpur.clientWidth+1),typeof IntersectionObserver>"u")return;const erstes=this.thumbs[0],letztes=this.thumbs[this.thumbs.length-1],ende=new IntersectionObserver(eintraege=>{eintraege.forEach(e=>{const ganz=e.intersectionRatio>.95;e.target===erstes&&zurueck&&(zurueck.hidden=ganz),e.target===letztes&&weiter&&(weiter.hidden=ganz)})},{root:this.vSpur,threshold:[0,.95,1]});ende.observe(erstes),ende.observe(letztes)}vorschauZeigen(index){const s=this.vSpur,t=this.thumbs[index];if(!s||!t||s.scrollWidth<=s.clientWidth+1)return;const rand=12,links=t.offsetLeft,rechts=links+t.offsetWidth;let ziel=null;if(links-rand<s.scrollLeft?ziel=links-rand:rechts+rand>s.scrollLeft+s.clientWidth&&(ziel=rechts+rand-s.clientWidth),ziel===null)return;const ruhig=window.matchMedia("(prefers-reduced-motion: reduce)").matches;s.scrollTo({left:Math.max(0,ziel),behavior:ruhig?"auto":"smooth"})}wischbar(){return!!this.spur&&getComputedStyle(this.spur).overflowX!=="visible"}
1markieren(index){index<0||(this.aktiv=index,this.bilder.forEach((b,i)=>b.classList.toggle("is-aktiv",i===index)),this.thumbs.forEach((t,i)=>{const aktiv=i===index;t.classList.toggle("is-aktiv",aktiv),t.setAttribute("aria-pressed",aktiv?"true":"false")}),this.punkte.forEach((p,i)=>{const aktiv=i===index;p.classList.toggle("is-aktiv",aktiv),aktiv?p.setAttribute("aria-current","true"):p.removeAttribute("aria-current")}),this.zaehler&&(this.zaehler.textContent=`${index+1} / ${this.bilder.length}`),this.vorschauZeigen(index))}zeigen(index){if(this.markieren(index),this.wischbar()){const ruhig=window.matchMedia("(prefers-reduced-motion: reduce)").matches,bild=this.bilder[index],links=bild?bild.getBoundingClientRect().left-this.spur.getBoundingClientRect().left+this.spur.scrollLeft:0;this.spur.scrollTo({left:links,behavior:ruhig?"auto":"smooth"})}this.zoomAus()}zuMedium(medienId){if(!medienId)return;const treffer=this.bilder.findIndex(b=>Number(b.dataset.mhsysMedium)===Number(medienId));treffer>=0&&this.zeigen(treffer)}zoomen(){this.vollbild||this.vollbildBauen();const d=this.vollbild;typeof d.showModal=="function"?d.showModal():d.setAttribute("open",""),document.documentElement.classList.add("mhsys-vollbild-offen");const spur=d.querySelector(".mhsys-vollbild__spur");spur.scrollLeft=this.aktiv*spur.clientWidth,this.vollbildZaehlen()}vollbildBauen(){const d=document.createElement("dialog");d.className="mhsys-vollbild",d.setAttribute("aria-label","Produktbilder im Vollbild");const spur=document.createElement("div");spur.className="mhsys-vollbild__spur",this.bilder.forEach(b=>{const img=document.createElement("img");img.className="mhsys-vollbild__bild",img.src=b.dataset.mhsysGross||b.currentSrc||b.src,img.alt=b.alt||"",img.decoding="async",spur.appendChild(img)});const knopf=(klasse,label,zeichen)=>{const k=document.createElement("button");return k.type="button",k.className="mhsys-vollbild__knopf "+klasse,k.setAttribute("aria-label",label),k.textContent=zeichen,k},zu=knopf("mhsys-vollbild__zu mhsys-ueberlage__zu mhsys-ueberlage__zu--foto","Schlie\xDFen","");zu.innerHTML='<svg viewBox="0 0 24 24" fill="currentColor" aria-hidden="true" focusable="false"><path d="M5.05 3.9c.3 0 .6.12.83.35L12 10.37l6.12-6.12a1.17 1.17 0 0 1 1.66 1.66L13.66 12l6.12 6.12a1.17 1.17 0 0 1-1.66 1.66L12 13.66l-6.12 6.12a1.17 1.17 0 0 1-1.66-1.66L10.34 12 4.22 5.88A1.17 1.17 0 0 1 5.05 3.9Z"/></svg>';const zurueck=knopf("mhsys-vollbild__pfeil mhsys-vollbild__pfeil--zurueck","Vorheriges Bild","\u2039"),vor=knopf("mhsys-vollbild__pfeil mhsys-vollbild__pfeil--vor","N\xE4chstes Bild","\u203A"),zahl=document.createElement("div");zahl.className="mhsys-vollbild__zahl",d.append(spur,zu,zahl),this.bilder.length>1?d.append(zurueck,vor):zahl.hidden=!0;const blaettern=richtung=>spur.scrollBy({left:richtung*spur.clientWidth,behavior:"smooth"}),schliessen=()=>{d.close(),document.documentElement.classList.remove("mhsys-vollbild-offen")};zu.addEventListener("click",schliessen),d.addEventListener("cancel",()=>document.documentElement.classList.remove("mhsys-vollbild-offen")),zurueck.addEventListener("click",()=>blaettern(-1)),vor.addEventListener("click",()=>blaettern(1)),d.addEventListener("keydown",e=>{e.key==="ArrowLeft"&&blaettern(-1),e.key==="ArrowRight"&&blaettern(1)}),spur.addEventListener("click",e=>{e.target===spur&&schliessen()}),spur.addEventListener("scroll",()=>this.vollbildZaehlen(),{passive:!0}),d.addEventListener("close",()=>{document.documentElement.classList.remove("mhsys-vollbild-offen"),this.vollbildIndex!==void 0&&this.zeigen(this.vollbildIndex)}),document.body.appendChild(d),this.vollbild=d}vollbildZaehlen(){const spur=this.vollbild.querySelector(".mhsys-vollbild__spur"),i=Math.round(spur.scrollLeft/Math.max(1,spur.clientWidth));this.vollbildIndex=Math.min(Math.max(i,0),this.bilder.length-1);const zahl=this.vollbild.querySelector(".mhsys-vollbild__zahl");zahl&&(zahl.textContent=this.vollbildIndex+1+" / "+this.bilder.length)}zoomAus(){this.wurzel.classList.contains("is-zoom")&&(this.wurzel.classList.remove("is-zoom"),this.zoomKnopf&&this.zoomKnopf.setAttribute("aria-pressed","fal
1se"),this.zoomText&&(this.zoomText.textContent="Zum Zoomen tippen"))}}class MhsysVarianten{constructor(seite,galerie){if(this.seite=seite,this.galerie=galerie,this.schnellansicht=seite.hasAttribute("data-mhsys-schnellansicht-produkt"),this.bereich=seite.querySelector("[data-mhsys-varianten]"),this.feld=seite.querySelector("[data-mhsys-variante-feld]"),!this.bereich||!this.feld)return;const daten=this.bereich.querySelector("[data-mhsys-varianten-daten]");try{this.varianten=JSON.parse(daten.textContent)}catch(e){console.error("Varianten konnten nicht gelesen werden:",e);return}if(this.eingaben=[...this.bereich.querySelectorAll("[data-mhsys-option-eingabe]")],this.eingaben.forEach(el=>el.addEventListener("change",()=>this.wechseln())),this.bereit=!0,this.lieferbarkeitMarkieren(),this.galerie&&new URLSearchParams(location.search).has("variant")){const start=this.varianten.find(v=>String(v.id)===String(this.feld.value));start&&this.galerie.zuMedium(start.bild)}}gewaehlteWerte(){const werte=[];return this.bereich.querySelectorAll("[data-mhsys-option-eingabe]").forEach(el=>{if(el.checked){const pos=Number(el.dataset.mhsysOptionEingabe)-1;werte[pos]=el.value}}),werte}passende(werte){return this.varianten.filter(v=>werte.every((w,i)=>w==null||v.optionen[i]===w))}findeVariante(werte){return this.varianten.find(v=>v.optionen.every((o,i)=>o===werte[i]))}lieferbarkeitMarkieren(){const werte=this.gewaehlteWerte();this.bereich.querySelectorAll("[data-mhsys-option-eingabe]").forEach(el=>{const pos=Number(el.dataset.mhsysOptionEingabe)-1,probe=werte.slice();probe[pos]=el.value;const moeglich=this.passende(probe).some(v=>v.lieferbar),knopf=el.nextElementSibling;knopf&&knopf.classList.toggle("is-vergriffen",!moeglich)})}wechseln(){const werte=this.gewaehlteWerte(),variante=this.findeVariante(werte);if(this.lieferbarkeitMarkieren(),this.bereich.querySelectorAll("[data-mhsys-option-wert]").forEach(el=>{const pos=Number(el.dataset.mhsysOptionWert)-1;werte[pos]&&(el.textContent=werte[pos])}),!variante){this.knopfSperren(text("nichtVerfuegbar","Nicht verf\xFCgbar"));return}this.feld.value=variante.id,this.feld.dispatchEvent(new Event("change",{bubbles:!0})),this.preiseSetzen(variante),this.knopfSetzen(variante),this.mengeBegrenzen(variante),this.galerie&&this.galerie.zuMedium(variante.bild),this.urlSetzen(variante),this.lagerNachziehen(variante),document.dispatchEvent(new CustomEvent("mhsys:variante",{detail:{variante,feld:this.feld}}))}preiseSetzen(variante){const preis=this.seite.querySelector("[data-mhsys-preis]"),alt=this.seite.querySelector("[data-mhsys-preis-alt]"),grund=this.seite.querySelector("[data-mhsys-grundpreis]"),leistePreis=document.querySelector("[data-mhsys-leiste-preis]");preis&&(preis.textContent=variante.preis),leistePreis&&(leistePreis.textContent=variante.preis),alt&&(alt.textContent=variante.vergleichspreis||"",alt.hidden=!variante.vergleichspreis),grund&&(grund.textContent=variante.grundpreis||"");const leisteGrund=document.querySelector("[data-mhsys-leiste-grundpreis]");leisteGrund&&(leisteGrund.textContent=variante.grundpreis||"",leisteGrund.hidden=!variante.grundpreis);const leisteVariante=document.querySelector("[data-mhsys-leiste-variante]");if(leisteVariante){const name=variante.optionen.join(" \xB7 "),gleich=t=>String(t||"").replace(/\s/g,"").replace(/,00/g,"").toLowerCase(),istPreis=gleich(name)===gleich(variante.preis);leisteVariante.textContent=istPreis?"":name,leisteVariante.hidden=istPreis}}knopfSetzen(variante){const knopf=this.seite.querySelector("[data-mhsys-kaufknopf]"),knopfText=this.seite.querySelector("[data-mhsys-kaufknopf-text]"),leiste=document.querySelector("[data-mhsys-leiste-kaufen]"),leisteText=document.querySelector("[data-mhsys-leiste-text]"),beschriftung=variante.lieferbar?text("inDenWarenkorb","In den Warenkorb"):text("ausverkauft","Ausverkauft"),beschriftungLeiste=variante.lieferbar?text("inDenWarenkorbLeiste",text("inDenWarenkorb","In den Warenkorb")):text("ausverkauft","Ausverkauft");[knopf,leiste].forEach(k=>{k&&(k.disabled=!variante.lieferbar)}),knopfText&&(knopfText.textContent=beschriftung),leisteText&&(leisteText.textContent=beschriftungLeiste)}mengeBegrenzen(variante){const feld=this.seite.querySelector("[data-mhsys-menge-feld]");if(!(!feld||variante.max===void 0)){if(variante.max===null)feld.removeAttribute("max");else{const max=Math.max(Number(feld.min)||1,variante.max);feld.max=max,Number(feld.value)>max&&(feld.value=max)}feld.dispatchEvent(new Event("change",{bubbles:!0}))}}lagerNachziehen(variante){const boxen=[...this.seite.querySelectorAll("[data-mhsys-lagerstatus]")];if(!boxen.length||variante.lager===void 0)return;const soll=String(variante.lager);if(boxen.every(b=>b.dataset.mhsysLager===soll))return;const section=boxen[0].dataset.mhsysSection;if(!section)return;
1boxen.forEach(b=>b.dataset.mhsysLager=soll);const nr=this.lagerNr=(this.lagerNr||0)+1,url=new URL(this.seite.dataset.mhsysProduktUrl||window.location.href,window.location.origin);url.searchParams.set("variant",variante.id),url.searchParams.set("section_id",section),fetch(url.toString()).then(r=>r.ok?r.text():"").then(html=>{if(!html||nr!==this.lagerNr)return;const neu=[...new DOMParser().parseFromString(html,"text/html").querySelectorAll("[data-mhsys-lagerstatus]")];boxen.forEach((box,i)=>{!neu[i]||!document.contains(box)||(box.replaceChildren(...[...neu[i].childNodes].map(n=>document.adoptNode(n))),box.querySelectorAll("script").forEach(alt=>{const s=document.createElement("script");s.textContent=alt.textContent,alt.replaceWith(s)}))})}).catch(e=>console.error("Lagerstatus:",e))}knopfSperren(meldung){const knopf=this.seite.querySelector("[data-mhsys-kaufknopf]"),knopfText=this.seite.querySelector("[data-mhsys-kaufknopf-text]");knopf&&(knopf.disabled=!0),knopfText&&(knopfText.textContent=meldung)}urlSetzen(variante){if(this.schnellansicht||!window.history||!window.history.replaceState)return;const url=new URL(window.location.href);url.searchParams.set("variant",variante.id),window.history.replaceState({},"",url.toString())}}function mengeVerbinden(seite){const feld=seite.querySelector("[data-mhsys-menge-feld]");if(!feld)return;const knoepfeSetzen=()=>{const wert=Number(feld.value)||1,min=Number(feld.min)||1,max=feld.max?Number(feld.max):1/0;seite.querySelectorAll("[data-mhsys-menge]").forEach(k=>{k.disabled=Number(k.dataset.mhsysMenge)>0?wert>=max:wert<=min})};feld.addEventListener("change",()=>{const min=Number(feld.min)||1;Number(feld.value)>=min||(feld.value=min)}),feld.addEventListener("change",knoepfeSetzen),feld.addEventListener("input",knoepfeSetzen),knoepfeSetzen(),seite.querySelectorAll("[data-mhsys-menge]").forEach(knopf=>{knopf.addEventListener("click",()=>{const schritt=Number(knopf.dataset.mhsysMenge)||1,min=Number(feld.min)||1,max=feld.max?Number(feld.max):1/0,neu=Math.min(max,Math.max(min,(Number(feld.value)||min)+schritt));feld.value=neu,feld.dispatchEvent(new Event("change",{bubbles:!0}))})})}function akkordeonsVerbinden(wurzel){wurzel.querySelectorAll("[data-mhsys-akkordeon]").forEach(kopf=>{kopf.dataset.mhsysBereit||(kopf.dataset.mhsysBereit="1",kopf.addEventListener("click",()=>{const ziel=document.getElementById(kopf.getAttribute("aria-controls"));if(!ziel)return;const offen=kopf.getAttribute("aria-expanded")==="true";kopf.setAttribute("aria-expanded",offen?"false":"true"),ziel.hidden=offen}))})}function teilenVerbinden(wurzel){const leiste=wurzel.querySelector("[data-mhsys-teilen]");if(!leiste)return;const knopf=leiste.querySelector("[data-mhsys-teilen-kopieren]");if(!knopf)return;const url=leiste.dataset.mhsysTeilenUrl||window.location.href,beschriftung=knopf.querySelector("[data-mhsys-teilen-kopiertext]"),ruhetext=beschriftung?beschriftung.textContent.trim():"";if(!!!(navigator.clipboard&&navigator.clipboard.writeText))return;knopf.hidden=!1;let zurueck=null;knopf.addEventListener("click",()=>{navigator.clipboard.writeText(url).then(()=>{beschriftung&&(beschriftung.textContent=text("kopiert","Link kopiert"),knopf.classList.add("is-fertig"),window.clearTimeout(zurueck),zurueck=window.setTimeout(()=>{beschriftung.textContent=ruhetext,knopf.classList.remove("is-fertig")},2e3))}).catch(()=>{beschriftung&&(beschriftung.textContent=text("kopierenFehlt","Kopieren ging nicht"))})})}function kaufleisteVerbinden(seite){const leiste=document.querySelector("[data-mhsys-kaufleiste]"),block=seite.querySelector("[data-mhsys-kaufblock]");if(!leiste||!block)return;const knopf=leiste.querySelector("[data-mhsys-leiste-kaufen]"),formular=seite.querySelector(".mhsys-kauf__formular");if(knopf&&formular){const sichtbar=el=>el&&!el.hidden&&el.offsetParent!==null;knopf.addEventListener("click",()=>{const ziel=[...formular.querySelectorAll('[type="submit"]:not([hidden])')].find(sichtbar);if(ziel){ziel.click();return}typeof formular.requestSubmit=="function"?formular.requestSubmit():formular.dispatchEvent(new Event("submit",{cancelable:!0,bubbles:!0}))})}if(typeof IntersectionObserver>"u")return;new IntersectionObserver(eintraege=>{const e=eintraege[0],vorbei=!e.isIntersecting&&e.boundingClientRect.top<0;leiste.hidden=!1,leiste.classList.toggle("is-sichtbar",vorbei),document.documentElement.classList.toggle("mhsys-kaufleiste-an",vorbei)},{threshold:0}).observe(block)}function passtDazuLaden(){const bereich=document.querySelector("[data-mhsys-passt-dazu]");if(!bereich||bereich.dataset.mhsysGeladen)return;const produktId=bereich.dataset.mhsysProduktId,anzahl=bereich.dataset.mhsysAnzahl||8,sectionId=bereich.dataset.mhsysSection;if(!produktId||!sectionId)return;bereich.dataset.mhsysGeladen="1";const url=`${(window.mhsysShop&&window.mhsysShop.wurzelUrl||"/").replace(/\/$/,"")}/recommendations/products?section_id=${sectionId}&product_id=${produktId}&limit=${anzahl}`;fetch(url).then(r=>
1r.ok?r.text():"").then(html=>{if(!html)return;const neu=new DOMParser().parseFromString(html,"text/html").querySelector("[data-mhsys-passt-dazu]");neu&&(neu.dataset.mhsysGeladen="1",bereich.replaceWith(document.adoptNode(neu)))}).catch(e=>console.error("Passt dazu:",e))}function starten(){akkordeonsVerbinden(document);const seite=document.querySelector("[data-mhsys-produkt-seite]");if(seite){if(window.mhsysVerlauf&&seite.dataset.mhsysHandle&&window.mhsysVerlauf.merken(seite.dataset.mhsysHandle),!seite.dataset.mhsysBereit){seite.dataset.mhsysBereit="1";const galerieWurzel=seite.querySelector("[data-mhsys-galerie]"),galerie=galerieWurzel?new MhsysGalerie(galerieWurzel):null;new MhsysVarianten(seite,galerie),mengeVerbinden(seite),teilenVerbinden(seite),kaufleisteVerbinden(seite)}passtDazuLaden()}}window.mhsysProduktKauf=wurzel=>{if(!wurzel||wurzel.dataset.mhsysBereit)return;wurzel.dataset.mhsysBereit="1";const galerieWurzel=wurzel.querySelector("[data-mhsys-galerie]"),galerie=galerieWurzel?new MhsysGalerie(galerieWurzel):null;new MhsysVarianten(wurzel,galerie),mengeVerbinden(wurzel),typeof window.mhsysPopupsVerbinden=="function"&&window.mhsysPopupsVerbinden(wurzel),akkordeonsVerbinden(wurzel)},document.readyState==="loading"?document.addEventListener("DOMContentLoaded",starten):starten(),document.addEventListener("shopify:section:load",starten)})(); 2//# sourceMappingURL=/cdn/shop/t/21/assets/mhsys-produkt.js.map?v=115858709354194789181790149705
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.