1<!doctype html> 2<html lang="de"> 3<head prefix="og: http://ogp.me/ns# category: http://ogp.me/ns/category#"> 4 <meta charset="utf-8"/> 5<meta name="title" content="govi.de: Pharmazeutische Beratung - Apotheke"/> 6<meta name="description" content="govi.de ist der Medien-Shop für pharmazeutische und medizinische Fachliteratur der Avoxa Mediengruppe. Im Angebot sind auch Romane, Sachbücher und Kinderbücher."/> 7<meta name="keywords" content="Pharmazie, Medizin, Fachbücher, Fachliteratur, Apotheke, Apotheker, Apothekerin, PTA, Pharmazie-Studium, Bücher, Software, Romane, Sachbücher, Ratgeber, Lebenshilfe, Kinderbücher"/> 8<meta name="robots" content="INDEX,FOLLOW"/> 9<meta name="viewport" content="width=device-width, initial-scale=1"/> 10<title>govi.de: Pharmazeutische Beratung - Apotheke</title> 11 <link rel="stylesheet" type="text/css" media="all" href="https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/css/styles.css" /> 12<link rel="canonical" href="https://www.govi.de/apotheke/pharmazeutische-beratung" /> 13<link rel="icon" type="image/x-icon" href="https://www.govi.de/media/favicon/stores/1/Govi_onlineshop_Kurzlogo_Favicon.png" /> 14<link rel="shortcut icon" type="image/x-icon" href="https://www.govi.de/media/favicon/stores/1/Govi_onlineshop_Kurzlogo_Favicon.png" /> 15
15<script>if(!"gdprAppliesGlobally" in window){window.gdprAppliesGlobally=true}if(!("cmp_id" in window)||window.cmp_id<1){window.cmp_id=0}if(!("cmp_cdid" in window)){window.cmp_cdid="d45df603b1967"}if(!("cmp_params" in window)){window.cmp_params=""}if(!("cmp_host" in window)){window.cmp_host="delivery.consentmanager.net"}if(!("cmp_cdn" in window)){window.cmp_cdn="cdn.consentmanager.net"}if(!("cmp_proto" in window)){window.cmp_proto="https:"}if(!("cmp_codesrc" in window)){window.cmp_codesrc="0"}window.cmp_getsupportedLangs=function(){var b=["DE","EN","FR","IT","NO","DA","FI","ES","PT","RO","BG","ET","EL","GA","HR","LV","LT","MT","NL","PL","SV","SK","SL","CS","HU","RU","SR","ZH","TR","UK","AR","BS"];if("cmp_customlanguages" in window){for(var a=0;a<window.cmp_customlanguages.length;a++){b.push(window.cmp_customlanguages[a].l.toUpperCase())}}return b};window.cmp_getRTLLangs=function(){var a=["AR"];if("cmp_customlanguages" in window){for(var b=0;b<window.cmp_customlanguages.length;b++){if("r" in window.cmp_customlanguages[b]&&window.cmp_customlanguages[b].r){a.push(window.cmp_customlanguages[b].l)}}}return a};window.cmp_getlang=function(j){if(typeof(j)!="boolean"){j=true}if(j&&typeof(cmp_getlang.usedlang)=="string"&&cmp_getlang.usedlang!==""){return cmp_getlang.usedlang}var g=window.cmp_getsupportedLangs();var c=[];var f=location.hash;var e=location.search;var a="languages" in navigator?navigator.languages:[];if(f.indexOf("cmplang=")!=-1){c.push(f.substr(f.indexOf("cmplang=")+8,2).toUpperCase())}else{if(e.indexOf("cmplang=")!=-1){c.push(e.substr(e.indexOf("cmplang=")+8,2).toUpperCase())}else{if("cmp_setlang" in window&&window.cmp_setlang!=""){c.push(window.cmp_setlang.toUpperCase())}else{if(a.length>0){for(var d=0;d<a.length;d++){c.push(a[d])}}}}}if("language" in navigator){c.push(navigator.language)}if("userLanguage" in navigator){c.push(navigator.userLanguage)}var h="";for(var d=0;d<c.length;d++){var b=c[d].toUpperCase();if(g.indexOf(b)!=-1){h=b;break}if(b.indexOf("-")!=-1){b=b.substr(0,2)}if(g.indexOf(b)!=-1){h=b;break}}if(h==""&&typeof(cmp_getlang.defaultlang)=="string"&&cmp_getlang.defaultlang!==""){return cmp_getlang.defaultlang}else{if(h==""){h="EN"}}h=h.toUpperCase();return h};(function(){var y=document;var z=y.getElementsByTagName;var j=window;var r="";var b="_en";if("cmp_getlang" in j){r=j.cmp_getlang().toLowerCase();if("cmp_customlanguages" in j){var g=j.cmp_customlanguages;for(var u=0;u<g.length;u++){if(g[u].l.toUpperCase()==r){r="en";break}}}b="_"+r}function A(e,D){e+="=";var d="";var m=e.length;var i=location;var E=i.hash;var w=i.search;var s=E.indexOf(e);var C=w.indexOf(e);if(s!=-1){d=E.substring(s+m,9999)}else{if(C!=-1){d=w.substring(C+m,9999)}else{return D}}var B=d.indexOf("&");if(B!=-1){d=d.substring(0,B)}return d}var n=("cmp_proto" in j)?j.cmp_proto:"https:";if(n!="http:"&&n!="https:"){n="https:"}var h=("cmp_ref" in j)?j.cmp_ref:location.href;var k=y.createElement("script");k.setAttribute("data-cmp-ab","1");var c=A("cmpdesign","cmp_design" in j?j.cmp_design:"");var f=A("cmpregulationkey","cmp_regulationkey" in j?j.cmp_regulationkey:"");var v=A("cmpgppkey","cmp_gppkey" in j?j.cmp_gppkey:"");var p=A("cmpatt","cmp_att" in j?j.cmp_att:"");k.src=n+"//"+j.cmp_host+"/delivery/cmp.php?"+("cmp_id" in j&&j.cmp_id>0?"id="+j.cmp_id:"")+("cmp_cdid" in j?"&cdid="+j.cmp_cdid:"")+"&h="+encodeURIComponent(h)+(c!=""?"&cmpdesign="+encodeURIComponent(c):"")+(f!=""?"&cmpregulationkey="+encodeURIComponent(f):"")+(v!=""?"&cmpgppkey="+encodeURIComponent(v):"")+(p!=""?"&cmpatt="+encodeURIComponent(p):"")+("cmp_params" in j?"&"+j.cmp_params:"")+(y.cookie.length>0?"&__cmpfcc=1":"")+"&l="+r.toLowerCase()+"&o="+(new Date()).getTime();k.type="text/javascript";k.async=true;if(y.currentScript&&y.currentScript.parentElement){y.currentScript.parentElement.appendChild(k)}else{if(y.body){y.body.appendChild(k)}else{var q=["body","div","span","script","head"];for(var u=0;u<q.length;u++){var x=z(q[u]);if(x.length>0){x[0].appendChild(k);break}}}}var o="js";var t=A("cmpdebugunminimized","cmpdebugunminimized" in j?j.cmpdebugunminimized:0)>0?"":".min";var a=A("cmpdebugcoverage","cmp_debugcoverage" in j?j.cmp_debugcoverage:"");if(a=="1"){o="instrumented";t=""}var k=y.createElement("script");k.src=n+"//"+j.cmp_cdn+"/delivery/"+o+"/cmp"+b+t+".js";k.type="text/javascript";k.setAttribute("data-cmp-ab","1");k.async=true;if(y.currentScript&&y.currentScript.parentElement){y.currentScript.parentElement.appendChild(k)}else{if(y.body){y.body.appendChild(k)}else{var x=z("body");if(x.length==0){x=z("div")}if(x.length==0){x=z("span")}if(x.length==0){x=z("ins")}if(x.length==0){x=z("script")}if(x.length==0){x=z("head")}if(x.length>0){x[0].appendChild(k)}}}})();window.cmp_addFrame=function(b){if(!window.frames[b]){if(document.body){var a=document.createElement("iframe");a.style.cssText="display:none";if("cmp_cdn" in window&&"cmp_ultrablocking" in window&&window.cmp_ultrablocking>0){a.src="//"+window.cmp_cdn+"/delivery/empty.html"}a.name=b;a.setAttribute("title","Intentionally hidden, please ignore");a.setAttribute("role","none");a.setAttribute("tabindex","-1");document.body.appendChild(a)}else{window.setTimeout(window.cmp_addFrame,10,b)}}};window.cmp_rc=function(h){var b=document.cookie;var f="";var d=0;while(b!=""&&d<100){d++;while(b.substr(0,1)==" "){b=b.substr(1,b.length)}var g=b.substring(0,b.indexOf("="));if(b.indexOf(";")!=-1){var c=b.substring(b.indexOf("=")+1,b.indexOf(";"))}else{var c=b.substr(b.indexOf("=")+1,b.length)}if(h==g){f=c}var e=b.indexOf(";")+1;if(e==0){e=b.length}b=b.substring(e,b.length)}return(f)};window.cmp_stub=function(){var a=arguments;__cmp.a=__cmp.a||[];if(!a.length){return __cmp.a}else{if(a[0]==="ping"){if(a[1]===2){a[2]({gdprApplies:gdprAppliesGlobally,cmpLoaded:false,cmpStatus:"stub",displayStatus:"hidden",apiVersion:"2.2",cmpId:31},true)}else{a[2](false,true)}}else{if(a[0]==="getUSPData"){a[2]({version:1,uspString:window.cmp_rc("")},true)}else{if(a[0]==="getTCData"){__cmp.a.push([].slice.apply(a))}else{if(a[0]==="addEventListener"||a[0]==="removeEventListener"){__cmp.a.push([].slice.apply(a))}else{if(a.length==4&&a[3]===false){a[2]({},false)}else{__cmp.a.push([].slice.apply(a))}}}}}}};window.cmp_gpp_ping=function(){return{gppVersion:"1.1",cmpStatus:"stub",cmpDisplayStatus:"hidden",signalStatus:"no ready",supportedAPIs:["5:tcfcav1","7:usnat","8:usca","9:usva","10:usco","11:usut","12:usct"],cmpId:31,sectionList:[],applicableSections:[0],gppString:"",parsedSections:{}}};window.cmp_gppstub=function(){var c=arguments;__gpp.q=__gpp.q||[];if(!c.length){return __gpp.q}var h=c[0];var g=c.length>1?c[1]:null;var f=c.length>2?c[2]:null;var a=null;var j=false;if(h==="ping"){a=window.cmp_gpp_ping();j=true}else{if(h==="addEventListener"){__gpp.e=__gpp.e||[];if(!("lastId" in __gpp)){__gpp.lastId=0}__gpp.lastId++;var d=__gpp.lastId;
15__gpp.e.push({id:d,callback:g});a={eventName:"listenerRegistered",listenerId:d,data:true,pingData:window.cmp_gpp_ping()};j=true}else{if(h==="removeEventListener"){__gpp.e=__gpp.e||[];a=false;for(var e=0;e<__gpp.e.length;e++){if(__gpp.e[e].id==f){__gpp.e[e].splice(e,1);a=true;break}}j=true}else{__gpp.q.push([].slice.apply(c))}}}if(a!==null&&typeof(g)==="function"){g(a,j)}};window.cmp_msghandler=function(d){var a=typeof d.data==="string";try{var c=a?JSON.parse(d.data):d.data}catch(f){var c=null}if(typeof(c)==="object"&&c!==null&&"__cmpCall" in c){var b=c.__cmpCall;window.__cmp(b.command,b.parameter,function(h,g){var e={__cmpReturn:{returnValue:h,success:g,callId:b.callId}};d.source.postMessage(a?JSON.stringify(e):e,"*")})}if(typeof(c)==="object"&&c!==null&&"__uspapiCall" in c){var b=c.__uspapiCall;window.__uspapi(b.command,b.version,function(h,g){var e={__uspapiReturn:{returnValue:h,success:g,callId:b.callId}};d.source.postMessage(a?JSON.stringify(e):e,"*")})}if(typeof(c)==="object"&&c!==null&&"__tcfapiCall" in c){var b=c.__tcfapiCall;window.__tcfapi(b.command,b.version,function(h,g){var e={__tcfapiReturn:{returnValue:h,success:g,callId:b.callId}};d.source.postMessage(a?JSON.stringify(e):e,"*")},b.parameter)}if(typeof(c)==="object"&&c!==null&&"__gppCall" in c){var b=c.__gppCall;window.__gpp(b.command,function(h,g){var e={__gppReturn:{returnValue:h,success:g,callId:b.callId}};d.source.postMessage(a?JSON.stringify(e):e,"*")},"parameter" in b?b.parameter:null,"version" in b?b.version:1)}};window.cmp_setStub=function(a){if(!(a in window)||(typeof(window[a]
15)!=="function"&&typeof(window[a])!=="object"&&(typeof(window[a])==="undefined"||window[a]!==null))){window[a]=window.cmp_stub;window[a].msgHandler=window.cmp_msghandler;window.addEventListener("message",window.cmp_msghandler,false)}};window.cmp_setGppStub=function(a){if(!(a in window)||(typeof(window[a])!=="function"&&typeof(window[a])!=="object"&&(typeof(window[a])==="undefined"||window[a]!==null))){window[a]=window.cmp_gppstub;window[a].msgHandler=window.cmp_msghandler;window.addEventListener("message",window.cmp_msghandler,false)}};window.cmp_addFrame("__cmpLocator");if(!("cmp_disableusp" in window)||!window.cmp_disableusp){window.cmp_addFrame("__uspapiLocator")}if(!("cmp_disabletcf" in window)||!window.cmp_disabletcf){window.cmp_addFrame("__tcfapiLocator")}if(!("cmp_disablegpp" in window)||!window.cmp_disablegpp){window.cmp_addFrame("__gppLocator")}window.cmp_setStub("__cmp");if(!("cmp_disabletcf" in window)||!window.cmp_disabletcf){window.cmp_setStub("__tcfapi")}if(!("cmp_disableusp" in window)||!window.cmp_disableusp){window.cmp_setStub("__uspapi")}if(!("cmp_disablegpp" in window)||!window.cmp_disablegpp){window.cmp_setGppStub("__gpp")};</script>
vendor: 1 bytes, line 15
15
16<script type="text/javascript">window.dataLayer = window.dataLayer || []; 17window.getAmGa4Cookie = function () { 18 let cookies = {}; 19 document.cookie.split(';').forEach(function (el) { 20 let [key, value] = el.split('='); 21 cookies[key.trim()] = value; 22 }); 23 24 return cookies['amga4_customer'] 25 ? decodeURIComponent(cookies['amga4_customer']) 26 : '{}'; 27}; 28 29(function () { 30 /** 31 * @var {[Object]} 32 */ 33 const userProperties = JSON.parse(window.getAmGa4Cookie()); 34 35 if (userProperties.customerGroup) { 36 window.dataLayer.push({'customerGroup': userProperties.customerGroup}); 37 } 38 if (userProperties.customerId) { 39 window.dataLayer.push({'customerId': userProperties.customerId}); 40 } 41 /** 42 * @var {[Object]} 43 */ 44 const dataToPush = JSON.parse('\u005B\u005D'); 45 46 dataToPush.forEach((dataObject) => { 47 window.dataLayer.push(dataObject); 48 }); 49})(); 50</script>
50 51<!-- Google Tag Manager -->
52<script> 53 function callAmGA4GTM () { 54 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 55 new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 56 j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 57 'https://www.googletagmanager.com/gtm.js?id='+i+dl;var n=d.querySelector('[nonce]'); 58 n&&j.setAttribute('nonce',n.nonce||n.getAttribute('nonce'));f.parentNode.insertBefore(j,f); 59 })(window,document,'script','dataLayer', 'GTM-MMM4WFVS'); 60 } 61</script>
61 62<!-- End Google Tag Manager --> 63
63<script> 64 (function () { 65 const googleAnalyticsCookieName = '_ga'; 66 const events = ['cookiebar-action-accept-finish', 'cookiebar-action-allow-finish']; 67 events.forEach(event => { 68 window.addEventListener(event, function(event) { 69 if (!amastyCookieManager.isCookieAllowed(googleAnalyticsCookieName)) { 70 return; 71 } 72 73 callAmGA4GTM(); 74 }); 75 }); 76 77 document.addEventListener('alpine:initialized', () => { 78 if (!hyva.getCookie('amcookie_policy_restriction') 79 || !amastyCookieManager.isCookieAllowed(googleAnalyticsCookieName) 80 ) { 81 return; 82 } 83 84 callAmGA4GTM(); 85 }); 86 87 })(); 88 </script>
88 89
89<script> 90 var BASE_URL = 'https://www.govi.de/'; 91 var THEME_PATH = 'https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE'; 92 var COOKIE_CONFIG = { 93 "expires": null, 94 "path": "\u002F", 95 "domain": ".www.govi.de", 96 "secure": true, 97 "lifetime": "3600", 98 "cookie_restriction_enabled": false }; 99 var CURRENT_STORE_CODE = 'de'; 100 var CURRENT_WEBSITE_ID = '1'; 101 102 window.hyva = window.hyva || {} 103 104 window.cookie_consent_groups = window.cookie_consent_groups || {} 105 window.cookie_consent_groups['necessary'] = true; 106 107 window.cookie_consent_config = window.cookie_consent_config || {}; 108 window.cookie_consent_config['necessary'] = [].concat( 109 window.cookie_consent_config['necessary'] || [], 110 [ 111 'user_allowed_save_cookie', 112 'form_key', 113 'mage-messages', 114 'private_content_version', 115 'mage-cache-sessid', 116 'last_visited_store', 117 'section_data_ids' 118 ] 119 ); 120 //# sourceURL=hyva-variables.js 121</script>
vendor: 1 bytes, line 121
121
122<script> 123 (function( hyva, undefined ) { 124 125 function lifetimeToExpires(options, defaults) { 126 127 const lifetime = options.lifetime || defaults.lifetime; 128 129 if (lifetime) { 130 const date = new Date; 131 date.setTime(date.getTime() + lifetime * 1000); 132 return date; 133 } 134 135 return null; 136 } 137 138 function generateRandomString() { 139 140 const allowedCharacters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', 141 length = 16; 142 143 let formKey = '', 144 charactersLength = allowedCharacters.length; 145 146 for (let i = 0; i < length; i++) { 147 formKey += allowedCharacters[Math.round(Math.random() * (charactersLength - 1))] 148 } 149 150 return formKey; 151 } 152 153 const sessionCookieMarker = {noLifetime: true} 154 155 const cookieTempStorage = {}; 156 157 const internalCookie = { 158 get(name) { 159 const v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); 160 return v ? v[2] : null; 161 }, 162 set(name, value, days, skipSetDomain) { 163 let expires, 164 path, 165 domain, 166 secure, 167 samesite; 168 169 const defaultCookieConfig = { 170 expires: null, 171 path: '/', 172 domain: null, 173 secure: false, 174 lifetime: null, 175 samesite: 'lax' 176 }; 177 178 const cookieConfig = window.COOKIE_CONFIG || {}; 179 180 expires = days && days !== sessionCookieMarker 181 ? lifetimeToExpires({lifetime: 24 * 60 * 60 * days, expires: null}, defaultCookieConfig) 182 : lifetimeToExpires(window.COOKIE_CONFIG, defaultCookieConfig) || defaultCookieConfig.expires; 183 184 path = cookieConfig.path || defaultCookieConfig.path; 185 domain = !skipSetDomain && (cookieConfig.domain || defaultCookieConfig.domain); 186 secure = cookieConfig.secure || defaultCookieConfig.secure; 187 samesite = cookieConfig.samesite || defaultCookieConfig.samesite; 188 189 document.cookie = name + "=" + encodeURIComponent(value) + 190 (expires && days !== sessionCookieMarker ? '; expires=' + expires.toGMTString() : '') + 191 (path ? '; path=' + path : '') + 192 (domain ? '; domain=' + domain : '') + 193 (secure ? '; secure' : '') + 194 (samesite ? '; samesite=' + samesite : 'lax'); 195 }, 196 isWebsiteAllowedToSaveCookie() { 197 const allowedCookies = this.get('user_allowed_save_cookie'); 198 if (allowedCookies) { 199 const allowedWebsites = JSON.parse(unescape(allowedCookies)); 200 201 return allowedWebsites[CURRENT_WEBSITE_ID] === 1; 202 } 203 return false; 204 }, 205 getGroupByCookieName(name) { 206 const cookieConsentConfig = window.cookie_consent_config || {}; 207 let group = null; 208 for (let prop in cookieConsentConfig) { 209 if (!cookieConsentConfig.hasOwnProperty(prop)) continue; 210 if (cookieConsentConfig[prop].includes(name)) { 211 group = prop; 212 break; 213 } 214 } 215 return group; 216 }, 217 isCookieAllowed(name) { 218 const cookieGroup = this.getGroupByCookieName(name); 219 return cookieGroup 220 ? window.cookie_consent_groups[cookieGroup] 221 : this.isWebsiteAllowedToSaveCookie(); 222 }, 223 saveTempStorageCookies() { 224 for (const [name, data] of Object.entries(cookieTempStorage)) { 225 if (this.isCookieAllowed(name)) { 226 this.set(name, data['value'], data['days'], data['skipSetDomain']); 227 delete cookieTempStorage[name]; 228 } 229 } 230 } 231 }; 232 233 hyva.getCookie = (name) => { 234 const cookieConfig = window.COOKIE_CONFIG || {}; 235 236 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 237 return cookieTempStorage[name] ? cookieTempStorage[name]['value'] : null; 238 } 239 240 return internalCookie.get(name); 241 } 242 243 hyva.setCookie = (name, value, days, skipSetDomain) => { 244 const cookieConfig = window.COOKIE_CONFIG || {}; 245 246 if (cookieConfig.cookie_restriction_enabled && ! internalCookie.isCookieAllowed(name)) { 247 cookieTempStorage[name] = {value, days, skipSetDomain}; 248 return; 249 } 250 return internalCookie.set(name, value, days, skipSetDomain); 251 } 252 253 254 hyva.setSessionCookie = (name, value, skipSetDomain) => { 255 return hyva.setCookie(name, value, sessionCookieMarker, skipSetDomain) 256 } 257 258 hyva.getBrowserStorage = () => { 259 const browserStorage = window.localStorage || window.sessionStorage; 260 if (!browserStorage) { 261 console.warn('Browser Storage is unavailable'); 262 return false;
263 } 264 try { 265 browserStorage.setItem('storage_test', '1'); 266 browserStorage.removeItem('storage_test'); 267 } catch (error) { 268 console.warn('Browser Storage is not accessible', error); 269 return false; 270 } 271 return browserStorage; 272 } 273 274 hyva.postForm = (postParams) => { 275 const form = document.createElement("form"); 276 277 let data = postParams.data; 278 279 if (! postParams.skipUenc && ! data.uenc) { 280 data.uenc = btoa(window.location.href); 281 } 282 form.method = "POST"; 283 form.action = postParams.action; 284 285 Object.keys(postParams.data).map(key => { 286 const field = document.createElement("input"); 287 field.type = 'hidden' 288 field.value = postParams.data[key]; 289 field.name = key; 290 form.appendChild(field); 291 }); 292 293 const form_key = document.createElement("input"); 294 form_key.type = 'hidden'; 295 form_key.value = hyva.getFormKey(); 296 form_key.name="form_key"; 297 form.appendChild(form_key); 298 299 document.body.appendChild(form); 300 301 form.submit(); 302 } 303 304 hyva.getFormKey = function () { 305 let formKey = hyva.getCookie('form_key'); 306 307 if (!formKey) { 308 formKey = generateRandomString(); 309 hyva.setCookie('form_key', formKey); 310 } 311 312 return formKey; 313 } 314 315 hyva.formatPrice = (value, showSign, options = {}) => { 316 const groupSeparator = options.groupSeparator; 317 const decimalSeparator = options.decimalSeparator 318 delete options.groupSeparator; 319 delete options.decimalSeparator; 320 const formatter = new Intl.NumberFormat( 321 'de\u002DDE', 322 Object.assign({ 323 style: 'currency', 324 currency: 'EUR', 325 signDisplay: showSign ? 'always' : 'auto' 326 }, options) 327 ); 328 return (typeof Intl.NumberFormat.prototype.formatToParts === 'function') ? 329 formatter.formatToParts(value).map(({type, value}) => { 330 switch (type) { 331 case 'currency': 332 return '\u20AC' || value; 333 case 'minusSign': 334 return '- '; 335 case 'plusSign': 336 return '+ '; 337 case 'group': 338 return groupSeparator !== undefined ? groupSeparator : value; 339 case 'decimal': 340 return decimalSeparator !== undefined ? decimalSeparator : value; 341 default : 342 return value; 343 } 344 }).reduce((string, part) => string + part) : 345 formatter.format(value); 346 } 347 348 const formatStr = function (str, nStart) { 349 const args = Array.from(arguments).slice(2); 350 351 return str.replace(/(%+)([0-9]+)/g, (m, p, n) => { 352 const idx = parseInt(n) - nStart; 353 354 if (args[idx] === null || args[idx] === void 0) { 355 return m; 356 } 357 return p.length % 2 358 ? p.slice(0, -1).replace('%%', '%') + args[idx] 359 : p.replace('%%', '%') + n; 360 }) 361 } 362 363 hyva.str = function (string) { 364 const args = Array.from(arguments); 365 args.splice(1, 0, 1); 366 367 return formatStr.apply(undefined, args); 368 } 369 370 hyva.strf = function () { 371 const args = Array.from(arguments); 372 args.splice(1, 0, 0); 373 374 return formatStr.apply(undefined, args); 375 } 376 377 /** 378 * Take a html string as `content` parameter and 379 * extract an element from the DOM to replace in 380 * the current page under the same selector, 381 * defined by `targetSelector` 382 */ 383 hyva.replaceDomElement = (targetSelector, content) => { 384 // Parse the content and extract the DOM node using the `targetSelector` 385 const parser = new DOMParser(); 386 const doc = parser.parseFromString(content, 'text/html');
387 const contentNode = doc.querySelector(targetSelector); 388 389 // Bail if content or target can't be found 390 if (!contentNode || !document.querySelector(targetSelector)) { 391 return; 392 } 393 394 hyva.activateScripts(contentNode); 395 396 // Replace the old DOM node with the new content 397 document.querySelector(targetSelector).replaceWith(contentNode); 398 399 // Reload customerSectionData and display cookie-messages if present 400 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 401 hyva.initMessages(); 402 } 403 404 hyva.removeScripts = (contentNode) => { 405 const scripts = contentNode.getElementsByTagName('script'); 406 for (let i = 0; i < scripts.length; i++) { 407 scripts[i].parentNode.removeChild(scripts[i]); 408 } 409 const templates = contentNode.getElementsByTagName('template'); 410 for (let i = 0; i < templates.length; i++) { 411 const container = document.createElement('div'); 412 container.innerHTML = templates[i].innerHTML; 413 hyva.removeScripts(container); 414 templates[i].innerHTML = container.innerHTML; 415 } 416 } 417 418 hyva.activateScripts = (contentNode) => { 419 // Create new array from HTMLCollection to avoid mutation of collection while manipulating the DOM. 420 const scripts = Array.from(contentNode.getElementsByTagName('script')); 421 422 // Iterate over all script tags to duplicate+inject each into the head 423 for (const original of scripts) { 424 const script = document.createElement('script'); 425 original.type && (script.type = original.type); 426 script.innerHTML = original.innerHTML; 427 428 // Remove the original (non-executing) script from the contentNode 429 original.parentNode.removeChild(original) 430 431 // Add script to head 432 document.head.appendChild(script); 433 } 434 435 return contentNode; 436 } 437 438 const replace = {['+']: '-', ['/']: '_', ['=']: ','}; 439 hyva.getUenc = () => btoa(window.location.href).replace(/[+/=]/g, match => replace[match]); 440 441 let currentTrap; 442 443 const focusableElements = (rootElement) => { 444 const selector = 'button, [href], input, select, textarea, details, [tabindex]:not([tabindex="-1"]'; 445 return Array.from(rootElement.querySelectorAll(selector)) 446 .filter(el => { 447 return el.style.display !== 'none' 448 && !el.disabled 449 && el.tabIndex !== -1 450 && (el.offsetWidth || el.offsetHeight || el.getClientRects().length) 451 }) 452 } 453 454 const focusTrap = (e) => { 455 const isTabPressed = e.key === 'Tab' || e.keyCode === 9; 456 if (!isTabPressed) return; 457 458 const focusable = focusableElements(currentTrap) 459 const firstFocusableElement = focusable[0] 460 const lastFocusableElement = focusable[focusable.length - 1] 461 462 e.shiftKey 463 ? document.activeElement === firstFocusableElement && (lastFocusableElement.focus(), e.preventDefault()) 464 : document.activeElement === lastFocusableElement && (firstFocusableElement.focus(), e.preventDefault()) 465 }; 466 467 hyva.releaseFocus = (rootElement) => { 468 if (currentTrap && (!rootElement || rootElement === currentTrap)) { 469 currentTrap.removeEventListener('keydown', focusTrap) 470 currentTrap = null 471 } 472 } 473 hyva.trapFocus = (rootElement) => { 474 if (!rootElement) return; 475 hyva.releaseFocus() 476 currentTrap = rootElement 477 rootElement.addEventListener('keydown', focusTrap) 478 const firstElement = focusableElements(rootElement)[0] 479 firstElement && firstElement.focus() 480 } 481 482 hyva.safeParseNumber = (rawValue) => { 483 const number = rawValue ? parseFloat(rawValue) : null; 484 485 return Array.isArray(number) || isNaN(number) ? rawValue : number; 486 } 487 488 const toCamelCase = s => s.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(''); 489 hyva.createBooleanObject = (name, value = false, additionalMethods = {}) => { 490 491 const camelCase = toCamelCase(name);
492 const key = '__hyva_bool_' + name 493 494 return new Proxy(Object.assign( 495 additionalMethods, 496 { 497 [key]: !!value, 498 [name]() {return !!this[key]}, 499 ['!' + name]() {return !this[key]}, // @deprecated This does not work with non-CSP Alpine 500 ['not' + camelCase]() {return !this[key]}, 501 ['toggle' + camelCase]() {this[key] = !this[key]}, 502 [`set${camelCase}True`]() {this[key] = true}, 503 [`set${camelCase}False`]() {this[key] = false}, 504 } 505 ), { 506 set(target, prop, value) { 507 return prop === name 508 ? (target[key] = !!value) 509 : Reflect.set(...arguments); 510 } 511 }) 512 } 513 514 hyva.alpineInitialized = (fn) => window.addEventListener('alpine:initialized', fn, {once: true}) 515 window.addEventListener('alpine:init', () => Alpine.data('{}', () => ({})), {once: true}); 516 window.addEventListener('user-allowed-save-cookie', () => internalCookie.saveTempStorageCookies()) 517 518 }( window.hyva = window.hyva || {} )); 519 //# sourceURL=hyva.js 520</script>
vendor: 1 bytes, line 520
520
521<script type="speculationrules"> 522{ 523 "tag": "Hyva Theme", 524 "prefetch": [{ 525 "source": "document", 526 "where": { 527 "and": [ 528 { "href_matches": "/*" }, 529 { "not": { 530 "href_matches": ["/customer/*","/search/*","/sales/*","/wishlist/*","/checkout/*","/paypal/*","/newsletter/*","/stores/store/redirect/*"] }}, 531 { "not": { 532 "selector_matches": [".no-preload", ".do-not-prerender", "[download]", "[rel~=nofollow]", "[target]"] 533 }} 534 ] 535 }, 536 "eagerness": "moderate" 537 }] 538} 539</script>
539 540<!-- Google Tag Manager -->
541<script>
vendor: 327 bytes, lines 541-545
541(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': 542new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], 543j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 544'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); 545})(window,document,'script','dataLayer','
545GTM-MMM4WFVS
vendor: 3 bytes, line 545
545');
545</script>
545 546<!-- End Google Tag Manager -->
547<script> 548 (function () { 549 let amSplideProcessed = false; 550 551 window.addEventListener('load-amsplide', () => { 552 if (amSplideProcessed) { 553 window?.Splide && window.dispatchEvent(new CustomEvent('amsplide-loaded', {})); 554 return; 555 } 556 557 const script = document.createElement('script'); 558 script.src = 'https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/Amasty_LibSplideJs/4.1.3/js/splide/splide.min.js'; 559 script.async = true; 560 document.body.appendChild(script); 561 562 amSplideProcessed = true; 563 564 script.onload = () => { 565 window.dispatchEvent(new CustomEvent('amsplide-loaded', {})); 566 } 567 568 const stylesHref = 'https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/Amasty_LibSplideJs/4.1.3/css/splide/splide.min.css'; 569 570 if (document.querySelector(`link[href="${stylesHref}"]`)) { 571 return; 572 } 573 574 const styles = document.createElement('link'); 575 styles.rel = 'stylesheet'; 576 styles.type = 'text/css'; 577 styles.href = stylesHref; 578 579 document.head.appendChild(styles); 580 }); 581 }()); 582</script>
582 583<link rel="next" href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=2" /> 584</head> 585<body id="html-body" class="page-with-filter page-products categorypath-apotheke-pharmazeutische-beratung category-pharmazeutische-beratung page-layout-2columns-left catalog-category-view page-layout-category-full-width"> 586 587<!-- Google Tag Manager (noscript) -->
vendor: 73 bytes, lines 587-589
587 588<noscript> 589 <iframe src="https://www.googletagmanager.com/ns.html?id=
589GTM-MMM4WFVS
vendor: 96 bytes, lines 589-591
589" 590 height="0" width="0" style="display:none;visibility:hidden"></iframe> 591</noscript>
592<!-- End Google Tag Manager (noscript) --> 593 594 595<input name="form_key" type="hidden" value="MHFk6olfWgubb4xR" /> 596 <noscript> 597 <section class="message global noscript border-b-2 border-blue-500 bg-blue-50 shadow-none m-0 px-0 rounded-none font-normal"> 598 <div class="container text-center"> 599 <p> 600 <strong>JavaScript scheint in Ihrem Browser deaktiviert zu sein.</strong> 601 <span> 602 Um unsere Website in bester Weise zu erfahren, aktivieren Sie Javascript in Ihrem Browser. </span> 603 </p> 604 </div> 605 </section> 606 </noscript> 607 608
609<script> 610 document.body.addEventListener('touchstart', () => {}, {passive: true}) 611</script>
vendor: 1 bytes, line 611
611
612<script> 613 window.addEventListener('DOMContentLoaded', () => { 614 if (hyva && hyva.formValidation) { 615 hyva.formValidation.addRule('postcode', function(value, options, field, context) { 616 const rules = { 617 CH: ['^(CH-)?\\d{4}$', 'In der Schweiz besteht die PLZ aus 4 Zahlen.'], 618 AT: ['^(AT-)?\\d{4}$', 'In Ãsterreich besteht die PLZ aus 4 Zahlen.'], 619 DE: ['^(D-)?\\d{5}$', 'In Deutschland besteht die PLZ aus 5 Zahlen.'], 620 }; 621 context.validateField(context.fields['country_id']); 622 623 if (context.fields['country_id'].state.valid) { 624 const country = context.fields['country_id'].element.value; 625 const rule = new RegExp(rules[country][0], ''); 626 if (!rule.test(value)) { 627 return rules[country][1]; 628 } else { 629 return true; 630 } 631 } else { 632 return 'Select\u0020country\u0020first' 633 } 634 }) 635 } 636 }) 637</script>
vendor: 1 bytes, line 637
637
638<script> 639 // https://github.com/Fischer-L/autoComplt 640 !function(t,e){"function"==typeof define&&define.amd?define(e):"object"==typeof exports?module.exports=e():t.autoComplt=t.returnExports=e()}(this,function(){"use strict";Array.prototype.indexOf||(Array.prototype.indexOf=function(t,e){if(void 0===this||null===this)throw new TypeError('"this" is null or not defined');var o=this.length>>>0;for(e=+e||0,Math.abs(e)===1/0&&(e=0),0>e&&(e+=o,0>e&&(e=0));o>e;e++)if(this[e]===t)return e;return-1});var t=function(){var t=-1;if("Microsoft Internet Explorer"==navigator.appName){var e=navigator.userAgent,o=new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})");null!=o.exec(e)&&(t=+RegExp.$1)}return-1===t?NaN:t},e=function(){var e=window.navigator.userAgent.toLowerCase();return e.search(/mobile|windows phone/)>=0?i.modeMobile:t()<=9?i.modePC:o().windowWidth>i.modeMobileW?i.modePC:i.modeMobile},o=function(){return window.innerWidth?{windowWidth:window.innerWidth,windowHeight:window.innerHeight}:document.documentElement.offsetHeight?{windowWidth:document.documentElement.offsetWidth,windowHeight:document.documentElement.offsetHeight}:document.body.offsetHeight?{windowWidth:document.body.offsetWidth,windowHeight:document.body.offsetHeight}:document.documentElement.clientHeight?{windowWidth:document.documentElement.clientWidth,windowHeight:document.documentElement.clientHeight}:document.body.clientHeight?{windowWidth:document.body.clientWidth,windowHeight:document.body.clientHeight}:{windowWidth:-1,windowHeight:-1}},i=function(t){return i=t,t.modePC="modePC",t.modeMobile="modeMobile",t.modeMobileW=768,t.autoCompltListClass="autoComplt-list",t.autoCompltHintClass="autoComplt-hint",t.autoCompltHintSelectedClass="autoComplt-hint-selected",t.maxHintNum=e()===i.modePC?10:5,t.autoCompltDelay=250,t.hiddenArg_close_list_n_make_final_selection="hiddenArg_close_list_n_make_final_selection",t.listStatus={attr:"data-listStatus",open:"open"},t.keyCode={up:38,down:40,esc:27,enter:13},t.defaultStyles={autoCompltList:{maxHeight:"none",border:"1px solid #aaa",padding:"0",margin:"0",zIndex:99,overflowX:"hidden",overflowY:"auto",display:"none",position:"absolute",backgroundColor:"#fff"},autoCompltHint:{height:"1.5em",padding:e()===i.modePC?"2px 6px 2px 10px":"6px 6px 6px 10px",margin:"6px 0",overflow:"hidden",listStyleType:"none",color:"#000",backgroundColor:"#fff",cursor:"default",fontSize:"1em"},autoCompltHintSelected:{color:"#fff",backgroundColor:"#3399ff"}},t.adjStyleAttrs={autoCompltList:["border","maxHeight","backgroundColor"],autoCompltHint:["height","padding","margin","color","backgroundColor","fontSize"],autoCompltHintSelected:["color","backgroundColor"]},t.listenersSupported=["select"],i}({}),n=function(t){return t||(t=window.event),t.target||(t.target=t.srcElement),t.stopBubble=function(){this.cancelBubble=!0,this.stopPropoagation&&this.stopPropoagation()},t.stopDefault=function(){return this.preventDefault&&this.preventDefault(),this.returnValue=!1,!1},t},l=function(t,e,o){t.addEventListener?t.addEventListener(e,o):t.attachEvent&&t.attachEvent("on"+e,o)},s=function(t,e,o){t.removeEventListener?t.removeEventListener(e,o):t.detachEvent&&t.detachEvent("on"+e,o)},u=function(t,e){var o=null;if(window.getComputedStyle)o=window.getComputedStyle(t)[e]||null;else if(t.currentStyle){o=t.currentStyle&&t.currentStyle[e];var i,n,l=t.style;null==o&&l&&l[e]&&(o=l[e]),i=l.left,n=t.runtimeStyle&&t.runtimeStyle.left,n&&(t.runtimeStyle.left=t.currentStyle.left),l.left="fontSize"===e?"1em":o,o=l.pixelLeft+"px",l.left=i,n&&(t.runtimeStyle.left=n)}return o},a={buildElem:function(t){var e=document.createElement("DIV");return e.innerHTML=t,e.firstChild.cloneNode(!0)},buildHint:function(t,e){return"string"==typeof t&&t?(t=this.buildElem('<li class="'+i.autoCompltHintClass+'">'+t+"</li>"),t.style.height=t.style.lineHeight=e.autoCompltHint.height,t.style.padding=e.autoCompltHint.padding,t.style.margin=e.autoCompltHint.margin,t.style.overflow=e.autoCompltHint.overflow,t.style.listStyleType=e.autoCompltHint.listStyleType,t.style.color=e.autoCompltHint.color,t.style.backgroundColor=e.autoCompltHint.backgroundColor,t.style.cursor=e.autoCompltHint.cursor,t.style.fontSize=e.autoCompltHint.fontSize,t):null},buildList:function(t){var e=this.buildElem('<ul class="'+i.autoCompltListClass+'"></ul>');return e.style.maxHeight=t.autoCompltList.maxHeight,e.style.border=t.autoCompltList.border,e.style.padding=t.autoCompltList.padding,e.style.margin=t.autoCompltList.margin,e.style.zIndex=t.autoCompltList.zIndex,e.style.overflowX=t.autoCompltList.overflowX,e.style.overflowY=t.autoCompltList.overflowY,e.style.display=t.autoCompltList.display,e.style.position=t.autoCompltList.position,e.style.backgroundColor=t.autoCompltList.backgroundColor,e}},r=function(t){this.uiElem=null,this.assocInput=t,this.mouseOnList=!1,this.onMouseSelectionListener=null,this.maxHintNum=i.maxHintNum,this.styles=JSON.parse(JSON.stringify(i.defaultStyles))};r.prototype.genList=function(){if(!this.uiElem){var t=this;this.uiElem=a.buildList(this.styles),l(this.uiElem,"mouseover",function(e){e=n(e),t.isHint(e.target)&&(t.pick(e.target),t.autoScroll())}),l(this.uiElem,"mouseout",function(e){t.unpick()}),l(this.uiElem,"mousedown",function(e){t.mouseOnList=!0,setTimeout(function(){t.assocInput.focus()},50)}),l(this.uiElem,"mouseup",function(e){e=n(e),t.isHint(e.target)&&(t.pick(e.target),"function"==typeof t.onMouseSelectionListener&&t.onMouseSelectionListener())}),document.body.appendChild(this.uiElem)}},r.prototype.isHint=function(t){if(t&&"object"==typeof t&&1===t.nodeType){var e=" "+t.className+" ";return e.indexOf(" "+i.autoCompltHintClass+" ")>=0}return!1},r.prototype.putHints=function(t){var e=0;if(t instanceof Array){var o,i,n=[];for(i=Math.min(t.length,this.maxHintNum),o=0;i>o;o++)n.push(a.buildHint(t[o],this.styles)),n[n.length-1]||n.pop();if(n.length>0){var l=document.createDocumentFragment();for(o=0,e=n.length;e>o;o++)l.appendChild(n[o]);this.clearHints(),this.genList(),this.uiElem.appendChild(l)}}return e},r.prototype.clearHints=function(){this.uiElem&&(this.uiElem.innerHTML="")},r.prototype.isOpen=function(){return this.uiElem?this.uiElem.getAttribute(i.listStatus.attr)==i.listStatus.open:!1},r.prototype.open=function(){var t;if(this.uiElem&&(t=this.uiElem.querySelectorAll("."+i.autoCompltHintClass))&&t.length){var e,o;for(o=this.assocInput.getBoundingClientRect(),this.uiElem.style.top=(document.documentElement&&document.documentElement.scrollTop?document.documentElement.scrollTop:document.body.scrollTop)+o.bottom+"px",this.uiElem.style.left=o.left+"px",o=o.right-o.left-parseFloat(u(this.uiElem,"borderLeftWidth"))-parseFloat(u(this.uiElem,"borderRightWidth")),this.uiElem.style.width=o+"px",e=0,o=0;e<t.length;
640e++)o+=parseFloat(u(t[e],"height"))+parseFloat(u(t[e],"paddingTop"))+parseFloat(u(t[e],"paddingBottom")),t[e+1]&&(o+=Math.max(parseFloat(u(t[e],"marginBottom")),parseFloat(u(t[e+1],"marginTop"))));o+=parseFloat(u(t[0],"marginTop"))+parseFloat(u(t[t.length-1],"marginBottom")),this.uiElem.style.height=o+1+"px",this.uiElem.setAttribute(i.listStatus.attr,i.listStatus.open),this.uiElem.style.display="block"}},r.prototype.close=function(){this.uiElem&&(this.mouseOnList=!1,this.uiElem.parentNode.removeChild(this.uiElem),this.uiElem=null)},r.prototype.autoScroll=function(){var t=this.getPicked();if(t){var e,o=0,i=0,n=t.clientHeight,l=parseFloat(u(t,"marginTop")),s=parseFloat(u(t,"marginBottom"));for(e=t.previousSibling,i=n+(e?Math.max(l,s):l);e;)o+=n,e=e.previousSibling,o+=e?Math.max(l,s):l;(this.uiElem.clientHeight+this.uiElem.scrollTop-o<i||o-this.uiElem.scrollTop<i)&&(this.uiElem.scrollTop=o)}},r.prototype.pick=function(t){if(this.uiElem){var e=null;if(this.isHint(t))e=t;else if("number"==typeof t&&(t>=0||-1===t)){var o=this.uiElem.querySelectorAll("."+i.autoCompltHintClass);o.length>0&&(e=+t,e=-1===e||e>o.length-1?o.length-1:e,e=o[e])}null!==e&&(this.unpick(),e.className+=" "+i.autoCompltHintSelectedClass,e.style.color=this.styles.autoCompltHintSelected.color,e.style.backgroundColor=this.styles.autoCompltHintSelected.backgroundColor)}},r.prototype.unpick=function(){if(this.uiElem){var t=this.getPicked();t&&(t.className=i.autoCompltHintClass,t.style.color=this.styles.autoCompltHint.color,t.style.backgroundColor=this.styles.autoCompltHint.backgroundColor)}},r.prototype.getPicked=function(){return this.uiElem?this.uiElem.querySelector("."+i.autoCompltHintSelectedClass)||null:null};var c={enable:function(t,o){if(t&&"object"==typeof t&&"string"==typeof t.tagName&&"input"==t.tagName.toLowerCase()&&"text"==t.type&&1===t.nodeType&&!t.autoComplt){t.autoComplt={};var u=i.autoCompltDelay,a=!0,c="",p=null,m=null,d=new r(t),f=function(){if(t.value.length>0&&a&&"function"==typeof p&&c!==t.value){var e={that:t,compltTarget:c=t.value,compltTargetMatchCurrentTarget:function(){return e.compltTarget===c},call:function(){e.compltTargetMatchCurrentTarget()&&p.call(e.that,e.compltTarget,e.openHint)},openHint:function(t){e.compltTargetMatchCurrentTarget()&&(d.putHints(t)?d.open():e.that.autoComplt.close())}};setTimeout(e.call,u)}},h=function(){if(a){var e=d.getPicked();e?t.value=e.innerHTML:t.value=c}},y=function(e){d.mouseOnList?(t.focus(),d.mouseOnList=!1):d.isOpen()&&t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection)},g=function(o){if(e()!==i.modeMobile&&(o=n(o),a))if("keydown"!=o.type||!d.isOpen()||o.keyCode!==i.keyCode.up&&o.keyCode!==i.keyCode.down){if("keyup"==o.type){var l=!1;switch(o.keyCode){case i.keyCode.up:case i.keyCode.down:d.isOpen()||(l=!0);break;case i.keyCode.esc:d.isOpen()&&(t.value=c,t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection));break;case i.keyCode.enter:d.isOpen()&&(h(),t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection));break;default:l=!0}l&&(t.value.length>0?f():t.autoComplt.close())}}else{var s=d.getPicked();o.keyCode===i.keyCode.up?s?s.previousSibling?d.pick(s.previousSibling):d.unpick():d.pick(-1):o.keyCode===i.keyCode.down&&(s?s.nextSibling?d.pick(s.nextSibling):d.unpick():d.pick(0)),d.autoScroll(),h()}},C=function(o){e()!==i.modePC&&(t.value.length>0?f():t.autoComplt.close())},H=function(e){null!=m&&"function"==typeof m[e]&&m[e].call(t)};return t.autoComplt.setHintsFetcher=function(t){return null===t||"function"==typeof t?(p=t,!0):!1},t.autoComplt.setListener=function(t,e){return(null===e||"function"==typeof e)&&i.listenersSupported.indexOf(t)>=0?(null==m&&(m={}),m[t]=e,!0):!1},t.autoComplt.setStyles=function(t,e){var o,n,l=!1;switch(t){case i.autoCompltListClass:o=d.styles.autoCompltList,n=i.adjStyleAttrs.autoCompltList;break;case i.autoCompltHintClass:o=d.styles.autoCompltHint,n=i.adjStyleAttrs.autoCompltHint;break;case i.autoCompltHintSelectedClass:o=d.styles.autoCompltHintSelected,n=i.adjStyleAttrs.autoCompltHintSelected}if(e instanceof Object&&o&&n)for(var s=0;s<n.length;s++)("string"==typeof e[n[s]]||"number"==typeof e[n[s]])&&(l||(l={}),l[n[s]]=o[n[s]]=e[n[s]]);return l},t.autoComplt.config=function(t){var e=!1;if(t instanceof Object){var o;void 0!==t.delay&&(o=Math.floor(t.delay))>0&&(e||(e={}),u=e.delay=o),void 0!==t.maxHintNum&&(o=Math.floor(t.maxHintNum))>0&&(e||(e={}),d.maxHintNum=e.maxHintNum=o)}return e},t.autoComplt.close=function(){c="",d.close(),a&&""!==t.value&&arguments[0]===i.hiddenArg_close_list_n_make_final_selection&&H("select")},t.autoComplt.enable=function(){a=!0},t.autoComplt.disable=function(){a=!1,this.close()},t.autoComplt.destroy=function(){s(t,"blur",y),s(t,"keyup",g),s(t,"keydown",g),this.disable(),delete t.autoComplt},d.onMouseSelectionListener=function(){h(),t.autoComplt.close(i.hiddenArg_close_list_n_make_final_selection)},l(t,"blur",y),l(t,"keyup",g),l(t,"keydown",g),l(t,"input",C),o instanceof Object&&(t.autoComplt.config(o),t.autoComplt.setHintsFetcher(o.hintsFetcher)),t}return null}};return c}); 641</script>
641 642<div class="page-wrapper"><header class="page-header"><a class="action skip sr-only focus:not-sr-only focus:absolute focus:z-40 focus:bg-white 643 contentarea" 644 href="#contentarea"> 645 <span> 646 Zum Inhalt springen </span> 647</a>
648<script> 649 function initHeader () { 650 return { 651 searchOpen: true, 652 cart: {}, 653 isCartOpen: false, 654 getData(data) { 655 if (data.cart) { this.cart = data.cart } 656 }, 657 isCartEmpty() { 658 return !this.cart.summary_count 659 }, 660 toggleCart(event) { 661 if (event.detail && event.detail.isOpen !== undefined) { 662 this.isCartOpen = event.detail.isOpen 663 if (!this.isCartOpen && this.$refs && this.$refs.cartButton) { 664 this.$refs.cartButton.focus() 665 } 666 } else { 667 this.isCartOpen = true 668 } 669 } 670 } 671 } 672 function initCompareHeader() { 673 return { 674 compareProducts: null, 675 itemCount: 0, 676 receiveCompareData(data) { 677 if (data['compare-products']) { 678 this.compareProducts = data['compare-products']; 679 this.itemCount = this.compareProducts.count; 680 } 681 } 682 } 683 } 684</script>
684 685<div id="header" 686 class="relative z-30 w-full border-b bg-container-lighter border-container-lighter" 687 x-data="initHeader()" 688 @private-content-loaded.window="getData(event.detail.data)" 689> 690 <!-- Topbar --> 691 <div class="flex items-center justify-center py-1 bg-c8 text-center text-l text-white font-bold mb-4"> 692 <div class="container topbar"> 693 <style>#html-body [data-pb-style=HRSL65K]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0;padding:0}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="false" data-element="inner" data-pb-style="HRSL65K"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true">
693<script type="application/ld+json"> 694{ 695 "@context": "https://schema.org", 696 "@type": "Organization", 697 "name": "govi.de - Der Medienshop für Pharmazie", 698 "url": "https://govi.de", 699 "makesOffer": [ 700 { 701 "@type": "Offer", 702 "name" : "Versandkostenfreie Lieferung innerhalb Deutschlands", 703 "description" : "Wir liefern für Sie frei Haus innerhalb Deutschlands", 704 "shippingDetails": { 705 "@type": "OfferShippingDetails", 706 "shippingDestination": { 707 "@type": "DefinedRegion", 708 "addressCountry": "DE" 709 }, 710 "shippingRate": { 711 "@type": "MonetaryAmount", 712 "value": "0", 713 "currency": "EUR" 714 } 715 } 716 }, 717 { 718 "@type": "Offer", 719 "itemOffered": { 720 "@type": "Service", 721 "name": "24-Stunden-Bestellmöglichkeit", 722 "description": "Unsere Online-Bestellplattform steht Ihnen rund um die Uhr zur Verfügung." 723 } 724 }, 725 { 726 "@type": "Offer", 727 "itemOffered": { 728 "@type": "Service", 729 "name": "Erstellungen von Literaturlisten", 730 "description": "Wir helfen Ihnen bei der Zusammenstellung passender Literaturquellen für Studium und Beruf." 731 } 732 } 733 ] 734} 735</script>
735</div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><ul class="topbar-animated"> 736<li>â 24-Stunden-Bestellmöglichkeit</li> 737<li>â Versandkostenfrei in Deutschland </li> 738<li>â Erstellungen von Literaturlisten</li> 739</ul></div></div></div> </div> 740 </div> 741 <div class="container flex flex-wrap items-center justify-between w-full px-6 py-3 mx-auto mt-0"> 742 <!--Logo--> 743 <div class="order-1 sm:order-2 lg:order-1 w-full pb-2 sm:w-auto sm:pb-0"> 744 <a 745 class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 746 no-underline hover:no-underline font-title" 747 href="https://www.govi.de/" 748 aria-label="Go to Home page" 749 > 750 <img 751 src="https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/images/Govi-Logo-RGB.svg" 752 alt="Store logo" 753 class="w-1/2 sm:w-[18rem]" 754 /> 755 </a> 756</div> 757 <!-- Avoxa Logo --> 758 <!-- Avoxa Logo --> 759<div class="hidden lg:block order-2 sm:order-4 lg:order-2 xl:order-4 760 w-full pb-2 sm:w-auto sm:pb-0 pt-4 sm:pt-0 lg:pt-0 ml-0 xl:ml-4"> 761 <a 762 class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 763 no-underline hover:no-underline font-title" 764 href="https://avoxa.de" 765 target="_blank" 766 aria-label="Avoxa" 767 > 768 <img 769 src="https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/images/Avoxa-Logo-RGB.svg" 770 alt="Avoxa" 771 class="w-[15rem]" 772 /> 773 </a> 774</div> 775 </div> 776 <div class="container flex flex-wrap items-center justify-between w-full px-6 py-0 mx-auto mt-0"> 777 <!--Main Navigation--> 778 <nav 779 x-data="initMenuMobile_6ac21e8075380()" 780 @load.window="setActiveMenu($root)" 781 @keydown.window.escape="closeMenu()" 782 class="z-20 order-3 sm:order-1 lg:order-3 xl:order-2 navigation lg:hidden w-12 h-12" 783 aria-label="Site navigation" 784 role="navigation" 785> 786 <!-- mobile --> 787 <button 788 x-ref="mobileMenuTrigger" 789 @click="openMenu()" 790 :class="{'overflow-x-hidden overflow-y-auto fixed top-0 left-0 w-full' : open}" 791 type="button" 792 aria-label="Open menu" 793 aria-haspopup="menu" 794 :aria-expanded="open" 795 :hidden="open" 796 > 797 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="p-3" width="48" height="48" :class="{ 'hidden' : open, 'block': !open }" aria-hidden="true"> 798 <path stroke-linecap="round" stroke-linejoin="round" d="M4 6h16M4 12h16M4 18h16"/> 799</svg> 800 </button> 801 <div 802 x-ref="mobileMenuNavLinks" 803 class=" 804 fixed top-0 right-0 w-full h-full p-1 flex 805 flex-col border-t border-container bg-container-lighter 806 overflow-y-auto overflow-x-hidden 807 " 808 :class="{ 'hidden' : !open }" 809 :aria-hidden="open ? 'false' : 'true'" 810 role="dialog" 811 aria-modal="true" 812 > 813 <ul 814 class="border-t flex flex-col gap-y-1 mt-16" 815 aria-label="Site navigation links" 816 > 817 <li 818 data-child-id="category-node-14-main" 819 class="level-0" 820 > 821 <div 822 class="flex items-center transition-transform duration-150 ease-in-out transform" 823 :class="{ 824 '-translate-x-full' : mobilePanelActiveId, 825 'translate-x-0' : !mobilePanelActiveId 826 }" 827 > 828 <a 829 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 830 bg-container-lighter border-container level-0 831 " 832 href="https://www.govi.de/apotheke" 833 title="Apotheke" 834 > 835 Apotheke </a> 836 <button 837 @click="openSubcategory('category-node-14')" 838 class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer 839 bg-container-lighter border-container" 840 aria-label="Open Apotheke subcategories" 841 aria-haspopup="true" 842 :aria-expanded="mobilePanelActiveId === 'category-node-14'" 843 > 844 <div class="w-8 h-8 border rounded"> 845 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true"> 846 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 847</svg> 848 </div> 849 </button> 850 </div> 851 <div 852 data-child-id="category-node-14" 853 class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter" 854 :class="{ 855 'hidden': mobilePanelActiveId !== 'category-node-14' 856 }" 857 > 858 <ul 859 class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform" 860 :class="{ 861 'translate-x-full' : mobilePanelActiveId !== 'category-node-14', 862 'translate-x-0' : mobilePanelActiveId === 'category-node-14', 863 }" 864 aria-label="Subcategories" 865 > 866 <li> 867 <button 868 type="button" 869 class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t" 870 @click="backToMainCategories('category-node-14-main')" 871 aria-label="Back to main categories" 872 > 873 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 874 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 875</svg>
876 <span class="ml-4"> 877 Apotheke </span> 878 </button> 879 </li> 880 <li> 881 <a 882 href="https://www.govi.de/apotheke" 883 title="Apotheke" 884 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 885 bg-container-lighter border-container 886 " 887 > 888 <span class="ml-10"> 889 Alle anzeigen </span> 890 </a> 891 </li> 892 <li> 893 <a 894 href="https://www.govi.de/apotheke/arzneibuecher" 895 title="Arzneibücher" 896 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 897 bg-container-lighter border-container 898 " 899 > 900 <span class="ml-10 text-base text-gray-700"> 901 Arzneibücher </span> 902 </a> 903 </li> 904 <li> 905 <a 906 href="https://www.govi.de/apotheke/pharmazeutische-beratung" 907 title="Pharmazeutische Beratung" 908 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 909 bg-container-lighter border-container 910 " 911 > 912 <span class="ml-10 text-base text-gray-700"> 913 Pharmazeutische Beratung </span> 914 </a> 915 </li> 916 <li> 917 <a 918 href="https://www.govi.de/apotheke/einrichtung-revision" 919 title="Einrichtung & Revision" 920 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 921 bg-container-lighter border-container 922 " 923 > 924 <span class="ml-10 text-base text-gray-700"> 925 Einrichtung & Revision </span> 926 </a> 927 </li> 928 <li> 929 <a 930 href="https://www.govi.de/apotheke/management" 931 title="Management" 932 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 933 bg-container-lighter border-container 934 " 935 >
936 <span class="ml-10 text-base text-gray-700"> 937 Management </span> 938 </a> 939 </li> 940 <li> 941 <a 942 href="https://www.govi.de/apotheke/nachschlagewerke" 943 title="Nachschlagewerke" 944 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 945 bg-container-lighter border-container 946 " 947 > 948 <span class="ml-10 text-base text-gray-700"> 949 Nachschlagewerke </span> 950 </a> 951 </li> 952 <li> 953 <a 954 href="https://www.govi.de/apotheke/recht-dokumentation" 955 title="Recht & Dokumentation" 956 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 957 bg-container-lighter border-container 958 " 959 > 960 <span class="ml-10 text-base text-gray-700"> 961 Recht & Dokumentation </span> 962 </a> 963 </li> 964 <li> 965 <a 966 href="https://www.govi.de/apotheke/rezeptur-defektur-kosmetik" 967 title="Rezeptur, Defektur & Kosmetik" 968 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 969 bg-container-lighter border-container 970 " 971 > 972 <span class="ml-10 text-base text-gray-700"> 973 Rezeptur, Defektur & Kosmetik </span> 974 </a> 975 </li> 976 <li> 977 <a 978 href="https://www.govi.de/apotheke/mitarbeiterschulungen" 979 title="Mitarbeiterschulungen" 980 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 981 bg-container-lighter border-container 982 " 983 > 984 <span class="ml-10 text-base text-gray-700"> 985 Mitarbeiterschulungen </span> 986 </a> 987 </li> 988 </ul> 989 <button 990 @click="closeMenu()" 991 class="absolute flex justify-end w-16 self-end mb-1 transition-none" 992 aria-label="Close menu" 993 > 994 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true"> 995 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 996</svg> 997 </button> 998 </div> 999 </li> 1000 <li 1001 data-child-id="category-node-4-main" 1002 class="level-0" 1003 > 1004 <div 1005 class="flex items-center transition-transform duration-150 ease-in-out transform" 1006 :class="{
1007 '-translate-x-full' : mobilePanelActiveId, 1008 'translate-x-0' : !mobilePanelActiveId 1009 }" 1010 > 1011 <a 1012 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1013 bg-container-lighter border-container level-0 1014 " 1015 href="https://www.govi.de/pharmazie-medizin" 1016 title="Pharmazie & Medizin" 1017 > 1018 Pharmazie & Medizin </a> 1019 <button 1020 @click="openSubcategory('category-node-4')" 1021 class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer 1022 bg-container-lighter border-container" 1023 aria-label="Open Pharmazie & Medizin subcategories" 1024 aria-haspopup="true" 1025 :aria-expanded="mobilePanelActiveId === 'category-node-4'" 1026 > 1027 <div class="w-8 h-8 border rounded"> 1028 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true"> 1029 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 1030</svg> 1031 </div> 1032 </button> 1033 </div> 1034 <div 1035 data-child-id="category-node-4" 1036 class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter" 1037 :class="{ 1038 'hidden': mobilePanelActiveId !== 'category-node-4' 1039 }" 1040 > 1041 <ul 1042 class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform" 1043 :class="{ 1044 'translate-x-full' : mobilePanelActiveId !== 'category-node-4', 1045 'translate-x-0' : mobilePanelActiveId === 'category-node-4', 1046 }" 1047 aria-label="Subcategories" 1048 > 1049 <li> 1050 <button 1051 type="button" 1052 class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t" 1053 @click="backToMainCategories('category-node-4-main')" 1054 aria-label="Back to main categories" 1055 > 1056 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 1057 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 1058</svg> 1059 <span class="ml-4"> 1060 Pharmazie & Medizin </span> 1061 </button> 1062 </li> 1063 <li> 1064 <a 1065 href="https://www.govi.de/pharmazie-medizin" 1066 title="Pharmazie & Medizin" 1067 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1068 bg-container-lighter border-container 1069 " 1070 >
1071 <span class="ml-10"> 1072 Alle anzeigen </span> 1073 </a> 1074 </li> 1075 <li> 1076 <a 1077 href="https://www.govi.de/pharmazie-medizin/ausbildung-studium" 1078 title="Ausbildung & Studium" 1079 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1080 bg-container-lighter border-container 1081 " 1082 > 1083 <span class="ml-10 text-base text-gray-700"> 1084 Ausbildung & Studium </span> 1085 </a> 1086 </li> 1087 <li> 1088 <a 1089 href="https://www.govi.de/apotheke/pharmazeutische-beratung" 1090 title="Pharmazeutische Beratung" 1091 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1092 bg-container-lighter border-container 1093 " 1094 > 1095 <span class="ml-10 text-base text-gray-700"> 1096 Pharmazeutische Beratung </span> 1097 </a> 1098 </li> 1099 <li> 1100 <a 1101 href="https://www.govi.de/pharmazie-medizin/biologie-chemie-physik-mathematik" 1102 title="Biologie, Chemie, Physik, Mathematik" 1103 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1104 bg-container-lighter border-container 1105 " 1106 > 1107 <span class="ml-10 text-base text-gray-700"> 1108 Biologie, Chemie, Physik, Mathematik </span> 1109 </a> 1110 </li> 1111 <li> 1112 <a 1113 href="https://www.govi.de/pharmazie-medizin/komplementaermedizin" 1114 title="Komplementärmedizin" 1115 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1116 bg-container-lighter border-container 1117 " 1118 > 1119 <span class="ml-10 text-base text-gray-700"> 1120 Komplementärmedizin </span> 1121 </a> 1122 </li> 1123 <li> 1124 <a 1125 href="https://www.govi.de/pharmazie-medizin/medizin" 1126 title="Medizin" 1127 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1128 bg-container-lighter border-container 1129 " 1130 >
1131 <span class="ml-10 text-base text-gray-700"> 1132 Medizin </span> 1133 </a> 1134 </li> 1135 <li> 1136 <a 1137 href="https://www.govi.de/pharmazie-medizin/pharmakologie-toxikologie" 1138 title="Pharmakologie & Toxikologie" 1139 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1140 bg-container-lighter border-container 1141 " 1142 > 1143 <span class="ml-10 text-base text-gray-700"> 1144 Pharmakologie & Toxikologie </span> 1145 </a> 1146 </li> 1147 <li> 1148 <a 1149 href="https://www.govi.de/pharmazie-medizin/pharmaziegeschichte" 1150 title="Pharmaziegeschichte" 1151 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1152 bg-container-lighter border-container 1153 " 1154 > 1155 <span class="ml-10 text-base text-gray-700"> 1156 Pharmaziegeschichte </span> 1157 </a> 1158 </li> 1159 <li> 1160 <a 1161 href="https://www.govi.de/pharmazie-medizin/tiermedizin" 1162 title="Tiermedizin" 1163 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1164 bg-container-lighter border-container 1165 " 1166 > 1167 <span class="ml-10 text-base text-gray-700"> 1168 Tiermedizin </span> 1169 </a> 1170 </li> 1171 <li> 1172 <a 1173 href="https://www.govi.de/pharmazie-medizin/zeitschriften" 1174 title="Zeitschriften" 1175 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1176 bg-container-lighter border-container 1177 " 1178 > 1179 <span class="ml-10 text-base text-gray-700"> 1180 Zeitschriften </span> 1181 </a> 1182 </li> 1183 </ul> 1184 <button 1185 @click="closeMenu()" 1186 class="absolute flex justify-end w-16 self-end mb-1 transition-none" 1187 aria-label="Close menu" 1188 > 1189 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true"> 1190 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 1191</svg> 1192 </button> 1193 </div> 1194 </li> 1195 <li 1196 data-child-id="category-node-5-main" 1197 class="level-0" 1198 > 1199 <div 1200 class="flex items-center transition-transform duration-150 ease-in-out transform" 1201 :class="{
1202 '-translate-x-full' : mobilePanelActiveId, 1203 'translate-x-0' : !mobilePanelActiveId 1204 }" 1205 > 1206 <a 1207 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1208 bg-container-lighter border-container level-0 1209 " 1210 href="https://www.govi.de/digitale-loesungen" 1211 title="Digitale Lösungen" 1212 > 1213 Digitale Lösungen </a> 1214 <button 1215 @click="openSubcategory('category-node-5')" 1216 class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer 1217 bg-container-lighter border-container" 1218 aria-label="Open Digitale Lösungen subcategories" 1219 aria-haspopup="true" 1220 :aria-expanded="mobilePanelActiveId === 'category-node-5'" 1221 > 1222 <div class="w-8 h-8 border rounded"> 1223 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true"> 1224 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 1225</svg> 1226 </div> 1227 </button> 1228 </div> 1229 <div 1230 data-child-id="category-node-5" 1231 class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter" 1232 :class="{ 1233 'hidden': mobilePanelActiveId !== 'category-node-5' 1234 }" 1235 > 1236 <ul 1237 class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform" 1238 :class="{ 1239 'translate-x-full' : mobilePanelActiveId !== 'category-node-5', 1240 'translate-x-0' : mobilePanelActiveId === 'category-node-5', 1241 }" 1242 aria-label="Subcategories" 1243 > 1244 <li> 1245 <button 1246 type="button" 1247 class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t" 1248 @click="backToMainCategories('category-node-5-main')" 1249 aria-label="Back to main categories" 1250 > 1251 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 1252 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 1253</svg> 1254 <span class="ml-4"> 1255 Digitale Lösungen </span> 1256 </button> 1257 </li> 1258 <li> 1259 <a 1260 href="https://www.govi.de/digitale-loesungen" 1261 title="Digitale Lösungen" 1262 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1263 bg-container-lighter border-container 1264 " 1265 >
1266 <span class="ml-10"> 1267 Alle anzeigen </span> 1268 </a> 1269 </li> 1270 <li> 1271 <a 1272 href="https://www.govi.de/digitale-loesungen/programme" 1273 title="Programme" 1274 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1275 bg-container-lighter border-container 1276 " 1277 > 1278 <span class="ml-10 text-base text-gray-700"> 1279 Programme </span> 1280 </a> 1281 </li> 1282 <li> 1283 <a 1284 href="https://www.govi.de/digitale-loesungen/schulungen" 1285 title="Schulungen" 1286 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1287 bg-container-lighter border-container 1288 " 1289 > 1290 <span class="ml-10 text-base text-gray-700"> 1291 Schulungen </span> 1292 </a> 1293 </li> 1294 <li> 1295 <a 1296 href="https://www.govi.de/digitale-loesungen/e-journals-e-artikel" 1297 title="E-Journals & E-Artikel" 1298 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1299 bg-container-lighter border-container 1300 " 1301 > 1302 <span class="ml-10 text-base text-gray-700"> 1303 E-Journals & E-Artikel </span> 1304 </a> 1305 </li> 1306 <li> 1307 <a 1308 href="https://www.govi.de/digitale-loesungen/avoxa-content-service" 1309 title="Avoxa Content Service" 1310 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1311 bg-container-lighter border-container 1312 " 1313 > 1314 <span class="ml-10 text-base text-gray-700"> 1315 Avoxa Content Service </span> 1316 </a> 1317 </li> 1318 </ul> 1319 <button 1320 @click="closeMenu()" 1321 class="absolute flex justify-end w-16 self-end mb-1 transition-none" 1322 aria-label="Close menu" 1323 > 1324 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true"> 1325 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 1326</svg> 1327 </button> 1328 </div> 1329 </li> 1330 <li 1331 data-child-id="category-node-6-main" 1332 class="level-0" 1333 > 1334 <div 1335 class="flex items-center transition-transform duration-150 ease-in-out transform" 1336 :class="{
1337 '-translate-x-full' : mobilePanelActiveId, 1338 'translate-x-0' : !mobilePanelActiveId 1339 }" 1340 > 1341 <a 1342 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1343 bg-container-lighter border-container level-0 1344 " 1345 href="https://www.govi.de/sachbuch-literatur" 1346 title="Sachbuch & Literatur" 1347 > 1348 Sachbuch & Literatur </a> 1349 <button 1350 @click="openSubcategory('category-node-6')" 1351 class="absolute right-0 flex items-center justify-center w-11 h-11 mr-8 cursor-pointer 1352 bg-container-lighter border-container" 1353 aria-label="Open Sachbuch & Literatur subcategories" 1354 aria-haspopup="true" 1355 :aria-expanded="mobilePanelActiveId === 'category-node-6'" 1356 > 1357 <div class="w-8 h-8 border rounded"> 1358 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-full h-full p-1" width="24" height="24" aria-hidden="true"> 1359 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 1360</svg> 1361 </div> 1362 </button> 1363 </div> 1364 <div 1365 data-child-id="category-node-6" 1366 class="absolute top-0 right-0 z-10 flex flex-col gap-1 w-full h-full p-1 bg-container-lighter" 1367 :class="{ 1368 'hidden': mobilePanelActiveId !== 'category-node-6' 1369 }" 1370 > 1371 <ul 1372 class="mt-16 transition-transform duration-200 ease-in-out translate-x-full transform" 1373 :class="{ 1374 'translate-x-full' : mobilePanelActiveId !== 'category-node-6', 1375 'translate-x-0' : mobilePanelActiveId === 'category-node-6', 1376 }" 1377 aria-label="Subcategories" 1378 > 1379 <li> 1380 <button 1381 type="button" 1382 class="flex items-center px-8 py-4 border-b cursor-pointer bg-container border-container w-full border-t" 1383 @click="backToMainCategories('category-node-6-main')" 1384 aria-label="Back to main categories" 1385 > 1386 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 1387 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 1388</svg> 1389 <span class="ml-4"> 1390 Sachbuch & Literatur </span> 1391 </button> 1392 </li> 1393 <li> 1394 <a 1395 href="https://www.govi.de/sachbuch-literatur" 1396 title="Sachbuch & Literatur" 1397 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1398 bg-container-lighter border-container 1399 " 1400 >
1401 <span class="ml-10"> 1402 Alle anzeigen </span> 1403 </a> 1404 </li> 1405 <li> 1406 <a 1407 href="https://www.govi.de/sachbuch-literatur/gesundheitsratgeber" 1408 title="Gesundheitsratgeber" 1409 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1410 bg-container-lighter border-container 1411 " 1412 > 1413 <span class="ml-10 text-base text-gray-700"> 1414 Gesundheitsratgeber </span> 1415 </a> 1416 </li> 1417 <li> 1418 <a 1419 href="https://www.govi.de/sachbuch-literatur/gesunde-ernaehrung" 1420 title="Gesunde Ernährung" 1421 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1422 bg-container-lighter border-container 1423 " 1424 > 1425 <span class="ml-10 text-base text-gray-700"> 1426 Gesunde Ernährung </span> 1427 </a> 1428 </li> 1429 <li> 1430 <a 1431 href="https://www.govi.de/sachbuch-literatur/heilpflanzen-garten" 1432 title="Heilpflanzen & Garten" 1433 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1434 bg-container-lighter border-container 1435 " 1436 > 1437 <span class="ml-10 text-base text-gray-700"> 1438 Heilpflanzen & Garten </span> 1439 </a> 1440 </li> 1441 <li> 1442 <a 1443 href="https://www.govi.de/sachbuch-literatur/sachbuecher" 1444 title="Sachbücher" 1445 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1446 bg-container-lighter border-container 1447 " 1448 > 1449 <span class="ml-10 text-base text-gray-700"> 1450 Sachbücher </span> 1451 </a> 1452 </li> 1453 <li> 1454 <a 1455 href="https://www.govi.de/sachbuch-literatur/kinderbuecher" 1456 title="Kinderbücher" 1457 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1458 bg-container-lighter border-container 1459 " 1460 >
1461 <span class="ml-10 text-base text-gray-700"> 1462 Kinderbücher </span> 1463 </a> 1464 </li> 1465 <li> 1466 <a 1467 href="https://www.govi.de/sachbuch-literatur/lesevergnuegen" 1468 title="Lesevergnügen" 1469 class="flex items-center w-full px-8 py-4 border-b cursor-pointer 1470 bg-container-lighter border-container 1471 " 1472 > 1473 <span class="ml-10 text-base text-gray-700"> 1474 Lesevergnügen </span> 1475 </a> 1476 </li> 1477 </ul> 1478 <button 1479 @click="closeMenu()" 1480 class="absolute flex justify-end w-16 self-end mb-1 transition-none" 1481 aria-label="Close menu" 1482 > 1483 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true"> 1484 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 1485</svg> 1486 </button> 1487 </div> 1488 </li> 1489 <li> 1490 <!-- Topbar --> 1491 <div class="block flex items-center justify-center py-2 bg-c8 text-center text-l text-white"> 1492 <div class="container topbar"> 1493 <style>#html-body [data-pb-style=AGJ6Y07]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;margin:0;padding:0}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-background-lazy-load="false" data-element="inner" data-pb-style="AGJ6Y07"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><ul class=""> 1494<li>â 24-Stunden-Bestellmöglichkeit</li> 1495<li>â Versandkostenfreie Lieferung innerhalb Deutschlands</li> 1496<li>â Erstellungen von Literaturlisten</li> 1497</ul></div></div></div> </div> 1498 </div> 1499 </li> 1500 <li data-child-id="avoxa-logo-main" 1501 class="level-0"> 1502 <!-- Avoxa Logo --> 1503 <!-- Avoxa Logo --> 1504<div class="block pt-8 sm:pt-8 order-2 sm:order-4 lg:order-2 xl:order-4 1505 w-full pb-2 sm:w-auto sm:pb-0 pt-4 sm:pt-0 lg:pt-0 ml-0 xl:ml-4"> 1506 <a 1507 class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 1508 no-underline hover:no-underline font-title" 1509 href="https://avoxa.de" 1510 target="_blank" 1511 aria-label="Avoxa" 1512 > 1513 <img 1514 src="https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/images/Avoxa-Logo-RGB.svg" 1515 alt="Avoxa" 1516 class="w-[15rem]" 1517 /> 1518 </a> 1519</div> 1520 </li> 1521 </ul> 1522 <button 1523 @click="closeMenu()" 1524 class="absolute flex justify-end w-16 self-end mb-1" 1525 aria-label="Close menu" 1526 type="button" 1527 > 1528 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="hidden p-4" width="64" height="64" :class="{ 'hidden' : !open, 'block': open }" aria-hidden="true"> 1529 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 1530</svg> 1531 </button> 1532 </div> 1533</nav>
1534<script> 1535 'use strict'; 1536 1537 const initMenuMobile_6ac21e8075380 = () => { 1538 return { 1539 mobilePanelActiveId: null, 1540 open: false, 1541 setActiveMenu(menuNode) { 1542 Array.from(menuNode.querySelectorAll('a')).filter(link => { 1543 return link.href === window.location.href.split('?')[0]; 1544 }).map(item => { 1545 item.classList.add('underline'); 1546 item.closest('li.level-0') && 1547 item.closest('li.level-0').querySelector('a.level-0').classList.add('underline'); 1548 }); 1549 }, 1550 openMenu() { 1551 this.open = true 1552 this.$nextTick(() => hyva.trapFocus(this.$refs['mobileMenuNavLinks'])); 1553 // Prevent from body scrolling while mobile menu opened 1554 document.body.style.position = 'fixed'; 1555 }, 1556 closeMenu() { 1557 document.body.style.position = ''; 1558 1559 if (this.open) { 1560 this.$nextTick(() => this.$refs['mobileMenuTrigger'].focus() || hyva.releaseFocus()); 1561 } 1562 1563 this.open = false 1564 this.mobilePanelActiveId = null 1565 }, 1566 openSubcategory(index) { 1567 const menuNodeRef = document.querySelector('[data-child-id=' + index + ']') 1568 this.mobilePanelActiveId = this.mobilePanelActiveId === index ? 0 : index 1569 this.$nextTick(() => hyva.trapFocus(menuNodeRef)) 1570 }, 1571 backToMainCategories(index) { 1572 const menuNodeRef = document.querySelector('[data-child-id=' + index + ']') 1573 this.mobilePanelActiveId = 0 1574 this.$nextTick(() => { 1575 hyva.trapFocus(this.$refs['mobileMenuNavLinks']) 1576 menuNodeRef.querySelector('a').focus() 1577 }) 1578 } 1579 } 1580 } 1581</script>
1581 1582<div x-data="initMenuDesktop_6ac21e8079072()" 1583 class="z-20 order-3 sm:order-1 lg:order-3 xl:order-2 navigation hidden lg:flex" 1584> 1585 <!-- desktop --> 1586 <div x-ref="nav-desktop" 1587 @load.window="setActiveMenu($root)" 1588 class="hidden lg:block lg:relative lg:min-h-0 lg:w-auto lg:pt-0"> 1589 <nav 1590 class="duration-150 ease-in-out transform w-auto relative min-h-0 transition-display" 1591 aria-label="Main menu" 1592 > 1593 <ul class="flex justify-start"> 1594 <li class="relative mr-2 level-0" 1595 @mouseenter="hoverPanelActiveId = 'category-node-14'" 1596 @mouseleave="hoverPanelActiveId = 0" 1597 @keyup.escape="hoverPanelActiveId = 0" 1598 > 1599 <span class="flex items-center gap-1 p-3 text-md bg-opacity-95"> 1600 <a class="w-full py-3 text-base text-gray-700 hover:underline level-0" 1601 href="https://www.govi.de/apotheke" 1602 title="Apotheke" 1603 @focus="hoverPanelActiveId = 0" 1604 > 1605 Apotheke </a> 1606 <button 1607 type="button" 1608 data-sr-button-id="category-node-14" 1609 :aria-expanded="hoverPanelActiveId === 'category-node-14' ? 'true' : 'false'" 1610 @click="openMenuOnClick('category-node-14')" 1611 > 1612 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true"> 1613 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 1614</svg> 1615 <span class="sr-only"> 1616 Show submenu for Apotheke category </span> 1617 </button> 1618 </span> 1619 <ul 1620 class="absolute z-10 hidden px-6 py-4 -ml-6 shadow-lg bg-container-lighter/95" 1621 :class="{ 1622 'hidden' : hoverPanelActiveId !== 'category-node-14', 1623 'block' : hoverPanelActiveId === 'category-node-14' 1624 }" 1625 > 1626 <li> 1627 <a href="https://www.govi.de/apotheke/arzneibuecher" 1628 title="Arzneibücher" 1629 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1630 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1631 > 1632 <span class="text-base text-gray-700"> 1633 Arzneibücher </span> 1634 </a> 1635 </li> 1636 <li> 1637 <a href="https://www.govi.de/apotheke/pharmazeutische-beratung" 1638 title="Pharmazeutische Beratung" 1639 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1640 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1641 >
1642 <span class="text-base text-gray-700"> 1643 Pharmazeutische Beratung </span> 1644 </a> 1645 </li> 1646 <li> 1647 <a href="https://www.govi.de/apotheke/einrichtung-revision" 1648 title="Einrichtung & Revision" 1649 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1650 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1651 > 1652 <span class="text-base text-gray-700"> 1653 Einrichtung & Revision </span> 1654 </a> 1655 </li> 1656 <li> 1657 <a href="https://www.govi.de/apotheke/management" 1658 title="Management" 1659 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1660 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1661 > 1662 <span class="text-base text-gray-700"> 1663 Management </span> 1664 </a> 1665 </li> 1666 <li> 1667 <a href="https://www.govi.de/apotheke/nachschlagewerke" 1668 title="Nachschlagewerke" 1669 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1670 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1671 > 1672 <span class="text-base text-gray-700"> 1673 Nachschlagewerke </span> 1674 </a> 1675 </li> 1676 <li> 1677 <a href="https://www.govi.de/apotheke/recht-dokumentation" 1678 title="Recht & Dokumentation" 1679 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1680 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1681 > 1682 <span class="text-base text-gray-700"> 1683 Recht & Dokumentation </span> 1684 </a> 1685 </li> 1686 <li> 1687 <a href="https://www.govi.de/apotheke/rezeptur-defektur-kosmetik" 1688 title="Rezeptur, Defektur & Kosmetik" 1689 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1690 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1691 >
1692 <span class="text-base text-gray-700"> 1693 Rezeptur, Defektur & Kosmetik </span> 1694 </a> 1695 </li> 1696 <li> 1697 <a href="https://www.govi.de/apotheke/mitarbeiterschulungen" 1698 title="Mitarbeiterschulungen" 1699 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1700 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D14]').focus())" 1701 > 1702 <span class="text-base text-gray-700"> 1703 Mitarbeiterschulungen </span> 1704 </a> 1705 </li> 1706 </ul> 1707 </li> 1708 <li class="relative mr-2 level-0" 1709 @mouseenter="hoverPanelActiveId = 'category-node-4'" 1710 @mouseleave="hoverPanelActiveId = 0" 1711 @keyup.escape="hoverPanelActiveId = 0" 1712 > 1713 <span class="flex items-center gap-1 p-3 text-md bg-opacity-95"> 1714 <a class="w-full py-3 text-base text-gray-700 hover:underline level-0" 1715 href="https://www.govi.de/pharmazie-medizin" 1716 title="Pharmazie & Medizin" 1717 @focus="hoverPanelActiveId = 0" 1718 > 1719 Pharmazie & Medizin </a> 1720 <button 1721 type="button" 1722 data-sr-button-id="category-node-4" 1723 :aria-expanded="hoverPanelActiveId === 'category-node-4' ? 'true' : 'false'" 1724 @click="openMenuOnClick('category-node-4')" 1725 > 1726 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true"> 1727 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 1728</svg> 1729 <span class="sr-only"> 1730 Show submenu for Pharmazie & Medizin category </span> 1731 </button> 1732 </span> 1733 <ul 1734 class="absolute z-10 hidden px-6 py-4 -ml-6 shadow-lg bg-container-lighter/95" 1735 :class="{ 1736 'hidden' : hoverPanelActiveId !== 'category-node-4', 1737 'block' : hoverPanelActiveId === 'category-node-4' 1738 }" 1739 > 1740 <li> 1741 <a href="https://www.govi.de/pharmazie-medizin/ausbildung-studium" 1742 title="Ausbildung & Studium" 1743 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1744 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1745 >
1746 <span class="text-base text-gray-700"> 1747 Ausbildung & Studium </span> 1748 </a> 1749 </li> 1750 <li> 1751 <a href="https://www.govi.de/apotheke/pharmazeutische-beratung" 1752 title="Pharmazeutische Beratung" 1753 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1754 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1755 > 1756 <span class="text-base text-gray-700"> 1757 Pharmazeutische Beratung </span> 1758 </a> 1759 </li> 1760 <li> 1761 <a href="https://www.govi.de/pharmazie-medizin/biologie-chemie-physik-mathematik" 1762 title="Biologie, Chemie, Physik, Mathematik" 1763 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1764 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1765 > 1766 <span class="text-base text-gray-700"> 1767 Biologie, Chemie, Physik, Mathematik </span> 1768 </a> 1769 </li> 1770 <li> 1771 <a href="https://www.govi.de/pharmazie-medizin/komplementaermedizin" 1772 title="Komplementärmedizin" 1773 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1774 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1775 > 1776 <span class="text-base text-gray-700"> 1777 Komplementärmedizin </span> 1778 </a> 1779 </li> 1780 <li> 1781 <a href="https://www.govi.de/pharmazie-medizin/medizin" 1782 title="Medizin" 1783 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1784 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1785 > 1786 <span class="text-base text-gray-700"> 1787 Medizin </span> 1788 </a> 1789 </li> 1790 <li> 1791 <a href="https://www.govi.de/pharmazie-medizin/pharmakologie-toxikologie" 1792 title="Pharmakologie & Toxikologie" 1793 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1794 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1795 >
1796 <span class="text-base text-gray-700"> 1797 Pharmakologie & Toxikologie </span> 1798 </a> 1799 </li> 1800 <li> 1801 <a href="https://www.govi.de/pharmazie-medizin/pharmaziegeschichte" 1802 title="Pharmaziegeschichte" 1803 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1804 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1805 > 1806 <span class="text-base text-gray-700"> 1807 Pharmaziegeschichte </span> 1808 </a> 1809 </li> 1810 <li> 1811 <a href="https://www.govi.de/pharmazie-medizin/tiermedizin" 1812 title="Tiermedizin" 1813 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1814 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1815 > 1816 <span class="text-base text-gray-700"> 1817 Tiermedizin </span> 1818 </a> 1819 </li> 1820 <li> 1821 <a href="https://www.govi.de/pharmazie-medizin/zeitschriften" 1822 title="Zeitschriften" 1823 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1824 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D4]').focus())" 1825 > 1826 <span class="text-base text-gray-700"> 1827 Zeitschriften </span> 1828 </a> 1829 </li> 1830 </ul> 1831 </li> 1832 <li class="relative mr-2 level-0" 1833 @mouseenter="hoverPanelActiveId = 'category-node-5'" 1834 @mouseleave="hoverPanelActiveId = 0" 1835 @keyup.escape="hoverPanelActiveId = 0" 1836 > 1837 <span class="flex items-center gap-1 p-3 text-md bg-opacity-95"> 1838 <a class="w-full py-3 text-base text-gray-700 hover:underline level-0" 1839 href="https://www.govi.de/digitale-loesungen" 1840 title="Digitale Lösungen" 1841 @focus="hoverPanelActiveId = 0" 1842 > 1843 Digitale Lösungen </a> 1844 <button 1845 type="button" 1846 data-sr-button-id="category-node-5" 1847 :aria-expanded="hoverPanelActiveId === 'category-node-5' ? 'true' : 'false'" 1848 @click="openMenuOnClick('category-node-5')" 1849 > 1850 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true"> 1851 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 1852</svg>
1853 <span class="sr-only"> 1854 Show submenu for Digitale Lösungen category </span> 1855 </button> 1856 </span> 1857 <ul 1858 class="absolute z-10 hidden px-6 py-4 -ml-6 shadow-lg bg-container-lighter/95" 1859 :class="{ 1860 'hidden' : hoverPanelActiveId !== 'category-node-5', 1861 'block' : hoverPanelActiveId === 'category-node-5' 1862 }" 1863 > 1864 <li> 1865 <a href="https://www.govi.de/digitale-loesungen/programme" 1866 title="Programme" 1867 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1868 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D5]').focus())" 1869 > 1870 <span class="text-base text-gray-700"> 1871 Programme </span> 1872 </a> 1873 </li> 1874 <li> 1875 <a href="https://www.govi.de/digitale-loesungen/schulungen" 1876 title="Schulungen" 1877 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1878 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D5]').focus())" 1879 > 1880 <span class="text-base text-gray-700"> 1881 Schulungen </span> 1882 </a> 1883 </li> 1884 <li> 1885 <a href="https://www.govi.de/digitale-loesungen/e-journals-e-artikel" 1886 title="E-Journals & E-Artikel" 1887 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1888 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D5]').focus())" 1889 > 1890 <span class="text-base text-gray-700"> 1891 E-Journals & E-Artikel </span> 1892 </a> 1893 </li> 1894 <li> 1895 <a href="https://www.govi.de/digitale-loesungen/avoxa-content-service" 1896 title="Avoxa Content Service" 1897 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1898 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D5]').focus())" 1899 > 1900 <span class="text-base text-gray-700"> 1901 Avoxa Content Service </span> 1902 </a> 1903 </li> 1904 </ul> 1905 </li> 1906 <li class="relative mr-2 level-0" 1907 @mouseenter="hoverPanelActiveId = 'category-node-6'" 1908 @mouseleave="hoverPanelActiveId = 0" 1909 @keyup.escape="hoverPanelActiveId = 0" 1910 >
1911 <span class="flex items-center gap-1 p-3 text-md bg-opacity-95"> 1912 <a class="w-full py-3 text-base text-gray-700 hover:underline level-0" 1913 href="https://www.govi.de/sachbuch-literatur" 1914 title="Sachbuch & Literatur" 1915 @focus="hoverPanelActiveId = 0" 1916 > 1917 Sachbuch & Literatur </a> 1918 <button 1919 type="button" 1920 data-sr-button-id="category-node-6" 1921 :aria-expanded="hoverPanelActiveId === 'category-node-6' ? 'true' : 'false'" 1922 @click="openMenuOnClick('category-node-6')" 1923 > 1924 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="flex self-center h-5 w-5" width="25" height="25" aria-hidden="true"> 1925 <path fill-rule="evenodd" d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" clip-rule="evenodd"/> 1926</svg> 1927 <span class="sr-only"> 1928 Show submenu for Sachbuch & Literatur category </span> 1929 </button> 1930 </span> 1931 <ul 1932 class="absolute z-10 hidden px-6 py-4 -ml-6 shadow-lg bg-container-lighter/95" 1933 :class="{ 1934 'hidden' : hoverPanelActiveId !== 'category-node-6', 1935 'block' : hoverPanelActiveId === 'category-node-6' 1936 }" 1937 > 1938 <li> 1939 <a href="https://www.govi.de/sachbuch-literatur/gesundheitsratgeber" 1940 title="Gesundheitsratgeber" 1941 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1942 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D6]').focus())" 1943 > 1944 <span class="text-base text-gray-700"> 1945 Gesundheitsratgeber </span> 1946 </a> 1947 </li> 1948 <li> 1949 <a href="https://www.govi.de/sachbuch-literatur/gesunde-ernaehrung" 1950 title="Gesunde Ernährung" 1951 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1952 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D6]').focus())" 1953 > 1954 <span class="text-base text-gray-700"> 1955 Gesunde Ernährung </span> 1956 </a> 1957 </li> 1958 <li> 1959 <a href="https://www.govi.de/sachbuch-literatur/heilpflanzen-garten" 1960 title="Heilpflanzen & Garten" 1961 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1962 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D6]').focus())" 1963 >
1964 <span class="text-base text-gray-700"> 1965 Heilpflanzen & Garten </span> 1966 </a> 1967 </li> 1968 <li> 1969 <a href="https://www.govi.de/sachbuch-literatur/sachbuecher" 1970 title="Sachbücher" 1971 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1972 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D6]').focus())" 1973 > 1974 <span class="text-base text-gray-700"> 1975 Sachbücher </span> 1976 </a> 1977 </li> 1978 <li> 1979 <a href="https://www.govi.de/sachbuch-literatur/kinderbuecher" 1980 title="Kinderbücher" 1981 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1982 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D6]').focus())" 1983 > 1984 <span class="text-base text-gray-700"> 1985 Kinderbücher </span> 1986 </a> 1987 </li> 1988 <li> 1989 <a href="https://www.govi.de/sachbuch-literatur/lesevergnuegen" 1990 title="Lesevergnügen" 1991 class="block w-full px-3 py-1 my-1 whitespace-nowrap first:mt-0 hover:underline" 1992 @keyup.escape="$nextTick(() => document.querySelector('[data-sr-button-id=category\u002Dnode\u002D6]').focus())" 1993 > 1994 <span class="text-base text-gray-700"> 1995 Lesevergnügen </span> 1996 </a> 1997 </li> 1998 </ul> 1999 </li> 2000 </ul> 2001 </nav> 2002 </div> 2003</div>
2004<script> 2005 'use strict'; 2006 2007 const initMenuDesktop_6ac21e8079072 = () => { 2008 return { 2009 hoverPanelActiveId: null, 2010 setActiveMenu(menuNode) { 2011 Array.from(menuNode.querySelectorAll('a')).filter(link => { 2012 return link.href === window.location.href.split('?')[0]; 2013 }).map(item => { 2014 item.classList.add('underline'); 2015 item.closest('div.level-0') && 2016 item.closest('div.level-0').querySelector('a.level-0').classList.add('underline'); 2017 }); 2018 }, 2019 openMenuOnClick(menuNode) { 2020 if (menuNode === this.hoverPanelActiveId) { 2021 this.hoverPanelActiveId = 0; 2022 } else { 2023 this.hoverPanelActiveId = menuNode 2024 } 2025 } 2026 } 2027 } 2028</script>
2028 2029 2030 <div class="flex items-center order-4 sm:order-3 lg:order-3"> 2031 <!--Search Icon--> 2032 <button 2033 id="menu-search-icon" 2034 class="inline-block ml-1 no-underline sm:ml-3 hover:text-black" 2035 @click.prevent=" 2036 searchOpen = !searchOpen; 2037 $dispatch('search-open'); 2038 " 2039 aria-label="Suchformular umschalten" 2040 aria-haspopup="true" 2041 :aria-expanded="searchOpen" 2042 x-ref="searchButton" 2043 title="Suche" 2044 > 2045 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" aria-hidden="true"> 2046 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 2047</svg> 2048 </button> 2049 2050 <!--Customer Icon & Dropdown--> 2051 <!-- BLOCK header.customer --> 2052<div 2053 class="relative inline-block ml-1 sm:ml-3" 2054 x-data="{ open: false }" 2055 @keyup.escape="open = false" 2056> 2057 <button 2058 type="button" 2059 id="customer-menu" 2060 class="block hover:text-black" 2061 @click="open = !open" 2062 @click.outside="open = false" 2063 :aria-expanded="open ? 'true' : 'false'" 2064 aria-label="Mein Konto" 2065 title="Mein Konto" 2066 aria-haspopup="true" 2067 > 2068 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="md:h-6 md:w-6" width="32" height="32" aria-hidden="true"> 2069 <path stroke-linecap="round" stroke-linejoin="round" d="M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z"/> 2070</svg> 2071 </button> 2072 <nav 2073 class=" 2074 absolute right-0 z-20 w-40 py-2 mt-2 -mr-4 px-1 overflow-auto origin-top-right rounded-sm 2075 shadow-lg sm:w-48 lg:mt-3 bg-container-lighter 2076 " 2077 x-cloak 2078 x-show="open" 2079 aria-labelledby="customer-menu" 2080 @click.outside="open = false" 2081 > 2082 2083<a id="customer.header.sign.in.link" 2084 class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 2085 onclick="hyva.setCookie && hyva.setCookie( 2086 'login_redirect', 2087 window.location.href, 2088 1 2089 )" 2090 href="https://www.govi.de/customer/account/index/" 2091 title="Anmelden" 2092> 2093 Anmelden</a> 2094 2095 <a id="customer.header.register.link" 2096 class="block px-4 py-2 lg:px-5 lg:py-2 hover:bg-gray-100" 2097 href="https://www.govi.de/customer/account/create/" 2098 title="Ein Konto erstellen" 2099 > 2100 Ein Konto erstellen </a> 2101 </nav> 2102</div> 2103<!-- /BLOCK header.customer --> 2104 <!--Cart Icon--> 2105 <button 2106 id="menu-cart-icon" 2107 class="relative inline-block ml-1 no-underline sm:ml-3 hover:text-black" 2108 x-ref="cartButton" 2109 :aria-disabled="isCartEmpty()" 2110 title="Warenkorb" 2111 @click.prevent.stop="() => { 2112 $dispatch('toggle-cart', { isOpen: true }) 2113 }" 2114 @toggle-cart.window="toggleCart($event)" 2115 :aria-expanded="isCartOpen" 2116 aria-haspopup="dialog" 2117 > 2118 <span 2119 class="sr-only label" 2120 x-text="` 2121 Toggle minicart, 2122 ${isCartEmpty() ? 2123 'Sie haben keine Artikel in Ihrem Warenkorb.' : 2124 hyva.str( 2125 'You have %1 product%2 in your cart.', 2126 cart.summary_count, 2127 cart.summary_count === 1 ? '' : 's' 2128 )}` 2129 " 2130 > 2131 </span> 2132 2133 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-8 h-8 md:h-6 md:w-6 hover:text-black" width="25" height="25" role="img"> 2134 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2
21340 014 0z"/> 2135<title>Warenkorb</title></svg> 2136 2137 <span 2138 x-text="cart.summary_count" 2139 x-show="!isCartEmpty()" 2140 x-cloak 2141 class=" 2142 absolute top-0 right-0 h-5 px-2 py-1 -mt-5 -mr-4 text-xs font-semibold 2143 leading-none text-center text-white uppercase transform -translate-x-1 2144 translate-y-1/2 rounded-full bg-primary 2145 " 2146 aria-hidden="true" 2147 ></span> 2148 </button> 2149 2150 </div> 2151 </div> 2152 <!--Search--> 2153 <div class="relative z-10 w-full border-t shadow-sm bg-container-lighter border-container-lighter" 2154 id="search-content" 2155 x-cloak x-show="searchOpen" 2156 @click.outside="searchOpen = true" 2157 @keydown.escape=" 2158 searchOpen = true; 2159 $refs.searchButton.focus(); 2160 " 2161 > 2162
2162<script> 2163 'use strict'; 2164 2165 function initMiniSearch() { 2166 return { 2167 minSearchLength: 3, 2168 suggestions: [], 2169 suggest() { 2170 const search = this.$refs.searchInput; 2171 if (search.value.length >= this.minSearchLength) { 2172 search.setCustomValidity(''); 2173 search.reportValidity(); 2174 this.fetchSuggestions(search.value); 2175 } else { 2176 this.suggestions = []; 2177 } 2178 }, 2179 fetchSuggestions(term) { 2180 fetch( 2181 window.BASE_URL + 'search/ajax/suggest?' + new URLSearchParams({q: term}), 2182 { 2183 headers: { 2184 'X-Requested-With': 'XMLHttpRequest' 2185 } 2186 } 2187 ) 2188 .then(response => response.json()) 2189 .then(result => this.suggestions = result); 2190 }, 2191 search(term) { 2192 const search = this.$refs.searchInput; 2193 term = term || search.value; 2194 if (term.length < this.minSearchLength) { 2195 search.setCustomValidity('Die\u0020minimale\u0020L\u00E4nge\u0020der\u0020Suchbegriffe\u0020ist\u00203\u0020Zeichen'); 2196 search.reportValidity(); 2197 } else { 2198 search.setCustomValidity(''); 2199 search.value = term; 2200 this.$refs.form.submit(); 2201 } 2202 }, 2203 focusElement(element) { 2204 if (element && element.nodeName === "DIV") { 2205 element.focus(); 2206 return true; 2207 } else { 2208 return false; 2209 } 2210 } 2211 } 2212 } 2213</script>
2213 2214<div class="container py-2 mx-auto text-black" x-data="initMiniSearch()"> 2215 <search title="Shop" role="search"> 2216 <form 2217 id="search_mini_form" 2218 class="form minisearch flex" 2219 action="https://www.govi.de/catalogsearch/result/" 2220 method="get" 2221 @submit.prevent="search()" 2222 x-ref="form" 2223 > 2224 <label class="sr-only" for="search"> 2225 Suche </label> 2226 <input 2227 id="search" 2228 x-ref="searchInput" 2229 type="search" 2230 autocomplete="off" 2231 name="q" 2232 value="" 2233 placeholder="Gesamten Shop hier durchsuchen..." 2234 maxlength="128" 2235 class="w-full text-lg lg:text-xl text-grey-800 focus:border-transparent focus:outline-none rounded-l" 2236 @search-open.window.debounce.10="$el.focus(); $el.select()" 2237 @focus.once="suggest" 2238 @input.debounce.300="suggest" 2239 @keydown.arrow-down.prevent="focusElement($root.querySelector('[tabindex]'))" 2240 > 2241 <button 2242 type="submit" 2243 class="action search btn btn-primary rounded-l-none rounded-r shrink-0 p-3 shadow-none" 2244 title="Suche" 2245 aria-label="Suche" 2246 > 2247 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 2248 <path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"/> 2249</svg> 2250 </button> 2251 </form> 2252 </search> 2253 <template x-if="suggestions.length > 0"> 2254 <nav 2255 aria-label="Search Suggestions" 2256 class="flex flex-col mt-1 text-grey-800 gap-1" 2257 > 2258 <template x-for="suggestion in suggestions"> 2259 <button 2260 type="button" 2261 class="flex justify-between p-2 bg-container-lighter even:bg-container border border-container hover:bg-container-darker" 2262 @click="search(suggestion.title)" 2263 @keydown.enter="search(suggestion.title)" 2264 @keydown.arrow-up.prevent="focusElement($event.target.previousElementSibling) || $refs.searchInput.focus()" 2265 @keydown.arrow-down.prevent="focusElement($event.target.nextElementSibling)" 2266 > 2267 <span x-text="suggestion.title"></span> 2268 <span x-text="suggestion.num_results"></span> 2269 </button> 2270 </template> 2271 </nav> 2272 </template> 2273 </div> 2274 </div> 2275
2276 <!--Cart Drawer--> 2277
2277<script> 2278 function initCartDrawer() { 2279 return { 2280 open: false, 2281 isLoading: false, 2282 cart: {}, 2283 maxItemsToDisplay: 10, 2284 itemsCount: 0, 2285 totalCartAmount: 0, 2286 getData(data) { 2287 if (data.cart) { 2288 this.cart = data.cart; 2289 this.itemsCount = data.cart.items && data.cart.items.length || 0; 2290 this.totalCartAmount = this.cart.summary_count; 2291 this.setCartItems(); 2292 } 2293 this.isLoading = false; 2294 }, 2295 cartItems: [], 2296 getItemCountTitle() { 2297 return hyva.strf('\u00250\u0020of\u0020\u00251\u0020products\u0020in\u0020cart\u0020displayed', this.maxItemsToDisplay, this.totalCartAmount) 2298 }, 2299 setCartItems() { 2300 this.cartItems = this.cart.items && this.cart.items.sort((a, b) => b.item_id - a.item_id) || []; 2301 2302 if (this.maxItemsToDisplay > 0) { 2303 this.cartItems = this.cartItems.slice(0, parseInt(this.maxItemsToDisplay, 10)); 2304 } 2305 }, 2306 deleteItemFromCart(itemId) { 2307 this.isLoading = true; 2308 2309 const formKey = hyva.getFormKey(); 2310 const postUrl = BASE_URL + 'checkout/sidebar/removeItem/'; 2311 2312 fetch(postUrl, { 2313 "headers": { 2314 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 2315 }, 2316 "body": "form_key=" + formKey + "&item_id=" + itemId, 2317 "method": "POST", 2318 "mode": "cors", 2319 "credentials": "include" 2320 }).then(response => { 2321 if (response.redirected) { 2322 window.location.href = response.url; 2323 } else if (response.ok) { 2324 return response.json(); 2325 } else { 2326 window.dispatchMessages && window.dispatchMessages([{ 2327 type: 'warning', 2328 text: 'Could\u0020not\u0020remove\u0020item\u0020from\u0020quote.' 2329 }]); 2330 this.isLoading = false; 2331 } 2332 }).then(result => { 2333 window.dispatchMessages && window.dispatchMessages([{ 2334 type: result.success ? 'success' : 'error', 2335 text: result.success 2336 ? 'Sie\u0020haben\u0020den\u0020Artikel\u0020entfernt.' 2337 : result.error_message 2338 }], result.success ? 5000 : 0) 2339 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 2340 }); 2341 }, 2342 toggleCartDrawer(event) { 2343 if (event.detail && event.detail.isOpen !== undefined) { 2344 if (event.detail.isOpen) { 2345 this.openCartDrawer() 2346 } else { 2347 this.open = false 2348 this.$refs && this.$refs.cartDialogContent && hyva.releaseFocus(this.$refs.cartDialogContent) 2349 } 2350 } else { 2351 this.openCartDrawer() 2352 } 2353 }, 2354 openCartDrawer() { 2355 this.open = true; 2356 this.$nextTick(() => { 2357 this.$refs && this.$refs.cartDialogContent && hyva.trapFocus(this.$refs.cartDialogContent) 2358 }) 2359 }, 2360 closeCartDrawer() { 2361 this.$dispatch('toggle-cart', { isOpen: false }) 2362 } 2363 } 2364 } 2365</script>
2365 2366<section x-cloak 2367 x-show="cart" 2368 id="cart-drawer" 2369 x-data="initCartDrawer()" 2370 @private-content-loaded.window="getData($event.detail.data)" 2371 @toggle-cart.window="toggleCartDrawer($event)" 2372 @keydown.window.escape="closeCartDrawer" 2373> 2374 <div role="dialog" 2375 aria-labelledby="cart-drawer-title" 2376 aria-modal="true" 2377 :aria-hidden="!open" 2378 class="fixed inset-y-0 right-0 z-30 flex max-w-full"> 2379 <div class="backdrop" 2380 x-show="open" 2381 x-transition:enter="ease-in-out duration-500" 2382 x-transition:enter-start="opacity-0" 2383 x-transition:enter-end="opacity-100" 2384 x-transition:leave="ease-in-out duration-500" 2385 x-transition:leave-start="opacity-100" 2386 x-transition:leave-end="opacity-0" 2387 role="button" 2388 @click="closeCartDrawer" 2389 aria-label="Close minicart"></div> 2390 <div class="relative w-screen max-w-md shadow-2xl" 2391 x-show="open" 2392 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 2393 x-transition:enter-start="translate-x-full" 2394 x-transition:enter-end="translate-x-0" 2395 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 2396 x-transition:leave-start="translate-x-0" 2397 x-transition:leave-end="translate-x-full" 2398 x-ref="cartDialogContent" 2399 role="region" 2400 :tabindex="open ? 0 : -1" 2401 aria-label="Mein Warenkorb" 2402 2403 > 2404 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl"> 2405 2406 <header class="px-4 sm:px-6"> 2407 <h2 id="cart-drawer-title" class="text-lg font-medium leading-7 text-gray-900"> 2408 Mein Warenkorb <span class="items-total text-xs" 2409 x-show="maxItemsToDisplay && maxItemsToDisplay < itemsCount" 2410 x-text="getItemCountTitle()"> 2411 </span> 2412 </h2> 2413 </header> 2414 2415 2416 <template x-if="!itemsCount"> 2417 <div class="relative px-4 py-6 bg-white border-bs sm:px-6 border-container"> 2418 Sie haben keine Artikel in Ihrem Warenkorb. </div> 2419 </template> 2420 2421 <template x-if="itemsCount"> 2422 <div class="relative grid gap-6 px-4 py-6 overflow-y-auto overscroll-y-contain bg-white border-b 2423 sm:gap-8 sm:px-6 border-container" 2424 > 2425 <template x-for="item in cartItems"> 2426 <div class="flex items-start p-3 -m-3 space-x-4 transition duration-150 2427 ease-in-out rounded-lg hover:bg-gray-100"> 2428 <a :href="item.configure_url" 2429 class="w-1/4" 2430 :aria-label="hyva.strf('Product\u0020\u0022\u00250\u0022', item.product_name)" 2431 > 2432 <img 2433 :src="item.product_image.src" 2434 :width="item.product_image.width" 2435 :height="item.product_image.height" 2436 loading="lazy" 2437 alt="" 2438 /> 2439 </a> 2440 <div class="w-3/4 space-y-2"> 2441 <div> 2442 <p class="text-xl"> 2443 <span x-html="item.qty"></span> x <span x-html="item.product_name"></span> 2444 </p> 2445 </div> 2446 <template x-for="option in item.options"> 2447 <div class="pt-1">
2448 <span class="font-semibold" x-text="option.label + ':'"></span> 2449 <span x-html="option.value"></span> 2450 </div> 2451 </template> 2452 <p><span x-html="item.product_price"></span></p> 2453 <div class="pt-4"> 2454 <a :href="item.configure_url" 2455 x-show="item.product_type !== 'grouped'" 2456 class="inline-flex p-2 mr-2 btn btn-primary" 2457 :aria-label="hyva.strf('Artikel\u0020\u0022\u00250\u0022\u0020bearbeiten', item.product_name)" 2458 :title="hyva.strf('Artikel\u0020\u0022\u00250\u0022\u0020bearbeiten', item.product_name)" 2459 > 2460 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 2461 <path stroke-linecap="round" stroke-linejoin="round" d="M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z"/> 2462</svg> 2463 </a> 2464 <button type="button" 2465 class="inline-flex p-2 btn btn-primary" 2466 @click="deleteItemFromCart(item.item_id)" 2467 :aria-label="hyva.strf('Artikel\u0020\u0022\u00250\u0022\u0020aus\u0020dem\u0020Warenkorb\u0020entfernen', item.product_name)" 2468 :title="hyva.strf('Artikel\u0020\u0022\u00250\u0022\u0020aus\u0020dem\u0020Warenkorb\u0020entfernen', item.product_name)" 2469 > 2470 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 2471 <path stroke-linecap="round" stroke-linejoin="round" d="M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16"/> 2472</svg> 2473 </button> 2474 </div> 2475 2476 </div> 2477 </div> 2478 </template> 2479 </div> 2480 </template> 2481 2482 <template x-if="itemsCount"> 2483 <div> 2484 2485 <div class="relative grid gap-6 px-4 py-6 bg-white sm:gap-8 sm:px-6"> 2486 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 2487 hover:bg-gray-100" 2488 > 2489 <p>Zwischensumme: <span x-html="cart.subtotal"></span></p> 2490 </div> 2491 <div class="w-full p-3 -m-3 space-x-4 transition duration-150 ease-in-out rounded-lg 2492 hover:bg-gray-100" 2493 > 2494 <a @click.prevent.stop="$dispatch('toggle-authentication', 2495 {url: 'https://www.govi.de/checkout/'});" 2496 href="https://www.govi.de/checkout/" 2497 class="inline-flex btn btn-primary" 2498 > 2499 Zur Kasse </a> 2500 <span>oder</span> 2501 <a href="https://www.govi.de/checkout/cart/" 2502 class="underline" 2503 > 2504 Zum Warenkorb </a> 2505 </div> 2506 </div> 2507 </div> 2508 </template> 2509 2510 </div> 2511 2512 <button 2513 type="button" 2514 @click="closeCartDrawer" 2515 aria-label="Close minicart" 2516 class="absolute top-0 right-0 p-4 mt-2 text-gray-300 transition-colors hover:text-black" 2517 > 2518 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 2519 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2520</svg> 2521 </button> 2522 </div> 2523 <div 2524 class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-slate-800" 2525 x-cloak 2526 x-show="isLoading" 2527 x-transition.opacity.duration.200ms 2528> 2529 <div class="flex gap-10 items-center p-4"> 2530 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 2531 <style>
2532 @keyframes spinner-ball-triangle1 { 2533 0% { transform: translate(0%, 0%); } 2534 33% { transform: translate(38%, -79%); } 2535 66% { transform: translate(77%, 0%); } 2536 100% { transform: translate(0%, 0%); } 2537 } 2538 2539 @keyframes spinner-ball-triangle2 { 2540 0% { transform: translate(0%, 0%); } 2541 33% { transform: translate(38%, 79%); } 2542 66% { transform: translate(-38%, 79%); } 2543 100% { transform: translate(0%, 0%); } 2544 } 2545 2546 @keyframes spinner-ball-triangle3 { 2547 0% { transform: translate(0%, 0%); } 2548 33% { transform: translate(-77%, 0%); } 2549 66% { transform: translate(-38%, -79%); } 2550 100% { transform: translate(0%, 0%); } 2551 } 2552 </style> 2553 <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/> 2554 <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/> 2555 <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/> 2556</svg> 2557 <span class="text-xl select-none"> 2558 Wird geladen ⦠</span> 2559 </div> 2560</div> 2561 </div> 2562 2563</section> 2564 2565 <!--Authentication Pop-Up--> 2566 <!-- BLOCK authentication-popup -->
2566<script> 2567 function initAuthentication() { 2568 return { 2569 open: false, 2570 close() { 2571 this.open = false; 2572 }, 2573 forceAuthentication: false, 2574 checkoutUrl: 'https://www.govi.de/checkout/index/', 2575 errors: 0, 2576 hasCaptchaToken: 0, 2577 displayErrorMessage: false, 2578 errorMessages: [], 2579 setErrorMessages(message) { 2580 this.errorMessages = [message]; 2581 this.displayErrorMessage = true; 2582 }, 2583 submitForm() { 2584 // Do not rename $form, the variable is expected to be declared in the recaptcha output 2585 const $form = document.querySelector('#login-form'); 2586 2587 if (this.errors === 0) { 2588 this.dispatchLoginRequest($form); 2589 } 2590 }, 2591 onPrivateContentLoaded() { 2592 const data = this.$event.detail.data; 2593 const isLoggedIn = data.customer && data.customer.firstname; 2594 if (data.cart && !isLoggedIn) { 2595 this.forceAuthentication = !data.cart.isGuestCheckoutAllowed; 2596 } 2597 }, 2598 redirectIfAuthenticated() { 2599 const event = this.$event; 2600 this.open = this.forceAuthentication; 2601 2602 if (event.detail && event.detail.url) { 2603 this.checkoutUrl = event.detail.url; 2604 } 2605 if (!this.forceAuthentication) { 2606 window.location.href = this.checkoutUrl; 2607 } 2608 }, 2609 resetErrors() { 2610 this.errors = 0; 2611 }, 2612 dispatchLoginRequest(form) { 2613 this.isLoading = true; 2614 const username = this.$refs['customer-email'].value; 2615 const password = this.$refs['customer-password'].value; 2616 const formKey = hyva.getFormKey(); 2617 const bodyFields = { 2618 'username': username, 2619 'password': password, 2620 'formKey': formKey 2621 }; 2622 const fieldName = 'g\u002Drecaptcha\u002Dresponse'; 2623 const recaptchaField = fieldName && form[fieldName]; 2624 if (recaptchaField) { 2625 bodyFields[fieldName] = recaptchaField.value; 2626 } 2627 fetch('https://www.govi.de/customer/ajax/login/', { 2628 method: 'POST', 2629 headers: { 2630 'Content-Type': 'application/json', 2631 'X-Requested-With': 'XMLHttpRequest' 2632 }, 2633 body: JSON.stringify(bodyFields) 2634 } 2635 ).then(response => { 2636 return response.json() 2637 } 2638 ).then(data => { 2639 this.isLoading = false; 2640 if (data.errors) { 2641 this.setErrorMessages(data.message); 2642 this.errors = 1; 2643 this.hasCaptchaToken = 0; 2644 } else { 2645 window.location.href = this.checkoutUrl; 2646 } 2647 }); 2648 } 2649 } 2650 } 2651 2652 window.addEventListener('alpine:init', () => Alpine.data('initAuthentication', initAuthentication), {once: true}) 2653</script>
2653 2654<section id="authentication-popup" 2655 x-data="initAuthentication" 2656 @private-content-loaded.window="onPrivateContentLoaded" 2657 @toggle-authentication.window="redirectIfAuthenticated" 2658 @keydown.window.escape="close" 2659> 2660 <div 2661 class="backdrop" 2662 aria-hidden="true" 2663 x-cloak 2664 x-show="open" 2665 x-transition:enter="ease-in-out duration-500" 2666 x-transition:enter-start="opacity-0" 2667 x-transition:enter-end="opacity-100" 2668 x-transition:leave="ease-in-out duration-500" 2669 x-transition:leave-start="opacity-100" 2670 x-transition:leave-end="opacity-0" 2671 @click="close" 2672 ></div> 2673 <div role="dialog" 2674 aria-modal="true" 2675 @click.outside="close" 2676 class="inset-y-0 right-0 z-30 flex max-w-full fixed" 2677 x-cloak 2678 x-show="open" 2679 > 2680 <div class="relative w-screen max-w-md pt-16 bg-container-lighter" 2681 x-show="open" 2682 x-cloak 2683 x-transition:enter="transform transition ease-in-out duration-500 sm:duration-700" 2684 x-transition:enter-start="translate-x-full" 2685 x-transition:enter-end="translate-x-0" 2686 x-transition:leave="transform transition ease-in-out duration-500 sm:duration-700" 2687 x-transition:leave-start="translate-x-0" 2688 x-transition:leave-end="translate-x-full" 2689 > 2690 <div 2691 x-show="open" 2692 x-cloak 2693 x-transition:enter="ease-in-out duration-500" 2694 x-transition:enter-start="opacity-0" 2695 x-transition:enter-end="opacity-100" 2696 x-transition:leave="ease-in-out duration-500" 2697 x-transition:leave-start="opacity-100" 2698 x-transition:leave-end="opacity-0" class="absolute top-0 right-2 flex p-2 mt-2"> 2699 <button 2700 type="button" 2701 @click="close" 2702 aria-label="Panel schließen" 2703 class="p-2 text-gray-300 transition duration-150 ease-in-out hover:text-black" 2704 > 2705 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" aria-hidden="true"> 2706 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2707</svg> 2708 </button> 2709 </div> 2710 <template x-if="open"> 2711 <div class="flex flex-col h-full py-6 space-y-6 bg-white shadow-xl overflow-y-auto"> 2712 <div class="mx-4"> 2713 <div class="message error mb-0" x-show="errors" x-cloak> 2714 <template x-for="(message, index) in errorMessages" :key="index"> 2715 <div> 2716 <template x-if="message"> 2717 <span x-html="message"></span> 2718 </template> 2719 </div> 2720 </template> 2721 </div> 2722 </div> 2723 <div class="block-customer-login bg-container border border-container mx-4 p-4 shadow-sm"> 2724 <p id="authenticate-customer-login" class="text-lg leading-7 text-gray-900"> 2725 <strong class="font-medium">Mit Ihrem Konto bestellen</strong> 2726 </p> 2727 2728 <form class="form form-login" 2729 method="post" 2730 @submit.prevent="submitForm" 2731 id="login-form" 2732 > 2733 <div class="fieldset login"> 2734 <div class="field email required"> 2735 <label class="label" for="form-login-username" form="login-form" > 2736 <span>E-Mail-Adresse</span> 2737 </label> 2738 <div class="control"> 2739 <input name="username" 2740 id="form-login-username" 2741 x-ref="customer-email" 2742 @change="resetErrors" 2743 type="email" 2744 required 2745 autocomplete="off" 2746 class="form-input" 2747 > 2748 </div> 2749 </div> 2750 <div class="field password required"> 2751 <label for="form-login-password" class="label" form="login-form">
2752 <span>Passwort</span> 2753 </label> 2754 <div class="control"> 2755 <input name="password" 2756 id="form-login-password" 2757 type="password" 2758 class="form-input" 2759 required 2760 x-ref="customer-password" 2761 autocomplete="off" 2762 @change="resetErrors" 2763 > 2764 </div> 2765 </div> 2766 2767 <input name="context" type="hidden" value="checkout"> 2768 <div class="actions-toolbar pt-6 pb-2"> 2769 <button type="submit" class="inline-flex btn btn-primary disabled:opacity-75" 2770 > 2771 Anmelden </button> 2772 <a href="https://www.govi.de/customer/account/forgotpassword/" 2773 > 2774 Passwort vergessen? </a> 2775 </div> 2776 2777 </div> 2778 </form> 2779 </div> 2780 <div class="mx-4"> 2781 </div> 2782 <div class="block-new-customer bg-container border border-container mx-4 p-4 shadow-sm"> 2783 <p id="authenticate-new-customer" class="text-lg mb-2 leading-7 text-gray-900"> 2784 <strong class="font-medium">Als neuer Kunde bestellen</strong> 2785 </p> 2786 2787 <div class="block-content"> 2788 <p class="mb-1"> 2789 Das Erstellen eines Kontos hat viele Vorteile: </p> 2790 <ul class="list-disc pl-5"> 2791 <li> Bestell- und Versandstatus ansehen</li> 2792 <li> Bestellverlauf verfolgen</li> 2793 <li> Schnellerer Bestellvorgang</li> 2794 </ul> 2795 <div class="actions-toolbar mt-6 mb-2"> 2796 <a href="https://www.govi.de/customer/account/create/" 2797 class="inline-flex btn btn-primary"> 2798 Ein Konto erstellen </a> 2799 </div> 2800 </div> 2801 </div> 2802 </div> 2803 </template> 2804 </div> 2805 </div> 2806</section> 2807<!-- /BLOCK authentication-popup --></div> 2808 2809</header><div class="top-container"> 2810<nav class="breadcrumbs bg-container-lighter text-slate-900 shadow-sm" aria-label="Breadcrumb"> 2811 <div class="container"> 2812 <ol class="items list-reset py-4 rounded flex flex-wrap text-grey text-sm"> 2813 <li class="item flex home"> 2814 <a 2815 href="https://www.govi.de/" 2816 aria-label="Zur Startseite" 2817 >Startseite</a> 2818 </li> 2819 <li class="item flex category14"> 2820 <span aria-hidden="true" class="separator text-slate-600 px-2">/</span> 2821 <a 2822 href="https://www.govi.de/apotheke" 2823 >Apotheke</a> 2824 </li> 2825 <li class="item flex category19">
2826 <span aria-hidden="true" class="separator text-slate-600 px-2">/</span> 2827 <a 2828 href="https://www.govi.de/apotheke/pharmazeutische-beratung" 2829 class="text-slate-600" 2830 aria-current="page" 2831 >Pharmazeutische Beratung</a> 2832 </li> 2833 </ol> 2834 </div> 2835</nav> 2836 2837
2837<script type="application/ld+json"> 2838 { "@context": "https://schema.org", "@type": "BreadcrumbList", "itemListElement": [{"@type":"ListItem","position":1,"item":{"@id":"https:\/\/www.govi.de\/","name":"Startseite"}},{"@type":"ListItem","position":2,"item":{"@id":"https:\/\/www.govi.de\/apotheke","name":"Apotheke"}},{"@type":"ListItem","position":3,"item":{"@id":"https:\/\/www.govi.de\/apotheke\/pharmazeutische-beratung","name":"Pharmazeutische Beratung"}}] } 2839 </script>
2839 2840</div><div class="page-main"><div class="page messages">
2840<script> 2841 function initMessages() { 2842 "use strict"; 2843 return { 2844 messages: window.mageMessages || [], 2845 isEmpty() { 2846 return this.messages.reduce( 2847 function (isEmpty, message) { 2848 return isEmpty && message === undefined 2849 }, true 2850 ) 2851 }, 2852 hasMessages() { 2853 return !this.isEmpty(); 2854 }, 2855 hasMessage() { 2856 return !!this.message; 2857 }, 2858 removeMessage() { 2859 this.messages[this.index] = undefined; 2860 }, 2861 addMessages(messages, hideAfter) { 2862 messages.map((message) => { 2863 this.messages = this.messages.concat(message); 2864 if (hideAfter === undefined && message.type === 'success' && window.defaultSuccessMessageTimeout) { 2865 hideAfter = window.defaultSuccessMessageTimeout; 2866 } 2867 if (hideAfter) { 2868 this.setHideTimeOut(this.messages.length -1, hideAfter); 2869 } 2870 }); 2871 }, 2872 setHideTimeOut(messageIndex, hideAfter) { 2873 setTimeout((messageIndex) => { 2874 this.messages[messageIndex] = undefined; 2875 }, hideAfter, messageIndex); 2876 }, 2877 eventListeners: { 2878 ['@messages-loaded.window'](event) { 2879 this.addMessages(event.detail.messages, event.detail.hideAfter) 2880 }, 2881 ['@private-content-loaded.window'](event) { 2882 const data = event.detail.data; 2883 if ( 2884 data.messages && 2885 data.messages.messages && 2886 data.messages.messages.length 2887 ) { 2888 this.addMessages(data.messages.messages); 2889 } 2890 }, 2891 ['@clear-messages.window']() { 2892 this.messages = []; 2893 } 2894 }, 2895 getMessageUiId() { 2896 return 'message-' + this.message.type; 2897 } 2898 } 2899 } 2900 2901 window.addEventListener('alpine:init', () => Alpine.data('initMessages', initMessages), {once: true}) 2902</script>
2902 2903<section id="messages" 2904 x-data="initMessages" 2905 x-bind="eventListeners" 2906 role="alert" 2907> 2908 <template x-if="hasMessages"> 2909 <div class="w-full"> 2910 <div class="messages container mx-auto py-3"> 2911 <template x-for="(message, index) in messages" :key="index"> 2912 <div> 2913 <template x-if="hasMessage"> 2914 <div class="message" 2915 :class="message.type" 2916 :ui-id="getMessageUiId" 2917 > 2918 <span x-html="message.text"></span> 2919 <button 2920 type="button" 2921 class="text-gray-600 hover:text-black" 2922 aria-label="Close message" 2923 @click.prevent="removeMessage" 2924 > 2925 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="stroke-current" width="18" height="18" aria-hidden="true"> 2926 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 2927</svg> 2928 </button> 2929 </div> 2930 </template> 2931 </div> 2932 </template> 2933 </div> 2934 </div> 2935 </template> 2936</section> 2937</div><div class="container flex flex-col md:flex-row flex-wrap my-6 font-bold lg:mt-8 justify-start text-4xl mb-4"> 2938 <h1 class="text-gray-900 page-title title-font" 2939 > 2940 <span class="base" data-ui-id="page-title-wrapper" >Pharmazeutische Beratung</span> </h1> 2941 </div> 2942</div><main id="maincontent" class="page-main"><div id="contentarea" tabindex="-1"></div> 2943<div class="columns"><aside class="sidebar sidebar-main"> <div 2944 x-data="initLayeredNavigation()" 2945 x-init="checkIsMobileResolution()" 2946 @resize.window.debounce="checkIsMobileResolution()" 2947 @visibilitychange.window.debounce="checkIsMobileResolution()" 2948 class="block border border-container bg-container-darker p-4 md:border-0 md:bg-transparent md:py-0 md:px-0 my-6" 2949 role="region" 2950 aria-label="Product filters" 2951 > 2952 <h2 2953 id="filters-heading" 2954 class="block-title" 2955 > 2956 <button 2957 type="button" 2958 @click="blockOpen = !blockOpen" 2959 class="block-title flex items-center justify-between w-full" 2960 aria-controls="filters-content" 2961 :aria-expanded="blockOpen" 2962 :aria-disabled="!isMobile" 2963 :disabled="!isMobile ? '' : null" 2964 > 2965 <span class="text-primary text-md md:text-3xl font-medium uppercase"> 2966 filter </span> 2967 <span 2968 class="py-1 px-1 bg-container-lighter rounded border border-container-darker hidden" 2969 :class="{ 'block' : isMobile, 'hidden': !isMobile }" 2970 > 2971 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': blockOpen }" aria-hidden="true" focusable="false"> 2972 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 2973</svg> 2974 </span> 2975 </button> 2976 </h2> 2977 <div 2978 id="filters-content" 2979 class="block-content filter-content pt-4" 2980 x-show="isMobile && blockOpen || !isMobile" 2981 > 2982 <a 2983 href="#product-list" 2984 class="sr-only focus:not-sr-only bg-blue-600 text-white px-12 py-4 text-center block rounded-sm" 2985 > 2986 Zur Produktliste springen </a> 2987 <div 2988 x-data="{ 2989 open: false, 2990 id: $id('filter-option') 2991 }" 2992 class="filter-option card my-4" 2993 > 2994 <h3 :id="`${id}-title`"> 2995 <button 2996 type="button" 2997 @click="open = !open" 2998 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container w-full" 2999 :class="{ 'border-b pb-4': open }" 3000 :aria-controls="`${id}-content`" 3001 :aria-expanded="open" 3002 >
3003 <span class="title text-md md:text-lg font-semibold"> 3004 Govi Titel <span class="sr-only"> filter</span> 3005 </span> 3006 <span class="py-1 px-1 rounded border border-container"> 3007 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" aria-hidden="true" focusable="false"> 3008 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 3009</svg> 3010 </span> 3011 </button> 3012 </h3> 3013 <template x-if="open"> 3014 <div 3015 :id="`${id}-content`" 3016 class="filter-options-content pt-3" 3017 > 3018 <ol class="items" aria-label="Govi Titel Filter Optionen"> 3019 <li> 3020 <a 3021 href="https://www.govi.de/apotheke/pharmazeutische-beratung?is_govi_title=1" 3022 class="flex justify-between py-1 hover:text-black" 3023 aria-label="Ja Filter, 43 verfügbare Produkte" 3024 > 3025 <span>Ja</span> 3026 <span class="count text-primary">(43)</span> 3027 </a> 3028 </li> 3029 <li> 3030 <a 3031 href="https://www.govi.de/apotheke/pharmazeutische-beratung?is_govi_title=0" 3032 class="flex justify-between py-1 hover:text-black" 3033 aria-label="Nein Filter, 67 verfügbare Produkte" 3034 > 3035 <span>Nein</span> 3036 <span class="count text-primary">(67)</span> 3037 </a> 3038 </li> 3039 </ol> </div> 3040 </template> 3041 </div> 3042 <div 3043 x-data="{ 3044 open: false, 3045 id: $id('filter-option') 3046 }" 3047 class="filter-option card my-4" 3048 > 3049 <h3 :id="`${id}-title`"> 3050 <button 3051 type="button" 3052 @click="open = !open" 3053 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container w-full" 3054 :class="{ 'border-b pb-4': open }" 3055 :aria-controls="`${id}-content`" 3056 :aria-expanded="open" 3057 > 3058 <span class="title text-md md:text-lg font-semibold"> 3059 Autor <span class="sr-only"> filter</span> 3060 </span> 3061 <span class="py-1 px-1 rounded border border-container"> 3062 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" aria-hidden="true" focusable="false"> 3063 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 3064</svg> 3065 </span> 3066 </button> 3067 </h3> 3068 <template x-if="open"> 3069 <div 3070 :id="`${id}-content`" 3071 class="filter-options-content pt-3" 3072 > 3073 <div x-data="{ 3074 search: '', 3075 open: true, 3076 showAllConstant: false, 3077 canShowShowAll: true, 3078 canShowSearchField: true, 3079 items: [ 3080 { 3081 label: 'Schäfer, Constanze', 3082 count: '(8)', 3083 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Sch%C3%A4fer%2C+Constanze', 3084 show: true, 3085 arialabel: 'Schäfer, Constanze Filter, 8 verfügbare Produkte' 3086 }, 3087 { 3088 label: 'Smollich, Martin', 3089 count: '(4)', 3090 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Smollich%2C+Martin', 3091 show: true, 3092 arialabel: 'Smollich, Martin Filter, 4 verfügbare Produkte' 3093 }, 3094 { 3095 label: 'Hergenröther, Andrea', 3096 count: '(3)', 3097 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Hergenr%C3%B6ther%2C+Andrea', 3098 show: true, 3099 arialabel: 'Hergenröther, Andrea Filter, 3 verfügbare Produkte' 3100 }, 3101 { 3102 label: 'Lamping, Almut', 3103 count: '(3)', 3104 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Lamping%2C+Almut', 3105 show: true, 3106 arialabel: 'Lamping, Almut Filter, 3 verfügbare Produkte' 3107 }, 3108 { 3109 label: 'Schlenk, Margit', 3110 count: '(3)', 3111 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schlenk%2C+Margit', 3112 show: true, 3113 arialabel: 'Schlenk, Margit Filter, 3 verfügbare Produkte' 3114 }, 3115 { 3116 label: 'Strehl, Egid', 3117 count: '(3)', 3118 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Strehl%2C+Egid', 3119 show: true, 3120 arialabel: 'Strehl, Egid Filter, 3 verfügbare Produkte' 3121 }, 3122 { 3123 label: 'Wiesenauer, Markus', 3124 count: '(3)', 3125 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Wiesenauer%2C+Markus', 3126 show: true, 3127 arialabel: 'Wiesenauer, Markus Filter, 3 verfügbare Produkte' 3128 }, 3129 { 3130 label: 'Winterhagen, Ines', 3131 count: '(3)', 3132 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Winterhagen%2
3132C+Ines', 3133 show: true, 3134 arialabel: 'Winterhagen, Ines Filter, 3 verfügbare Produkte' 3135 }, 3136 { 3137 label: 'Dartsch, Dorothee', 3138 count: '(2)', 3139 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Dartsch%2C+Dorothee', 3140 show: true, 3141 arialabel: 'Dartsch, Dorothee Filter, 2 verfügbare Produkte' 3142 }, 3143 { 3144 label: 'Effertz, Dennis A.', 3145 count: '(2)', 3146 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Effertz%2C+Dennis+A.', 3147 show: true, 3148 arialabel: 'Effertz, Dennis A. Filter, 2 verfügbare Produkte' 3149 }, 3150 { 3151 label: 'Gathen, Hiltrud von der', 3152 count: '(2)', 3153 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Gathen%2C+Hiltrud+von+der', 3154 show: false, 3155 arialabel: 'Gathen, Hiltrud von der Filter, 2 verfügbare Produkte' 3156 }, 3157 { 3158 label: 'Hahn, Martina', 3159 count: '(2)', 3160 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Hahn%2C+Martina', 3161 show: false, 3162 arialabel: 'Hahn, Martina Filter, 2 verfügbare Produkte' 3163 }, 3164 { 3165 label: 'Immel-Sehr, Annette', 3166 count: '(2)', 3167 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Immel-Sehr%2C+Annette', 3168 show: false, 3169 arialabel: 'Immel-Sehr, Annette Filter, 2 verfügbare Produkte' 3170 }, 3171 { 3172 label: 'Lebert, Cordula', 3173 count: '(2)', 3174 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Lebert%2C+Cordula', 3175 show: false, 3176 arialabel: 'Lebert, Cordula Filter, 2 verfügbare Produkte' 3177 }, 3178 { 3179 label: 'Riedl, Thomas', 3180 count: '(2)', 3181 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Riedl%2C+Thomas', 3182 show: false, 3183 arialabel: 'Riedl, Thomas Filter, 2 verfügbare Produkte' 3184 }, 3185 { 3186 label: 'Schiffter-Weinle, Heiko A.', 3187 count: '(2)', 3188 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schiffter-Weinle%2C+Heiko+A.', 3189 show: false, 3190 arialabel: 'Schiffter-Weinle, Heiko A. Filter, 2 verfügbare Produkte' 3191 }, 3192 { 3193 label: 'Schilcher, Heinz', 3194 count: '(2)', 3195 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schilcher%2C+Heinz', 3196 show: false, 3197 arialabel: 'Schilcher, Heinz Filter, 2 verfügbare Produkte' 3198 }, 3199 { 3200 label: 'Schneider, Monika', 3201 count: '(2)', 3202 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schneider%2C+Monika', 3203 show: false, 3204 arialabel: 'Schneider, Monika Filter, 2 verfügbare Produkte' 3205 }, 3206 { 3207 label: 'Schrulle, Hedwig', 3208 count: '(2)', 3209 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schrulle%2C+Hedwig', 3210 show: false, 3211 arialabel: 'Schrulle, Hedwig Filter, 2 verfügbare Produkte' 3212 }, 3213 { 3214 label: 'Ude, Christian', 3215 count: '(2)', 3216 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Ude%2C+Christian', 3217 show: false, 3218 arialabel: 'Ude, Christian Filter, 2 verfügbare Produkte' 3219 }, 3220 { 3221 label: 'Vasel-Biergans, Anette', 3222 count: '(2)', 3223 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Vasel-Biergans%2C+Anette', 3224 show: false, 3225 arialabel: 'Vasel-Biergans, Anette Filter, 2 verfügbare Produkte' 3226 }, 3227 { 3228 label: 'Wolz, Dietmar', 3229 count: '(2)', 3230 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Wolz%2C+Dietmar', 3231 show: false, 3232 arialabel: 'Wolz, Dietmar Filter, 2 verfügbare Produkte' 3233 }, 3234 { 3235 label: 'Aktories, Klaus', 3236 count: '(1)', 3237 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Aktories%2C+Klaus', 3238 show: false, 3239 arialabel: 'Aktories, Klaus Filter, 1 verfügbares Produkt' 3240 }, 3241 { 3242 label: 'Apperger, Claudia', 3243 count: '(1)', 3244 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Apperger%2C+Claudia', 3245 show: false, 3246 arialabel: 'Apperger, Claudia Filter, 1 verfügbares Produkt' 3247 }, 3248 { 3249 label: 'Atreya, Raja', 3250 count: '(1)', 3251 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Atreya%2C+Raja', 3252 show: false, 3253 arialabel: 'Atreya, Raja Filter, 1 verfügbares Produkt' 3254 }, 3255 { 3256 label: 'Bauer, Jürgen M.', 3257 count: '(1)', 3258 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Bauer%2C+J%C3%BCrgen+M.', 3259 show: false, 3260 arialabel: 'Bauer, Jürgen M. Filter, 1 verfügbares Produkt' 3261 }, 3262 { 3263 label: 'Baum, Sebastian', 3264 count: '(1)', 3265 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Baum%2C+Sebastian', 3266 show: false, 3267 arialabel: 'Baum, Sebastian Filter, 1 verfügbares Produkt' 3268 }, 3269 { 3270 label: 'Becker, Clemens', 3271 count: '(1)', 3272 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Becker%2C+Clemens', 3273 show: false, 3274 arialabel: 'Becker, Clemens Filter, 1 verfügbares Produkt' 3275 }, 3276 { 3277 label: 'Bennack, Edith', 3278 count: '(1)', 3279 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Bennack%2C+Edith', 3280 show: false, 3281 arialabel: 'Bennack, Edith Filter, 1 verfügbares Produkt' 3282 }, 3283 { 3284 label: 'Berger, Reinhild', 3285 count: '(1)', 3286 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Berger%2C+Reinhild', 3287 show: false, 3288 arialabel: 'Berger, Reinhild Filter, 1 verfügbares Produkt' 3289 }, 3290 { 3291 label: 'Bergmann, Sylke', 3292 count: '(1)', 3293 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Bergmann%2C+Sylke', 3294 show: false, 3295 arialabel: 'Bergmann, Sylke Filter, 1 verfügbares Produkt' 3296 }, 3297 { 3298 label: 'Blümle, 
3298Heidegun', 3299 count: '(1)', 3300 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Bl%C3%BCmle%2C+Heidegun', 3301 show: false, 3302 arialabel: 'Blümle, Heidegun Filter, 1 verfügbares Produkt' 3303 }, 3304 { 3305 label: 'Brandt, Hartmuth', 3306 count: '(1)', 3307 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Brandt%2C+Hartmuth', 3308 show: false, 3309 arialabel: 'Brandt, Hartmuth Filter, 1 verfügbares Produkt' 3310 }, 3311 { 3312 label: 'Dahse, Kirsten', 3313 count: '(1)', 3314 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Dahse%2C+Kirsten', 3315 show: false, 3316 arialabel: 'Dahse, Kirsten Filter, 1 verfügbares Produkt' 3317 }, 3318 { 3319 label: 'Denkinger, Michael', 3320 count: '(1)', 3321 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Denkinger%2C+Michael', 3322 show: false, 3323 arialabel: 'Denkinger, Michael Filter, 1 verfügbares Produkt' 3324 }, 3325 { 3326 label: 'Deutsche Gesellschaft für Kardiologie', 3327 count: '(1)', 3328 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Deutsche+Gesellschaft+f%C3%BCr+Kardiologie', 3329 show: false, 3330 arialabel: 'Deutsche Gesellschaft für Kardiologie Filter, 1 verfügbares Produkt' 3331 }, 3332 { 3333 label: 'Dingermann, Theodor', 3334 count: '(1)', 3335 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Dingermann%2C+Theodor', 3336 show: false, 3337 arialabel: 'Dingermann, Theodor Filter, 1 verfügbares Produkt' 3338 }, 3339 { 3340 label: 'Eisele, Matthias', 3341 count: '(1)', 3342 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Eisele%2C+Matthias', 3343 show: false, 3344 arialabel: 'Eisele, Matthias Filter, 1 verfügbares Produkt' 3345 }, 3346 { 3347 label: 'Erdal, Andrea', 3348 count: '(1)', 3349 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Erdal%2C+Andrea', 3350 show: false, 3351 arialabel: 'Erdal, Andrea Filter, 1 verfügbares Produkt' 3352 }, 3353 { 3354 label: 'Erfurt-Berge, Cornelia', 3355 count: '(1)', 3356 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Erfurt-Berge%2C+Cornelia', 3357 show: false, 3358 arialabel: 'Erfurt-Berge, Cornelia Filter, 1 verfügbares Produkt' 3359 }, 3360 { 3361 label: 'Findeisen, Peter', 3362 count: '(1)', 3363 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Findeisen%2C+Peter', 3364 show: false, 3365 arialabel: 'Findeisen, Peter Filter, 1 verfügbares Produkt' 3366 }, 3367 { 3368 label: 'Fink, Erika', 3369 count: '(1)', 3370 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Fink%2C+Erika', 3371 show: false, 3372 arialabel: 'Fink, Erika Filter, 1 verfügbares Produkt' 3373 }, 3374 { 3375 label: 'Flake, Frank', 3376 count: '(1)', 3377 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Flake%2C+Frank', 3378 show: false, 3379 arialabel: 'Flake, Frank Filter, 1 verfügbares Produkt' 3380 }, 3381 { 3382 label: 'Frank, Bruno', 3383 count: '(1)', 3384 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Frank%2C+Bruno', 3385 show: false, 3386 arialabel: 'Frank, Bruno Filter, 1 verfügbares Produkt' 3387 }, 3388 { 3389 label: 'Frank, Helga', 3390 count: '(1)', 3391 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Frank%2C+Helga', 3392 show: false, 3393 arialabel: 'Frank, Helga Filter, 1 verfügbares Produkt' 3394 }, 3395 { 3396 label: 'Fresenius, Werner', 3397 count: '(1)', 3398 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Fresenius%2C+Werner', 3399 show: false, 3400 arialabel: 'Fresenius, Werner Filter, 1 verfügbares Produkt' 3401 }, 3402 { 3403 label: 'Frohn, Lars Peter', 3404 count: '(1)', 3405 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Frohn%2C+Lars+Peter', 3406 show: false, 3407 arialabel: 'Frohn, Lars Peter Filter, 1 verfügbares Produkt' 3408 }, 3409 { 3410 label: 'Giermann, Florian', 3411 count: '(1)', 3412 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Giermann%2C+Florian', 3413 show: false, 3414 arialabel: 'Giermann, Florian Filter, 1 verfügbares Produkt' 3415 }, 3416 { 3417 label: 'Goetzendorff, Holger', 3418 count: '(1)', 3419 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Goetzendorff%2C+Holger', 3420 show: false, 3421 arialabel: 'Goetzendorff, Holger Filter, 1 verfügbares Produkt' 3422 }, 3423 { 3424 label: 'Gollwitzer, Stephanie', 3425 count: '(1)', 3426 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Gollwitzer%2C+Stephanie', 3427 show: false, 3428 arialabel: 'Gollwitzer, Stephanie Filter, 1 verfügbares Produkt' 3429 }, 3430 { 3431 label: 'Gregor, 
3431Heidi', 3432 count: '(1)', 3433 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Gregor%2C+Heidi', 3434 show: false, 3435 arialabel: 'Gregor, Heidi Filter, 1 verfügbares Produkt' 3436 }, 3437 { 3438 label: 'Gärditz , Klaus Ferdinand', 3439 count: '(1)', 3440 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=G%C3%A4rditz+%2C+Klaus+Ferdinand', 3441 show: false, 3442 arialabel: 'Gärditz , Klaus Ferdinand Filter, 1 verfügbares Produkt' 3443 }, 3444 { 3445 label: 'Hamer, Hajo', 3446 count: '(1)', 3447 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Hamer%2C+Hajo', 3448 show: false, 3449 arialabel: 'Hamer, Hajo Filter, 1 verfügbares Produkt' 3450 }, 3451 { 3452 label: 'Hempel, Georg', 3453 count: '(1)', 3454 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Hempel%2C+Georg', 3455 show: false, 3456 arialabel: 'Hempel, Georg Filter, 1 verfügbares Produkt' 3457 }, 3458 { 3459 label: 'Herold, Holger', 3460 count: '(1)', 3461 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Herold%2C+Holger', 3462 show: false, 3463 arialabel: 'Herold, Holger Filter, 1 verfügbares Produkt' 3464 }, 3465 { 3466 label: 'Hoffmann, Boris Alexander', 3467 count: '(1)', 3468 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Hoffmann%2C+Boris+Alexander', 3469 show: false, 3470 arialabel: 'Hoffmann, Boris Alexander Filter, 1 verfügbares Produkt' 3471 }, 3472 { 3473 label: 'Hopf, Yvonne', 3474 count: '(1)', 3475 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Hopf%2C+Yvonne', 3476 show: false, 3477 arialabel: 'Hopf, Yvonne Filter, 1 verfügbares Produkt' 3478 }, 3479 { 3480 label: 'Imöhl, Matthias', 3481 count: '(1)', 3482 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Im%C3%B6hl%2C+Matthias', 3483 show: false, 3484 arialabel: 'Imöhl, Matthias Filter, 1 verfügbares Produkt' 3485 }, 3486 { 3487 label: 'Kasperzik, Birte', 3488 count: '(1)', 3489 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kasperzik%2C+Birte', 3490 show: false, 3491 arialabel: 'Kasperzik, Birte Filter, 1 verfügbares Produkt' 3492 }, 3493 { 3494 label: 'Kastner, Ulrich', 3495 count: '(1)', 3496 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kastner%2C+Ulrich', 3497 show: false, 3498 arialabel: 'Kastner, Ulrich Filter, 1 verfügbares Produkt' 3499 }, 3500 { 3501 label: 'Keiner, Dirk', 3502 count: '(1)', 3503 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Keiner%2C+Dirk', 3504 show: false, 3505 arialabel: 'Keiner, Dirk Filter, 1 verfügbares Produkt' 3506 }, 3507 { 3508 label: 'Kemmritz, Kerstin', 3509 count: '(1)', 3510 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kemmritz%2C+Kerstin', 3511 show: false, 3512 arialabel: 'Kemmritz, Kerstin Filter, 1 verfügbares Produkt' 3513 }, 3514 { 3515 label: 'Kircher, Wolfgang', 3516 count: '(1)', 3517 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kircher%2C+Wolfgang', 3518 show: false, 3519 arialabel: 'Kircher, Wolfgang Filter, 1 verfügbares Produkt' 3520 }, 3521 { 3522 label: 'Klem-Radinger, Sabrina', 3523 count: '(1)', 3524 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Klem-Radinger%2C+Sabrina', 3525 show: false, 3526 arialabel: 'Klem-Radinger, Sabrina Filter, 1 verfügbares Produkt' 3527 }, 3528 {
3529 label: 'Kollaritsch, Herwig', 3530 count: '(1)', 3531 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kollaritsch%2C+Herwig', 3532 show: false, 3533 arialabel: 'Kollaritsch, Herwig Filter, 1 verfügbares Produkt' 3534 }, 3535 { 3536 label: 'Krebs, Sabine', 3537 count: '(1)', 3538 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Krebs%2C+Sabine', 3539 show: false, 3540 arialabel: 'Krebs, Sabine Filter, 1 verfügbares Produkt' 3541 }, 3542 { 3543 label: 'Kreutner-Reisinger , Gudrun', 3544 count: '(1)', 3545 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kreutner-Reisinger+%2C+Gudrun', 3546 show: false, 3547 arialabel: 'Kreutner-Reisinger , Gudrun Filter, 1 verfügbares Produkt' 3548 }, 3549 { 3550 label: 'Kränzle, Susanne', 3551 count: '(1)', 3552 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kr%C3%A4nzle%2C+Susanne', 3553 show: false, 3554 arialabel: 'Kränzle, Susanne Filter, 1 verfügbares Produkt' 3555 }, 3556 { 3557 label: 'Kupka, Danny', 3558 count: '(1)', 3559 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Kupka%2C+Danny', 3560 show: false, 3561 arialabel: 'Kupka, Danny Filter, 1 verfügbares Produkt' 3562 }, 3563 { 3564 label: 'Kühnel, Patricia', 3565 count: '(1)', 3566 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=K%C3%BChnel%2C+Patricia', 3567 show: false, 3568 arialabel: 'Kühnel, Patricia Filter, 1 verfügbares Produkt' 3569 }, 3570 { 3571 label: 'Landmesser, Ulf', 3572 count: '(1)', 3573 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Landmesser%2C+Ulf', 3574 show: false, 3575 arialabel: 'Landmesser, Ulf Filter, 1 verfügbares Produkt' 3576 }, 3577 { 3578 label: 'Laven, Anna', 3579 count: '(1)', 3580 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Laven%2C+Anna', 3581 show: false, 3582 arialabel: 'Laven, Anna Filter, 1 verfügbares Produkt' 3583 }, 3584 { 3585 label: 'Leibniz-Institut für Lebensmittel-Systembiologie an der Technischen Universität München', 3586 count: '(1)', 3587 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Leibniz-Institut+f%C3%BCr+Lebensmittel-Systembiologie+an+der+Technischen+Universit%C3%A4t+M%C3%BCnchen', 3588 show: false, 3589 arialabel: 'Leibniz-Institut für Lebensmittel-Systembiologie an der Technischen Universität München Filter, 1 verfügbares Produkt' 3590 }, 3591 { 3592 label: 'Lennecke, Kirsten', 3593 count: '(1)', 3594 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Lennecke%2C+Kirsten', 3595 show: false, 3596 arialabel: 'Lennecke, Kirsten Filter, 1 verfügbares Produkt' 3597 }, 3598 { 3599 label: 'Lim, Silke', 3600 count: '(1)', 3601 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Lim%2C+Silke', 3602 show: false, 3603 arialabel: 'Lim, Silke Filter, 1 verfügbares Produkt' 3604 }, 3605 { 3606 label: 'Ludwig, Andrea', 3607 count: '(1)', 3608 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Ludwig%2C+Andrea', 3609 show: false, 3610 arialabel: 'Ludwig, Andrea Filter, 1 verfügbares Produkt' 3611 }, 3612 { 3613 label: 'Lunzner, Anna', 3614 count: '(1)', 3615 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Lunzner%2C+Anna', 3616 show: false, 3617 arialabel: 'Lunzner, Anna Filter, 1 verfügbares Produkt' 3618 }, 3619 { 3620 label: 'Löbach, Rita', 3621 count: '(1)', 3622 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=L%C3%B6bach%2C+Rita', 3623 show: false, 3624 arialabel: 'Löbach, Rita Filter, 1 verfügbares Produkt' 3625 }, 3626 { 3627 label: 'Lückerath, Eva', 3628 count: '(1)', 3629 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=L%C3%BCckerath%2C+Eva', 3630 show: false, 3631 arialabel: 'Lückerath, Eva Filter, 1 verfügbares Produkt' 3632 }, 3633 { 3634 label: 'Lüscher, Thomas F.', 3635 count: '(1)', 3636 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=L%C3%BCscher%2C+Thomas+F.', 3637 show: false, 3638 arialabel: 'Lüscher, Thomas F. Filter, 1 verfügbares Produkt' 3639 }, 3640 { 3641 label: 'Mehlhorn, Birgit', 3642 count: '(1)', 3643 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Mehlhorn%2C+Birgit', 3644 show: false, 3645 arialabel: 'Mehlhorn, Birgit Filter, 1 verfügbares Produkt' 3646 }, 3647 { 3648 label: 'Mehlhorn, 
3648Heinz', 3649 count: '(1)', 3650 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Mehlhorn%2C+Heinz', 3651 show: false, 3652 arialabel: 'Mehlhorn, Heinz Filter, 1 verfügbares Produkt' 3653 }, 3654 { 3655 label: 'Mehnert, Wolfgang', 3656 count: '(1)', 3657 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Mehnert%2C+Wolfgang', 3658 show: false, 3659 arialabel: 'Mehnert, Wolfgang Filter, 1 verfügbares Produkt' 3660 }, 3661 { 3662 label: 'Meißner, Carl', 3663 count: '(1)', 3664 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Mei%C3%9Fner%2C+Carl', 3665 show: false, 3666 arialabel: 'MeiÃner, Carl Filter, 1 verfügbares Produkt' 3667 }, 3668 { 3669 label: 'Melhorn, Stefanie', 3670 count: '(1)', 3671 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Melhorn%2C+Stefanie', 3672 show: false, 3673 arialabel: 'Melhorn, Stefanie Filter, 1 verfügbares Produkt' 3674 }, 3675 { 3676 label: 'Michael, Sebastian', 3677 count: '(1)', 3678 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Michael%2C+Sebastian', 3679 show: false, 3680 arialabel: 'Michael, Sebastian Filter, 1 verfügbares Produkt' 3681 }, 3682 { 3683 label: 'Miller, David', 3684 count: '(1)', 3685 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Miller%2C+David', 3686 show: false, 3687 arialabel: 'Miller, David Filter, 1 verfügbares Produkt' 3688 }, 3689 { 3690 label: 'Müller, Sven-David', 3691 count: '(1)', 3692 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=M%C3%BCller%2C+Sven-David', 3693 show: false, 3694 arialabel: 'Müller, Sven-David Filter, 1 verfügbares Produkt' 3695 }, 3696 { 3697 label: 'Müller-Frahling, Margit', 3698 count: '(1)', 3699 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=M%C3%BCller-Frahling%2C+Margit', 3700 show: false, 3701 arialabel: 'Müller-Frahling, Margit Filter, 1 verfügbares Produkt' 3702 }, 3703 { 3704 label: 'Neukirchen, Rainer', 3705 count: '(1)', 3706 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Neukirchen%2C+Rainer', 3707 show: false, 3708 arialabel: 'Neukirchen, Rainer Filter, 1 verfügbares Produkt' 3709 }, 3710 { 3711 label: 'Niklas, Herbert', 3712 count: '(1)', 3713 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Niklas%2C+Herbert', 3714 show: false, 3715 arialabel: 'Niklas, Herbert Filter, 1 verfügbares Produkt' 3716 }, 3717 { 3718 label: 'Pagelsdorf, Sylke', 3719 count: '(1)', 3720 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Pagelsdorf%2C+Sylke', 3721 show: false, 3722 arialabel: 'Pagelsdorf, Sylke Filter, 1 verfügbares Produkt' 3723 }, 3724 { 3725 label: 'Pfister, Elisabeth', 3726 count: '(1)', 3727 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Pfister%2C+Elisabeth', 3728 show: false, 3729 arialabel: 'Pfister, Elisabeth Filter, 1 verfügbares Produkt' 3730 }, 3731 { 3732 label: 'Podlogar, Julia', 3733 count: '(1)', 3734 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Podlogar%2C+Julia', 3735 show: false, 3736 arialabel: 'Podlogar, Julia Filter, 1 verfügbares Produkt' 3737 }, 3738 { 3739 label: 'Pudritz, Yvonne Marina', 3740 count: '(1)', 3741 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Pudritz%2C+Yvonne+Marina', 3742 show: false, 3743 arialabel: 'Pudritz, Yvonne Marina Filter, 1 verfügbares Produkt' 3744 }, 3745 { 3746 label: 'Roll, Sibylle', 3747 count: '(1)', 3748 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Roll%2C+Sibylle', 3749 show: false, 3750 arialabel: 'Roll, Sibylle Filter, 1 verfügbares Produkt' 3751 }, 3752 { 3753 label: 'Rose, Olaf', 3754 count: '(1)', 3755 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Rose%2C+Olaf', 3756 show: false, 3757 arialabel: 'Rose, Olaf Filter, 1 verfügbares Produkt' 3758 }, 3759 { 3760 label: 'Sax, Michael', 3761 count: '(1)', 3762 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Sax%2C+Michael', 3763 show: false, 3764 arialabel: 'Sax, Michael Filter, 1 verfügbares Produkt' 3765 }, 3766 { 3767 label: 'Scherzer, Birgit', 3768 count: '(1)', 3769 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Scherzer%2C+Birgit', 3770 show: false, 3771 arialabel: 'Scherzer, Birgit Filter, 1 verfügbares Produkt' 3772 }, 3773 { 3774 label: 'Schindler, Elisabeth', 3775 count: '(1)', 3776 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schindler%2C+Elisabeth', 3777 show: false, 3778 arialabel: 'Schindler, Elisabeth Filter, 1 verfügbares Produkt' 3779 }, 3780 { 3781 label: 'Schlett, Siegfried', 3782 count: '(1)', 3783 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schlett%2C+Siegfried', 3784 show: false, 3785 arialabel: 'Schlett, Siegfried Filter, 1 verfügbares Produkt' 3786 }, 3787 { 3788 label: 'Schmid, Ulrike', 3789 count: '(1)', 3790 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schmid%2C+Ulrike', 3791 show: false, 3792 arialabel: 'Schmid, Ulrike Filter, 1 verfügbares Produkt' 3793 }, 3794 { 3795 label: 'Schmidt, Carola', 3796 count: '(1)', 3797 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schmidt%2C+Carola', 3798 show: false, 3799 arialabel: 'Schmidt, Carola Filter, 1 verfügbares Produkt' 3800 }, 3801 { 3802 label: 'Schneider, Simon', 3803 count: '(1)', 3804 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schneider%2C+Simon', 3805 show: false, 3806 arialabel: 'Schneider, Simon Filter, 1 verfügbares Produkt' 3807 }, 3808 { 3809 label: 'Scholle, Oliver', 3810 count: '(1)', 3811 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Scholle%2C+Oliver', 3812 show: false, 3813 arialabel: 'Scholle, Oliver Filter, 1 verfügbares Produkt' 3814 }, 3815 { 3816 label: 'Schraut, Veronika', 3817 count: '(1)', 3818 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Schraut%2C+Veronika', 3819 show: false, 3820 arialabel: 'Schraut, Veronika Filter, 1 verfügbares Produkt' 3821 }, 3822 { 3823 label: 'Schäfer, Patrick', 3824 count: '(1)', 3825 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Sch%C3%A4fer%2C+Patrick', 3826 show: false, 3827 arialabel: 'Schäfer, Patrick Filter, 1 verfügbares Produkt' 3828 }, 3829 { 3830 label: 'Schäferlein, Susanne', 3831 count: '(1)', 3832 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Sch%C3%A4ferlein%2C+Susanne', 3833 show: false, 3834 arialabel: 'Schäferlein, Susanne Filter, 1 verfügbares Produkt' 3835 }, 3836 { 3837 label: 'Schönberger, Norbert L.', 3838 count: '(1)', 3839 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Sch%C3%B6nberger%2C+Norbert+L.', 3840 show: false, 3841 arialabel: 'Schönberger, Norbert L. Filter, 1 verfügbares Produkt' 3842 }, 3843 { 3844 label: 'Seeger, Christa', 3845 count: '(1)', 3846 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Seeger%2C+Christa', 3847 show: false, 3848 arialabel: 'Seeger, Christa Filter, 1 verfügbares Produkt' 3849 }, 3850 { 3851 label: 'Stadelmann, Ingeborg', 3852 count: '(1)', 3853 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Stadelmann%2C+Ingeborg', 3854 show: false, 3855 arialabel: 'Stadelmann, Ingeborg Filter, 1 verfügbares Produkt' 3856 }, 3857 { 3858 label: 'Staufenbiel, Barbara', 3859 count: '(1)', 3860 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Staufenbiel%2C+Barbara', 3861 show: false, 3862 arialabel: 'Staufenbiel, Barbara Filter, 1 verfügbares Produkt' 3863 }, 3864 { 3865 label: 'Stollhof, Bettina', 3866 count: '(1)', 3867 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Stollhof%2C+Bettina', 3868 show: false, 3869 arialabel: 'Stollhof, Bettina Filter, 1 verfügbares Produkt' 3870 }, 3871 { 3872 label: 'Szabo, Bela', 3873 count: '(1)', 3874 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Szabo%2C+Bela', 3875 show: false, 3876 arialabel: 'Szabo, Bela Filter, 1 verfügbares Produkt' 3877 }, 3878 { 3879 label: 'Tetzner, 
3879Heide', 3880 count: '(1)', 3881 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Tetzner%2C+Heide', 3882 show: false, 3883 arialabel: 'Tetzner, Heide Filter, 1 verfügbares Produkt' 3884 }, 3885 { 3886 label: 'Thees, Carlos', 3887 count: '(1)', 3888 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Thees%2C+Carlos', 3889 show: false, 3890 arialabel: 'Thees, Carlos Filter, 1 verfügbares Produkt' 3891 }, 3892 { 3893 label: 'Trenk, Dietmar', 3894 count: '(1)', 3895 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Trenk%2C+Dietmar', 3896 show: false, 3897 arialabel: 'Trenk, Dietmar Filter, 1 verfügbares Produkt' 3898 }, 3899 { 3900 label: 'Uhlemayr, Ursula', 3901 count: '(1)', 3902 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Uhlemayr%2C+Ursula', 3903 show: false, 3904 arialabel: 'Uhlemayr, Ursula Filter, 1 verfügbares Produkt' 3905 }, 3906 { 3907 label: 'Ulmer, Susanne', 3908 count: '(1)', 3909 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Ulmer%2C+Susanne', 3910 show: false, 3911 arialabel: 'Ulmer, Susanne Filter, 1 verfügbares Produkt' 3912 }, 3913 { 3914 label: 'Vogelreuter, Axel', 3915 count: '(1)', 3916 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Vogelreuter%2C+Axel', 3917 show: false, 3918 arialabel: 'Vogelreuter, Axel Filter, 1 verfügbares Produkt' 3919 }, 3920 { 3921 label: 'Walach, Harald', 3922 count: '(1)', 3923 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Walach%2C+Harald', 3924 show: false, 3925 arialabel: 'Walach, Harald Filter, 1 verfügbares Produkt' 3926 }, 3927 { 3928 label: 'Waltering, Isabel', 3929 count: '(1)', 3930 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Waltering%2C+Isabel', 3931 show: false, 3932 arialabel: 'Waltering, Isabel Filter, 1 verfügbares Produkt' 3933 }, 3934 { 3935 label: 'Weber, Christiane', 3936 count: '(1)', 3937 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Weber%2C+Christiane', 3938 show: false, 3939 arialabel: 'Weber, Christiane Filter, 1 verfügbares Produkt' 3940 }, 3941 { 3942 label: 'Weber, Stefanie', 3943 count: '(1)', 3944 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Weber%2C+Stefanie', 3945 show: false, 3946 arialabel: 'Weber, Stefanie Filter, 1 verfügbares Produkt' 3947 }, 3948 { 3949 label: 'Weiler, Lorenz', 3950 count: '(1)', 3951 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Weiler%2C+Lorenz', 3952 show: false, 3953 arialabel: 'Weiler, Lorenz Filter, 1 verfügbares Produkt' 3954 }, 3955 { 3956 label: 'Weitschies, Werner', 3957 count: '(1)', 3958 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Weitschies%2C+Werner', 3959 show: false, 3960 arialabel: 'Weitschies, Werner Filter, 1 verfügbares Produkt' 3961 }, 3962 { 3963 label: 'Werner, Sabine', 3964 count: '(1)', 3965 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Werner%2C+Sabine', 3966 show: false, 3967 arialabel: 'Werner, Sabine Filter, 1 verfügbares Produkt' 3968 }, 3969 { 3970 label: 'Wirth, Rainer', 3971 count: '(1)', 3972 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Wirth%2C+Rainer', 3973 show: false, 3974 arialabel: 'Wirth, Rainer Filter, 1 verfügbares Produkt' 3975 }, 3976 { 3977 label: 'Wolf, Elke', 3978 count: '(1)', 3979 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Wolf%2C+Elke', 3980 show: false, 3981 arialabel: 'Wolf, Elke Filter, 1 verfügbares Produkt' 3982 }, 3983 { 3984 label: 'Wunderlich, Silke', 3985 count: '(1)', 3986 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Wunderlich%2C+Silke', 3987 show: false, 3988 arialabel: 'Wunderlich, Silke Filter, 1 verfügbares Produkt' 3989 }, 3990 { 3991 label: 'Wurglics, Mario', 3992 count: '(1)', 3993 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Wurglics%2C+Mario', 3994 show: false, 3995 arialabel: 'Wurglics, Mario Filter, 1 verfügbares Produkt' 3996 }, 3997 { 3998 label: 'Ziermann, Janine', 3999 count: '(1)', 4000 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Ziermann%2C+Janine', 4001 show: false, 4002 arialabel: 'Ziermann, Janine Filter, 1 verfügbares Produkt' 4003 }, 4004 { 4005 label: 'Zimmer, Robert', 4006 count: '(1)', 4007 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?person=Zimmer%2C+Robert', 4008 show: false, 4009 arialabel: 'Zimmer, Robert Filter, 1 verfügbares Produkt' 4010 }, 4011 ], 4012 4013 get filteredItems() { 4014 res = this.items.filter( 4015 i => i.label.toLowerCase().includes(this.search.toLowerCase()) 4016 ); 4017 if(this.search.toLowerCase().length > 0){ 4018 this.canShowShowAll = false;
4019 res.forEach(function(i){ 4020 i.show = true; 4021 }); 4022 } 4023 else { 4024 this.canShowShowAll = true; 4025 this.hideAll(); 4026 } 4027 return res; 4028 }, 4029 4030 showAll(){ 4031 this.showAllConstant = true; 4032 this.items.forEach(function(i){ 4033 i.show = true; 4034 }); 4035 }, 4036 4037 hideAll(){ 4038 this.showAllConstant = false; 4039 let counter = 1; 4040 this.items.forEach(function(i){ 4041 if(counter <= 10){ 4042 i.show = true; 4043 } 4044 else { 4045 i.show = false; 4046 } 4047 counter++; 4048 }); 4049 } 4050 }" class=""> 4051 <input 4052 x-show="canShowSearchField" 4053 type="search" 4054 x-model="search" 4055 placeholder="Suche" 4056 class="w-full form-input mb-3"> 4057 4058 <ol x-show="open" class="w-full items" aria-label="Autor Filter Optionen"> 4059 <template x-for="item in filteredItems" :key="item.link"> 4060 <li x-show="item.show"> 4061 <a class="flex justify-between py-1 hover:text-black" x-bind:href="item.link" 4062 :aria-label="item.arialabel" 4063 > 4064 <span x-text="item.label"></span> 4065 <span class="count text-primary" x-text="item.count"></span> 4066 </a> 4067 </li> 4068 </template> 4069 <div x-show="canShowShowAll"> 4070 <button x-show="!showAllConstant" @click="showAll()" 4071 class="action submit primary btn btn-primary disabled:opacity-75"> 4072 Mehr anzeigen </button> 4073 <button x-show="showAllConstant" @click="hideAll()" 4074 class="action submit primary btn btn-primary disabled:opacity-75"> 4075 Weniger anzeigen </button> 4076 </div> 4077 </ol> 4078</div> </div> 4079 </template> 4080 </div> 4081 <div 4082 x-data="{ 4083 open: false, 4084 id: $id('filter-option') 4085 }" 4086 class="filter-option card my-4" 4087 > 4088 <h3 :id="`${id}-title`"> 4089 <button 4090 type="button" 4091 @click="open = !open" 4092 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container w-full" 4093 :class="{ 'border-b pb-4': open }" 4094 :aria-controls="`${id}-content`" 4095 :aria-expanded="open" 4096 > 4097 <span class="title text-md md:text-lg font-semibold"> 4098 Preis <span class="sr-only"> filter</span> 4099 </span> 4100 <span class="py-1 px-1 rounded border border-container"> 4101 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" aria-hidden="true" focusable="false"> 4102 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 4103</svg> 4104 </span> 4105 </button> 4106 </h3> 4107 <template x-if="open"> 4108 <div 4109 :id="`${id}-content`" 4110 class="filter-options-content pt-3" 4111 > 4112 <ol class="items" aria-label="Price Filter Optionen"> 4113 <li> 4114 <a 4115 href="https://www.govi.de/apotheke/pharmazeutische-beratung?price=0-25" 4116 class="flex justify-between py-1 hover:text-black" 4117 aria-label="<span class="price">0,00 €</span> – <span class="price">24,99 €</span> Filter, 33 verfügbare Produkte" 4118 >
4119 <span><span class="price">0,00 â¬</span> â <span class="price">24,99 â¬</span></span> 4120 <span class="count text-primary">(33)</span> 4121 </a> 4122 </li> 4123 <li> 4124 <a 4125 href="https://www.govi.de/apotheke/pharmazeutische-beratung?price=25-50" 4126 class="flex justify-between py-1 hover:text-black" 4127 aria-label="<span class="price">25,00 €</span> – <span class="price">49,99 €</span> Filter, 54 verfügbare Produkte" 4128 > 4129 <span><span class="price">25,00 â¬</span> â <span class="price">49,99 â¬</span></span> 4130 <span class="count text-primary">(54)</span> 4131 </a> 4132 </li> 4133 <li> 4134 <a 4135 href="https://www.govi.de/apotheke/pharmazeutische-beratung?price=50-75" 4136 class="flex justify-between py-1 hover:text-black" 4137 aria-label="<span class="price">50,00 €</span> – <span class="price">74,99 €</span> Filter, 13 verfügbare Produkte" 4138 > 4139 <span><span class="price">50,00 â¬</span> â <span class="price">74,99 â¬</span></span> 4140 <span class="count text-primary">(13)</span> 4141 </a> 4142 </li> 4143 <li> 4144 <a 4145 href="https://www.govi.de/apotheke/pharmazeutische-beratung?price=75-100" 4146 class="flex justify-between py-1 hover:text-black" 4147 aria-label="<span class="price">75,00 €</span> – <span class="price">99,99 €</span> Filter, 6 verfügbare Produkte" 4148 > 4149 <span><span class="price">75,00 â¬</span> â <span class="price">99,99 â¬</span></span> 4150 <span class="count text-primary">(6)</span> 4151 </a> 4152 </li> 4153 <li> 4154 <a 4155 href="https://www.govi.de/apotheke/pharmazeutische-beratung?price=100-125" 4156 class="flex justify-between py-1 hover:text-black" 4157 aria-label="<span class="price">100,00 €</span> – <span class="price">124,99 €</span> Filter, 3 verfügbare Produkte" 4158 > 4159 <span><span class="price">100,00 â¬</span> â <span class="price">124,99 â¬</span></span> 4160 <span class="count text-primary">(3)</span> 4161 </a> 4162 </li> 4163 <li> 4164 <a 4165 href="https://www.govi.de/apotheke/pharmazeutische-beratung?price=125-150" 4166 class="flex justify-between py-1 hover:text-black" 4167 aria-label="<span class="price">125,00 €</span> – <span class="price">149,99 €</span> Filter, 1 verfügbares Produkt" 4168 >
4169 <span><span class="price">125,00 â¬</span> â <span class="price">149,99 â¬</span></span> 4170 <span class="count text-primary">(1)</span> 4171 </a> 4172 </li> 4173 <li> 4174 <a 4175 href="https://www.govi.de/apotheke/pharmazeutische-beratung?price=175-200" 4176 class="flex justify-between py-1 hover:text-black" 4177 aria-label="<span class="price">175,00 €</span> und mehr Filter, 1 verfügbares Produkt" 4178 > 4179 <span><span class="price">175,00 â¬</span> und mehr</span> 4180 <span class="count text-primary">(1)</span> 4181 </a> 4182 </li> 4183 </ol> </div> 4184 </template> 4185 </div> 4186 <div 4187 x-data="{ 4188 open: false, 4189 id: $id('filter-option') 4190 }" 4191 class="filter-option card my-4" 4192 > 4193 <h3 :id="`${id}-title`"> 4194 <button 4195 type="button" 4196 @click="open = !open" 4197 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container w-full" 4198 :class="{ 'border-b pb-4': open }" 4199 :aria-controls="`${id}-content`" 4200 :aria-expanded="open" 4201 > 4202 <span class="title text-md md:text-lg font-semibold"> 4203 Medium <span class="sr-only"> filter</span> 4204 </span> 4205 <span class="py-1 px-1 rounded border border-container"> 4206 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" aria-hidden="true" focusable="false"> 4207 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 4208</svg> 4209 </span> 4210 </button> 4211 </h3> 4212 <template x-if="open"> 4213 <div 4214 :id="`${id}-content`" 4215 class="filter-options-content pt-3" 4216 > 4217
4217<script> 4218 function initLayeredSwatch_medium() { 4219 return { 4220 getSwatchType(typeNumber) { 4221 switch ("" + typeNumber) { 4222 case '1': 4223 return "color" 4224 case '2': 4225 return "image" 4226 case '0': 4227 default: 4228 return "text" 4229 } 4230 }, 4231 getSwatchBackgroundStyle(type, value, image) { 4232 if (this.getSwatchType(type) === "color") { 4233 return 'background-color:' + value; 4234 } else if (this.getSwatchType(type) === "image") { 4235 return "background: #ffffff url('" + image + "') no-repeat center"; 4236 } else { 4237 return ''; 4238 } 4239 }, 4240 activeTooltipItem: false, 4241 tooltipPositionElement: false, 4242 isTooltipVisible() { 4243 return this.activeTooltipItem 4244 }, 4245 isFirstItemCol() { 4246 const left = this.tooltipPositionElement.offsetLeft; 4247 const leftParent = this.tooltipPositionElement.parentNode.offsetLeft; 4248 const width = this.tooltipPositionElement.offsetWidth; 4249 return left - leftParent < width; 4250 }, 4251 getTooltipImageStyle() { 4252 const type = this.activeTooltipItem.type; 4253 4254 if (this.getSwatchType(type) === "color") { 4255 return 'background-color:' + this.activeTooltipItem.value + '; width: 110px; height: 90px;'; 4256 } else if (this.getSwatchType(type) === "image") { 4257 return "background: #ffffff url('" + this.activeTooltipItem.thumb + 4258 "') center center no-repeat; width: 110px; height: 90px;"; 4259 } else { 4260 return 'display:none'; 4261 } 4262 }, 4263 getTooltipPosition() { 4264 return this.tooltipPositionElement ? 4265 ( 4266 `top: ${this.tooltipPositionElement.offsetTop}px;` + 4267 `left: ${this.tooltipPositionElement.offsetLeft}px;` 4268 ) : '' 4269 }, 4270 getTooltipLabel() { 4271 return this.activeTooltipItem.label || '' 4272 }, 4273 isVisualSwatch() { 4274 return this.getSwatchType(this.activeTooltipItem.type) !== 'text' 4275 } 4276 } 4277 } 4278</script>
4278 4279 4280<div class="swatch-attribute swatch-layered medium" 4281 x-data="initLayeredSwatch_medium()" 4282> 4283 <div class="swatch-attribute-options clearfix"> 4284 <a 4285 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=18" rel="nofollow" 4286 aria-label="Filter Medium Buch" 4287 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4288 > 4289 Buch </a> 4290 <a 4291 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=19" rel="nofollow" 4292 aria-label="Filter Medium Drehscheibe" 4293 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4294 > 4295 Drehscheibe </a> 4296 <a 4297 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=25" rel="nofollow" 4298 aria-label="Filter Medium Loseblattwerk zur Fortsetzung" 4299 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4300 > 4301 Loseblattwerk zur Fortsetzung </a> 4302 <a 4303 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=26" rel="nofollow" 4304 aria-label="Filter Medium Karteikarten" 4305 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4306 > 4307 Karteikarten </a> 4308 <a 4309 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=28" rel="nofollow" 4310 aria-label="Filter Medium PDF" 4311 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4312 > 4313 PDF </a> 4314 <a 4315 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=29" rel="nofollow" 4316 aria-label="Filter Medium EPUB" 4317 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4318 > 4319 EPUB </a> 4320 <a 4321 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=31" rel="nofollow" 4322 aria-label="Filter Medium CD-ROM" 4323 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4324 > 4325 CD-ROM </a> 4326 <a 4327 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=47" rel="nofollow" 4328 aria-label="Filter Medium Protokolle" 4329 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4330 > 4331 Protokolle </a> 4332 <a 4333 href="https://www.govi.de/apotheke/pharmazeutische-beratung?medium=40" rel="nofollow" 4334 aria-label="Filter Medium Sonstiges" 4335 class="swatch-option-link-layered swatch-option cursor-pointer bg-container-lighter shadow-sm relative select-none border-container-darker " 4336 > 4337 Sonstiges </a> 4338 </div> 4339 </div> 4340 4341 </div> 4342 </template> 4343 </div> 4344 <div 4345 x-data="{ 4346 open: false, 4347 id: $id('filter-option') 4348 }" 4349 class="filter-option card my-4" 4350 > 4351 <h3 :id="`${id}-title`"> 4352 <button 4353 type="button" 4354 @click="open = !open" 4355 class="filter-options-title flex justify-between items-center cursor-pointer hover:text-secondary-darker border-container w-full" 4356 :class="{ 'border-b pb-4': open }" 4357 :aria-controls="`${id}-content`" 4358 :aria-expanded="open" 4359 >
4360 <span class="title text-md md:text-lg font-semibold"> 4361 Erscheinungsjahr <span class="sr-only"> filter</span> 4362 </span> 4363 <span class="py-1 px-1 rounded border border-container"> 4364 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="transition-transform transform duration-300 ease-in-out" width="24" height="24" :class="{ 'rotate-180': open }" aria-hidden="true" focusable="false"> 4365 <path stroke-linecap="round" stroke-linejoin="round" d="M19 9l-7 7-7-7"/> 4366</svg> 4367 </span> 4368 </button> 4369 </h3> 4370 <template x-if="open"> 4371 <div 4372 :id="`${id}-content`" 4373 class="filter-options-content pt-3" 4374 > 4375 <div x-data="{ 4376 search: '', 4377 open: true, 4378 showAllConstant: false, 4379 canShowShowAll: true, 4380 canShowSearchField: true, 4381 items: [ 4382 { 4383 label: '2027', 4384 count: '(1)', 4385 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2027', 4386 show: true, 4387 arialabel: '2027 Filter, 1 verfügbares Produkt' 4388 }, 4389 { 4390 label: '2026', 4391 count: '(1)', 4392 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2026', 4393 show: true, 4394 arialabel: '2026 Filter, 1 verfügbares Produkt' 4395 }, 4396 { 4397 label: '2025', 4398 count: '(14)', 4399 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2025', 4400 show: true, 4401 arialabel: '2025 Filter, 14 verfügbare Produkte' 4402 }, 4403 { 4404 label: '2024', 4405 count: '(10)', 4406 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2024', 4407 show: true, 4408 arialabel: '2024 Filter, 10 verfügbare Produkte' 4409 }, 4410 { 4411 label: '2023', 4412 count: '(8)', 4413 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2023', 4414 show: true, 4415 arialabel: '2023 Filter, 8 verfügbare Produkte' 4416 }, 4417 { 4418 label: '2022', 4419 count: '(12)', 4420 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2022', 4421 show: true, 4422 arialabel: '2022 Filter, 12 verfügbare Produkte' 4423 }, 4424 { 4425 label: '2021', 4426 count: '(7)', 4427 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2021', 4428 show: true, 4429 arialabel: '2021 Filter, 7 verfügbare Produkte' 4430 }, 4431 { 4432 label: '2020', 4433 count: '(10)', 4434 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2020', 4435 show: true, 4436 arialabel: '2020 Filter, 10 verfügbare Produkte' 4437 }, 4438 { 4439 label: '2019', 4440 count: '(6)', 4441 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2019', 4442 show: true, 4443 arialabel: '2019 Filter, 6 verfügbare Produkte' 4444 }, 4445 { 4446 label: '2018', 4447 count: '(7)', 4448 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2018', 4449 show: true, 4450 arialabel: '2018 Filter, 7 verfügbare Produkte' 4451 }, 4452 { 4453 label: '2017', 4454 count: '(6)', 4455 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2017', 4456 show: false, 4457 arialabel: '2017 Filter, 6 verfügbare Produkte' 4458 }, 4459 { 4460 label: '2016', 4461 count: '(5)', 4462 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2016', 4463 show: false, 4464 arialabel: '2016 Filter, 5 verfügbare Produkte' 4465 }, 4466 { 4467 label: '2015', 4468 count: '(3)', 4469 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2015', 4470 show: false, 4471 arialabel: '2015 Filter, 3 verfügbare Produkte' 4472 }, 4473 { 4474 label: '2014', 4475 count: '(5)', 4476 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2014', 4477 show: false, 4478 arialabel: '2014 Filter, 5 verfügbare Produkte' 4479 }, 4480 { 4481 label: '2013', 4482 count: '(5)', 4483 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2013', 4484 show: false, 4485 arialabel: '2013 Filter, 5 verfügbare Produkte' 4486 }, 4487 { 4488 label: '2012', 4489 count: '(2)', 4490 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2012', 4491 show: false, 4492 arialabel: '2012 Filter, 2 verfügbare Produkte' 4493 }, 4494 { 4495 label: '2011', 4496 count: '(7)', 4497 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2011', 4498 show: false, 4499 arialabel: '2011 Filter, 7 verfügbare Produkte' 4500 }, 4501 { 4502 label: '2010', 4503 count: '(1)', 4504 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2010', 4505 show: false, 4506 arialabel: '2010 Filter, 1 verfügbares Produkt' 4507 }, 4508 { 4509 label: '2008', 4510 count: '(1)', 4511 link: 'https://www.govi.de/apotheke/pharmazeutische-beratung?publishing_year=2008', 4512 show: false, 4513 arialabel: '2008 Filter, 1 verfügbares Produkt' 4514 }, 4515 ], 4516 4517 get filteredItems() { 4518 res = this.items.filter( 4519 i => i.label.toLowerCase().includes(this.search.toLowerCase()) 4520 ); 4521 if(this.search.toLowerCase().length > 0){ 4522 this.canShowShowAll = false;
4523 res.forEach(function(i){ 4524 i.show = true; 4525 }); 4526 } 4527 else { 4528 this.canShowShowAll = true; 4529 this.hideAll(); 4530 } 4531 return res; 4532 }, 4533 4534 showAll(){ 4535 this.showAllConstant = true; 4536 this.items.forEach(function(i){ 4537 i.show = true; 4538 }); 4539 }, 4540 4541 hideAll(){ 4542 this.showAllConstant = false; 4543 let counter = 1; 4544 this.items.forEach(function(i){ 4545 if(counter <= 10){ 4546 i.show = true; 4547 } 4548 else { 4549 i.show = false; 4550 } 4551 counter++; 4552 }); 4553 } 4554 }" class=""> 4555 <input 4556 x-show="canShowSearchField" 4557 type="search" 4558 x-model="search" 4559 placeholder="Suche" 4560 class="w-full form-input mb-3"> 4561 4562 <ol x-show="open" class="w-full items" aria-label="Erscheinungsjahr Filter Optionen"> 4563 <template x-for="item in filteredItems" :key="item.link"> 4564 <li x-show="item.show"> 4565 <a class="flex justify-between py-1 hover:text-black" x-bind:href="item.link" 4566 :aria-label="item.arialabel" 4567 > 4568 <span x-text="item.label"></span> 4569 <span class="count text-primary" x-text="item.count"></span> 4570 </a> 4571 </li> 4572 </template> 4573 <div x-show="canShowShowAll"> 4574 <button x-show="!showAllConstant" @click="showAll()" 4575 class="action submit primary btn btn-primary disabled:opacity-75"> 4576 Mehr anzeigen </button> 4577 <button x-show="showAllConstant" @click="hideAll()" 4578 class="action submit primary btn btn-primary disabled:opacity-75"> 4579 Weniger anzeigen </button> 4580 </div> 4581 </ol> 4582</div> </div> 4583 </template> 4584 </div> 4585 </div> 4586 </div> 4587
4587<script> 4588 function initLayeredNavigation() { 4589 return { 4590 isMobile: false, 4591 blockOpen: false, 4592 checkIsMobileResolution() { 4593 this.isMobile = window.matchMedia('(max-width: 767px)').matches; 4594 } 4595 } 4596 } 4597 </script>
4597 4598</aside><div class="column main"> 4599 <section class="py-8" id="product-list" aria-label="Product list" tabindex="-1"> 4600
4600<script> 4601 function initToolbar_6ac221628a05b() { 4602 return { 4603 options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"list","directionDefault":"asc","orderDefault":"name","limitDefault":10,"url":"https:\/\/www.govi.de\/apotheke\/pharmazeutische-beratung","formKey":"MHFk6olfWgubb4xR","post":false,"page":"p"}}.productListToolbarForm || {}, 4604 getUrlParams: function () { 4605 let decode = window.decodeURIComponent, 4606 urlPaths = this.options.url.split('?'), 4607 urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], 4608 params = {}, 4609 parameters, i; 4610 4611 for (i = 0; i < urlParams.length; i++) { 4612 parameters = urlParams[i].split('='); 4613 params[decode(parameters[0])] = parameters[1] !== undefined ? 4614 decode(parameters[1].replace(/\+/g, '%20')) : 4615 ''; 4616 } 4617 4618 return params; 4619 }, 4620 getCurrentLimit: function () { 4621 return this.getUrlParams()[this.options.limit] || this.options.limitDefault; 4622 }, 4623 getCurrentPage: function () { 4624 return this.getUrlParams()[this.options.page] || 1; 4625 }, 4626 changeUrl(paramName, paramValue, defaultValue) { 4627 let urlPaths = this.options.url.split('?'), 4628 baseUrl = urlPaths[0], 4629 paramData = this.getUrlParams(), 4630 currentPage = this.getCurrentPage(), 4631 newPage; 4632 4633 /** 4634 * calculates the page on which the first item of the current page will 4635 * be with the new limit and sets that number as the new page 4636 */ 4637 if (currentPage > 1 && paramName === this.options.limit) { 4638 newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; 4639 4640 if (newPage > 1) { 4641 paramData[this.options.page] = newPage; 4642 } else { 4643 delete paramData[this.options.page]; 4644 } 4645 } 4646 4647 paramData[paramName] = paramValue; 4648 4649 if (this.options.post) { 4650 hyva.postForm({action: baseUrl, data: paramData}); 4651 } else { 4652 if (paramValue === defaultValue.toString()) { 4653 delete paramData[paramName]; 4654 } 4655 paramData = Object.keys(paramData).length === 0 4656 ? '' 4657 : '?' + (new URLSearchParams(paramData)); 4658 location.href = baseUrl + paramData 4659 } 4660 } 4661 } 4662 } 4663</script>
4663 4664 <div x-data="initToolbar_6ac221628a05b()" 4665 class="toolbar toolbar-products w-full flex flex-col xl:flex-row"> 4666 4667 <div class="w-full xl:w-2/12 text-center xl:text-left mb-4"> 4668 <p class="toolbar-amount text-sm leading-5 text-gray-700 w-full" 4669 id="toolbar-amount"> 4670 Artikel <span class="toolbar-number">1</span>-<span class="toolbar-number">10</span> von <span class="toolbar-number">111</span> </p> 4671 </div> 4672 4673 <div class="w-full xl:w-5/12 text-center xl:text-left mb-4"> 4674 4675 4676 4677 <div class="flex justify-center"> 4678 <nav class="inline-flex items-center pages" aria-label="pagination"> 4679 <ol class="relative z-0 inline-flex shadow-sm items pages-items"> 4680 <li class="item pages-item-previous"> 4681 <a 4682 role="link" 4683 class="previous relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 rounded-l-md px-3 py-2 text-gray-400 4684 border-gray-200" 4685 aria-disabled="true" 4686 aria-label="Zurück" 4687 > 4688 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 4689 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 4690</svg> 4691 </a> 4692 </li> 4693 4694 4695 4696 <li class="item -ml-px"> 4697 <a 4698 href="https://www.govi.de/apotheke/pharmazeutische-beratung" 4699 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 z-10 px-4 py-2 text-c7 bg-white border-c7 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8 !font-bold" 4700 aria-current="page" 4701 > 4702 <span class="sr-only label"> 4703 Sie lesen gerade die Seite </span> 4704 1 </a> 4705 </li> 4706 <li class="item -ml-px"> 4707 <a 4708 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=2" 4709 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 4710 > 4711 <span class="sr-only label">Seite</span> 4712 <span>2</span> 4713 </a> 4714 </li> 4715 <li class="item -ml-px"> 4716 <a 4717 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=3" 4718 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 4719 >
4720 <span class="sr-only label">Seite</span> 4721 <span>3</span> 4722 </a> 4723 </li> 4724 <li class="item -ml-px"> 4725 <a 4726 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=4" 4727 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 4728 > 4729 <span class="sr-only label">Seite</span> 4730 <span>4</span> 4731 </a> 4732 </li> 4733 <li class="item -ml-px"> 4734 <a 4735 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=5" 4736 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 4737 > 4738 <span class="sr-only label">Seite</span> 4739 <span>5</span> 4740 </a> 4741 </li> 4742 4743 4744 4745 <li class="item pages-item-next -ml-px"> 4746 <a 4747 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=2" 4748 class="action next relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 rounded-r-md px-3 py-2 text-gray-500 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 4749 aria-label="Weiter" 4750 > 4751 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 4752 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 4753</svg> 4754 </a> 4755 </li> 4756 </ol> 4757 </nav> 4758 </div> 4759 4760 4761 4762 4763 </div> 4764 4765 <div class="w-full xl:w-5/12 text-center xl:text-left mb-4 flex gap-2 justify-center xl:justify-end"> 4766 4767 <div class="hidden modes w-20 order-1 col-span-1 sm:col-span-2 md:col-span-1 lg:col-span-2"></div> 4768 4769 4770 <div class="field limiter w-auto"> 4771 <div class="control"> 4772 <label class="text-sm label"> 4773 <span aria-hidden="true">Zeige</span> 4774 4775 <select 4776 data-role="limiter" 4777 class="form-select limiter-options" 4778 @change="changeUrl( 4779 'product_list_limit', 4780 $event.currentTarget.options[$event.currentTarget.selectedIndex].value, 4781 options.limitDefault 4782 )" 4783 aria-label="Show items per page" 4784 > 4785 <option value="5" 4786 > 4787 5 </option> 4788 <option value="10" 4789 selected="selected" 4790 > 4791 10 </option> 4792 <option value="15" 4793 > 4794 15 </option> 4795 <option value="20" 4796 > 4797 20 </option> 4798 <option value="25" 4799 > 4800 25 </option> 4801 </select> 4802 </label> 4803 </div> 4804 </div> 4805 <div class="toolbar-sorter sorter w-auto relative"> 4806 <select data-role="sorter" class="form-select sorter-options mr-3" 4807 aria-label="Sortieren nach" @change="changeUrl( 4808 'product_list_order', 4809 $event.currentTarget.options[$event.currentTarget.selectedIndex].value, 4810 options.orderDefault 4811 )"> 4812 <option value="name" selected="selected" > 4813 Artikelname </option> 4814 <option value="price" > 4815 Preis </option> 4816 <option value="publishing_year" > 4817 Erscheinungsjahr </option> 4818 <option value="medium" > 4819 Medium </option> 4820 <option value="default_order" > 4821 Standard </option> 4822 </select> 4823 <a title="Absteigend sortieren" 4824 href="#" class="action sorter-action sort-asc absolute top-3 -right-4" 4825 @click.prevent="changeUrl('product_list_dir', 'desc', options.directionDefault)"> 4826 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 4827 <path stroke-linecap="round" stroke-linejoin="round" d="M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4"/> 4828<title>Absteigend&#x20;sortieren</title></svg> 4829 </a> 4830 </div> </div> 4831 4832 </div> 4833 <div class="flex flex-wrap md:flex-nowrap gap-x-8"> 4834 </div> 4835 <div class="products wrapper mode-list products-list"> 4836 <div class="mx-auto pt-4 pb-12 grid gap-4 grid-cols-1 "> 4837 4838 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/362/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 4839 lg:flex-row" > 4840 <input name="form_key" type="hidden" value="mZ059GnBxxEhpuDL" /> <input type="hidden" name="product" value="362" /> 4841 <a href="https://www.govi.de/adhaerenzfoerderung" 4842 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 4843 tabindex="-1"> 4844 <div class="min-h-[362px] flex items-center mx-auto"> 4845 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 4846 x-data="" 4847 @update-gallery-362.window="$root.src = $event.detail" 4848 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/9/7/9783774114807_adhaerenzfoerderung_1.jpg" 4849 loading="lazy" 4850 alt="Adhärenzförderung" 4851 title="Adhärenzförderung" 4852 /> 4853</div> 4854 </a> 4855 <div class="product-info flex flex-col grow lg:w-4/6"> 4856 <div class="grid h-full"> 4857 <div class="product-info--top self-start"> 4858 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 4859 <a class="product-item-link font-bold" href="https://www.govi.de/adhaerenzfoerderung" :id="`slide-desc-362-${$id('slider-id')}`"> 4860 Adhärenzförderung </a> 4861 </div> 4862 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 4863 Therapieziele gemeinsam erreichen </div> 4864 </div> 4865 4866 <div class="product-info--bottom self-end"> 4867 <!-- Swatches -->
4868 <div class="self-center"> 4869 <div class=""> 4870
4870<script> 4871 function initConfigurableSwatchOptions_362() { 4872 const configurableOptionsComponent = initConfigurableOptions( 4873 '362', 4874 {"attributes":{"172":{"id":"172","code":"medium","label":"Medium","options":[{"id":"18","label":"Buch","products":["360"]},{"id":"28","label":"PDF","products":["361"]}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"360":{"baseOldPrice":{"amount":24.205606476636},"oldPrice":{"amount":25.9},"basePrice":{"amount":24.205606476636},"finalPrice":{"amount":25.9},"tierPrices":[],"msrpPrice":{"amount":0},"isApproxPrice":false,"priceDescription":null,"availabilityText":"1-3 Werktage","availabilityStatusColor":"bg-green-500","showCartButton":true,"availabilityStatusColorRemove":["bg-green-500","bg-yellow-500","bg-red-500"]},"361":{"baseOldPrice":{"amount":24.205606476636},"oldPrice":{"amount":25.9},"basePrice":{"amount":24.205606476636},"finalPrice":{"amount":25.9},"tierPrices":[],"msrpPrice":{"amount":0},"isApproxPrice":false,"priceDescription":null,"availabilityText":"sofort lieferbar","availabilityStatusColor":"bg-green-500","showCartButton":true,"availabilityStatusColorRemove":["bg-green-500","bg-yellow-500","bg-red-500"]}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":".","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":24.205606476636},"oldPrice":{"amount":25.9},"basePrice":{"amount":24.205606476636},"finalPrice":{"amount":25.9},"isApproxPrice":null,"priceDescription":null,"availabilityText":""},"productId":"362","chooseText":"W\u00e4hlen Sie eine Option...","images":[],"index":{"360":{"172":"18"},"361":{"172":"28"}},"salable":[],"canDisplayShowOutOfStockStatus":false,"preSelectedGallery":{"large":"https:\/\/www.govi.de\/media\/catalog\/product\/cache\/e9642b8663e035af4ac1dab57d716a20\/9\/7\/9783774114807_adhaerenzfoerderung_1.jpg","medium":"https:\/\/www.govi.de\/media\/catalog\/product\/cache\/5867885552aeb48e79c08ad63de6695b\/9\/7\/9783774114807_adhaerenzfoerderung_1.jpg","small":"https:\/\/www.govi.de\/media\/catalog\/product\/cache\/424503c00ed6969e89328f224efd3fa1\/9\/7\/9783774114807_adhaerenzfoerderung_1.jpg","position":"1","isMain":true,"gallery":{"472":{"large":"https:\/\/www.govi.de\/media\/catalog\/product\/cache\/e9642b8663e035af4ac1dab57d716a20\/9\/7\/9783774114807_adhaerenzfoerderung_1.jpg","medium":"https:\/\/www.govi.de\/media\/catalog\/product\/cache\/5867885552aeb48e79c08ad63de6695b\/9\/7\/9783774114807_adhaerenzfoerderung_1.jpg","small":"https:\/\/www.govi.de\/media\/catalog\/product\/cache\/424503c00ed6969e89328f224efd3fa1\/9\/7\/9783774114807_adhaerenzfoerderung_1.jpg","position":"1","isMain":true}}},"channel":"website","salesChannelCode":"amd_website","sku":{"360":"G000237-Buch","361":"G000237-PDF"},"product_availability":{"360":"1-3 Werktage","361":"sofort lieferbar"},"availabilityStatus":{"360":"1-3 Werktage","361":"sofort lieferbar"},"showCartButton":{"360":true,"361":true},"availabilityStatusColor":{"360":"bg-green-500","361":"bg-green-500"},"product_form":{"360":"kartoniert","361":""},"weight":{"360":"0,255 kg","361":""},"eudr_product_info":{"360":"","361":""},"description":{"360":"<p>Adh\u00e4renz, also die motivierte Mitarbeit des Patienten an therapeutischen Ma\u00dfnahmen ist auch ein Schl\u00fcssel zu einer erfolgreichen Arzneimitteltherapie. Die gemeinsam mit dem Behandelnden festgelegten Therapieziele werden durch kommunikative und schulende Konzepte dauerhaft begleitet; im Arzneimittelbereich geht es konkret um die Einnahmetreue des Patienten.<\/p>\r\n<p>Die Apotheker sind innerhalb der Versorgungskette in bester Position, um den Patienten nach Motivation, Kenntnissen und Hindernissen zu befragen und ma\u00dfgeschneiderte Hilfe zu leisten. Die Autorinnen zeigen, wie man in der Apotheke die pharmazeutische Dienstleistung \u00bbAdh\u00e4renzf\u00f6rderung\u00ab praktisch umsetzt. Sie beschreiben, wie die Adh\u00e4renz gemessen \u00a0werden kann, welche M\u00f6glichkeiten f\u00fcr ein Follow-Up bestehen und welche Ursachen und Folgen eine partielle oder vollst\u00e4ndige Non-Adh\u00e4renz haben kann.<\/p>\r\n<p>Adh\u00e4renz kann als das Resultat einer gelungenen und erfolgreichen Kommunikation zwischen dem Patienten und seinem Umfeld (Arzt, Apotheker, PTA, Familie, Freunde, Medien) betrachtet werden. Dazu vermittelt das Buch Kenntnisse zu Kommunikationstechniken, die in jedes Gespr\u00e4ch integriert werden k\u00f6nnen.<\/p>\r\n<p>\u00a0<\/p>\r\n<p><strong>Prof. Dr. rer. physiol. Martina Hahn <\/strong>ist als klinische Pharmazeutin spezialisiert auf Psychopharmakotherapie.<\/p>\r\n<p><strong>Prof. Dr. med. Sibylle C. Roll<\/strong> ist Fach\u00e4rztin f\u00fcr Psychiatrie und Psychotherapie mit Zusatzqualifikation Suchtmedizin.<\/p>\r\n<p>Zusammen entwickelten sie das Eichberger Modell zur Erh\u00f6hung der Arzneimitteltherapiesicherheit durch eine bessere Zusammenarbeit zwischen Apotheker, Arzt, Patient und Angeh\u00f6rigen.<\/p>","361":"<p>Adh\u00e4renz, also die motivierte Mitarbeit des Patienten an therapeutischen Ma\u00dfnahmen ist auch ein Schl\u00fcssel zu einer erfolgreichen Arzneimitteltherapie. Die gemeinsam mit dem Behandelnden festgelegten Therapieziele werden durch kommunikative und schulende Konzepte dauerhaft begleitet; im Arzneimittelbereich geht es konkret um die Einnahmetreue des Patienten.<\/p>\r\n<p>Die Apotheker sind innerhalb der Versorgungskette in bester Position, um den Patienten nach Motivation, Kenntnissen und Hindernissen zu befragen und ma\u00dfgeschneiderte Hilfe zu leisten. Die Autorinnen zeigen, wie man in der Apotheke die pharmazeutische Dienstleistung \u00bbAdh\u00e4renzf\u00f6rderung\u00ab praktisch umsetzt. Sie beschreiben, wie die Adh\u00e4renz gemessen \u00a0werden kann, welche M\u00f6glichkeiten f\u00fcr ein Follow-Up bestehen und welche Ursachen und Folgen eine partielle oder vollst\u00e4ndige Non-Adh\u00e4renz haben kann.<\/p>\r\n<p>Adh\u00e4renz kann als das Resultat einer gelungenen und erfolgreichen Kommunikation zwischen dem Patienten und seinem Umfeld (Arzt, Apotheker, PTA, Familie, Freunde, Medien) betrachtet werden. Dazu vermittelt das Buch Kenntnisse zu Kommunikationstechniken, die in jedes Gespr\u00e4ch integriert werden k\u00f6nnen.<\/p>\r\n<p>\u00a0<\/p>\r\n<p><strong>Prof. Dr. rer. physiol. Martina Hahn <\/strong>ist als klinische Pharmazeutin spezialisiert auf Psychopharmakotherapie.<\/p>\r\n<p><strong>Prof. Dr. med. Sibylle C. Roll<\/strong> ist Fach\u00e4rztin f\u00fcr Psychiatrie und Psychotherapie mit Zusatzqualifikation Suchtmedizin.<\/p>\r\n<p>Zusammen entwickelten sie das Eichberger Modell zur Erh\u00f6hung der Arzneimitteltherapiesicherheit durch eine bessere Zusammenarbeit zwischen Apotheker, Arzt, Patient und Angeh\u00f6rigen.<\/p>"},"isbn":{"360":"978-3-7741-1480-7","361":"978-3-7741-1481-4"},"article_number":{"360":"00010492","361":"00040492"},"pzn":{"360":"","361":""},"series":{"360":"","361":""},"edition_stand_issue_number":{"360":"","361":""},"publishing_year":{"360":"2020","361":"2020"},"pages_maps_sheets":{"360":"112 S.","361":"112 S."},"illustrations":{"360":"32 Abb.","361":"32 Abb."},"tables":{"360":"6 Tab.","361":"6 Tab."},"components":{"360":"","361":""},"measure":{"360":"17 x 24 x 0,6 cm","361":""},"product_safety_address":{"360":"Avoxa- Mediengruppe Deutscher Apotheker GmbH<br>Carl-Mannich-Str. 26, 65760 Eschborn<br>
4874[email protected]","361":"Avoxa- Mediengruppe Deutscher Apotheker GmbH<br>Carl-Mannich-Str. 26, 65760 Eschborn<br>[email protected]"},"product_safety_additional_info":{"360":"","361":""},"copy_protection":{"360":"","361":"mit Wasserzeichen"},"file_size":{"360":"","361":""},"issn":{"360":"","361":""},"rights_management":{"360":"","361":""},"system_requirements":{"360":"","361":""},"defaultValues":{"172":"18"}} ); 4875 const swatchOptionsComponent = initSwatchOptions({"172":{"18":{"type":"0","value":"Buch","label":"Buch"},"28":{"type":"0","value":"PDF","label":"PDF"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}); 4876 4877 return Object.assign( 4878 configurableOptionsComponent, 4879 swatchOptionsComponent, 4880 { 4881 mediaCallback: "https\u003A\u002F\u002Fwww.govi.de\u002Fswatches\u002Fajax\u002Fmedia\u002F", 4882 changeOption(optionId, value, skipUpdateGallery) { 4883 if (value === '') { 4884 return; this.selectedValues = this.removeAttrFromSelection(this.selectedValues, optionId) 4885 } else { 4886 this.selectedValues[optionId] = value; 4887 } 4888 this.findSimpleIndex(); 4889 this.findAllowedAttributeOptions(); 4890 this.updatePrices(); 4891 !skipUpdateGallery && this.updateGallery(); 4892 4893 const candidates = this.findProductIdsForPartialSelection(this.selectedValues); 4894 4895 window.dispatchEvent(new CustomEvent('listing-configurable-selection-changed', { 4896 detail: { 4897 productId: this.productId, 4898 optionId, 4899 value, 4900 productIndex: this.productIndex, 4901 selectedValues: this.selectedValues, 4902 candidates: candidates, 4903 skuCandidates: Object.values(candidates).map(id => this.optionConfig.sku?.[id] ?? null).filter(Boolean), 4904 } 4905 })); 4906 }, 4907 updateGallery() { 4908 if (!this.productIndex) { 4909 return; 4910 } 4911 4912 fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { 4913 method: 'GET', 4914 headers: { 4915 'Content-Type': 'application/json', 4916 'X-Requested-With': 'XMLHttpRequest' 4917 } 4918 } 4919 ).then(response => { 4920 return response.json() 4921 } 4922 ).then(data => { 4923 if (data.errors) { 4924 // non critical failure only console logged 4925 console.warn(data.errors); 4926 } else { 4927 const image = data && data.medium; 4928 4929 image && window.dispatchEvent( 4930 new CustomEvent( 4931 "update-gallery-362", 4932 {detail: image} 4933 ) 4934 ); 4935 } 4936 }).catch(error => { 4937 console.warn(error) 4938 }); 4939 }, 4940 preselectQuerystringItems() { 4941 // pre-select option like ?size=167 4942 const urlQueryParams = new URLSearchParams(window.location.search.replace('?', '')); 4943 Object.values(this.optionConfig.attributes).map(attribute => { 4944 // Don't update images on load, since PLPs already set the main image to the selected options 4945 const skipUpdateGallery = true; 4946 urlQueryParams.get(attribute.code) && 4947 this.changeOption(attribute.id, urlQueryParams.get(attribute.code), skipUpdateGallery); 4948 }); 4949 }, 4950 preselectItemsBasedOnLocation(getLocationValue) { 4951 Object.values(this.optionConfig.attributes).map(attribute => { 4952 if(getLocationValue(attribute)){ 4953 this.changeOption(attribute.id, getLocationValue(attribute)) 4954 } 4955 }); 4956 }, 4957 focusOption(productId,selectedOptionId){ 4958 let time_362 = setInterval( 4959 function(){ 4960 if(document.getElementById('attribute-option-' + productId + '-' + selectedOptionId) !== null){ 4961 document.getElementById('attribute-option-' + productId + '-' + selectedOptionId).click(); 4962 document.getElementById('attribute-option-' + productId + '-' + selectedOptionId).focus(); 4963 clearInterval(time_362); 4964 } 4965 }, 50 4966 ); 4967 }, 4968 onGetCartData(data) { 4969 this.preselectCartItems(data); 4970 this.preselectQuerystringItems(); 4971 this.preselectLocationHashItems(); 4972 this.focusOption(362, 18); 4973 }, 4974 updatePrices() { 4975 const value = this.productIndex ? 4976 this.optionConfig.optionPrices[this.productIndex] : 4977 this.optionConfig.prices; 4978 4979 let hidePriceLabel = this.productIndex ? true : false;
4980 4981 window.dispatchEvent( 4982 new CustomEvent( 4983 "update-prices-" + this.productId, 4984 { 4985 detail: Object.assign( 4986 value, 4987 { 4988 isMinimalPrice: this.calculateIsMinimalPrice(), 4989 hidePriceLabel: hidePriceLabel, 4990 isApproxPrice: this.optionConfig.optionPrices[this.productIndex]['isApproxPrice'], 4991 availabilityText: this.optionConfig.optionPrices[this.productIndex]['availabilityText'], 4992 priceDescription: this.optionConfig.optionPrices[this.productIndex]['priceDescription'] 4993 } 4994 ) 4995 } 4996 ) 4997 ); 4998 4999 }, 5000 mouseDown: false, 5001 startX: 0, 5002 maxScroll: 0, 5003 scrollLeft: null, 5004 slider: null, 5005 scrollEvents: { 5006 ['@mousedown'](e) { 5007 this.slider = e.target.closest('.snap'); 5008 if (!this.slider) { 5009 return; 5010 } 5011 this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; 5012 this.startX = e.pageX - this.slider.offsetLeft; 5013 this.scrollLeft = this.slider.scrollLeft; 5014 this.mouseDown = true; 5015 }, 5016 ['@mouseout.self']() { 5017 this.mouseDown = false; 5018 }, 5019 ['@mouseup']() { 5020 this.mouseDown = false; 5021 }, 5022 ['@mousemove'](e) { 5023 e.preventDefault(); 5024 if (!this.mouseDown) { 5025 return; 5026 } 5027 const x = e.pageX - this.slider.offsetLeft; 5028 const scroll = x - this.startX; 5029 const scrollLeft = this.scrollLeft - scroll; 5030 5031 if (scrollLeft > this.maxScroll) { 5032 this.slider.scrollLeft = this.maxScroll; 5033 return 5034 } 5035 this.slider.scrollLeft = this.scrollLeft - scroll; 5036 }, 5037 ['@onselectstart']() { 5038 return false; 5039 } 5040 }, 5041 resizeEvent() { 5042 Array.from(this.$root.querySelectorAll('.snap')).forEach(sli
5042der => { 5043 slider.scrollLeft = 0; 5044 }) 5045 } 5046 } 5047 ); 5048 } 5049 5050 </script>
5050 5051 5052<div x-data="initConfigurableSwatchOptions_362()" 5053 x-defer="intersect" 5054 x-init="findAllowedAttributeOptions()" 5055 @private-content-loaded.window="onGetCartData($event.detail.data)" 5056 @resize.window="resizeEvent()" 5057 class="relative" 5058> 5059 <div> 5060 5061 <div class="swatch-attribute border-container 5062 medium" 5063 > 5064 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14 items-end"> 5065 <div class="flex flex-wrap gap-y-4 w-full overflow-auto snap items-center py-1" 5066 id="attribute-label-362-172" 5067 role="radiogroup" 5068 x-bind="scrollEvents" 5069 aria-label="Medium" 5070 > 5071 <template x-for="(item, index) in optionConfig.attributes[172].options" 5072 :key="item.id" 5073 > 5074 5075<div x-id="['attribute-option-362-'+item.id]"> 5076 <template x-if="optionIsEnabled(172, item.id) && optionIsActive(172, item.id)"> 5077 <label 5078 :for="$id('attribute-option-362-'+item.id)" 5079 class="swatch-option relative border-3 text-c7 border-c7 cursor-pointer select-none product-option-value-label " 5080 :class="{ 5081 'bg-white text-c5 border-c5 !border-3 hover:!bg-c8 hover:!text-white hover:!border-c8 hover:!border-3 font-bold': 5082 (selectedValues[172] === item.id), 5083 '!border-c5 bg-white !text-c5 hover:!bg-c8 hover:!text-white hover:!border-c8': 5084 (selectedValues[172] !== item.id), 5085 'w-6 h-6' : !isTextSwatch(172, item.id), 5086 'ring-2 ring-c8' : focusedLabel === item.id, 5087 'bg-white' : focusedLabel === item.id 5088 }" 5089 :style="getSwatchBackgroundStyle('172',item.id)" 5090 > 5091 <input 5092 :id="$id('attribute-option-362-'+item.id)" 5093 :value="item.id" 5094 name="super_attribute[172]" 5095 type="radio" 5096 class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" 5097 style="z-index:-1" 5098 x-on:focus="focusLabel(item.id)" 5099 x-on:blur="blurLabel()" 5100 x-on:change="changeOption(172, $event.target.value)" 5101 x-on:click="clearOptionIfActive(172, item.id)" 5102 x-model="selectedValues[172]" 5103 :required="getAllowedAttributeOptions(172).filter( 5104 attributeOption => selectedValues[attributeOption] 5105 ).length === 0" 5106 :aria-label="getSwatchText(172, item.id)" 5107 aria-describedby="attribute-label-362-172" 5108 > 5109 <template x-if="isTextSwatch(172, item.id)"> 5110 <div 5111 x-html="getSwatchText(172, item.id)" 5112 class="whitespace-nowrap" 5113 aria-hidden="true" 5114 ></div> 5115 </template> 5116 </label> 5117 </template> 5118 5119 <template x-if="optionIsEnabled(172, item.id) && !optionIsActive(172, item.id)"> 5120 <div 5121 class="relative border-3 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" 5122 :class="{ 5123 'w-6 h-6' : !isTextSwatch(172, item.id), 5124 }" 5125 :style="getSwatchBackgroundStyle('172',item.id)" 5126 > 5127 <div x-html="getSwatchText(172, item.id)" 5128 class="whitespace-nowrap" 5129 :class="{ 'sr-only' : !isTextSwatch(172, item.id) }" 5130 ></div> 5131 <svg class="absolute inset-0 w-full h-full text-gray-500 bg-white bg-opacity-25"> 5132 <line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line> 5133 </svg> 5134 </div> 5135 </template> 5136</div> 5137 </template> 5138 </div> 5139 </div> 5140 </div> 5141 </div> 5142 </div> 5143 </div> 5144 <div class="items-center justify-center text-center lg:text-left"> 5145 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit">
5146 <span id="product-availability-status-362" 5147 class="w-3 h-3 rounded-full flex-shrink-0 5148 "> 5149 </span> 5150 <span id="product-availability-362"> 5151 </span> 5152 </p> 5153 </div> 5154 5155 </div> 5156
5156<script> 5157 function initPriceBox__6ac2172f7cc13() { 5158 return { 5159 updatePrice(priceData) { 5160 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 5161 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 5162 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 5163 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 5164 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 5165 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 5166 regularPriceLabel.classList.add('hidden'); 5167 } else { 5168 regularPriceLabel.classList.remove('hidden'); 5169 } 5170 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 5171 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 5172 5173 const hidePriceLabel = priceData.hidePriceLabel; 5174 if (hidePriceLabel) { 5175 regularPriceLabel.classList.add('hidden'); 5176 } else { 5177 regularPriceLabel.classList.remove('hidden'); 5178 } 5179 5180 const isApproxPrice = priceData.isApproxPrice; 5181 if (!isApproxPrice) { 5182 approxPriceLabel.classList.add('hidden'); 5183 } else { 5184 approxPriceLabel.classList.remove('hidden'); 5185 } 5186 5187 document.getElementById('product-availability-' + 5188 362).innerHTML = priceData.availabilityText; 5189 5190 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 5191 document.getElementById('product-availability-status-' + 5192 362) 5193 .classList.remove(cssClass); 5194 }); 5195 5196 document.getElementById('product-availability-status-' + 5197 362) 5198 .classList.add(priceData.availabilityStatusColor); 5199 5200 priceDescriptionLabel.innerHTML = priceData.priceDescription; 5201 5202 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 5203 } 5204 } 5205 } 5206 5207 function initCartButtonData__6ac2172f7cc13() { 5208 return { 5209 canShowCartButton: true, 5210 updateCartButton(priceData) { 5211 this.canShowCartButton = priceData.showCartButton; 5212 } 5213 } 5214 } 5215 </script>
5215 5216 <div class="sm:flex items-end"> 5217 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac2172f7cc13()" @update-prices-362.window="updatePrice($event.detail);"> 5218 <div class="price-box price-final_price" data-role="priceBox" data-product-id="362" data-price-box="product-id-362"><span class="normal-price"> 5219 5220<span 5221 x-data x-id="['product\u002Dprice\u002D362']" class="price-container price-final_price tax weee" 5222 > 5223 <span class="price-description"></span> 5224 <span class="price-label">Ab</span> 5225 <span class="approx-price">ca. </span> 5226 <span :id="$id('product\u002Dprice\u002D362')" data-price-amount="25.9" 5227 data-price-type="finalPrice" 5228 class="price-wrapper " 5229 ><span class="price">25,90 â¬</span></span> 5230 </span> 5231</span> 5232 5233 5234</div><div class="price-details"> 5235 <span class="tax-details text-s text-c5"> 5236 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 5237</div> </div> 5238 <div class="w-full sm:6/12 mt-2"> 5239 <div class="block text-right"> 5240 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 5241 mr-1" 5242 aria-label="In den Warenkorb Adhärenzförderung" 5243 title="In den Warenkorb" 5244 x-data="initCartButtonData__6ac2172f7cc13()" 5245 @update-prices-362.window="updateCartButton($event.detail);" 5246 :class="{ invisible: canShowCartButton !== true }"> 5247 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 5248 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 5249</svg> 5250 <span class="ml-2 inline hidden lg:inline"> 5251 In den Warenkorb </span> 5252 </button> 5253 <button x-data="initWishlist()" @click.prevent="addToWishlist(362)" 5254 aria-label="Zur Wunschliste hinzufügen" 5255 title="Zur Wunschliste hinzufügen" 5256 type="button" class="py-3 mt-2 btn-secondary inline-block"> 5257 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 5258 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 5259</svg> 5260 <span class="hidden lg:ml-2 lg:inline"> 5261 Zur Wunschliste hinzufügen </span> 5262 </button> 5263 </div> 5264 </div> 5265 </div> 5266 5267 </div> 5268 </div> 5269 </div> 5270 </form> 5271 5272 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/1195/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 5273 lg:flex-row" > 5274 <input name="form_key" type="hidden" value="ahzfET2gAjRQSSwr" /> <input type="hidden" name="product" value="1195" /> 5275 <a href="https://www.govi.de/akute-und-chronische-herzinsuffizienz-buch" 5276 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 5277 tabindex="-1"> 5278 <div class="min-h-[362px] flex items-center mx-auto"> 5279 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 5280 x-data="" 5281 @update-gallery-1195.window="$root.src = $event.detail" 5282 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/9/5/9561021400001a.jpg" 5283 loading="lazy" 5284 alt="Akute und chronische Herzinsuffizienz" 5285 title="Akute und chronische Herzinsuffizienz" 5286 /> 5287</div> 5288 </a> 5289 <div class="product-info flex flex-col grow lg:w-4/6"> 5290 <div class="grid h-full"> 5291 <div class="product-info--top self-start"> 5292 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 5293 <a class="product-item-link font-bold" href="https://www.govi.de/akute-und-chronische-herzinsuffizienz-buch" :id="`slide-desc-1195-${$id('slider-id')}`"> 5294 Akute und chronische Herzinsuffizienz </a> 5295 </div> 5296 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 5297 </div> 5298 </div> 5299 5300 <div class="product-info--bottom self-end"> 5301 <!-- Swatches -->
5302 <div class="self-center"> 5303 <div class=""> 5304 </div> 5305 <div class="swatch-attribute border-container medium"> 5306 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14"> 5307 <div class="flex flex-nowrap w-full overflow-auto snap items-end py-1"> 5308 <label class="swatch-option relative border-3 cursor-pointer 5309 product-option-value-label text-black font-bold border-black !border-3 bg-white hover:bg-c8 hover:border-c8 hover:text-white"> 5310 Buch </label> 5311 </div> 5312 </div> 5313 </div> 5314 <div class="items-center justify-center text-center lg:text-left"> 5315 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit"> 5316 <span id="product-availability-status-1195" 5317 class="w-3 h-3 rounded-full flex-shrink-0 5318 bg-green-500"> 5319 </span> 5320 <span id="product-availability-1195"> 5321 1-3 Werktage </span> 5322 </p> 5323 </div> 5324 5325 </div> 5326
5326<script> 5327 function initPriceBox__6ac21cea90256() { 5328 return { 5329 updatePrice(priceData) { 5330 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 5331 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 5332 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 5333 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 5334 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 5335 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 5336 regularPriceLabel.classList.add('hidden'); 5337 } else { 5338 regularPriceLabel.classList.remove('hidden'); 5339 } 5340 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 5341 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 5342 5343 const hidePriceLabel = priceData.hidePriceLabel; 5344 if (hidePriceLabel) { 5345 regularPriceLabel.classList.add('hidden'); 5346 } else { 5347 regularPriceLabel.classList.remove('hidden'); 5348 } 5349 5350 const isApproxPrice = priceData.isApproxPrice; 5351 if (!isApproxPrice) { 5352 approxPriceLabel.classList.add('hidden'); 5353 } else { 5354 approxPriceLabel.classList.remove('hidden'); 5355 } 5356 5357 document.getElementById('product-availability-' + 5358 1195).innerHTML = priceData.availabilityText; 5359 5360 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 5361 document.getElementById('product-availability-status-' + 5362 1195) 5363 .classList.remove(cssClass); 5364 }); 5365 5366 document.getElementById('product-availability-status-' + 5367 1195) 5368 .classList.add(priceData.availabilityStatusColor); 5369 5370 priceDescriptionLabel.innerHTML = priceData.priceDescription; 5371 5372 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 5373 } 5374 } 5375 } 5376 5377 function initCartButtonData__6ac21cea90256() { 5378 return { 5379 canShowCartButton: true, 5380 updateCartButton(priceData) { 5381 this.canShowCartButton = priceData.showCartButton; 5382 } 5383 } 5384 } 5385 </script>
5385 5386 <div class="sm:flex items-end"> 5387 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac21cea90256()" @update-prices-1195.window="updatePrice($event.detail);"> 5388 <div class="price-box price-final_price" data-role="priceBox" data-product-id="1195" data-price-box="product-id-1195"> 5389 5390<span 5391 x-data x-id="['product\u002Dprice\u002D1195']" class="price-container price-final_price tax weee" 5392 > 5393 <span class="price-description"></span> 5394 <span :id="$id('product\u002Dprice\u002D1195')" data-price-amount="4.99" 5395 data-price-type="finalPrice" 5396 class="price-wrapper " 5397 ><span class="price">4,99 â¬</span></span> 5398 </span> 5399 5400</div><div class="price-details"> 5401 <span class="tax-details text-s text-c5"> 5402 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 5403</div> </div> 5404 <div class="w-full sm:6/12 mt-2"> 5405 <div class="block text-right"> 5406 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 5407 mr-1" 5408 aria-label="In den Warenkorb Akute und chronische Herzinsuffizienz" 5409 title="In den Warenkorb" 5410 x-data="initCartButtonData__6ac21cea90256()" 5411 @update-prices-1195.window="updateCartButton($event.detail);" 5412 :class="{ invisible: canShowCartButton !== true }"> 5413 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 5414 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 5415</svg> 5416 <span class="ml-2 inline hidden lg:inline"> 5417 In den Warenkorb </span> 5418 </button> 5419 <button x-data="initWishlist()" @click.prevent="addToWishlist(1195)" 5420 aria-label="Zur Wunschliste hinzufügen" 5421 title="Zur Wunschliste hinzufügen" 5422 type="button" class="py-3 mt-2 btn-secondary inline-block"> 5423 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 5424 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 5425</svg> 5426 <span class="hidden lg:ml-2 lg:inline"> 5427 Zur Wunschliste hinzufügen </span> 5428 </button> 5429 </div> 5430 </div> 5431 </div> 5432 5433 </div> 5434 </div> 5435 </div> 5436 </form> 5437 5438 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/472/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 5439 lg:flex-row" > 5440 <input name="form_key" type="hidden" value="abrbWUee81MFVvgE" /> <input type="hidden" name="product" value="472" /> 5441 <a href="https://www.govi.de/alkohol-coffein-nikotin" 5442 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 5443 tabindex="-1"> 5444 <div class="min-h-[362px] flex items-center mx-auto"> 5445 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 5446 x-data="" 5447 @update-gallery-472.window="$root.src = $event.detail" 5448 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/9/7/9783774113589_alkohol_coffein_nikotin.jpg" 5449 loading="lazy" 5450 alt="Alkohol, Coffein, Nikotin" 5451 title="Alkohol, Coffein, Nikotin" 5452 /> 5453</div> 5454 </a> 5455 <div class="product-info flex flex-col grow lg:w-4/6"> 5456 <div class="grid h-full"> 5457 <div class="product-info--top self-start"> 5458 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 5459 <a class="product-item-link font-bold" href="https://www.govi.de/alkohol-coffein-nikotin" :id="`slide-desc-472-${$id('slider-id')}`"> 5460 Alkohol, Coffein, Nikotin </a> 5461 </div> 5462 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 5463 Praxiswissen für die Patientenberatung </div> 5464 </div> 5465 5466 <div class="product-info--bottom self-end"> 5467 <!-- Swatches -->
5468 <div class="self-center"> 5469 <div class=""> 5470
5470<script> 5471 function initConfigurableSwatchOptions_472() { 5472 const configurableOptionsComponent = initConfigurableOptions( 5473 '472', 5474 {"attributes":{"172":{"id":"172","code":"medium","label":"Medium","options":[{"id":"18","label":"Buch","products":["470"]},{"id":"28","label":"PDF","products":["471"]}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"470":{"baseOldPrice":{"amount":34.485980308411},"oldPrice":{"amount":36.9},"basePrice":{"amount":34.485980308411},"finalPrice":{"amount":36.9},"tierPrices":[],"msrpPrice":{"amount":0},"isApproxPrice":false,"priceDescription":null,"availabilityText":"1-3 Werktage","availabilityStatusColor":"bg-green-500","showCartButton":true,"availabilityStatusColorRemove":["bg-green-500","bg-yellow-500","bg-red-500"]},"471":{"baseOldPrice":{"amount":33.551400869159},"oldPrice":{"amount":35.9},"basePrice":{"amount":33.551400869159},"finalPrice":{"amount":35.9},"tierPrices":[],"msrpPrice":{"amount":0},"isApproxPrice":false,"priceDescription":null,"availabilityText":"sofort lieferbar","availabilityStatusColor":"bg-green-500","showCartButton":true,"availabilityStatusColorRemove":["bg-green-500","bg-yellow-500","bg-red-500"]}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":".","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":33.551400869159},"oldPrice":{"amount":35.9},"basePrice":{"amount":33.551400869159},"finalPrice":{"amount":35.9},"isApproxPrice":null,"priceDescription":null,"availabilityText":""},"productId":"472","chooseText":"W\u00e4hlen Sie eine Option...","images":[],"index":{"470":{"172":"18"},"471":{"172":"28"}},"salable":[],"canDisplayShowOutOfStockStatus":false,"channel":"website","salesChannelCode":"amd_website","sku":{"470":"G000303-Buch","471":"G000303-PDF"},"product_availability":{"470":"1-3 Werktage","471":"sofort lieferbar"},"availabilityStatus":{"470":"1-3 Werktage","471":"sofort lieferbar"},"showCartButton":{"470":true,"471":true},"availabilityStatusColor":{"470":"bg-green-500","471":"bg-green-500"},"product_form":{"470":"kartoniert","471":""},"weight":{"470":"0,605 kg","471":""},"eudr_product_info":{"470":"","471":""},"description":{"470":"<p>Von den Genussmitteln Coffein, Alkohol und Nikotin schaden zumindest die letzteren unbestritten betr\u00e4chtlich der Gesundheit. Trotzdem werden sie von vielen Menschen regelm\u00e4\u00dfig konsumiert. Ihre Wirkungen auf den gesamten Organismus sind vielf\u00e4ltig \u2013 bis hin zu Wechselwirkungen mit Arzneimitteln.<\/p>\r\n<p>Die Autoren f\u00fchren das Fachwissen zu Alkohol, Coffein und Nikotin f\u00fcr das t\u00e4gliche Beratungsgespr\u00e4ch zusammen:<\/p>\r\n<ul>\r\n<li>Wirkungen auf K\u00f6rperfunktionen und besonders empfindliche Organe<\/li>\r\n<li>Geschlechts- und altersbedingte Unterschiede<\/li>\r\n<li>Risiken und Folgeerkrankungen<\/li>\r\n<li>Abh\u00e4ngigkeit inklusive Therapie und Pr\u00e4vention<\/li>\r\n<li>Wechselwirkungen mit Arzneimitteln wie z. B. Analgetika, Antibiotika, Antidiabetika, Antikoagulanzien und Psychopharmaka<\/li>\r\n<li>Informationen zu rechtlichen Aspekten in Beruf und Verkehr sowie Hinweise auf Beratungsstellen<\/li>\r\n<\/ul>\r\n<p><br \/>Bilder und Tabellen erleichtern den \u00dcberblick u. a. \u00fcber Symptome und spezifische Organwirkungen dieser Genussgifte bei chronischem Konsum bis hin zu starkem Missbrauch sowie \u00fcber therapeutische M\u00f6glichkeiten.<\/p>\r\n<p>Mit dem Wissen des Buchs gelingt eine optimale Beratung aller Konsumenten von Alkohol, Coffein oder Nikotin.<\/p>\r\n<p>\u00a0<\/p>\r\n<p><strong>Prof. Dr. Egid Strehl <\/strong>war Direktor der Apotheke des Universit\u00e4tsklinikums Freiburg.<\/p>\r\n<p><strong>Heidegun Bl\u00fcmle<\/strong> ist Offizinapothekerin in Freiburg.<\/p>\r\n<p><strong>Prof. Dr. Bela Szabo<\/strong> lehrt am Institut f\u00fcr Pharmakologie der Universit\u00e4t Freiburg.<\/p>","471":"<p>Von den Genussmitteln Coffein, Alkohol und Nikotin schaden zumindest die letzteren unbestritten betr\u00e4chtlich der Gesundheit. Trotzdem werden sie von vielen Menschen regelm\u00e4\u00dfig konsumiert. Ihre Wirkungen auf den gesamten Organismus sind vielf\u00e4ltig \u2013 bis hin zu Wechselwirkungen mit Arzneimitteln.<\/p>\r\n<p>Die Autoren f\u00fchren das Fachwissen zu Alkohol, Coffein und Nikotin f\u00fcr das t\u00e4gliche Beratungsgespr\u00e4ch zusammen:<\/p>\r\n<ul>\r\n<li>Wirkungen auf K\u00f6rperfunktionen und besonders empfindliche Organe<\/li>\r\n<li>Geschlechts- und altersbedingte Unterschiede<\/li>\r\n<li>Risiken und Folgeerkrankungen<\/li>\r\n<li>Abh\u00e4ngigkeit inklusive Therapie und Pr\u00e4vention<\/li>\r\n<li>Wechselwirkungen mit Arzneimitteln wie z. B. Analgetika, Antibiotika, Antidiabetika, Antikoagulanzien und P
5474sychopharmaka<\/li>\r\n<li>Informationen zu rechtlichen Aspekten in Beruf und Verkehr sowie Hinweise auf Beratungsstellen<\/li>\r\n<\/ul>\r\n<p><br \/>Bilder und Tabellen erleichtern den \u00dcberblick u. a. \u00fcber Symptome und spezifische Organwirkungen dieser Genussgifte bei chronischem Konsum bis hin zu starkem Missbrauch sowie \u00fcber therapeutische M\u00f6glichkeiten.<\/p>\r\n<p>Mit dem Wissen des Buchs gelingt eine optimale Beratung aller Konsumenten von Alkohol, Coffein oder Nikotin.<\/p>\r\n<p>\u00a0<\/p>\r\n<p><strong>Prof. Dr. Egid Strehl <\/strong>war Direktor der Apotheke des Universit\u00e4tsklinikums Freiburg.<\/p>\r\n<p><strong>Heidegun Bl\u00fcmle<\/strong> ist Offizinapothekerin in Freiburg.<\/p>\r\n<p><strong>Prof. Dr. Bela Szabo<\/strong> lehrt am Institut f\u00fcr Pharmakologie der Universit\u00e4t Freiburg.<\/p>"},"isbn":{"470":"978-3-7741-1358-9","471":"978-3-7741-1359-6"},"article_number":{"470":"00011507","471":"00041507"},"pzn":{"470":"","471":""},"series":{"470":"","471":""},"edition_stand_issue_number":{"470":"","471":""},"publishing_year":{"470":"2017","471":"2017"},"pages_maps_sheets":{"470":"282 S.","471":"282 S."},"illustrations":{"470":"","471":""},"tables":{"470":"","471":""},"components":{"470":"","471":""},"measure":{"470":"17 x 24 x 1,3 cm","471":""},"product_safety_address":{"470":"Avoxa- Mediengruppe Deutscher Apotheker GmbH<br>Carl-Mannich-Str. 26, 65760 Eschborn<br>[email protected]","471":"Avoxa- Mediengruppe Deutscher Apotheker GmbH<br>Carl-Mannich-Str. 26, 65760 Eschborn<br>[email protected]"},"product_safety_additional_info":{"470":"","471":""},"copy_protection":{"470":"","471":"mit Wasserzeichen"},"file_size":{"470":"","471":""},"issn":{"470":"","471":""},"rights_management":{"470":"","471":""},"system_requirements":{"470":"","471":""},"defaultValues":{"172":"18"}} ); 5475 const swatchOptionsComponent = initSwatchOptions({"172":{"18":{"type":"0","value":"Buch","label":"Buch"},"28":{"type":"0","value":"PDF","label":"PDF"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}); 5476 5477 return Object.assign( 5478 configurableOptionsComponent, 5479 swatchOptionsComponent, 5480 { 5481 mediaCallback: "https\u003A\u002F\u002Fwww.govi.de\u002Fswatches\u002Fajax\u002Fmedia\u002F", 5482 changeOption(optionId, value, skipUpdateGallery) { 5483 if (value === '') { 5484 return; this.selectedValues = this.removeAttrFromSelection(this.selectedValues, optionId) 5485 } else { 5486 this.selectedValues[optionId] = value; 5487 } 5488 this.findSimpleIndex(); 5489 this.findAllowedAttributeOptions(); 5490 this.updatePrices(); 5491 !skipUpdateGallery && this.updateGallery(); 5492 5493 const candidates = this.findProductIdsForPartialSelection(this.selectedValues); 5494 5495 window.dispatchEvent(new CustomEvent('listing-configurable-selection-changed', { 5496 detail: { 5497 productId: this.productId, 5498 optionId, 5499 value, 5500 productIndex: this.productIndex, 5501 selectedValues: this.selectedValues, 5502 candidates: candidates, 5503 skuCandidates: Object.values(candidates).map(id => this.optionConfig.sku?.[id] ?? null).filter(Boolean), 5504 } 5505 })); 5506 }, 5507 updateGallery() { 5508 if (!this.productIndex) { 5509 return; 5510 } 5511 5512 fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { 5513 method: 'GET', 5514 headers: { 5515 'Content-Type': 'application/json', 5516 'X-Requested-With': 'XMLHttpRequest' 5517 } 5518 } 5519 ).then(response => { 5520 return response.json() 5521 } 5522 ).then(data => { 5523 if (data.errors) { 5524 // non critical failure only console logged 5525 console.warn(data.errors); 5526 } else { 5527 const image = data && data.medium; 5528 5529 image && window.dispatchEvent( 5530 new CustomEvent( 5531 "update-gallery-472", 5532 {detail: image} 5533 ) 5534 ); 5535 } 5536 }).catch(error => { 5537 console.warn(error) 5538 }); 5539 }, 5540 preselectQuerystringItems() { 5541 // pre-select option like ?size=167 5542 const urlQueryParams = new URLSearchParams(window.location.search.replace('?', '')); 5543 Object.values(this.optionConfig.attributes).map(attribute => { 5544 // Don't update images on load, since PLPs already set the main image to the selected options 5545 const skipUpdateGallery = true; 5546 urlQueryParams.get(attribute.code) && 5547 this.changeOption(attribute.id, urlQueryParams.get(attribute.code), skipUpdateGallery); 5548 }); 5549 }, 5550 preselectItemsBasedOnLocation(getLocationValue) { 5551 Object.values(this.optionConfig.attributes).map(attribute => { 5552 if(getLocationValue(attribute)){ 5553 this.changeOption(attribute.id, getLocationValue(attribute)) 5554 } 5555 }); 5556 }, 5557 focusOption(productId,selectedOptionId){ 5558 let time_472 = setInterval( 5559 function(){ 5560 if(document.getElementById('attribute-option-' + productId + '-' + selectedOptionId) !== null){ 5561 document.getElementById('attribute-option-' + productId + '-' + selectedOptionId).click(); 5562 document.getElementById('attribute-option-' + productId + '-' + selectedOptionId).focus(); 5563 clearInterval(time_472); 5564 } 5565 }, 50 5566 ); 5567 }, 5568 onGetCartData(data) { 5569 this.preselectCartItems(data); 5570 this.preselectQuerystringItems(); 5571 this.preselectLocationHashItems(); 5572 this.focusOption(472, 18); 5573 }, 5574 updatePrices() { 5575 const value = this.productIndex ? 5576 this.optionConfig.optionPrices[this.productIndex] : 5577 this.optionConfig.prices; 5578 5579 let hidePriceLabel = this.productIndex ? true : false;
5580 5581 window.dispatchEvent( 5582 new CustomEvent( 5583 "update-prices-" + this.productId, 5584 { 5585 detail: Object.assign( 5586 value, 5587 { 5588 isMinimalPrice: this.calculateIsMinimalPrice(), 5589 hidePriceLabel: hidePriceLabel, 5590 isApproxPrice: this.optionConfig.optionPrices[this.productIndex]['isApproxPrice'], 5591 availabilityText: this.optionConfig.optionPrices[this.productIndex]['availabilityText'], 5592 priceDescription: this.optionConfig.optionPrices[this.productIndex]['priceDescription'] 5593 } 5594 ) 5595 } 5596 ) 5597 ); 5598 5599 }, 5600 mouseDown: false, 5601 startX: 0, 5602 maxScroll: 0, 5603 scrollLeft: null, 5604 slider: null, 5605 scrollEvents: { 5606 ['@mousedown'](e) { 5607 this.slider = e.target.closest('.snap'); 5608 if (!this.slider) { 5609 return; 5610 } 5611 this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; 5612 this.startX = e.pageX - this.slider.offsetLeft; 5613 this.scrollLeft = this.slider.scrollLeft; 5614 this.mouseDown = true; 5615 }, 5616 ['@mouseout.self']() { 5617 this.mouseDown = false; 5618 }, 5619 ['@mouseup']() { 5620 this.mouseDown = false; 5621 }, 5622 ['@mousemove'](e) { 5623 e.preventDefault(); 5624 if (!this.mouseDown) { 5625 return; 5626 } 5627 const x = e.pageX - this.slider.offsetLeft; 5628 const scroll = x - this.startX; 5629 const scrollLeft = this.scrollLeft - scroll; 5630 5631 if (scrollLeft > this.maxScroll) { 5632 this.slider.scrollLeft = this.maxScroll; 5633 return 5634 } 5635 this.slider.scrollLeft = this.scrollLeft - scroll; 5636 }, 5637 ['@onselectstart']() { 5638 return false; 5639 } 5640 }, 5641 resizeEvent() { 5642 Array.from(this.$root.querySelectorAll('.snap')).forEach(sli
5642der => { 5643 slider.scrollLeft = 0; 5644 }) 5645 } 5646 } 5647 ); 5648 } 5649 5650 </script>
5650 5651 5652<div x-data="initConfigurableSwatchOptions_472()" 5653 x-defer="intersect" 5654 x-init="findAllowedAttributeOptions()" 5655 @private-content-loaded.window="onGetCartData($event.detail.data)" 5656 @resize.window="resizeEvent()" 5657 class="relative" 5658> 5659 <div> 5660 5661 <div class="swatch-attribute border-container 5662 medium" 5663 > 5664 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14 items-end"> 5665 <div class="flex flex-wrap gap-y-4 w-full overflow-auto snap items-center py-1" 5666 id="attribute-label-472-172" 5667 role="radiogroup" 5668 x-bind="scrollEvents" 5669 aria-label="Medium" 5670 > 5671 <template x-for="(item, index) in optionConfig.attributes[172].options" 5672 :key="item.id" 5673 > 5674 5675<div x-id="['attribute-option-472-'+item.id]"> 5676 <template x-if="optionIsEnabled(172, item.id) && optionIsActive(172, item.id)"> 5677 <label 5678 :for="$id('attribute-option-472-'+item.id)" 5679 class="swatch-option relative border-3 text-c7 border-c7 cursor-pointer select-none product-option-value-label " 5680 :class="{ 5681 'bg-white text-c5 border-c5 !border-3 hover:!bg-c8 hover:!text-white hover:!border-c8 hover:!border-3 font-bold': 5682 (selectedValues[172] === item.id), 5683 '!border-c5 bg-white !text-c5 hover:!bg-c8 hover:!text-white hover:!border-c8': 5684 (selectedValues[172] !== item.id), 5685 'w-6 h-6' : !isTextSwatch(172, item.id), 5686 'ring-2 ring-c8' : focusedLabel === item.id, 5687 'bg-white' : focusedLabel === item.id 5688 }" 5689 :style="getSwatchBackgroundStyle('172',item.id)" 5690 > 5691 <input 5692 :id="$id('attribute-option-472-'+item.id)" 5693 :value="item.id" 5694 name="super_attribute[172]" 5695 type="radio" 5696 class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" 5697 style="z-index:-1" 5698 x-on:focus="focusLabel(item.id)" 5699 x-on:blur="blurLabel()" 5700 x-on:change="changeOption(172, $event.target.value)" 5701 x-on:click="clearOptionIfActive(172, item.id)" 5702 x-model="selectedValues[172]" 5703 :required="getAllowedAttributeOptions(172).filter( 5704 attributeOption => selectedValues[attributeOption] 5705 ).length === 0" 5706 :aria-label="getSwatchText(172, item.id)" 5707 aria-describedby="attribute-label-472-172" 5708 > 5709 <template x-if="isTextSwatch(172, item.id)"> 5710 <div 5711 x-html="getSwatchText(172, item.id)" 5712 class="whitespace-nowrap" 5713 aria-hidden="true" 5714 ></div> 5715 </template> 5716 </label> 5717 </template> 5718 5719 <template x-if="optionIsEnabled(172, item.id) && !optionIsActive(172, item.id)"> 5720 <div 5721 class="relative border-3 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" 5722 :class="{ 5723 'w-6 h-6' : !isTextSwatch(172, item.id), 5724 }" 5725 :style="getSwatchBackgroundStyle('172',item.id)" 5726 > 5727 <div x-html="getSwatchText(172, item.id)" 5728 class="whitespace-nowrap" 5729 :class="{ 'sr-only' : !isTextSwatch(172, item.id) }" 5730 ></div> 5731 <svg class="absolute inset-0 w-full h-full text-gray-500 bg-white bg-opacity-25"> 5732 <line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line> 5733 </svg> 5734 </div> 5735 </template> 5736</div> 5737 </template> 5738 </div> 5739 </div> 5740 </div> 5741 </div> 5742 </div> 5743 </div> 5744 <div class="items-center justify-center text-center lg:text-left"> 5745 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit">
5746 <span id="product-availability-status-472" 5747 class="w-3 h-3 rounded-full flex-shrink-0 5748 "> 5749 </span> 5750 <span id="product-availability-472"> 5751 </span> 5752 </p> 5753 </div> 5754 5755 </div> 5756
5756<script> 5757 function initPriceBox__6ac21b09a2102() { 5758 return { 5759 updatePrice(priceData) { 5760 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 5761 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 5762 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 5763 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 5764 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 5765 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 5766 regularPriceLabel.classList.add('hidden'); 5767 } else { 5768 regularPriceLabel.classList.remove('hidden'); 5769 } 5770 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 5771 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 5772 5773 const hidePriceLabel = priceData.hidePriceLabel; 5774 if (hidePriceLabel) { 5775 regularPriceLabel.classList.add('hidden'); 5776 } else { 5777 regularPriceLabel.classList.remove('hidden'); 5778 } 5779 5780 const isApproxPrice = priceData.isApproxPrice; 5781 if (!isApproxPrice) { 5782 approxPriceLabel.classList.add('hidden'); 5783 } else { 5784 approxPriceLabel.classList.remove('hidden'); 5785 } 5786 5787 document.getElementById('product-availability-' + 5788 472).innerHTML = priceData.availabilityText; 5789 5790 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 5791 document.getElementById('product-availability-status-' + 5792 472) 5793 .classList.remove(cssClass); 5794 }); 5795 5796 document.getElementById('product-availability-status-' + 5797 472) 5798 .classList.add(priceData.availabilityStatusColor); 5799 5800 priceDescriptionLabel.innerHTML = priceData.priceDescription; 5801 5802 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 5803 } 5804 } 5805 } 5806 5807 function initCartButtonData__6ac21b09a2102() { 5808 return { 5809 canShowCartButton: true, 5810 updateCartButton(priceData) { 5811 this.canShowCartButton = priceData.showCartButton; 5812 } 5813 } 5814 } 5815 </script>
5815 5816 <div class="sm:flex items-end"> 5817 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac21b09a2102()" @update-prices-472.window="updatePrice($event.detail);"> 5818 <div class="price-box price-final_price" data-role="priceBox" data-product-id="472" data-price-box="product-id-472"><span class="normal-price"> 5819 5820<span 5821 x-data x-id="['product\u002Dprice\u002D472']" class="price-container price-final_price tax weee" 5822 > 5823 <span class="price-description"></span> 5824 <span class="price-label">Ab</span> 5825 <span class="approx-price">ca. </span> 5826 <span :id="$id('product\u002Dprice\u002D472')" data-price-amount="35.9" 5827 data-price-type="finalPrice" 5828 class="price-wrapper " 5829 ><span class="price">35,90 â¬</span></span> 5830 </span> 5831</span> 5832 5833 5834</div><div class="price-details"> 5835 <span class="tax-details text-s text-c5"> 5836 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 5837</div> </div> 5838 <div class="w-full sm:6/12 mt-2"> 5839 <div class="block text-right"> 5840 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 5841 mr-1" 5842 aria-label="In den Warenkorb Alkohol, Coffein, Nikotin" 5843 title="In den Warenkorb" 5844 x-data="initCartButtonData__6ac21b09a2102()" 5845 @update-prices-472.window="updateCartButton($event.detail);" 5846 :class="{ invisible: canShowCartButton !== true }"> 5847 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 5848 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 5849</svg> 5850 <span class="ml-2 inline hidden lg:inline"> 5851 In den Warenkorb </span> 5852 </button> 5853 <button x-data="initWishlist()" @click.prevent="addToWishlist(472)" 5854 aria-label="Zur Wunschliste hinzufügen" 5855 title="Zur Wunschliste hinzufügen" 5856 type="button" class="py-3 mt-2 btn-secondary inline-block"> 5857 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 5858 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 5859</svg> 5860 <span class="hidden lg:ml-2 lg:inline"> 5861 Zur Wunschliste hinzufügen </span> 5862 </button> 5863 </div> 5864 </div> 5865 </div> 5866 5867 </div> 5868 </div> 5869 </div> 5870 </form> 5871 5872 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/811/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 5873 lg:flex-row" > 5874 <input name="form_key" type="hidden" value="MHFk6olfWgubb4xR" /> <input type="hidden" name="product" value="811" /> 5875 <a href="https://www.govi.de/allgemeine-und-spezielle-pharmakologie-und-toxikologie-buch" 5876 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 5877 tabindex="-1"> 5878 <div class="min-h-[362px] flex items-center mx-auto"> 5879 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 5880 x-data="" 5881 @update-gallery-811.window="$root.src = $event.detail" 5882 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/a/k/aktorie9593000100001a.jpg" 5883 loading="lazy" 5884 alt="Allgemeine und spezielle Pharmakologie und Toxikologie" 5885 title="Allgemeine und spezielle Pharmakologie und Toxikologie" 5886 /> 5887</div> 5888 </a> 5889 <div class="product-info flex flex-col grow lg:w-4/6"> 5890 <div class="grid h-full"> 5891 <div class="product-info--top self-start"> 5892 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 5893 <a class="product-item-link font-bold" href="https://www.govi.de/allgemeine-und-spezielle-pharmakologie-und-toxikologie-buch" :id="`slide-desc-811-${$id('slider-id')}`"> 5894 Allgemeine und spezielle Pharmakologie und Toxikologie </a> 5895 </div> 5896 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 5897 </div> 5898 </div> 5899 5900 <div class="product-info--bottom self-end"> 5901 <!-- Swatches -->
5902 <div class="self-center"> 5903 <div class=""> 5904 </div> 5905 <div class="swatch-attribute border-container medium"> 5906 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14"> 5907 <div class="flex flex-nowrap w-full overflow-auto snap items-end py-1"> 5908 <label class="swatch-option relative border-3 cursor-pointer 5909 product-option-value-label text-black font-bold border-black !border-3 bg-white hover:bg-c8 hover:border-c8 hover:text-white"> 5910 Buch </label> 5911 </div> 5912 </div> 5913 </div> 5914 <div class="items-center justify-center text-center lg:text-left"> 5915 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit"> 5916 <span id="product-availability-status-811" 5917 class="w-3 h-3 rounded-full flex-shrink-0 5918 bg-green-500"> 5919 </span> 5920 <span id="product-availability-811"> 5921 1-3 Werktage </span> 5922 </p> 5923 </div> 5924 5925 </div> 5926
5926<script> 5927 function initPriceBox__6ac221628cb36() { 5928 return { 5929 updatePrice(priceData) { 5930 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 5931 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 5932 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 5933 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 5934 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 5935 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 5936 regularPriceLabel.classList.add('hidden'); 5937 } else { 5938 regularPriceLabel.classList.remove('hidden'); 5939 } 5940 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 5941 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 5942 5943 const hidePriceLabel = priceData.hidePriceLabel; 5944 if (hidePriceLabel) { 5945 regularPriceLabel.classList.add('hidden'); 5946 } else { 5947 regularPriceLabel.classList.remove('hidden'); 5948 } 5949 5950 const isApproxPrice = priceData.isApproxPrice; 5951 if (!isApproxPrice) { 5952 approxPriceLabel.classList.add('hidden'); 5953 } else { 5954 approxPriceLabel.classList.remove('hidden'); 5955 } 5956 5957 document.getElementById('product-availability-' + 5958 811).innerHTML = priceData.availabilityText; 5959 5960 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 5961 document.getElementById('product-availability-status-' + 5962 811) 5963 .classList.remove(cssClass); 5964 }); 5965 5966 document.getElementById('product-availability-status-' + 5967 811) 5968 .classList.add(priceData.availabilityStatusColor); 5969 5970 priceDescriptionLabel.innerHTML = priceData.priceDescription; 5971 5972 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 5973 } 5974 } 5975 } 5976 5977 function initCartButtonData__6ac221628cb36() { 5978 return { 5979 canShowCartButton: true, 5980 updateCartButton(priceData) { 5981 this.canShowCartButton = priceData.showCartButton; 5982 } 5983 } 5984 } 5985 </script>
5985 5986 <div class="sm:flex items-end"> 5987 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac221628cb36()" @update-prices-811.window="updatePrice($event.detail);"> 5988 <div class="price-box price-final_price" data-role="priceBox" data-product-id="811" data-price-box="product-id-811"> 5989 5990<span 5991 x-data x-id="['product\u002Dprice\u002D811']" class="price-container price-final_price tax weee" 5992 > 5993 <span class="price-description"></span> 5994 <span :id="$id('product\u002Dprice\u002D811')" data-price-amount="99" 5995 data-price-type="finalPrice" 5996 class="price-wrapper " 5997 ><span class="price">99,00 â¬</span></span> 5998 </span> 5999 6000</div><div class="price-details"> 6001 <span class="tax-details text-s text-c5"> 6002 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 6003</div> </div> 6004 <div class="w-full sm:6/12 mt-2"> 6005 <div class="block text-right"> 6006 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 6007 mr-1" 6008 aria-label="In den Warenkorb Allgemeine und spezielle Pharmakologie und Toxikologie" 6009 title="In den Warenkorb" 6010 x-data="initCartButtonData__6ac221628cb36()" 6011 @update-prices-811.window="updateCartButton($event.detail);" 6012 :class="{ invisible: canShowCartButton !== true }"> 6013 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6014 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 6015</svg> 6016 <span class="ml-2 inline hidden lg:inline"> 6017 In den Warenkorb </span> 6018 </button> 6019 <button x-data="initWishlist()" @click.prevent="addToWishlist(811)" 6020 aria-label="Zur Wunschliste hinzufügen" 6021 title="Zur Wunschliste hinzufügen" 6022 type="button" class="py-3 mt-2 btn-secondary inline-block"> 6023 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6024 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 6025</svg> 6026 <span class="hidden lg:ml-2 lg:inline"> 6027 Zur Wunschliste hinzufügen </span> 6028 </button> 6029 </div> 6030 </div> 6031 </div> 6032 6033 </div> 6034 </div> 6035 </div> 6036 </form> 6037 6038 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/166/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 6039 lg:flex-row" > 6040 <input name="form_key" type="hidden" value="DRrYkaEmdROnUYZC" /> <input type="hidden" name="product" value="166" /> 6041 <a href="https://www.govi.de/allgemeinpharmazie" 6042 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 6043 tabindex="-1"> 6044 <div class="min-h-[362px] flex items-center mx-auto"> 6045 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 6046 x-data="" 6047 @update-gallery-166.window="$root.src = $event.detail" 6048 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/9/4/9458819800001a.jpg" 6049 loading="lazy" 6050 alt="Allgemeinpharmazie" 6051 title="Allgemeinpharmazie" 6052 /> 6053</div> 6054 </a> 6055 <div class="product-info flex flex-col grow lg:w-4/6"> 6056 <div class="grid h-full"> 6057 <div class="product-info--top self-start"> 6058 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 6059 <a class="product-item-link font-bold" href="https://www.govi.de/allgemeinpharmazie" :id="`slide-desc-166-${$id('slider-id')}`"> 6060 Allgemeinpharmazie </a> 6061 </div> 6062 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 6063 Ein Lehrbuch für Praktisches Jahr, Weiterbildung und Apothekenpraxis. </div> 6064 </div> 6065 6066 <div class="product-info--bottom self-end"> 6067 <!-- Swatches -->
6068 <div class="self-center"> 6069 <div class=""> 6070 </div> 6071 <div class="swatch-attribute border-container medium"> 6072 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14"> 6073 <div class="flex flex-nowrap w-full overflow-auto snap items-end py-1"> 6074 <label class="swatch-option relative border-3 cursor-pointer 6075 product-option-value-label text-black font-bold border-black !border-3 bg-white hover:bg-c8 hover:border-c8 hover:text-white"> 6076 Buch </label> 6077 </div> 6078 </div> 6079 </div> 6080 <div class="items-center justify-center text-center lg:text-left"> 6081 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit"> 6082 <span id="product-availability-status-166" 6083 class="w-3 h-3 rounded-full flex-shrink-0 6084 bg-green-500"> 6085 </span> 6086 <span id="product-availability-166"> 6087 1-3 Werktage </span> 6088 </p> 6089 </div> 6090 6091 </div> 6092
6092<script> 6093 function initPriceBox__6ac2151339bc2() { 6094 return { 6095 updatePrice(priceData) { 6096 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 6097 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 6098 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 6099 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 6100 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 6101 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 6102 regularPriceLabel.classList.add('hidden'); 6103 } else { 6104 regularPriceLabel.classList.remove('hidden'); 6105 } 6106 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 6107 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 6108 6109 const hidePriceLabel = priceData.hidePriceLabel; 6110 if (hidePriceLabel) { 6111 regularPriceLabel.classList.add('hidden'); 6112 } else { 6113 regularPriceLabel.classList.remove('hidden'); 6114 } 6115 6116 const isApproxPrice = priceData.isApproxPrice; 6117 if (!isApproxPrice) { 6118 approxPriceLabel.classList.add('hidden'); 6119 } else { 6120 approxPriceLabel.classList.remove('hidden'); 6121 } 6122 6123 document.getElementById('product-availability-' + 6124 166).innerHTML = priceData.availabilityText; 6125 6126 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 6127 document.getElementById('product-availability-status-' + 6128 166) 6129 .classList.remove(cssClass); 6130 }); 6131 6132 document.getElementById('product-availability-status-' + 6133 166) 6134 .classList.add(priceData.availabilityStatusColor); 6135 6136 priceDescriptionLabel.innerHTML = priceData.priceDescription; 6137 6138 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 6139 } 6140 } 6141 } 6142 6143 function initCartButtonData__6ac2151339bc2() { 6144 return { 6145 canShowCartButton: true, 6146 updateCartButton(priceData) { 6147 this.canShowCartButton = priceData.showCartButton; 6148 } 6149 } 6150 } 6151 </script>
6151 6152 <div class="sm:flex items-end"> 6153 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac2151339bc2()" @update-prices-166.window="updatePrice($event.detail);"> 6154 <div class="price-box price-final_price" data-role="priceBox" data-product-id="166" data-price-box="product-id-166"> 6155 6156<span 6157 x-data x-id="['product\u002Dprice\u002D166']" class="price-container price-final_price tax weee" 6158 > 6159 <span class="price-description"></span> 6160 <span :id="$id('product\u002Dprice\u002D166')" data-price-amount="108" 6161 data-price-type="finalPrice" 6162 class="price-wrapper " 6163 ><span class="price">108,00 â¬</span></span> 6164 </span> 6165 6166</div><div class="price-details"> 6167 <span class="tax-details text-s text-c5"> 6168 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 6169</div> </div> 6170 <div class="w-full sm:6/12 mt-2"> 6171 <div class="block text-right"> 6172 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 6173 mr-1" 6174 aria-label="In den Warenkorb Allgemeinpharmazie" 6175 title="In den Warenkorb" 6176 x-data="initCartButtonData__6ac2151339bc2()" 6177 @update-prices-166.window="updateCartButton($event.detail);" 6178 :class="{ invisible: canShowCartButton !== true }"> 6179 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6180 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 6181</svg> 6182 <span class="ml-2 inline hidden lg:inline"> 6183 In den Warenkorb </span> 6184 </button> 6185 <button x-data="initWishlist()" @click.prevent="addToWishlist(166)" 6186 aria-label="Zur Wunschliste hinzufügen" 6187 title="Zur Wunschliste hinzufügen" 6188 type="button" class="py-3 mt-2 btn-secondary inline-block"> 6189 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6190 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 6191</svg> 6192 <span class="hidden lg:ml-2 lg:inline"> 6193 Zur Wunschliste hinzufügen </span> 6194 </button> 6195 </div> 6196 </div> 6197 </div> 6198 6199 </div> 6200 </div> 6201 </div> 6202 </form> 6203 6204 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/333/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 6205 lg:flex-row" > 6206 <input name="form_key" type="hidden" value="MHFk6olfWgubb4xR" /> <input type="hidden" name="product" value="333" /> 6207 <a href="https://www.govi.de/aporello-heilpflanzen" 6208 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 6209 tabindex="-1"> 6210 <div class="min-h-[362px] flex items-center mx-auto"> 6211 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 6212 x-data="" 6213 @update-gallery-333.window="$root.src = $event.detail" 6214 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/4/2/4211576200001a.jpg" 6215 loading="lazy" 6216 alt="aporello Heilpflanzen" 6217 title="aporello Heilpflanzen" 6218 /> 6219</div> 6220 </a> 6221 <div class="product-info flex flex-col grow lg:w-4/6"> 6222 <div class="grid h-full"> 6223 <div class="product-info--top self-start"> 6224 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 6225 <a class="product-item-link font-bold" href="https://www.govi.de/aporello-heilpflanzen" :id="`slide-desc-333-${$id('slider-id')}`"> 6226 aporello Heilpflanzen </a> 6227 </div> 6228 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 6229 </div> 6230 </div> 6231 6232 <div class="product-info--bottom self-end"> 6233 <!-- Swatches -->
6234 <div class="self-center"> 6235 <div class=""> 6236 </div> 6237 <div class="swatch-attribute border-container medium"> 6238 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14"> 6239 <div class="flex flex-nowrap w-full overflow-auto snap items-end py-1"> 6240 <label class="swatch-option relative border-3 cursor-pointer 6241 product-option-value-label text-black font-bold border-black !border-3 bg-white hover:bg-c8 hover:border-c8 hover:text-white"> 6242 Buch </label> 6243 </div> 6244 </div> 6245 </div> 6246 <div class="items-center justify-center text-center lg:text-left"> 6247 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit"> 6248 <span id="product-availability-status-333" 6249 class="w-3 h-3 rounded-full flex-shrink-0 6250 bg-green-500"> 6251 </span> 6252 <span id="product-availability-333"> 6253 1-3 Werktage </span> 6254 </p> 6255 </div> 6256 6257 </div> 6258
6258<script> 6259 function initPriceBox__6ac221629478a() { 6260 return { 6261 updatePrice(priceData) { 6262 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 6263 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 6264 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 6265 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 6266 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 6267 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 6268 regularPriceLabel.classList.add('hidden'); 6269 } else { 6270 regularPriceLabel.classList.remove('hidden'); 6271 } 6272 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 6273 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 6274 6275 const hidePriceLabel = priceData.hidePriceLabel; 6276 if (hidePriceLabel) { 6277 regularPriceLabel.classList.add('hidden'); 6278 } else { 6279 regularPriceLabel.classList.remove('hidden'); 6280 } 6281 6282 const isApproxPrice = priceData.isApproxPrice; 6283 if (!isApproxPrice) { 6284 approxPriceLabel.classList.add('hidden'); 6285 } else { 6286 approxPriceLabel.classList.remove('hidden'); 6287 } 6288 6289 document.getElementById('product-availability-' + 6290 333).innerHTML = priceData.availabilityText; 6291 6292 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 6293 document.getElementById('product-availability-status-' + 6294 333) 6295 .classList.remove(cssClass); 6296 }); 6297 6298 document.getElementById('product-availability-status-' + 6299 333) 6300 .classList.add(priceData.availabilityStatusColor); 6301 6302 priceDescriptionLabel.innerHTML = priceData.priceDescription; 6303 6304 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 6305 } 6306 } 6307 } 6308 6309 function initCartButtonData__6ac221629478a() { 6310 return { 6311 canShowCartButton: true, 6312 updateCartButton(priceData) { 6313 this.canShowCartButton = priceData.showCartButton; 6314 } 6315 } 6316 } 6317 </script>
6317 6318 <div class="sm:flex items-end"> 6319 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac221629478a()" @update-prices-333.window="updatePrice($event.detail);"> 6320 <div class="price-box price-final_price" data-role="priceBox" data-product-id="333" data-price-box="product-id-333"> 6321 6322<span 6323 x-data x-id="['product\u002Dprice\u002D333']" class="price-container price-final_price tax weee" 6324 > 6325 <span class="price-description"></span> 6326 <span :id="$id('product\u002Dprice\u002D333')" data-price-amount="27" 6327 data-price-type="finalPrice" 6328 class="price-wrapper " 6329 ><span class="price">27,00 â¬</span></span> 6330 </span> 6331 6332</div><div class="price-details"> 6333 <span class="tax-details text-s text-c5"> 6334 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 6335</div> </div> 6336 <div class="w-full sm:6/12 mt-2"> 6337 <div class="block text-right"> 6338 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 6339 mr-1" 6340 aria-label="In den Warenkorb aporello Heilpflanzen" 6341 title="In den Warenkorb" 6342 x-data="initCartButtonData__6ac221629478a()" 6343 @update-prices-333.window="updateCartButton($event.detail);" 6344 :class="{ invisible: canShowCartButton !== true }"> 6345 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6346 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 6347</svg> 6348 <span class="ml-2 inline hidden lg:inline"> 6349 In den Warenkorb </span> 6350 </button> 6351 <button x-data="initWishlist()" @click.prevent="addToWishlist(333)" 6352 aria-label="Zur Wunschliste hinzufügen" 6353 title="Zur Wunschliste hinzufügen" 6354 type="button" class="py-3 mt-2 btn-secondary inline-block"> 6355 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6356 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 6357</svg> 6358 <span class="hidden lg:ml-2 lg:inline"> 6359 Zur Wunschliste hinzufügen </span> 6360 </button> 6361 </div> 6362 </div> 6363 </div> 6364 6365 </div> 6366 </div> 6367 </div> 6368 </form> 6369 6370 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/258/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 6371 lg:flex-row" > 6372 <input name="form_key" type="hidden" value="MHFk6olfWgubb4xR" /> <input type="hidden" name="product" value="258" /> 6373 <a href="https://www.govi.de/aporello-homoeopathie" 6374 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 6375 tabindex="-1"> 6376 <div class="min-h-[362px] flex items-center mx-auto"> 6377 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 6378 x-data="" 6379 @update-gallery-258.window="$root.src = $event.detail" 6380 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/a/p/ap_hom4414708400001a.jpg" 6381 loading="lazy" 6382 alt="aporello Homöopathie" 6383 title="aporello Homöopathie" 6384 /> 6385</div> 6386 </a> 6387 <div class="product-info flex flex-col grow lg:w-4/6"> 6388 <div class="grid h-full"> 6389 <div class="product-info--top self-start"> 6390 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 6391 <a class="product-item-link font-bold" href="https://www.govi.de/aporello-homoeopathie" :id="`slide-desc-258-${$id('slider-id')}`"> 6392 aporello Homöopathie </a> 6393 </div> 6394 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 6395 </div> 6396 </div> 6397 6398 <div class="product-info--bottom self-end"> 6399 <!-- Swatches -->
6400 <div class="self-center"> 6401 <div class=""> 6402 </div> 6403 <div class="swatch-attribute border-container medium"> 6404 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14"> 6405 <div class="flex flex-nowrap w-full overflow-auto snap items-end py-1"> 6406 <label class="swatch-option relative border-3 cursor-pointer 6407 product-option-value-label text-black font-bold border-black !border-3 bg-white hover:bg-c8 hover:border-c8 hover:text-white"> 6408 Buch </label> 6409 </div> 6410 </div> 6411 </div> 6412 <div class="items-center justify-center text-center lg:text-left"> 6413 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit"> 6414 <span id="product-availability-status-258" 6415 class="w-3 h-3 rounded-full flex-shrink-0 6416 bg-green-500"> 6417 </span> 6418 <span id="product-availability-258"> 6419 1-3 Werktage </span> 6420 </p> 6421 </div> 6422 6423 </div> 6424
6424<script> 6425 function initPriceBox__6ac2216297565() { 6426 return { 6427 updatePrice(priceData) { 6428 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 6429 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 6430 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 6431 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 6432 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 6433 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 6434 regularPriceLabel.classList.add('hidden'); 6435 } else { 6436 regularPriceLabel.classList.remove('hidden'); 6437 } 6438 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 6439 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 6440 6441 const hidePriceLabel = priceData.hidePriceLabel; 6442 if (hidePriceLabel) { 6443 regularPriceLabel.classList.add('hidden'); 6444 } else { 6445 regularPriceLabel.classList.remove('hidden'); 6446 } 6447 6448 const isApproxPrice = priceData.isApproxPrice; 6449 if (!isApproxPrice) { 6450 approxPriceLabel.classList.add('hidden'); 6451 } else { 6452 approxPriceLabel.classList.remove('hidden'); 6453 } 6454 6455 document.getElementById('product-availability-' + 6456 258).innerHTML = priceData.availabilityText; 6457 6458 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 6459 document.getElementById('product-availability-status-' + 6460 258) 6461 .classList.remove(cssClass); 6462 }); 6463 6464 document.getElementById('product-availability-status-' + 6465 258) 6466 .classList.add(priceData.availabilityStatusColor); 6467 6468 priceDescriptionLabel.innerHTML = priceData.priceDescription; 6469 6470 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 6471 } 6472 } 6473 } 6474 6475 function initCartButtonData__6ac2216297565() { 6476 return { 6477 canShowCartButton: true, 6478 updateCartButton(priceData) { 6479 this.canShowCartButton = priceData.showCartButton; 6480 } 6481 } 6482 } 6483 </script>
6483 6484 <div class="sm:flex items-end"> 6485 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac2216297565()" @update-prices-258.window="updatePrice($event.detail);"> 6486 <div class="price-box price-final_price" data-role="priceBox" data-product-id="258" data-price-box="product-id-258"> 6487 6488<span 6489 x-data x-id="['product\u002Dprice\u002D258']" class="price-container price-final_price tax weee" 6490 > 6491 <span class="price-description"></span> 6492 <span :id="$id('product\u002Dprice\u002D258')" data-price-amount="27" 6493 data-price-type="finalPrice" 6494 class="price-wrapper " 6495 ><span class="price">27,00 â¬</span></span> 6496 </span> 6497 6498</div><div class="price-details"> 6499 <span class="tax-details text-s text-c5"> 6500 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 6501</div> </div> 6502 <div class="w-full sm:6/12 mt-2"> 6503 <div class="block text-right"> 6504 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 6505 mr-1" 6506 aria-label="In den Warenkorb aporello Homöopathie" 6507 title="In den Warenkorb" 6508 x-data="initCartButtonData__6ac2216297565()" 6509 @update-prices-258.window="updateCartButton($event.detail);" 6510 :class="{ invisible: canShowCartButton !== true }"> 6511 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6512 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 6513</svg> 6514 <span class="ml-2 inline hidden lg:inline"> 6515 In den Warenkorb </span> 6516 </button> 6517 <button x-data="initWishlist()" @click.prevent="addToWishlist(258)" 6518 aria-label="Zur Wunschliste hinzufügen" 6519 title="Zur Wunschliste hinzufügen" 6520 type="button" class="py-3 mt-2 btn-secondary inline-block"> 6521 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6522 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 6523</svg> 6524 <span class="hidden lg:ml-2 lg:inline"> 6525 Zur Wunschliste hinzufügen </span> 6526 </button> 6527 </div> 6528 </div> 6529 </div> 6530 6531 </div> 6532 </div> 6533 </div> 6534 </form> 6535 6536 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/1925/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 6537 lg:flex-row" > 6538 <input name="form_key" type="hidden" value="MHFk6olfWgubb4xR" /> <input type="hidden" name="product" value="1925" /> 6539 <a href="https://www.govi.de/apotheke-neu-gelebt-buch" 6540 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 6541 tabindex="-1"> 6542 <div class="min-h-[362px] flex items-center mx-auto"> 6543 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 6544 x-data="" 6545 @update-gallery-1925.window="$root.src = $event.detail" 6546 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/a/p/apotheke_neue_gelebt.jpg" 6547 loading="lazy" 6548 alt="Apotheke neu gelebt" 6549 title="Apotheke neu gelebt" 6550 /> 6551</div> 6552 </a> 6553 <div class="product-info flex flex-col grow lg:w-4/6"> 6554 <div class="grid h-full"> 6555 <div class="product-info--top self-start"> 6556 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 6557 <a class="product-item-link font-bold" href="https://www.govi.de/apotheke-neu-gelebt-buch" :id="`slide-desc-1925-${$id('slider-id')}`"> 6558 Apotheke neu gelebt </a> 6559 </div> 6560 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 6561 Mit Mut und Know-how die Zukunft gestalten </div> 6562 </div> 6563 6564 <div class="product-info--bottom self-end"> 6565 <!-- Swatches -->
6566 <div class="self-center"> 6567 <div class=""> 6568 </div> 6569 <div class="swatch-attribute border-container medium"> 6570 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14"> 6571 <div class="flex flex-nowrap w-full overflow-auto snap items-end py-1"> 6572 <label class="swatch-option relative border-3 cursor-pointer 6573 product-option-value-label text-black font-bold border-black !border-3 bg-white hover:bg-c8 hover:border-c8 hover:text-white"> 6574 Buch </label> 6575 </div> 6576 </div> 6577 </div> 6578 <div class="items-center justify-center text-center lg:text-left"> 6579 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit"> 6580 <span id="product-availability-status-1925" 6581 class="w-3 h-3 rounded-full flex-shrink-0 6582 bg-green-500"> 6583 </span> 6584 <span id="product-availability-1925"> 6585 1-3 Werktage </span> 6586 </p> 6587 </div> 6588 6589 </div> 6590
6590<script> 6591 function initPriceBox__6ac2216299c03() { 6592 return { 6593 updatePrice(priceData) { 6594 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 6595 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 6596 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 6597 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 6598 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 6599 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 6600 regularPriceLabel.classList.add('hidden'); 6601 } else { 6602 regularPriceLabel.classList.remove('hidden'); 6603 } 6604 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 6605 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 6606 6607 const hidePriceLabel = priceData.hidePriceLabel; 6608 if (hidePriceLabel) { 6609 regularPriceLabel.classList.add('hidden'); 6610 } else { 6611 regularPriceLabel.classList.remove('hidden'); 6612 } 6613 6614 const isApproxPrice = priceData.isApproxPrice; 6615 if (!isApproxPrice) { 6616 approxPriceLabel.classList.add('hidden'); 6617 } else { 6618 approxPriceLabel.classList.remove('hidden'); 6619 } 6620 6621 document.getElementById('product-availability-' + 6622 1925).innerHTML = priceData.availabilityText; 6623 6624 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 6625 document.getElementById('product-availability-status-' + 6626 1925) 6627 .classList.remove(cssClass); 6628 }); 6629 6630 document.getElementById('product-availability-status-' + 6631 1925) 6632 .classList.add(priceData.availabilityStatusColor); 6633 6634 priceDescriptionLabel.innerHTML = priceData.priceDescription; 6635 6636 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 6637 } 6638 } 6639 } 6640 6641 function initCartButtonData__6ac2216299c03() { 6642 return { 6643 canShowCartButton: true, 6644 updateCartButton(priceData) { 6645 this.canShowCartButton = priceData.showCartButton; 6646 } 6647 } 6648 } 6649 </script>
6649 6650 <div class="sm:flex items-end"> 6651 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac2216299c03()" @update-prices-1925.window="updatePrice($event.detail);"> 6652 <div class="price-box price-final_price" data-role="priceBox" data-product-id="1925" data-price-box="product-id-1925"> 6653 6654<span 6655 x-data x-id="['product\u002Dprice\u002D1925']" class="price-container price-final_price tax weee" 6656 > 6657 <span class="price-description"></span> 6658 <span :id="$id('product\u002Dprice\u002D1925')" data-price-amount="34" 6659 data-price-type="finalPrice" 6660 class="price-wrapper " 6661 ><span class="price">34,00 â¬</span></span> 6662 </span> 6663 6664</div><div class="price-details"> 6665 <span class="tax-details text-s text-c5"> 6666 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 6667</div> </div> 6668 <div class="w-full sm:6/12 mt-2"> 6669 <div class="block text-right"> 6670 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 6671 mr-1" 6672 aria-label="In den Warenkorb Apotheke neu gelebt" 6673 title="In den Warenkorb" 6674 x-data="initCartButtonData__6ac2216299c03()" 6675 @update-prices-1925.window="updateCartButton($event.detail);" 6676 :class="{ invisible: canShowCartButton !== true }"> 6677 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6678 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 6679</svg> 6680 <span class="ml-2 inline hidden lg:inline"> 6681 In den Warenkorb </span> 6682 </button> 6683 <button x-data="initWishlist()" @click.prevent="addToWishlist(1925)" 6684 aria-label="Zur Wunschliste hinzufügen" 6685 title="Zur Wunschliste hinzufügen" 6686 type="button" class="py-3 mt-2 btn-secondary inline-block"> 6687 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6688 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 6689</svg> 6690 <span class="hidden lg:ml-2 lg:inline"> 6691 Zur Wunschliste hinzufügen </span> 6692 </button> 6693 </div> 6694 </div> 6695 </div> 6696 6697 </div> 6698 </div> 6699 </div> 6700 </form> 6701 6702 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/887/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 6703 lg:flex-row" > 6704 <input name="form_key" type="hidden" value="BENrOXKSxc5SWXl0" /> <input type="hidden" name="product" value="887" /> 6705 <a href="https://www.govi.de/apothekenpraxis-workbook-mit-apothekenpraxis-fuer-pta-workbook-apothekenpraxis" 6706 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 6707 tabindex="-1"> 6708 <div class="min-h-[362px] flex items-center mx-auto"> 6709 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 6710 x-data="" 6711 @update-gallery-887.window="$root.src = $event.detail" 6712 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/a/p/apothekenpraxis_f_r_pta_bundle.jpg" 6713 loading="lazy" 6714 alt="Apothekenpraxis-Workbook mit Apothekenpraxis für PTA, Workbook Apothekenpraxis" 6715 title="Apothekenpraxis-Workbook mit Apothekenpraxis für PTA, Workbook Apothekenpraxis" 6716 /> 6717</div> 6718 </a> 6719 <div class="product-info flex flex-col grow lg:w-4/6"> 6720 <div class="grid h-full"> 6721 <div class="product-info--top self-start"> 6722 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 6723 <a class="product-item-link font-bold" href="https://www.govi.de/apothekenpraxis-workbook-mit-apothekenpraxis-fuer-pta-workbook-apothekenpraxis" :id="`slide-desc-887-${$id('slider-id')}`"> 6724 Apothekenpraxis-Workbook mit Apothekenpraxis für PTA, Workbook Apothekenpraxis </a> 6725 </div> 6726 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 6727 </div> 6728 </div> 6729 6730 <div class="product-info--bottom self-end"> 6731 <!-- Swatches -->
6732 <div class="self-center"> 6733 <div class=""> 6734 </div> 6735 <div class="swatch-attribute border-container medium"> 6736 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14"> 6737 <div class="flex flex-nowrap w-full overflow-auto snap items-end py-1"> 6738 <label class="swatch-option relative border-3 cursor-pointer 6739 product-option-value-label text-black font-bold border-black !border-3 bg-white hover:bg-c8 hover:border-c8 hover:text-white"> 6740 Buch </label> 6741 </div> 6742 </div> 6743 </div> 6744 <div class="items-center justify-center text-center lg:text-left"> 6745 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit"> 6746 <span id="product-availability-status-887" 6747 class="w-3 h-3 rounded-full flex-shrink-0 6748 bg-green-500"> 6749 </span> 6750 <span id="product-availability-887"> 6751 1-3 Werktage </span> 6752 </p> 6753 </div> 6754 6755 </div> 6756
6756<script> 6757 function initPriceBox__6ac213aeac4e6() { 6758 return { 6759 updatePrice(priceData) { 6760 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 6761 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 6762 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 6763 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 6764 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 6765 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 6766 regularPriceLabel.classList.add('hidden'); 6767 } else { 6768 regularPriceLabel.classList.remove('hidden'); 6769 } 6770 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 6771 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 6772 6773 const hidePriceLabel = priceData.hidePriceLabel; 6774 if (hidePriceLabel) { 6775 regularPriceLabel.classList.add('hidden'); 6776 } else { 6777 regularPriceLabel.classList.remove('hidden'); 6778 } 6779 6780 const isApproxPrice = priceData.isApproxPrice; 6781 if (!isApproxPrice) { 6782 approxPriceLabel.classList.add('hidden'); 6783 } else { 6784 approxPriceLabel.classList.remove('hidden'); 6785 } 6786 6787 document.getElementById('product-availability-' + 6788 887).innerHTML = priceData.availabilityText; 6789 6790 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 6791 document.getElementById('product-availability-status-' + 6792 887) 6793 .classList.remove(cssClass); 6794 }); 6795 6796 document.getElementById('product-availability-status-' + 6797 887) 6798 .classList.add(priceData.availabilityStatusColor); 6799 6800 priceDescriptionLabel.innerHTML = priceData.priceDescription; 6801 6802 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 6803 } 6804 } 6805 } 6806 6807 function initCartButtonData__6ac213aeac4e6() { 6808 return { 6809 canShowCartButton: true, 6810 updateCartButton(priceData) { 6811 this.canShowCartButton = priceData.showCartButton; 6812 } 6813 } 6814 } 6815 </script>
6815 6816 <div class="sm:flex items-end"> 6817 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac213aeac4e6()" @update-prices-887.window="updatePrice($event.detail);"> 6818 <div class="price-box price-final_price" data-role="priceBox" data-product-id="887" data-price-box="product-id-887"> 6819 6820<span 6821 x-data x-id="['product\u002Dprice\u002D887']" class="price-container price-final_price tax weee" 6822 > 6823 <span class="price-description"></span> 6824 <span :id="$id('product\u002Dprice\u002D887')" data-price-amount="74.2" 6825 data-price-type="finalPrice" 6826 class="price-wrapper " 6827 ><span class="price">74,20 â¬</span></span> 6828 </span> 6829 6830</div><div class="price-details"> 6831 <span class="tax-details text-s text-c5"> 6832 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 6833</div> </div> 6834 <div class="w-full sm:6/12 mt-2"> 6835 <div class="block text-right"> 6836 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 6837 mr-1" 6838 aria-label="In den Warenkorb Apothekenpraxis-Workbook mit Apothekenpraxis für PTA, Workbook Apothekenpraxis" 6839 title="In den Warenkorb" 6840 x-data="initCartButtonData__6ac213aeac4e6()" 6841 @update-prices-887.window="updateCartButton($event.detail);" 6842 :class="{ invisible: canShowCartButton !== true }"> 6843 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6844 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 6845</svg> 6846 <span class="ml-2 inline hidden lg:inline"> 6847 In den Warenkorb </span> 6848 </button> 6849 <button x-data="initWishlist()" @click.prevent="addToWishlist(887)" 6850 aria-label="Zur Wunschliste hinzufügen" 6851 title="Zur Wunschliste hinzufügen" 6852 type="button" class="py-3 mt-2 btn-secondary inline-block"> 6853 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 6854 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 6855</svg> 6856 <span class="hidden lg:ml-2 lg:inline"> 6857 Zur Wunschliste hinzufügen </span> 6858 </button> 6859 </div> 6860 </div> 6861 </div> 6862 6863 </div> 6864 </div> 6865 </div> 6866 </form> 6867 6868 <form method="post" action="https://www.govi.de/checkout/cart/add/uenc/%25uenc%25/product/403/" class="item product product-item product_addtocart_form card card-interactive p-6 flex flex-col w-full 6869 lg:flex-row" > 6870 <input name="form_key" type="hidden" value="MHFk6olfWgubb4xR" /> <input type="hidden" name="product" value="403" /> 6871 <a href="https://www.govi.de/arterielle-hypertonie-und-antihypertensive-therapie" 6872 class="flex items-center min-h-[362px] product photo product-item-photo block mx-auto mb-3 !border-0 lg:w-2/6 lg:mb-0 lg:mr-5" 6873 tabindex="-1"> 6874 <div class="min-h-[362px] flex items-center mx-auto"> 6875 <img class="hover:shadow-xl object-contain my-0 mx-auto !border-0 shadow-xl" 6876 x-data="" 6877 @update-gallery-403.window="$root.src = $event.detail" 6878 src="https://www.govi.de/media/catalog/product/cache/5867885552aeb48e79c08ad63de6695b/9/7/9783774114340_arterielle_hypertonie.jpg" 6879 loading="lazy" 6880 alt="Arterielle Hypertonie und antihypertensive Therapie" 6881 title="Arterielle Hypertonie und antihypertensive Therapie" 6882 /> 6883</div> 6884 </a> 6885 <div class="product-info flex flex-col grow lg:w-4/6"> 6886 <div class="grid h-full"> 6887 <div class="product-info--top self-start"> 6888 <div class="mt-1.5 items-center justify-center text-c7 text-lg text-center lg:text-left"> 6889 <a class="product-item-link font-bold" href="https://www.govi.de/arterielle-hypertonie-und-antihypertensive-therapie" :id="`slide-desc-403-${$id('slider-id')}`"> 6890 Arterielle Hypertonie und antihypertensive Therapie </a> 6891 </div> 6892 <div class="max-w-xl items-center justify-center text-center lg:text-left"> 6893 Fortbildung kompakt </div> 6894 </div> 6895 6896 <div class="product-info--bottom self-end"> 6897 <!-- Swatches -->
6898 <div class="self-center"> 6899 <div class=""> 6900
6900<script> 6901 function initConfigurableSwatchOptions_403() { 6902 const configurableOptionsComponent = initConfigurableOptions( 6903 '403', 6904 {"attributes":{"172":{"id":"172","code":"medium","label":"Medium","options":[{"id":"18","label":"Buch","products":["401"]},{"id":"28","label":"PDF","products":["402"]}],"position":"0"}},"template":"<%- data.price %>\u00a0\u20ac","currencyFormat":"%s\u00a0\u20ac","optionPrices":{"401":{"baseOldPrice":{"amount":16.728970962617},"oldPrice":{"amount":17.9},"basePrice":{"amount":16.728970962617},"finalPrice":{"amount":17.9},"tierPrices":[],"msrpPrice":{"amount":0},"isApproxPrice":false,"priceDescription":null,"availabilityText":"1-3 Werktage","availabilityStatusColor":"bg-green-500","showCartButton":true,"availabilityStatusColorRemove":["bg-green-500","bg-yellow-500","bg-red-500"]},"402":{"baseOldPrice":{"amount":15.794391523364},"oldPrice":{"amount":16.9},"basePrice":{"amount":15.794391523364},"finalPrice":{"amount":16.9},"tierPrices":[],"msrpPrice":{"amount":0},"isApproxPrice":false,"priceDescription":null,"availabilityText":"sofort lieferbar","availabilityStatusColor":"bg-green-500","showCartButton":true,"availabilityStatusColorRemove":["bg-green-500","bg-yellow-500","bg-red-500"]}},"priceFormat":{"pattern":"%s\u00a0\u20ac","precision":2,"requiredPrecision":2,"decimalSymbol":",","groupSymbol":".","groupLength":3,"integerRequired":false},"prices":{"baseOldPrice":{"amount":15.794391523364},"oldPrice":{"amount":16.9},"basePrice":{"amount":15.794391523364},"finalPrice":{"amount":16.9},"isApproxPrice":null,"priceDescription":null,"availabilityText":""},"productId":"403","chooseText":"W\u00e4hlen Sie eine Option...","images":[],"index":{"401":{"172":"18"},"402":{"172":"28"}},"salable":[],"canDisplayShowOutOfStockStatus":false,"channel":"website","salesChannelCode":"amd_website","sku":{"401":"G000267-Buch","402":"G000267-PDF"},"product_availability":{"401":"1-3 Werktage","402":"sofort lieferbar"},"availabilityStatus":{"401":"1-3 Werktage","402":"sofort lieferbar"},"showCartButton":{"401":true,"402":true},"availabilityStatusColor":{"401":"bg-green-500","402":"bg-green-500"},"product_form":{"401":"kartoniert","402":""},"weight":{"401":"0,199 kg","402":""},"eudr_product_info":{"401":"","402":""},"description":{"401":"<p>Bluthochdruck ist eine Volkskrankheit. Es wird gesch\u00e4tzt, dass altersabh\u00e4ngig \u00fcber 30 Prozent der Erwachsenen darunter leiden. Die arterielle Hypertonie tritt vor allem bei \u00e4lteren Menschen auf. Oft ist sie mit weiteren Risikofaktoren wie \u00dcbergewicht, Diabetes mellitus oder Fettstoffwechselst\u00f6rungen assoziiert.<\/p>\r\n<p>Prof. Dr. Helga Frank und Elisabeth Pfister beschreiben die Ursachen und die Therapie der arteriellen Hypertonie. Bei der essentiellen arteriellen Hypertonie ist die Ursache multifaktoriell. Seltener ist die sekund\u00e4re Hypertonie, bei der eine fassbare Ursache f\u00fcr den Hochdruck verantwortlich ist, etwa ein Hyperaldosteronismus oder das obstruktive Schlafapnoesyndrom.<\/p>\r\n<p>Mit den Prinzipien der Hochdrucktherapie und den Zielwerten f\u00fcr die Blutdruckeinstellung leiten die Autorinnen zur Pharmakotherapie \u00fcber. Ausf\u00fchrlich setzen sie sich mit ACE-Hemmern, Sartanen, Betablockern, Calcium-Kanal-Blockern, Diuretika und Second-line-Antihypertensiva auseinander.<\/p>\r\n<p>Entscheidend f\u00fcr den Behandlungserfolg ist jedoch die Therapietreue des Patienten. Dem Thema \u201eAdh\u00e4renz\u201c ist ein eigenes Kapitel gewidmet und die \u201eTipps f\u00fcr die Beratung\u201c k\u00f6nnen sofort im Apothekenalltag umgesetzt werden.<\/p>\r\n<p>\u00a0<\/p>\r\n<p><strong>Prof. Dr. Helga Frank <\/strong>ist Fach\u00e4rztin f\u00fcr Innere Medizin und Nephrologie, Hypertensiolo-gie DHL, Diabetologie DDG und Lipidologie DGFF. Ihre wissenschaftlichen Schwerpunkte sind unter anderem Bluthochdruck und hypertensive Endorg-ansch\u00e4digung, Diabetes mellitus und diabetische Nephropathie, renale H\u00e4-modynamik und kardiovaskul\u00e4re Komplikationen bei Niereninsuffizienz. Sie hat sich f\u00fcr das Fachgebiet Innere Medizin habilitiert und ist \u00c4rztliche Leiterin des Versorgungszentrums Nephrocare Starnberg GmbH.<\/p>\r\n<p><strong>Elisabeth Pfister<\/strong> ist Apothekerin, Dipl.-Pharm., Medikationsmanager BA Klin-Pharm\u00ae, AMTS-Manager und weitergebildet in Geriatrischer Pharmazie. Sie ist in der Johannes-Apotheke Gr\u00f6benzell in der Klinikversorgung t\u00e4tig, Schwer-punkt Apothekerin auf Station. Freiberuflich Autorin und Referentin zum Medikationsmanagement und AMTS-Themen.<\/p>","402":"<p>Bluthochdruck ist eine Volkskrankheit. Es wird gesch\u00e4tzt, dass altersabh\u00e4ngig \u00fcber 30 Prozent der Erwachsenen darunter leiden. Die arterielle Hypertonie tritt vor allem bei \u00e4lteren Menschen auf. Oft ist sie mit weiteren Risikofaktoren wie \u
690400dcbergewicht, Diabetes mellitus oder Fettstoffwechselst\u00f6rungen assoziiert.<\/p>\r\n<p>Prof. Dr. Helga Frank und Elisabeth Pfister beschreiben die Ursachen und die Therapie der arteriellen Hypertonie. Bei der essentiellen arteriellen Hypertonie ist die Ursache multifaktoriell. Seltener ist die sekund\u00e4re Hypertonie, bei der eine fassbare Ursache f\u00fcr den Hochdruck verantwortlich ist, etwa ein Hyperaldosteronismus oder das obstruktive Schlafapnoesyndrom.<\/p>\r\n<p>Mit den Prinzipien der Hochdrucktherapie und den Zielwerten f\u00fcr die Blutdruckeinstellung leiten die Autorinnen zur Pharmakotherapie \u00fcber. Ausf\u00fchrlich setzen sie sich mit ACE-Hemmern, Sartanen, Betablockern, Calcium-Kanal-Blockern, Diuretika und Second-line-Antihypertensiva auseinander.<\/p>\r\n<p>Entscheidend f\u00fcr den Behandlungserfolg ist jedoch die Therapietreue des Patienten. Dem Thema \u201eAdh\u00e4renz\u201c ist ein eigenes Kapitel gewidmet und die \u201eTipps f\u00fcr die Beratung\u201c k\u00f6nnen sofort im Apothekenalltag umgesetzt werden.<\/p>\r\n<p>\u00a0<\/p>\r\n<p><strong>Prof. Dr. Helga Frank <\/strong>ist Fach\u00e4rztin f\u00fcr Innere Medizin und Nephrologie, Hypertensiolo-gie DHL, Diabetologie DDG und Lipidologie DGFF. Ihre wissenschaftlichen Schwerpunkte sind unter anderem Bluthochdruck und hypertensive Endorg-ansch\u00e4digung, Diabetes mellitus und diabetische Nephropathie, renale H\u00e4-modynamik und kardiovaskul\u00e4re Komplikationen bei Niereninsuffizienz. Sie hat sich f\u00fcr das Fachgebiet Innere Medizin habilitiert und ist \u00c4rztliche Leiterin des Versorgungszentrums Nephrocare Starnberg GmbH.<\/p>\r\n<p><strong>Elisabeth Pfister<\/strong> ist Apothekerin, Dipl.-Pharm., Medikationsmanager BA Klin-Pharm\u00ae, AMTS-Manager und weitergebildet in Geriatrischer Pharmazie. Sie ist in der Johannes-Apotheke Gr\u00f6benzell in der Klinikversorgung t\u00e4tig, Schwer-punkt Apothekerin auf Station. Freiberuflich Autorin und Referentin zum Medikationsmanagement und AMTS-Themen.<\/p>"},"isbn":{"401":"978-3-7741-1434-0","402":"978-3-7741-1435-7"},"article_number":{"401":"00011201","402":"00041201"},"pzn":{"401":"","402":""},"series":{"401":"Schriftenreihe der Bayerischen Landesapothekerkammer - Band 99, Fortbildung kompakt","402":"Schriftenreihe der Bayerischen Landesapothekerkammer - Band 99, Fortbildung kompakt"},"edition_stand_issue_number":{"401":"","402":""},"publishing_year":{"401":"2019","402":"2019"},"pages_maps_sheets":{"401":"88 S.","402":"88 S."},"illustrations":{"401":"14 Abb.","402":"14 Abb."},"tables":{"401":"15 Tab.","402":"15 Tab."},"components":{"401":"","402":""},"measure":{"401":"15,5 x 22 x 0,6 cm","402":""},"product_safety_address":{"401":"Avoxa- Mediengruppe Deutscher Apotheker GmbH<br>Carl-Mannich-Str. 26, 65760 Eschborn<br>[email protected]","402":"Avoxa- Mediengruppe Deutscher Apotheker GmbH<br>Carl-Mannich-Str. 26, 65760 Eschborn<br>[email protected]"},"product_safety_additional_info":{"401":"","402":""},"copy_protection":{"401":"","402":"mit Wasserzeichen"},"file_size":{"401":"","402":""},"issn":{"401":"","402":""},"rights_management":{"401":"","402":""},"system_requirements":{"401":"","402":""},"defaultValues":{"172":"18"}} ); 6905 const swatchOptionsComponent = initSwatchOptions({"172":{"18":{"type":"0","value":"Buch","label":"Buch"},"28":{"type":"0","value":"PDF","label":"PDF"},"additional_data":"{\"swatch_input_type\":\"text\",\"update_product_preview_image\":\"1\",\"use_product_image_for_swatch\":0}"}}); 6906 6907 return Object.assign( 6908 configurableOptionsComponent, 6909 swatchOptionsComponent, 6910 { 6911 mediaCallback: "https\u003A\u002F\u002Fwww.govi.de\u002Fswatches\u002Fajax\u002Fmedia\u002F", 6912 changeOption(optionId, value, skipUpdateGallery) { 6913 if (value === '') { 6914 return; this.selectedValues = this.removeAttrFromSelection(this.selectedValues, optionId) 6915 } else { 6916 this.selectedValues[optionId] = value; 6917 } 6918 this.findSimpleIndex(); 6919 this.findAllowedAttributeOptions(); 6920 this.updatePrices(); 6921 !skipUpdateGallery && this.updateGallery(); 6922 6923 const candidates = this.findProductIdsForPartialSelection(this.selectedValues); 6924 6925 window.dispatchEvent(new CustomEvent('listing-configurable-selection-changed', { 6926 detail: { 6927 productId: this.productId, 6928 optionId, 6929 value, 6930 productIndex: this.productIndex, 6931 selectedValues: this.selectedValues, 6932 candidates: candidates, 6933 skuCandidates: Object.values(candidates).map(id =>
6933 this.optionConfig.sku?.[id] ?? null).filter(Boolean), 6934 } 6935 })); 6936 }, 6937 updateGallery() { 6938 if (!this.productIndex) { 6939 return; 6940 } 6941 6942 fetch(`${this.mediaCallback}?product_id=${this.productIndex}&isAjax=true`, { 6943 method: 'GET', 6944 headers: { 6945 'Content-Type': 'application/json', 6946 'X-Requested-With': 'XMLHttpRequest' 6947 } 6948 } 6949 ).then(response => { 6950 return response.json() 6951 } 6952 ).then(data => { 6953 if (data.errors) { 6954 // non critical failure only console logged 6955 console.warn(data.errors); 6956 } else { 6957 const image = data && data.medium; 6958 6959 image && window.dispatchEvent( 6960 new CustomEvent( 6961 "update-gallery-403", 6962 {detail: image} 6963 ) 6964 ); 6965 } 6966 }).catch(error => { 6967 console.warn(error) 6968 }); 6969 }, 6970 preselectQuerystringItems() { 6971 // pre-select option like ?size=167 6972 const urlQueryParams = new URLSearchParams(window.location.search.replace('?', '')); 6973 Object.values(this.optionConfig.attributes).map(attribute => { 6974 // Don't update images on load, since PLPs already set the main image to the selected options 6975 const skipUpdateGallery = true; 6976 urlQueryParams.get(attribute.code) && 6977 this.changeOption(attribute.id, urlQueryParams.get(attribute.code), skipUpdateGallery); 6978 }); 6979 }, 6980 preselectItemsBasedOnLocation(getLocationValue) { 6981 Object.values(this.optionConfig.attributes).map(attribute => { 6982 if(getLocationValue(attribute)){ 6983 this.changeOption(attribute.id, getLocationValue(attribute)) 6984 } 6985 }); 6986 }, 6987 focusOption(productId,selectedOptionId){ 6988 let time_403 = setInterval( 6989 function(){ 6990 if(document.getElementById('attribute-option-' + productId + '-' + selectedOptionId) !== null){ 6991 document.getElementById('attribute-option-' + productId + '-' + selectedOptionId).click(); 6992 document.getElementById('attribute-option-' + productId + '-' + selectedOptionId).focus(); 6993 clearInterval(time_403); 6994 } 6995 }, 50 6996 ); 6997 }, 6998 onGetCartData(data) { 6999 this.preselectCartItems(data); 7000 this.preselectQuerystringItems(); 7001 this.preselectLocationHashItems(); 7002 this.focusOption(403, 18); 7003 }, 7004 updatePrices() { 7005 const value = this.productIndex ? 7006 this.optionConfig.optionPrices[this.productIndex] : 7007 this.optionConfig.prices; 7008 7009 let hidePriceLabel = this.productIndex ? true : false;
7010 7011 window.dispatchEvent( 7012 new CustomEvent( 7013 "update-prices-" + this.productId, 7014 { 7015 detail: Object.assign( 7016 value, 7017 { 7018 isMinimalPrice: this.calculateIsMinimalPrice(), 7019 hidePriceLabel: hidePriceLabel, 7020 isApproxPrice: this.optionConfig.optionPrices[this.productIndex]['isApproxPrice'], 7021 availabilityText: this.optionConfig.optionPrices[this.productIndex]['availabilityText'], 7022 priceDescription: this.optionConfig.optionPrices[this.productIndex]['priceDescription'] 7023 } 7024 ) 7025 } 7026 ) 7027 ); 7028 7029 }, 7030 mouseDown: false, 7031 startX: 0, 7032 maxScroll: 0, 7033 scrollLeft: null, 7034 slider: null, 7035 scrollEvents: { 7036 ['@mousedown'](e) { 7037 this.slider = e.target.closest('.snap'); 7038 if (!this.slider) { 7039 return; 7040 } 7041 this.maxScroll = this.slider.scrollWidth - this.slider.offsetWidth; 7042 this.startX = e.pageX - this.slider.offsetLeft; 7043 this.scrollLeft = this.slider.scrollLeft; 7044 this.mouseDown = true; 7045 }, 7046 ['@mouseout.self']() { 7047 this.mouseDown = false; 7048 }, 7049 ['@mouseup']() { 7050 this.mouseDown = false; 7051 }, 7052 ['@mousemove'](e) { 7053 e.preventDefault(); 7054 if (!this.mouseDown) { 7055 return; 7056 } 7057 const x = e.pageX - this.slider.offsetLeft; 7058 const scroll = x - this.startX; 7059 const scrollLeft = this.scrollLeft - scroll; 7060 7061 if (scrollLeft > this.maxScroll) { 7062 this.slider.scrollLeft = this.maxScroll; 7063 return 7064 } 7065 this.slider.scrollLeft = this.scrollLeft - scroll; 7066 }, 7067 ['@onselectstart']() { 7068 return false; 7069 } 7070 }, 7071 resizeEvent() { 7072 Array.from(this.$root.querySelectorAll('.snap')).forEach(sli
7072der => { 7073 slider.scrollLeft = 0; 7074 }) 7075 } 7076 } 7077 ); 7078 } 7079 7080 </script>
7080 7081 7082<div x-data="initConfigurableSwatchOptions_403()" 7083 x-defer="intersect" 7084 x-init="findAllowedAttributeOptions()" 7085 @private-content-loaded.window="onGetCartData($event.detail.data)" 7086 @resize.window="resizeEvent()" 7087 class="relative" 7088> 7089 <div> 7090 7091 <div class="swatch-attribute border-container 7092 medium" 7093 > 7094 <div class="w-full overflow-x-hidden swatch-attribute-options min-h-14 items-end"> 7095 <div class="flex flex-wrap gap-y-4 w-full overflow-auto snap items-center py-1" 7096 id="attribute-label-403-172" 7097 role="radiogroup" 7098 x-bind="scrollEvents" 7099 aria-label="Medium" 7100 > 7101 <template x-for="(item, index) in optionConfig.attributes[172].options" 7102 :key="item.id" 7103 > 7104 7105<div x-id="['attribute-option-403-'+item.id]"> 7106 <template x-if="optionIsEnabled(172, item.id) && optionIsActive(172, item.id)"> 7107 <label 7108 :for="$id('attribute-option-403-'+item.id)" 7109 class="swatch-option relative border-3 text-c7 border-c7 cursor-pointer select-none product-option-value-label " 7110 :class="{ 7111 'bg-white text-c5 border-c5 !border-3 hover:!bg-c8 hover:!text-white hover:!border-c8 hover:!border-3 font-bold': 7112 (selectedValues[172] === item.id), 7113 '!border-c5 bg-white !text-c5 hover:!bg-c8 hover:!text-white hover:!border-c8': 7114 (selectedValues[172] !== item.id), 7115 'w-6 h-6' : !isTextSwatch(172, item.id), 7116 'ring-2 ring-c8' : focusedLabel === item.id, 7117 'bg-white' : focusedLabel === item.id 7118 }" 7119 :style="getSwatchBackgroundStyle('172',item.id)" 7120 > 7121 <input 7122 :id="$id('attribute-option-403-'+item.id)" 7123 :value="item.id" 7124 name="super_attribute[172]" 7125 type="radio" 7126 class="inline-block absolute p-0 border-0 focus:border-0 focus:ring-0 product-option-value-input" 7127 style="z-index:-1" 7128 x-on:focus="focusLabel(item.id)" 7129 x-on:blur="blurLabel()" 7130 x-on:change="changeOption(172, $event.target.value)" 7131 x-on:click="clearOptionIfActive(172, item.id)" 7132 x-model="selectedValues[172]" 7133 :required="getAllowedAttributeOptions(172).filter( 7134 attributeOption => selectedValues[attributeOption] 7135 ).length === 0" 7136 :aria-label="getSwatchText(172, item.id)" 7137 aria-describedby="attribute-label-403-172" 7138 > 7139 <template x-if="isTextSwatch(172, item.id)"> 7140 <div 7141 x-html="getSwatchText(172, item.id)" 7142 class="whitespace-nowrap" 7143 aria-hidden="true" 7144 ></div> 7145 </template> 7146 </label> 7147 </template> 7148 7149 <template x-if="optionIsEnabled(172, item.id) && !optionIsActive(172, item.id)"> 7150 <div 7151 class="relative border-3 shadow-sm opacity-50 cursor-pointer select-none border-container-darker swatch-option bg-container-lighter" 7152 :class="{ 7153 'w-6 h-6' : !isTextSwatch(172, item.id), 7154 }" 7155 :style="getSwatchBackgroundStyle('172',item.id)" 7156 > 7157 <div x-html="getSwatchText(172, item.id)" 7158 class="whitespace-nowrap" 7159 :class="{ 'sr-only' : !isTextSwatch(172, item.id) }" 7160 ></div> 7161 <svg class="absolute inset-0 w-full h-full text-gray-500 bg-white bg-opacity-25"> 7162 <line x1="0" y1="100%" x2="100%" y2="0" class="stroke-current stroke-1"></line> 7163 </svg> 7164 </div> 7165 </template> 7166</div> 7167 </template> 7168 </div> 7169 </div> 7170 </div> 7171 </div> 7172 </div> 7173 </div> 7174 <div class="items-center justify-center text-center lg:text-left"> 7175 <p class="flex items-center align-middle available gap-x-2 stock" title="Verfügbarkeit">
7176 <span id="product-availability-status-403" 7177 class="w-3 h-3 rounded-full flex-shrink-0 7178 "> 7179 </span> 7180 <span id="product-availability-403"> 7181 </span> 7182 </p> 7183 </div> 7184 7185 </div> 7186
7186<script> 7187 function initPriceBox__6ac221629d50b() { 7188 return { 7189 updatePrice(priceData) { 7190 const regularPriceLabel = this.$root.querySelector('.normal-price .price-label'); 7191 const approxPriceLabel = this.$root.querySelector('.normal-price .approx-price'); 7192 const priceDescriptionLabel = this.$root.querySelector('.normal-price .price-description'); 7193 const regularPriceElement = this.$root.querySelector('.normal-price [data-price-type=finalPrice].price-wrapper .price'); 7194 const basePriceElement = this.$root.querySelector('.normal-price [data-price-type=basePrice].price-wrapper .price'); 7195 if (priceData.finalPrice.amount < priceData.oldPrice.amount) { 7196 regularPriceLabel.classList.add('hidden'); 7197 } else { 7198 regularPriceLabel.classList.remove('hidden'); 7199 } 7200 regularPriceElement && (regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount)); 7201 basePriceElement && (basePriceElement.innerText = hyva.formatPrice(priceData.basePrice.amount)); 7202 7203 const hidePriceLabel = priceData.hidePriceLabel; 7204 if (hidePriceLabel) { 7205 regularPriceLabel.classList.add('hidden'); 7206 } else { 7207 regularPriceLabel.classList.remove('hidden'); 7208 } 7209 7210 const isApproxPrice = priceData.isApproxPrice; 7211 if (!isApproxPrice) { 7212 approxPriceLabel.classList.add('hidden'); 7213 } else { 7214 approxPriceLabel.classList.remove('hidden'); 7215 } 7216 7217 document.getElementById('product-availability-' + 7218 403).innerHTML = priceData.availabilityText; 7219 7220 priceData.availabilityStatusColorRemove.forEach(function(cssClass, index) { 7221 document.getElementById('product-availability-status-' + 7222 403) 7223 .classList.remove(cssClass); 7224 }); 7225 7226 document.getElementById('product-availability-status-' + 7227 403) 7228 .classList.add(priceData.availabilityStatusColor); 7229 7230 priceDescriptionLabel.innerHTML = priceData.priceDescription; 7231 7232 regularPriceElement.innerText = hyva.formatPrice(priceData.finalPrice.amount); 7233 } 7234 } 7235 } 7236 7237 function initCartButtonData__6ac221629d50b() { 7238 return { 7239 canShowCartButton: true, 7240 updateCartButton(priceData) { 7241 this.canShowCartButton = priceData.showCartButton; 7242 } 7243 } 7244 } 7245 </script>
7245 7246 <div class="sm:flex items-end"> 7247 <div class="w-full sm:6/12 " x-data="initPriceBox__6ac221629d50b()" @update-prices-403.window="updatePrice($event.detail);"> 7248 <div class="price-box price-final_price" data-role="priceBox" data-product-id="403" data-price-box="product-id-403"><span class="normal-price"> 7249 7250<span 7251 x-data x-id="['product\u002Dprice\u002D403']" class="price-container price-final_price tax weee" 7252 > 7253 <span class="price-description"></span> 7254 <span class="price-label">Ab</span> 7255 <span class="approx-price">ca. </span> 7256 <span :id="$id('product\u002Dprice\u002D403')" data-price-amount="16.9" 7257 data-price-type="finalPrice" 7258 class="price-wrapper " 7259 ><span class="price">16,90 â¬</span></span> 7260 </span> 7261</span> 7262 7263 7264</div><div class="price-details"> 7265 <span class="tax-details text-s text-c5"> 7266 inkl. MwSt., ggf. zzgl. <a class="underline" href="https://www.govi.de/liefer-und-versandkosten">Versand</a> </span> 7267</div> </div> 7268 <div class="w-full sm:6/12 mt-2"> 7269 <div class="block text-right"> 7270 <button class="w-auto btn btn-primary justify-end lg:justify-center inline-block 7271 mr-1" 7272 aria-label="In den Warenkorb Arterielle Hypertonie und antihypertensive Therapie" 7273 title="In den Warenkorb" 7274 x-data="initCartButtonData__6ac221629d50b()" 7275 @update-prices-403.window="updateCartButton($event.detail);" 7276 :class="{ invisible: canShowCartButton !== true }"> 7277 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 7278 <path stroke-linecap="round" stroke-linejoin="round" d="M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z"/> 7279</svg> 7280 <span class="ml-2 inline hidden lg:inline"> 7281 In den Warenkorb </span> 7282 </button> 7283 <button x-data="initWishlist()" @click.prevent="addToWishlist(403)" 7284 aria-label="Zur Wunschliste hinzufügen" 7285 title="Zur Wunschliste hinzufügen" 7286 type="button" class="py-3 mt-2 btn-secondary inline-block"> 7287 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6 border-current inline" width="25" height="25" aria-hidden="true"> 7288 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01"/> 7289</svg> 7290 <span class="hidden lg:ml-2 lg:inline"> 7291 Zur Wunschliste hinzufügen </span> 7292 </button> 7293 </div> 7294 </div> 7295 </div> 7296 7297 </div> 7298 </div> 7299 </div> 7300 </form> 7301 </div> 7302 </div> 7303
7303<script> 7304 function initToolbar_6ac22162a7f82() { 7305 return { 7306 options: {"productListToolbarForm":{"mode":"product_list_mode","direction":"product_list_dir","order":"product_list_order","limit":"product_list_limit","modeDefault":"list","directionDefault":"asc","orderDefault":"name","limitDefault":10,"url":"https:\/\/www.govi.de\/apotheke\/pharmazeutische-beratung","formKey":"MHFk6olfWgubb4xR","post":false,"page":"p"}}.productListToolbarForm || {}, 7307 getUrlParams: function () { 7308 let decode = window.decodeURIComponent, 7309 urlPaths = this.options.url.split('?'), 7310 urlParams = urlPaths[1] ? urlPaths[1].split('&') : [], 7311 params = {}, 7312 parameters, i; 7313 7314 for (i = 0; i < urlParams.length; i++) { 7315 parameters = urlParams[i].split('='); 7316 params[decode(parameters[0])] = parameters[1] !== undefined ? 7317 decode(parameters[1].replace(/\+/g, '%20')) : 7318 ''; 7319 } 7320 7321 return params; 7322 }, 7323 getCurrentLimit: function () { 7324 return this.getUrlParams()[this.options.limit] || this.options.limitDefault; 7325 }, 7326 getCurrentPage: function () { 7327 return this.getUrlParams()[this.options.page] || 1; 7328 }, 7329 changeUrl(paramName, paramValue, defaultValue) { 7330 let urlPaths = this.options.url.split('?'), 7331 baseUrl = urlPaths[0], 7332 paramData = this.getUrlParams(), 7333 currentPage = this.getCurrentPage(), 7334 newPage; 7335 7336 /** 7337 * calculates the page on which the first item of the current page will 7338 * be with the new limit and sets that number as the new page 7339 */ 7340 if (currentPage > 1 && paramName === this.options.limit) { 7341 newPage = Math.floor(this.getCurrentLimit() * (currentPage - 1) / paramValue) + 1; 7342 7343 if (newPage > 1) { 7344 paramData[this.options.page] = newPage; 7345 } else { 7346 delete paramData[this.options.page]; 7347 } 7348 } 7349 7350 paramData[paramName] = paramValue; 7351 7352 if (this.options.post) { 7353 hyva.postForm({action: baseUrl, data: paramData}); 7354 } else { 7355 if (paramValue === defaultValue.toString()) { 7356 delete paramData[paramName]; 7357 } 7358 paramData = Object.keys(paramData).length === 0 7359 ? '' 7360 : '?' + (new URLSearchParams(paramData)); 7361 location.href = baseUrl + paramData 7362 } 7363 } 7364 } 7365 } 7366</script>
7366 7367 <div x-data="initToolbar_6ac22162a7f82()" 7368 class="toolbar toolbar-products w-full flex flex-col xl:flex-row"> 7369 7370 <div class="w-full xl:w-2/12 text-center xl:text-left mb-4"> 7371 <p class="toolbar-amount text-sm leading-5 text-gray-700 w-full" 7372 id="toolbar-amount-bottom"> 7373 Artikel <span class="toolbar-number">1</span>-<span class="toolbar-number">10</span> von <span class="toolbar-number">111</span> </p> 7374 </div> 7375 7376 <div class="w-full xl:w-5/12 text-center xl:text-left mb-4"> 7377 7378 7379 7380 <div class="flex justify-center"> 7381 <nav class="inline-flex items-center pages" aria-label="pagination"> 7382 <ol class="relative z-0 inline-flex shadow-sm items pages-items"> 7383 <li class="item pages-item-previous"> 7384 <a 7385 role="link" 7386 class="previous relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 rounded-l-md px-3 py-2 text-gray-400 7387 border-gray-200" 7388 aria-disabled="true" 7389 aria-label="Zurück" 7390 > 7391 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 7392 <path stroke-linecap="round" stroke-linejoin="round" d="M15 19l-7-7 7-7"/> 7393</svg> 7394 </a> 7395 </li> 7396 7397 7398 7399 <li class="item -ml-px"> 7400 <a 7401 href="https://www.govi.de/apotheke/pharmazeutische-beratung" 7402 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 z-10 px-4 py-2 text-c7 bg-white border-c7 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8 !font-bold" 7403 aria-current="page" 7404 > 7405 <span class="sr-only label"> 7406 Sie lesen gerade die Seite </span> 7407 1 </a> 7408 </li> 7409 <li class="item -ml-px"> 7410 <a 7411 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=2" 7412 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 7413 > 7414 <span class="sr-only label">Seite</span> 7415 <span>2</span> 7416 </a> 7417 </li> 7418 <li class="item -ml-px"> 7419 <a 7420 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=3" 7421 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 7422 >
7423 <span class="sr-only label">Seite</span> 7424 <span>3</span> 7425 </a> 7426 </li> 7427 <li class="item -ml-px"> 7428 <a 7429 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=4" 7430 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 7431 > 7432 <span class="sr-only label">Seite</span> 7433 <span>4</span> 7434 </a> 7435 </li> 7436 <li class="item -ml-px"> 7437 <a 7438 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=5" 7439 class="page relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 px-4 py-2 text-c5 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 7440 > 7441 <span class="sr-only label">Seite</span> 7442 <span>5</span> 7443 </a> 7444 </li> 7445 7446 7447 7448 <li class="item pages-item-next -ml-px"> 7449 <a 7450 href="https://www.govi.de/apotheke/pharmazeutische-beratung?p=2" 7451 class="action next relative inline-flex items-center text-sm font-medium leading-5 bg-white border border-gray-300 transition duration-150 ease-in-out hover:text-gray-400 focus:z-10 focus:outline-none focus:shadow-outline-blue active:bg-gray-100 active:text-gray-500 rounded-r-md px-3 py-2 text-gray-500 hover:bg-c8 hover:text-white hover:border-c8 focus:outline-none focus:border-2 focus:border-c8" 7452 aria-label="Weiter" 7453 > 7454 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" aria-hidden="true"> 7455 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"/> 7456</svg> 7457 </a> 7458 </li> 7459 </ol> 7460 </nav> 7461 </div> 7462 7463 7464 7465 7466 </div> 7467 7468 <div class="w-full xl:w-5/12 text-center xl:text-left mb-4 flex gap-2 justify-center xl:justify-end"> 7469 7470 <div class="hidden modes w-20 order-1 col-span-1 sm:col-span-2 md:col-span-1 lg:col-span-2"></div> 7471 7472 7473 <div class="field limiter w-auto"> 7474 <div class="control"> 7475 <label class="text-sm label"> 7476 <span aria-hidden="true">Zeige</span> 7477 7478 <select 7479 data-role="limiter" 7480 class="form-select limiter-options" 7481 @change="changeUrl( 7482 'product_list_limit', 7483 $event.currentTarget.options[$event.currentTarget.selectedIndex].value, 7484 options.limitDefault 7485 )" 7486 aria-label="Show items per page" 7487 > 7488 <option value="5" 7489 > 7490 5 </option> 7491 <option value="10" 7492 selected="selected" 7493 > 7494 10 </option> 7495 <option value="15" 7496 > 7497 15 </option> 7498 <option value="20" 7499 > 7500 20 </option> 7501 <option value="25" 7502 > 7503 25 </option> 7504 </select> 7505 </label> 7506 </div> 7507 </div> 7508 <div class="toolbar-sorter sorter w-auto relative"> 7509 <select data-role="sorter" class="form-select sorter-options mr-3" 7510 aria-label="Sortieren nach" @change="changeUrl( 7511 'product_list_order', 7512 $event.currentTarget.options[$event.currentTarget.selectedIndex].value, 7513 options.orderDefault 7514 )"> 7515 <option value="name" selected="selected" > 7516 Artikelname </option> 7517 <option value="price" > 7518 Preis </option> 7519 <option value="publishing_year" > 7520 Erscheinungsjahr </option> 7521 <option value="medium" > 7522 Medium </option> 7523 <option value="default_order" > 7524 Standard </option> 7525 </select> 7526 <a title="Absteigend sortieren" 7527 href="#" class="action sorter-action sort-asc absolute top-3 -right-4" 7528 @click.prevent="changeUrl('product_list_dir', 'desc', options.directionDefault)"> 7529 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" width="24" height="24" role="img"> 7530 <path stroke-linecap="round" stroke-linejoin="round" d="M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4"/> 7531<title>Absteigend&#x20;sortieren</title></svg> 7532 </a> 7533 </div> </div> 7534 7535 </div> 7536 </section> 7537</div><aside class="sidebar sidebar-additional"> 7538
7538<script> 7539 function initWishlistOnWishlistSidebar() { 7540 function wishlistSidebarFetchHandler(body, postUrl, isRemoveAction = true) { 7541 const messages = { 7542 "success": isRemoveAction 7543 ? "\u00251\u0020wurde\u0020von\u0020Ihrer\u0020Wunschliste\u0020entfernt." 7544 : "\u00251\u0020wurde\u0020zu\u0020Ihrer\u0020Wunschliste\u0020hinzugef\u00FCgt.", 7545 "warning": isRemoveAction 7546 ? "Der\u0020Artikel\u0020konnte\u0020nicht\u0020von\u0020Ihrer\u0020Wunschliste\u0020entfernt\u0020werden." 7547 : "Der\u0020Artikel\u0020konnte\u0020nicht\u0020zu\u0020Ihrer\u0020Wunschliste\u0020hinzugef\u00FCgt\u0020werden.", 7548 } 7549 7550 const postHeaders = { 7551 "headers": { 7552 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 7553 }, 7554 body: body, 7555 "method": "POST", 7556 "mode": "cors", 7557 "credentials": "include" 7558 }; 7559 7560 return fetch(postUrl, postHeaders).then(function (response) { 7561 if (response.redirected) { 7562 window.location.href = response.url; 7563 } else if (response.ok) { 7564 return response.json(); 7565 } else { 7566 const message = { type: "warning", text: messages.warning }; 7567 window.dispatchMessages && window.dispatchMessages([message], 5000); 7568 } 7569 }).then(function (response) { 7570 if (!response) return; 7571 const message = { 7572 type: (response.success) ? "success" : "error", 7573 text: (response.success) ? messages.success : response.error_message 7574 } 7575 window.dispatchMessages && window.dispatchMessages([message], 5000); 7576 window.dispatchEvent(new CustomEvent("reload-customer-section-data")); 7577 }).catch(function (error) { 7578 const message = { type: "error", text: error }; 7579 window.dispatchMessages && window.dispatchMessages([message], 5000); 7580 }); 7581 } 7582 7583 return { 7584 wishlistProducts: null, 7585 itemCount: 0, 7586 wishlistCountLabel: null, 7587 wishlistItems: {}, 7588 receiveWishlistData: function (data) { 7589 if (data['wishlist']) { 7590 this.wishlistProducts = data['wishlist']; 7591 this.wishlistCountLabel = '(' + this.wishlistProducts.counter + ')'; 7592 this.itemCount = this.wishlistProducts.items.length; 7593 this.wishlistItems = this.wishlistProducts.items; 7594 7595 } 7596 }, 7597 addToCart: function (json) { 7598 const obj = JSON.parse(json); 7599 const postUrl = obj.action; 7600 const body = "form_key=" + hyva.getFormKey() + "&item=" + obj.data.item + "&qty=" + obj.data.qty + "&uenc="
7600+ hyva.getUenc(); 7601 wishlistSidebarFetchHandler(body, postUrl, /* isRemoveAction */ false); 7602 }, 7603 removeFromWishlist: function(json) { 7604 const obj = JSON.parse(json); 7605 const postUrl = obj.action; 7606 const body = "form_key=" + hyva.getFormKey() + "&item=" + obj.data.item+"&uenc=" + hyva.getUenc(); 7607 wishlistSidebarFetchHandler(body, postUrl); 7608 } 7609 } 7610 } 7611 7612 </script>
7612 7613 7614 <div x-data="initWishlistOnWishlistSidebar()" 7615 @private-content-loaded.window="receiveWishlistData($event.detail.data)" 7616 class="wishlist-widget" 7617 > 7618 <template x-if="itemCount"> 7619 <div class="mt-8"> 7620 <h2 class="border-t border-container mb-6 pt-5" id="wishlist-sidebar"> 7621 <strong class="title text-primary font-semibold text-lg">Meine Wunschliste</strong> 7622 <span class="counter text-xs" x-html="wishlistCountLabel"></span> 7623 </h2> 7624 <ul class="my-4" aria-labelledby="wishlist-sidebar"> 7625 <template x-for="product in wishlistItems"># 7626 <li class="flex items-start mb-4"> 7627 <a 7628 :href="product.product_url" 7629 class="block mb-3 w-10 h-10 shrink-0 mr-4" 7630 tabindex="-1" 7631 aria-hidden="true" 7632 > 7633 <img 7634 :src="product.image.src" 7635 :alt="product.product_name" 7636 loading="lazy" 7637 > 7638 </a> 7639 <div class="product-item-details"> 7640 <strong class="mr-2 text-sm leading-6 font-normal"> 7641 <a :href="product.product_url" :title="product.product_name" x-html="product.product_name"></a> 7642 </strong> 7643 <div class="mr-2 text-sm leading-6 font-bold" x-html="product.product_price"></div> 7644 <template x-if="product.product_is_saleable_and_visible"> 7645 <div class="actions-primary my-2"> 7646 <template x-if="!product.product_has_required_options"> 7647 <button 7648 type="button" 7649 @click.prevent="addToCart(product.add_to_cart_params)" 7650 class="action tocart primary btn btn-primary text-sm" 7651 :aria-label="hyva.str('Add\u0020to\u0020Cart\u0020\u00251', product.product_name)" 7652 data-addto="cart" 7653 > 7654 In den Warenkorb </button> 7655 </template> 7656 </div> 7657 </template> 7658 </div> 7659 <button 7660 type="button" 7661 @click.prevent="removeFromWishlist(product.delete_item_params)" 7662 :aria-label="hyva.str('Remove\u0020product\u0020\u0022\u00251\u0022\u0020from\u0020My\u0020Wish\u0020List', product.product_name)" 7663 class=" 7664 p-1 inline-flex shrink-0 items-center 7665 justify-center text-gray-500 hover:text-primary ml-auto 7666 " 7667 > 7668 <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" class="h-6 w-6" width="25" height="25" aria-hidden="true"> 7669 <path stroke-linecap="round" stroke-linejoin="round" d="M6 18L18 6M6 6l12 12"/> 7670</svg> 7671 </button> 7672 </li> 7673 </template> 7674 </ul> 7675 <div class="flex flex-wrap items-center md:mt-5 space-x-4 text-sm"> 7676 <a href="https://www.govi.de/wishlist/" 7677 aria-label="Go to Wish List page" 7678 class="px-4 text-sm text-gray-500 hover:text-primary" 7679 > 7680 Zur Wunschliste </a> 7681 </div> 7682 </div> 7683 </template> 7684 </div> 7685</aside></div></main><footer class="page-footer"><div class="footer content"><style>#html-body [data-pb-style=OT8SPPK]{text-align:center}#html-body [data-pb-style=IWVKB2R]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="full-bleed" data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="main" data-pb-style="IWVKB2R"><div data-content-type="text" data-appearance="default" data-element="main"><p></p><div class="newsletter-container container mt-24"> 7686 <div class="md:grid md:grid-flow-col gap-10 flex justify-center "> 7687 <div class="hidden md:block"> 7688 <img class="object-cover object-center" src="https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/Amd_RapidMail/images/Papierflieger.svg" alt="Papierflieger" width="300" loading="lazy" aria-hidden="true"> 7689 </div> 7690 <div> 7691 <div class="mb-6"> 7692 <h4 class="text-c8"> 7693 Bleiben Sie informiert! </h4> 7694 <p class="mt-4"> 7695 Hier können Sie sich für unseren monatlichen Govi-Newsletter anmelden! </p> 7696 </div> 7697 <div class=""> 7698 <form method="post" action="https://t05903bf1.emailsys1a.net/22/9399/f603c8f93f/subscribe/form.html?_g=1731663807"> 7699 <div class="grid lg:grid-cols-2 gap-4"> 7700 <div> 7701 <label for="email" class="sr-only">Ihr E-Mail-Adresse</label> 7702 <input type="text" name="email" id="email" placeholder="Ihre E-Mail-Adresse" value="" required class="form-input w-full"> 7703 </div> 7704 <div> 7705 <button type="submit" class="btn-secondary text-c8 font-normal w-full lg:w-auto"> 7706 Kostenlos anmelden <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" width="20" height="20" role="img"> 7707 <path stroke-linecap="round" stroke-linejoin="round" d="M9 5l7 7-7 7"></path> 7708<title>chevron-right</title></svg> 7709 </button> 7710 </div> 7711 </div> 7712 </form> 7713 </div> 7714 </div> 7715 </div> 7716</div> 7717</div></div><div data-content-type="block" data-appearance="default" data-element="main" data-pb-style="OT8SPPK"><div class="widget block block-static-block"> 7718 <style>#html-body [data-pb-style=WJPAYFM]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="WJPAYFM"><div data-content-type="text" data-appearance="default" data-element="main"><p id="PD69GY6">→ Ausführliche Informationen zur Speicherung und Verarbeitung der Daten und zu Ihren Widerrufsmöglichkeiten erhalten Sie in unserer 7719<span class="widget block-cms-link"> 7720 <a class="underline font-medium" href="https://www.govi.de/datenschutz" title="Datenschutzerklärung">Datenschutzerklä
7720rung</a> 7721</span> 7722.</p></div></div></div></div> 7723</div><div class="container py-4 mt-8 mx-auto grid xl:grid-cols-3 xl:gap-6 additional-info"> 7724 <div> 7725 <style>#html-body [data-pb-style=HS6C5FQ],#html-body [data-pb-style=UDKC0G5]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=UDKC0G5]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=HS6C5FQ]{align-self:stretch}#html-body [data-pb-style=VHWB1DU]{display:flex;width:100%}#html-body [data-pb-style=EFRIX7V],#html-body [data-pb-style=VAYMW6O]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:16.6667%;align-self:stretch}#html-body [data-pb-style=EFRIX7V]{width:83.3333%}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="UDKC0G5"><h4 data-content-type="heading" data-appearance="default" data-element="main">Wir sind gerne persönlich für Sie da</h4><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="6" data-element="main" data-pb-style="HS6C5FQ"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="VHWB1DU"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="VAYMW6O"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12" width="12" height="12" role="img"> 7726 <path stroke-linecap="round" stroke-linejoin="round" d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"></path> 7727<title>heroicons/outline/phone</title></svg> 7728</div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="EFRIX7V"><div data-content-type="text" data-appearance="default" data-element="main"><p><strong>Telefon 06196 928-250</strong></p> 7729<p>Montag - Donnerstag <br>von 8:00 - 17:00 Uhr</p> 7730<p>Freitag <br>von 8:00 - 16:00 Uhr</p> 7731<p>E-Mail <strong><a tabindex="0" href="mailto:[email protected]">[email protected]</a></strong></p></div></div></div></div></div></div> </div> 7732 <div > 7733 <style>#html-body [data-pb-style=BU1W7H5],#html-body [data-pb-style=UIPSV1V]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=UIPSV1V]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=BU1W7H5]{align-self:stretch}#html-body [data-pb-style=EIGF2L0]{display:flex;width:100%}#html-body [data-pb-style=M7668I9],#html-body [data-pb-style=XSB5JHK]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:16.6667%;align-self:stretch}#html-body [data-pb-style=XSB5JHK]{width:83.3333%}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="UIPSV1V"><h4 data-content-type="heading" data-appearance="default" data-element="main">Ihre Vorteile</h4><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="6" data-element="main" data-pb-style="BU1W7H5"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="EIGF2L0"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="M7668I9"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12" width="12" height="12" role="img"> 7734 <path stroke-linecap="round" stroke-linejoin="round" d="M14.828 14.828a4 4 0 01-5.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 7735<title>heroicons/outline/emoji-happy</title></svg> 7736</div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="XSB5JHK"><div data-content-type="text" data-appearance="default" data-element="main"><p>Onlineshop mit mehr als 300.000 Büchern, Hörbüchern, Landkarten, CD-ROM u. v. m.</p> 7737<p>Portofreie Lieferung innerhalb Deutschlands</p> 7738<p>Bezahlung per Rechnung, PayPal oder Kreditkarte</p> 7739<p>Kompetente Beratung rund um pharmazeutische und medizinische Fachliteratur und Software</p> 7740<p>Mobile Messebuchhandlung</p></div></div></div></div></div></div> </div> 7741 <div> 7742 <style>#html-body [data-pb-style=CIMXTFF],#html-body [data-pb-style=E13FC73]{background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=E13FC73]{justify-content:flex-start;display:flex;flex-direction:column}#html-body [data-pb-style=CIMXTFF]{align-self:stretch}#html-body [data-pb-style=D1H39K2]{display:flex;width:100%}#html-body [data-pb-style=B2C4EQY],#html-body [data-pb-style=HX99VIO]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll;width:16.6667%;align-self:stretch}#html-body [data-pb-style=HX99VIO]{width:83.3333%}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="E13FC73"><h4 data-content-type="heading" data-appearance="default" data-element="main">Immer gut informiert</h4><div class="pagebuilder-column-group" data-background-images="{}" data-content-type="column-group" data-appearance="default" data-grid-size="6" data-element="main" data-pb-style="CIMXTFF"><div class="pagebuilder-column-line" data-content-type="column-line" data-element="main" data-pb-style="D1H39K2"><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="B2C4EQY"><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><svg xmlns="http://www.w3.org/2000/svg" fill="none" viewbox="0 0 24 24" stroke-width="2" stroke="currentColor" class="w-12 h-12" width="12" height="12" role="img"> 7743 <path stroke-linecap="round" stroke-linejoin="round" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z"></path> 7744<title>heroicons/outline/information-circle</title></svg> 7745</div></div><div class="pagebuilder-column" data-content-type="column" data-appearance="full-height" data-background-images="{}" data-element="main" data-pb-style="HX99VIO"><div data-content-type="text" data-appearance="default" data-element="main"><p><a tabindex="0" href="https://www.govi.de/literatur-check" target="_blank" rel="noopener">Medien für die Apotheke</a><br>Welche Pflicht- und Fachliteratur brauchen Sie in der Apotheke?<br>Wir bieten Ihnen den 24-Stunden-Literatur-Check für Ihre Apotheken-Bibliothek.</p> 7746<p><a tabindex="0" href="https://www.govi.de/newsletter-prospekte" target="_blank" rel="noopener">Pharmazie Highlights</a><br>Halten Sie sich mit dem Govi-Newsletter und unseren Medien-Prospekten auf dem Laufenden!</p></div></div></div></div></div></div> </div> 7747</div>
7748<script> 7749 addEventListener('DOMContentLoaded', () => { 7750 for (const [selector, label] of Object.entries({"aside.sidebar-main":"Sidebar Main","aside.sidebar-additional":"Sidebar Additional"})) { 7751 const target = document.querySelector(selector); 7752 target && target.setAttribute('aria-label', label); 7753 } 7754 }, {once: true}) 7755</script>
7755 7756<div class="text-gray-700 body-font bg-container-darker border-t border-container-darker shadow pb-0"> 7757 <div class="container py-8 pb-0 mx-auto"> 7758 <div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-2 xl:grid-cols-4"> 7759 <div class="mt-4"> 7760 <style>#html-body [data-pb-style=OJ5NPK4]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=F4F4K6S]{display:inline-block}#html-body [data-pb-style=WP8ROM5]{text-align:left}#html-body [data-pb-style=CMRGP9A]{display:inline-block}#html-body [data-pb-style=DIC42WE]{text-align:left}#html-body [data-pb-style=SB8FMLL]{display:inline-block}#html-body [data-pb-style=LLTXL87]{text-align:left}#html-body [data-pb-style=B2HX9MN]{display:inline-block}#html-body [data-pb-style=KSVHJYH]{text-align:left}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="OJ5NPK4"><h4 data-content-type="heading" data-appearance="default" data-element="main">Programm</h4><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="F4F4K6S"><a class="pagebuilder-button-link" href="https://www.govi.de/apotheke" target="" data-link-type="category" data-element="link" data-pb-style="WP8ROM5"><span data-element="link_text">Apotheke</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="CMRGP9A"><a class="pagebuilder-button-link" href="https://www.govi.de/pharmazie-medizin" target="" data-link-type="category" data-element="link" data-pb-style="DIC42WE"><span data-element="link_text">Pharmazie & Medizin</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="SB8FMLL"><a class="pagebuilder-button-link" href="https://www.govi.de/digitale-losungen" target="" data-link-type="category" data-element="link" data-pb-style="LLTXL87"><span data-element="link_text">Digitale Lösungen</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="B2HX9MN"><a class="pagebuilder-button-link" href="https://www.govi.de/sachbuch-literatur" target="" data-link-type="category" data-element="link" data-pb-style="KSVHJYH"><span data-element="link_text">Sachbuch & Literatur</span></a></div></div></div></div> </div> 7761 <div class="mt-4"> 7762 <style>#html-body [data-pb-style=WOEA9AC]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=TIIJQCL]{display:inline-block}#html-body [data-pb-style=GQW21UV]{text-align:left}#html-body [data-pb-style=W6F0FAV]{display:inline-block}#html-body [data-pb-style=PSQEQ7U]{text-align:left}#html-body [data-pb-style=K0Q105E]{display:inline-block}#html-body [data-pb-style=OYGLX1E]{text-align:left}#html-body [data-pb-style=KUS6LBD]{display:inline-block}#html-body [data-pb-style=E4RQ2SU]{text-align:left}#html-body [data-pb-style=XC2LQE3]{display:inline-block}#html-body [data-pb-style=KSNM5C1]{text-align:left}#html-body [data-pb-style=X8LAXHQ]{display:inline-block}#html-body [data-pb-style=U06I570]{text-align:left}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="WOEA9AC"><h4 data-content-type="heading" data-appearance="default" data-element="main">govi.de</h4><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="TIIJQCL"><a class="pagebuilder-button-link" href="https://www.govi.de/ueber-uns" target="" data-link-type="page" data-element="link" data-pb-style="GQW21UV"><span data-element="link_text">Ãber uns</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="W6F0FAV"><a class="pagebuilder-button-link" href="https://www.govi.de/presse" target="" data-link-type="page" data-element="link" data-pb-style="PSQEQ7U"><span data-element="link_text">Presse</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="K0Q105E"><a class="pagebuilder-button-link" href="https://www.govi.de/newsletter-prospekte" target="" data-link-type="page" data-element="link" data-pb-style="OYGLX1E"><span data-element="link_text">Newsletter & Prospekte</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="KUS6LBD"><a class="pagebuilder-button-link" href="https://www.govi.de/kontakt" target="" data-link-type="page" data-element="link" data-pb-style="E4RQ2SU"><span data-element="link_text">Kontakt</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="XC2LQE3"><a class="pagebuilder-button-link" href="https://avoxa.de/barrierefreiheit/" target="_blank" data-link-type="default" data-element="link" data-pb-style="KSNM5C1"><span data-element="link_text">Barrierefreiheit</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="X8LAXHQ"><a class="pagebuilder-button-link" href="https://www.govi.de/impressum" target="" data-link-type="page" data-element="link" data-pb-style="U06I570"><span data-element="link_text">Impressum</span></a></div></div></div></div> </div> 7763 <div class="mt-4"> 7764 <style>#html-body [data-pb-style=W4V6L8E]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}#html-body [data-pb-style=K1AXA0P]{display:inline-block}#html-body [data-pb-style=ECGLPHW]{text-align:left}
7764#html-body [data-pb-style=RKREHA2]{display:inline-block}#html-body [data-pb-style=K57WP9S]{text-align:left}#html-body [data-pb-style=OQYVAEL]{display:inline-block}#html-body [data-pb-style=WN00MJ0]{text-align:left}#html-body [data-pb-style=N8MNGY5]{display:inline-block}#html-body [data-pb-style=HLTGG84]{text-align:left}#html-body [data-pb-style=M8K8U60]{display:inline-block}#html-body [data-pb-style=GOW2LFK]{text-align:left}#html-body [data-pb-style=XYJUS76]{display:inline-block}#html-body [data-pb-style=IBBJFN5]{text-align:left}#html-body [data-pb-style=GNAWNWT]{display:inline-block}#html-body [data-pb-style=MSIF8Y3]{text-align:left}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="W4V6L8E"><h4 data-content-type="heading" data-appearance="default" data-element="main">Infos zur Bestellung</h4><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="K1AXA0P"><a class="pagebuilder-button-link" href="https://www.govi.de/liefer-und-versandkosten" target="" data-link-type="page" data-element="link" data-pb-style="ECGLPHW"><span data-element="link_text">Liefer- und Versandkosten</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="RKREHA2"><a class="pagebuilder-button-link" href="https://www.govi.de/agb" target="" data-link-type="page" data-element="link" data-pb-style="K57WP9S"><span data-element="link_text">AGB</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="OQYVAEL"><a class="pagebuilder-button-link" href="https://www.govi.de/datenschutz" target="" data-link-type="page" data-element="link" data-pb-style="WN00MJ0"><span data-element="link_text">Datenschutz</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="N8MNGY5"><a class="pagebuilder-button-link" href="https://www.govi.de/widerrufsbelehrung" target="" data-link-type="page" data-element="link" data-pb-style="HLTGG84"><span data-element="link_text">Widerrufsbelehrung</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="M8K8U60"><a class="pagebuilder-button-link" href="https://www.govi.de/faq-e-books" target="" data-link-type="page" data-element="link" data-pb-style="GOW2LFK"><span data-element="link_text">FAQ E-Books</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="XYJUS76"><a class="pagebuilder-button-link" href="https://www.govi.de/abo-kuendigen" target="" data-link-type="page" data-element="link" data-pb-style="IBBJFN5"><span data-element="link_text">Abo kündigen</span></a></div></div><div data-content-type="buttons" data-appearance="inline" data-same-width="false" data-element="main"><div data-content-type="button-item" data-appearance="default" data-element="main" data-pb-style="GNAWNWT"><a class="pagebuilder-button-primary" href="/widerrufsbelehrung#widerruf-formular" target="" data-link-type="default" data-element="link" data-pb-style="MSIF8Y3"><span data-element="link_text">Vertrag widerrufen</span></a></div></div><div data-content-type="html" data-appearance="default" data-element="main" data-decoded="true"><br><div style="display: inline-block; margin-right: 1rem;">Sicher bezahlen mit:</div><br> 7765<svg xmlns="http://www.w3.org/2000/svg" style="display: inline-block;
7765" width="50" height="50" viewBox="0 0 24 24"><path d="M19.662 11.156l.375 1.716h-1.344l.645-1.661.215-.567.109.512zm4.338-5.156v12c0 1.104-.896 2-2 2h-20c-1.104 0-2-.896-2-2v-12c0-1.104.896-2 2-2h20c1.104 0 2 .896 2 2zm-17.146 8.971l2.549-5.929h-1.715l-1.585 4.051-.169-.823-.568-2.73c-.098-.377-.383-.489-.734-.502h-2.611l-.021.123c.635.154 1.203.376 1.701.651l1.44 5.16 1.713-.001zm4.823-5.934h-1.619l-1.012 5.941h1.619l1.012-5.941zm4.625 3.999c.006-.676-.425-1.19-1.359-1.614-.566-.275-.913-.458-.909-.736 0-.247.293-.511.927-.511.53-.008.913.107 1.212.228l.145.068.219-1.287c-.321-.121-.824-.25-1.451-.25-1.6 0-2.727.806-2.737 1.961-.009.854.805 1.33 1.419 1.614.63.291.842.477.839.737-.004.398-.503.58-.969.58-.648 0-.992-.09-1.524-.312l-.209-.095-.227 1.33c.378.166 1.078.31 1.804.317 1.702 0 2.807-.797 2.82-2.03zm5.698 1.944l-1.311-5.937h-1.251c-.388 0-.678.106-.848.493l-2.405 5.444h1.7l.341-.893 2.074.003.197.89h1.503z"/></svg> 7766<svg xmlns="http://www.w3.org/2000/svg" style="display: inline-block;" width="50" height="50" viewBox="0 0 24 24"><path d="M15.465 16.444c0 .193-.128.339-.319.339-.199 0-.321-.153-.321-.339 0-.186.122-.339.321-.339.19.001.319.147.319.339zm-6.814-.338c-.199 0-.321.153-.321.339 0 .186.122.339.321.339.19 0 .319-.146.319-.339 0-.193-.128-.339-.319-.339zm3.391-.011c-.164 0-.257.104-.281.257h.549c-.024-.164-.119-.257-.268-.257zm5.24.011c-.199 0-.321.153-.321.339 0 .186.122.339.321.339.19 0 .319-.146.319-.339 0-.193-.129-.339-.319-.339zm6.718-10.106v12c0 1.104-.896 2-2 2h-20c-1.104 0-2-.896-2-2v-12c0-1.104.896-2 2-2h20c1.104 0 2 .896 2 2zm-18.456 4.985c0 2.201 1.784 3.985 3.985 3.985.769 0 1.487-.219 2.096-.596-.967-.813-1.582-2.03-1.582-3.389s.616-2.576 1.582-3.389c-.609-.377-1.326-.596-2.096-.596-2.2 0-3.985 1.784-3.985 3.985zm2.346 5.324c0-.25-.159-.418-.416-.421-.135-.002-.274.04-.372.188-.073-.117-.188-.188-.35-.188-.113 0-.224.033-.31.157v-.131h-.23v1.058h.232v-.587c0-.184.102-.281.259-.281.153 0 .23.1.23.279v.589h.232v-.587c0-.184.106-.281.259-.281.157 0 .232.1.232.279v.589h.234v-.663zm1.297-.394h-.23v.128c-.073-.095-.184-.155-.334-.155-.297 0-.529.232-.529.556 0 .324.232.556.529.556.151 0 .261-.06.334-.155v.128h.23v-1.058zm1.164.74c0-.186-.139-.283-.37-.317l-.108-.016c-.1-.013-.179-.033-.179-.104 0-.078.075-.124.201-.124.135 0 .266.051.33.091l.1-.186c-.111-.073-.263-.111-.432-.111-.268 0-.44.128-.44.339 0 .173.128.279.365.312l.108.016c.126.018.186.051.186.111 0 .082-.084.128-.241.128-.159 0-.274-.051-.352-.111l-.108.179c.126.094.285.138.458.138.305 0 .482-.144.482-.345zm1.025.263l-.066-.197c-.069.04-.144.06-.204.06-.115 0-.153-.071-.153-.177v-.478h.376v-.21h-.376v-.321h-.232v.321h-.215v.21h.215v.483c0 .246.095.392.367.392.1-.001.215-.032.288-.083zm1.173-.474c-.002-.33-.206-.556-.503-.556-.31 0-.527.226-.527.556 0 .336.226.556.542.556.159 0 .305-.04.434-.148l-.113-.17c-.089.071-.201.111-.308.111-.148 0-.283-.069-.317-.259h.786l.006-.09zm.908-.526l-.164-.029c-.133 0-.219.062-.279.155v-.128h-.228v1.058h.23v-.594c0-.175.075-.272.226-.272l.144.027.071-.217zm.308.526c0-.204.135-.336.319-.339.1 0 .19.033.277.095l.111-.186c-.115-.091-.221-.126-.381-.126-.341 0-.564.235-.564.556s.222.556.563.556c.159 0 .266-.035.381-.126l-.111-.186c-.086.062-.177.095-.277.095-.183-.002-.318-.135-.318-.339zm1.916-.529h-.23v.128c-.073-.095-.184-.155-.334-.155-.297 0-.529.232-.529.556 0 .323.232.556.529.556.151 0 .261-.06.334-.155v.128h.23v-1.058zm.974.003l-.164-.029c-.133 0-.219.062-.279.155v-.128h-.228v1.058h.23v-.594c0-.175.075-.272.226-.272l.144.027.071-.217zm1.162-.428h-.23v.553c-.073-.095-.184-.155-.334-.155-.297 0-.529.232-.529.556 0 .323.232.556.529.556.151 0 .261-.06.334-.155v.128h.23v-1.483zm.639-4.505c0-2.201-1.785-3.985-3.985-3.985s-3.985 1.784-3.985 3.985c0 2.201 1.784 3.985 3.985 3.985s3.985-1.784 3.985-3.985z"/></svg> 7767<?xml version="1.0" encoding="utf-8"?> 7768<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> 7769<svg version="1.1" id="iconmonstr" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 7770 width="50px" height="50px" viewBox="0 0 24 24" style="enable-background:new 0 0 24 24; display: inline-block;" xml:space="preserve"> 7771<path id="payment-13_1_" d="M22,4H2C0.896,4,0,4.896,0,6v12c0,1.104,0.896,2,2,2h20c1.104,0,2-0.896,2-2V6C24,4.896,23.104,4,22,4z 7772 M10.708,15.11h-1.33c-0.122,0-0.219-0.103-0.212-0.224C9.19,14.503,9.412,13.245,10.18,8.3C10.206,8.127,10.353,8,10.526,8h2.448
7773 c1.31,0,2.277,0.769,2.01,2.147c-0.275,1.433-1.15,2.13-2.674,2.13l-0.753,0.001c-0.309,0.001-0.423,0.118-0.462,0.393L10.708,15.11 7774 z M15.777,11.796c-0.282,1.473-1.249,1.982-2.483,1.982h-0.191c-0.151,0-0.279,0.111-0.303,0.263l-0.268,1.697 7775 C12.509,15.889,12.381,16,12.23,16h-0.912c-0.13,0-0.229-0.116-0.209-0.244l0.462-2.96c0.002-0.011,0.01-0.019,0.021-0.019h0.718 7776 c1.745,0,2.836-0.873,3.158-2.523c0.271,0.272,0.366,0.626,0.366,1C15.833,11.432,15.812,11.615,15.777,11.796z"/> 7777</svg> 7778</div></div></div> </div> 7779 <div class="mt-4"> 7780 <style>#html-body [data-pb-style=GGR8L8T]{justify-content:flex-start;display:flex;flex-direction:column;background-position:left top;background-size:cover;background-repeat:no-repeat;background-attachment:scroll}</style><div data-content-type="row" data-appearance="contained" data-element="main"><div data-enable-parallax="0" data-parallax-speed="0.5" data-background-images="{}" data-background-type="image" data-video-loop="true" data-video-play-only-visible="true" data-video-lazy-load="true" data-video-fallback-src="" data-element="inner" data-pb-style="GGR8L8T"><h4 data-content-type="heading" data-appearance="default" data-element="main">Avoxa Mediengruppe</h4><div data-content-type="text" data-appearance="default" data-element="main"><p>Govi ist eine Marke der <br><a href="https://www.avoxa.de" target="_blank" rel="noopener">Avoxa - Mediengruppe </a><br><a href="https://www.avoxa.de" target="_blank" rel="noopener">Deutscher Apotheker GmbH</a></p></div></div></div> </div> 7781 </div> 7782 </div> 7783</div> 7784<div class="text-gray-700 body-font bg-white border-t border-container-darker"> 7785 <div class="container mx-auto"> 7786 </div> 7787</div> 7788<div class="text-gray-700 body-font bg-white border-t border-container-darker"> 7789 <div class="container py-4 mx-auto flex justify-between items-center"> 7790 <div class="text-sm text-gray-800 sm:mt-0 mt-4 px-3"> 7791 <span>© 2025 Avoxa - Mediengruppe Deutscher Apotheker GmbH</span> 7792 </div> 7793 <div class=""> 7794 <a 7795 class="flex items-center justify-center text-xl font-medium tracking-wide text-gray-800 7796 no-underline hover:no-underline font-title" 7797 href="https://avoxa.de" 7798 target="_blank" 7799 aria-label="Avoxa" 7800 > 7801 <img 7802 src="https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/images/Avoxa-Logo-RGB.svg" 7803 alt="Avoxa" 7804 class="w-[11rem]" 7805 /> 7806 </a> 7807 </div> 7808 </div> 7809</div> 7810</div></footer>
7811<script type="text/javascript">window.dataLayer = window.dataLayer || []; 7812 7813(function () { 7814 /** 7815 * @var {[Object]} 7816 */ 7817 const dataToPush = JSON.parse('\u005B\u007B\u0022ecommerce\u0022\u003Anull\u007D,\u007B\u0022event\u0022\u003A\u0022view_item_list\u0022,\u0022ecommerce\u0022\u003A\u007B\u0022items\u0022\u003A\u005B\u007B\u0022item_name\u0022\u003A\u0022Adh\u005Cu00e4renzf\u005Cu00f6rderung\u0022,\u0022item_id\u0022\u003A\u0022G000237\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A25.9,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A1\u007D,\u007B\u0022item_name\u0022\u003A\u0022Akute\u0020und\u0020chronische\u0020Herzinsuffizienz\u0022,\u0022item_id\u0022\u003A\u0022G001016\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A4.99,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A2\u007D,\u007B\u0022item_name\u0022\u003A\u0022Alkohol,\u0020Coffein,\u0020Nikotin\u0022,\u0022item_id\u0022\u003A\u0022G000303\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A35.9,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A3\u007D,\u007B\u0022item_name\u0022\u003A\u0022Allgemeine\u0020und\u0020spezielle\u0020Pharmakologie\u0020und\u0020Toxikologie\u0022,\u0022item_id\u0022\u003A\u0022G000600\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A99,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A4\u007D,\u007B\u0022item_name\u0022\u003A\u0022Allgemeinpharmazie\u0022,\u0022item_id\u0022\u003A\u0022G000049\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A108,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A5\u007D,\u007B\u0022item_name\u0022\u003A\u0022aporello\u0020Heilpflanzen\u0022,\u0022item_id\u0022\u003A\u0022G000159\u002D1\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A27,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A6\u007D,\u007B\u0022item_name\u0022\u003A\u0022aporello\u0020Hom\u005Cu00f6opathie\u0022,\u0022item_id\u0022\u003A\u0022G000159\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A27,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A7\u007D,\u007B\u0022item_name\u0022\u003A\u0022Apotheke\u0020neu\u0020gelebt\u0022,\u0022item_id\u0022\u003A\u0022G001062\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A34,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A8\u007D,\u007B\u0022item_name\u0022\u003A\u0022Apothekenpraxis\u002DWorkbook\u0020mit\u0020Apothekenpraxis\u0020f\u005Cu00fcr\u0020PTA,\u0020Workbook\u0020Apothekenpraxis\u0022,\u0022item_id\u0022\u003A\u0022G000691\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A74.2,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A9\u007D,\u007B\u0022item_name\u0022\u003A\u0022Arterielle\u0020Hypertonie\u0020und\u0020antihypertensive\u0020Therapie\u0022,\u0022item_id\u0022\u003A\u0022G000267\u0022,\u0022currency\u0022\u003A\u0022EUR\u0022,\u0022item_category\u0022\u003A\u0022Apotheke\u0022,\u0022item_category2\u0022\u003A\u0022Pharmazeutische\u0020Beratung\u0022,\u0022price\u0022\u003A16.9,\u0022item_list_id\u0022\u003A\u002219\u0022,\u0022item_list_name\u0022\u003A\u0022Apotheke\u005C\u002FPharmazeutische\u0020Beratung\u0022,\u0022index\u0022\u003A10\u007D\u005D\u00
78177D\u007D\u005D'); 7818 7819 dataToPush.forEach((dataObject) => { 7820 window.dataLayer.push(dataObject); 7821 }); 7822})(); 7823</script>
7823 7824
7825<script> 7826 (() => { 7827 'use strict'; 7828 const clickTracking = { 7829 productEventData: {"category":{"362":{"event":"select_item","ecommerce":{"items":[{"item_name":"Adh\u00e4renzf\u00f6rderung","item_id":"G000237","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":25.9,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":1}]}},"1195":{"event":"select_item","ecommerce":{"items":[{"item_name":"Akute und chronische Herzinsuffizienz","item_id":"G001016","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":4.99,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":2}]}},"472":{"event":"select_item","ecommerce":{"items":[{"item_name":"Alkohol, Coffein, Nikotin","item_id":"G000303","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":35.9,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":3}]}},"811":{"event":"select_item","ecommerce":{"items":[{"item_name":"Allgemeine und spezielle Pharmakologie und Toxikologie","item_id":"G000600","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":99,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":4}]}},"166":{"event":"select_item","ecommerce":{"items":[{"item_name":"Allgemeinpharmazie","item_id":"G000049","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":108,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":5}]}},"333":{"event":"select_item","ecommerce":{"items":[{"item_name":"aporello Heilpflanzen","item_id":"G000159-1","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":27,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":6}]}},"258":{"event":"select_item","ecommerce":{"items":[{"item_name":"aporello Hom\u00f6opathie","item_id":"G000159","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":27,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":7}]}},"1925":{"event":"select_item","ecommerce":{"items":[{"item_name":"Apotheke neu gelebt","item_id":"G001062","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":34,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":8}]}},"887":{"event":"select_item","ecommerce":{"items":[{"item_name":"Apothekenpraxis-Workbook mit Apothekenpraxis f\u00fcr PTA, Workbook Apothekenpraxis","item_id":"G000691","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":74.2,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":9}]}},"403":{"event":"select_item","ecommerce":{"items":[{"item_name":"Arterielle Hypertonie und antihypertensive Therapie","item_id":"G000267","currency":"EUR","item_category":"Apotheke","item_category2":"Pharmazeutische Beratung","price":16.9,"item_list_id":"19","item_list_name":"Apotheke\/Pharmazeutische Beratung","index":10}]}}}}, 7830 typeSelectorMapping: [ 7831 { 7832 type: 'category', 7833 selector: ':is(.products-grid, .products-list)' 7834 }, 7835 { 7836 type: 'search_results', 7837 selector: ':is(.products-grid, .products-list)' 7838 }, 7839 { 7840 type: 'related', 7841 selector: '.catalog-product-view .product-slider :is(.js_slide, .swiper-slide)' 7842 }, 7843 { 7844 type: 'upsell', 7845 selector: '.catalog-product-view .product-slider :is(.js_slide, .swiper-slide)' 7846 }, 7847 { 7848 type: 'crosssell', 7849 selector: '.checkout-cart-index .product-slider :is(.js_slide, .swiper-slide)' 7850 }, 7851 { 7852 type: 'widget_product_list', 7853 selector: '.block.widget.block-products-list' 7854 }, 7855 { 7856 type: 'slider_product_list', 7857 selector: '.product-slider .js_slides :is(.js_slide, .swiper-slide)' 7858 } 7859 ], 7860 selectors: { 7861 productIdContainer: '[data-product-id="%productId%"]', 7862 containerToBind: 'a.product-item-photo, a.product-item-link', 7863 productItem: '.product-item', 7864 reviewForm: '.review-form' 7865 }, 7866 7867 /** 7868 * @private 7869 * @return {void} 7870 */ 7871 initClickTracking() { 7872 const reviewForm = document.querySelector(this.selectors.reviewForm); 7873 if (reviewForm) { 7874 reviewForm.addEventListener('click', () => { 7875 setTimeout(() => { 7876 window.dispatchEvent(new CustomEvent('reload-customer-section-data')); 7877 }, 1500); 7878 }); 7879 } 7880 7881 this.typeSelectorMapping.forEach((mapping) => { 7882 this.getProductIds(mapping.type).forEach((productId) => { 7883 const eventData = this.getEventData(mapping.type, productId); 7884 if (eventData) { 7885 this.setProductClickEvent.bind(this, mapping.selector, productId, eventData)(); 7886 } 7887 }); 7888 }); 7889 }, 7890 7891 /** 7892 * @param {string} listContainerSelector 7893 * @param {string} productId 7894 * @param {Object} eventData 7895 * @return {void} 7896 */ 7897 setProductClickEvent(listContainerSelector, productId, eventData) { 7898 const containerToBind = this.findProductContainer(listContainerSelector, productId); 7899 7900 if (!containerToBind.length) { 7901 return; 7902 } 7903
7904 containerToBind.forEach(elem => { 7905 elem.addEventListener('click', () => { 7906 this.triggerSelectItem(eventData); 7907 }) 7908 }) 7909 }, 7910 7911 /** 7912 * @param {Object} eventData 7913 * @return {void} 7914 */ 7915 triggerSelectItem(eventData) { 7916 window.dataLayer.push({ecommerce: null}); 7917 window.dataLayer.push(eventData); 7918 }, 7919 7920 /** 7921 * @param {string} listContainerSelector 7922 * @param {string} productId 7923 * @return {*[]} 7924 */ 7925 findProductContainer(listContainerSelector, productId) { 7926 let productIdContainerSelector, 7927 productIdContainer, 7928 itemElement, 7929 containerToBind; 7930 7931 productIdContainerSelector = listContainerSelector 7932 + ' ' + this.selectors.productIdContainer.replace('%productId%', productId); 7933 7934 productIdContainer = document.querySelector(productIdContainerSelector); 7935 7936 if (!productIdContainer) { 7937 return []; 7938 } 7939 7940 itemElement = productIdContainer.closest(this.selectors.productItem); 7941 containerToBind = itemElement?.querySelectorAll(this.selectors.containerToBind); 7942 7943 return containerToBind ? containerToBind : []; 7944 }, 7945 7946 /** 7947 * @return {string[]} 7948 */ 7949 getProductIds(type) { 7950 return Object.keys(this.productEventData?.[type] ?? {}); 7951 }, 7952 7953 /** 7954 * @param {string} type 7955 * @param {string} productId 7956 * @return {Object|null} 7957 */ 7958 getEventData(type, productId) { 7959 return this.productEventData?.[type]?.[productId] ?? null; 7960 } 7961 } 7962 7963 window.addEventListener('init-external-scripts', () => { 7964 clickTracking.initClickTracking(); 7965 }, { once: true, passive: true }); 7966 })() 7967</script>
7967 7968
7969<script> 7970 (_ => { 7971 'use strict'; 7972 7973 const SECTION_KEY = 'amga4_hyva_event_pool'; 7974 const MAGE_CACHE_SECTION_KEY = 'mage-cache-storage'; 7975 const storage = hyva.getBrowserStorage(); 7976 7977 window.addEventListener('private-content-loaded', ({ detail }) => { 7978 if (!detail?.data) { 7979 return; 7980 } 7981 7982 const data = detail?.data[SECTION_KEY]; 7983 if (!data) { 7984 return; 7985 } 7986 7987 let eventsPool = data?.events || []; 7988 if (eventsPool.length) { 7989 eventsPool.forEach(event => { 7990 window.dataLayer.push({ecommerce: null}); 7991 window.dataLayer.push(event); 7992 }); 7993 7994 setTimeout(() => { 7995 storage.setItem( 7996 MAGE_CACHE_SECTION_KEY, 7997 JSON.stringify({ 7998 ...detail.data, 7999 [SECTION_KEY]: {} 8000 }) 8001 ); 8002 }, 0); 8003 } 8004 }); 8005 })(); 8006</script>
vendor: 1 bytes, line 8006
8006
8007<script> 8008 (function () { 8009 const modals = []; 8010 const excludedFromFocusTrapping = new Set(); 8011 8012 function trapFocusInNextModalWithOverlay() { 8013 for (let idx = modals.length -1; idx >= 0; idx--) { 8014 const nextOnStack = modals[idx]; 8015 const nextDialogElement = nextOnStack.instance.$refs[nextOnStack.name]; 8016 if (! isOverlayDisabled(nextDialogElement)) { 8017 hyva.trapFocus(nextDialogElement); 8018 break; 8019 } 8020 } 8021 } 8022 8023 function focusables(dialogElement) { 8024 const selector = 'button, [href], input, textarea, select, details, [tabindex]:not([tabindex="-1"])'; 8025 return Array.from(dialogElement.querySelectorAll(selector)) 8026 .filter(el => !el.hasAttribute('disabled')); 8027 } 8028 8029 function firstVisible(elements) { 8030 const a = Array.from(elements); 8031 for (let i = 0; i < a.length; i++) { 8032 if (a[i].offsetWidth || a[i].offsetHeight || a[i].getClientRects().length) return a[i]; 8033 } 8034 return null; 8035 } 8036 8037 function isInViewport(element) { 8038 const rect = element && element.getBoundingClientRect(); 8039 return rect && 8040 rect.top >= 0 && 8041 rect.left >= 0 && 8042 rect.right <= window.innerWidth && 8043 rect.bottom <= window.innerHeight; 8044 } 8045 8046 function setFocusAfterTransition(dialogElement, duration) { 8047 const nested = Array.from(dialogElement.querySelectorAll('[role="dialog"]')); 8048 const candidates = Array.from(dialogElement.querySelectorAll('[x-focus-first]')); 8049 next: for (let candidate of candidates) { 8050 for (let child of nested) { 8051 if (child.contains(candidate)) continue next; 8052 } 8053 setTimeout(() => candidate.focus(), 50); 8054 break; 8055 } 8056 window.setTimeout(() => { 8057 const focusElement = firstVisible(dialogElement.querySelectorAll('[x-focus-first]')) || 8058 focusables(dialogElement)[0] || 8059 null; 8060 focusElement && isInViewport(focusElement) && focusElement.focus(); 8061 }, Math.max(1, duration)); 8062 } 8063 8064 function determineTrigger($refs, dialog, trigger) { 8065 if (typeof trigger === 'undefined' && typeof dialog === 'object' && dialog.target instanceof HTMLElement) { 8066 return dialog.target; 8067 } 8068 if (typeof dialog === 'string' && typeof trigger === 'object' && trigger.target instanceof HTMLElement) { 8069 return trigger.target; 8070 } 8071 if (typeof trigger === 'string') { 8072 try { 8073 return $refs[trigger] || document.querySelector(trigger) 8074 } catch (e) {} 8075 } 8076 if (trigger instanceof Element) { 8077 return trigger; 8078 } 8079 8080 return null; 8081 } 8082 8083 function isOverlayDisabled(dialog) { 8084 return dialog && dialog.hasAttribute('x-no-overlay') 8085 } 8086 8087 function areRemainingModalsWithoutOverlay(modals) 8088 { 8089 const overflowDisabled = modals.map(modal => modal.instance.$refs[modal.name]).filter(isOverlayDisabled); 8090 8091 return overflowDisabled.length === modals.length; 8092 } 8093 8094 window.hyva.modal = function(options = {}) { 8095 if (this.$el && this.$el.dataset && this.$el.dataset.options) { 8096 try { 8097 options = Object.assign(options, JSON.parse(this.$el.dataset.options || '{}')); 8098 } catch (e) { 8099 throw new Error('Cannot read the dialog options from the data-options attribute: not valid JSON'); 8100 } 8101 } 8102 8103 const config = Object.assign({ 8104 dialog: 'dialog', duration: 300, transitionEnter: 'transition ease-out duration-300', 8105 transitionEnterStart: 'opacity-0', 8106 transitionEnterEnd: 'opacity-100', 8107 transitionLeave: 'transition ease-in duration-300', 8108 transitionLeaveStart: 'opacity-100', 8109 transitionLeaveEnd: 'opacity-0', 8110 }, options); 8111 let lastHide = 0; 8112 8113 return { 8114 opened: {}, 8115 show(dialog, trigger) { 8116 const focusTargetAfterHide = determineTrigger(this.$refs, dialog, trigger); 8117 const name = typeof dialog === 'string' ? dialog : config.dialog; 8118 const dialogElement = this.$refs[name]; 8119 if (! dialogElement) { 8120 return; 8121 } 8122 const useOverlay = ! dialogElement.hasAttribute('x-no-overlay'); 8123 8124 dialogElement.scrollTop = 0; 8125 8126 if (this.opened[name]) { 8127 return; 8128 } 8129 8130 if (focusTargetAfterHide) { 8131 focusTargetAfterHide.setAttribute('aria-expanded', 'true'); 8132 } 8133 8134 this.opened[name] = true; 8135 useOverlay && this.$nextTick(() => hyva.trapFocus(dialogElement)); 8136 setFocusAfterTransition(dialogElement, config.duration); 8137 8138 const frame = {name, instance: this, focusTarget: focu
8138sTargetAfterHide, time: Date.now()}; 8139 8140 modals.push(frame); 8141 if (useOverlay) { 8142 document.body.classList.add('overflow-hidden'); 8143 } 8144 return new Promise(resolve => frame.resolve = resolve); 8145 }, 8146 cancel() { 8147 this.hide(false); 8148 }, 8149 ok() { 8150 this.hide(true); 8151 }, 8152 hide(value) { 8153 if (Date.now() - lastHide < config.duration) { 8154 return; 8155 } 8156 lastHide = Date.now(); 8157 8158 const modal = modals.pop() || {}; 8159 if (! modal.instance) { 8160 return; 8161 } 8162 8163 const name = modal.name; 8164 this.opened[name] = false; 8165 hyva.releaseFocus(modal.instance.$refs[modal.name]) 8166 trapFocusInNextModalWithOverlay(); 8167 8168 const nextFocusAfterHide = modal.focusTarget; 8169 nextFocusAfterHide && setTimeout(() => { 8170 nextFocusAfterHide.setAttribute('aria-expanded', 'false'); 8171 nextFocusAfterHide.focus() 8172 }, config.duration); 8173 8174 if (modals.length === 0 || areRemainingModalsWithoutOverlay(modals)) { 8175 document.body.classList.remove('overflow-hidden'); 8176 } 8177 8178 modal.resolve(value); 8179 }, 8180 overlay(dialog) { 8181 dialog = this.$el.dataset.dialogRefName || dialog; 8182 const name = typeof dialog === 'string' ? dialog : config.dialog; 8183 return { 8184 ['x-show']() { 8185 return this.opened[name] 8186 }, 8187 ['x-transition:enter']: config.transitionEnter, 8188 ['x-transition:enter-start']: config.transitionEnterStart, 8189 ['x-transition:enter-end']: config.transitionEnterEnd, 8190 ['x-transition:leave']: config.transitionLeave, 8191 ['x-transition:leave-start']: config.transitionLeaveStart, 8192 ['x-transition:leave-end']: config.transitionLeaveEnd, 8193 ['@hyva-modal-show.window'](event) { 8194 event.detail && event.detail.dialog === name && this.show(name, event.detail.focusAfterHide) 8195 } 8196 }; 8197 }, 8198 showDialogOnInit() { 8199 const parent = this.$el.closest('[data-dialog-ref-name]'); 8200 if (parent && parent.dataset.dialogRefName) { 8201 this.$dispatch('hyva-modal-show', {dialog: parent.dataset.dialogRefName}) 8202 } 8203 } 8204 }; 8205 } 8206 8207 window.hyva.modal.peek = () => modals.length > 0 && modals[modals.length -1] 8208 8209 window.hyva.modal.pop = function () { 8210 if (modals.length > 0) { 8211 const modal = modals[modals.length -1]; 8212 modal.instance.hide(); 8213 } 8214 } 8215 8216 window.hyva.modal.excludeSelectorsFromFocusTrap = function (selectors) { 8217 typeof selectors === 'string' || selectors instanceof String 8218 ? excludedFromFocusTrapping.add(selectors) 8219 : selectors.map(selector => excludedFromFocusTrapping.add(selector)); 8220 } 8221 8222 window.hyva.modal.eventListeners = { 8223 keydown: event => { 8224 if (event.key === 'Escape') { 8225 window.hyva.modal.pop(); 8226 } 8227 }, 8228 click: event => { 8229 if (modals.length > 0) { 8230 const modal = modals[modals.length -1]; 8231 const dialog = modal.instance.$refs[modal.name]; 8232 if (modal.time + 50 < Date.now() && // if last click processing is more than 50ms ago 8233 ! isOverlayDisabled(dialog) && // if dialog has overlay 8234 ! dialog.contains(event.target)) { // if click is outside of dialog 8235 modal.instance.hide(); 8236 } 8237 } 8238 } 8239 }; 8240 8241 document.addEventListener('keydown', window.hyva.modal.eventListeners.keydown); 8242 8243 document.addEventListener('click', window.hyva.modal.eventListeners.click); 8244 })(); 8245 window.addEventListener('alpine:init', () => { 8246 Alpine.data('hyvaModal', window.hyva.modal); 8247 }, {once: true}); 8248</script>
8248 8249<div x-data="tawkEmbed" x-init="init"> 8250
8250<script> 8251 function tawkEmbed() { 8252 return { 8253 visitor: null, 8254 embedUrl: 'https://embed.tawk.to/67248fce2480f5b4f5974973/1ibjd3fne', 8255 8256 init() { 8257 this.visitor = null; 8258 8259 if (this.visitor) { 8260 window.Tawk_API = window.Tawk_API || {}; 8261 window.Tawk_API.visitor = { 8262 name: this.visitor.name, 8263 email: this.visitor.email 8264 }; 8265 } 8266 8267 this.loadTawkScript(); 8268 }, 8269 8270 loadTawkScript() { 8271 let s1 = document.createElement('script'); 8272 let s0 = document.getElementsByTagName('script')[0]; 8273 8274 s1.async = true; 8275 s1.src = this.embedUrl; 8276 s1.charset = 'UTF-8'; 8277 s1.setAttribute('crossorigin', '*'); 8278 s0.parentNode.insertBefore(s1, s0); 8279 } 8280 } 8281 } 8282 8283 window.addEventListener('alpine:init', () => { 8284 Alpine.data('tawkEmbed', tawkEmbed); 8285 }, { 8286 once: true 8287 }); 8288 </script>
8288 8289 </div>
8290<script> 8291 let SnapSlider = class { 8292 constructor(el, { 8293 labelSepparator = 'von', 8294 autoPager, 8295 groupPager 8296 } = {}) { 8297 this.el = el; 8298 this.track = this.el.querySelector("[data-track]"); 8299 if (!this.track) { 8300 console.warn( 8301 "No Slider track defined, reverting back to CSS slider.\nPlease create a wrapper for your slides with the attribute data-track", 8302 this.el 8303 ); 8304 return; 8305 } 8306 this.initialLoad = true; 8307 this.slides = []; 8308 this.inViewObserver; 8309 this.mutationObserver; 8310 this.resizeObserver; 8311 this.pager = this.el.querySelector("[data-pager]"); 8312 this.navBtns = Array.from( 8313 this.el.querySelectorAll("[data-next], [data-prev]") 8314 ); 8315 this.slideLabelSepparator = this.el.dataset.slideLabelSepparator || labelSepparator; 8316 this.useAutoPager = autoPager || this.el.hasAttribute("data-auto-pager") || false; 8317 this.useGroupPager = groupPager || this.el.hasAttribute("data-group-pager") || false; 8318 this.sliderLabel = this.el.hasAttribute("aria-label") && this.el.getAttribute("aria-label").toLowerCase().trim().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, ""); 8319 this.sliderId = this.el.id || this.sliderLabel || "slider"; 8320 this.markerIdName = "data-target-id"; 8321 this.pagerClasses = this.el.dataset.pagerClass || "snap-pager"; 8322 this.markerClasses = this.el.dataset.markerClass || "snap-marker"; 8323 this.init(); 8324 } 8325 init() { 8326 this.setupSlides(); 8327 this.setupNav(); 8328 if (this.useAutoPager) { 8329 this.createPager(); 8330 } else { 8331 this.setupPager(); 8332 } 8333 this.setupObservers(); 8334 this.setupMutationObserver(); 8335 this.setupResizeObserver(); 8336 this.el.addEventListener("click", this.eventHandler.bind(this)); 8337 this.el.addEventListener("keydown", this.eventHandler.bind(this)); 8338 } 8339 destroy() { 8340 this.inViewObserver?.disconnect(); 8341 this.mutationObserver?.disconnect(); 8342 this.resizeObserver?.disconnect(); 8343 this.el.removeEventListener("click", this.eventHandler.bind(this)); 8344 this.el.removeEventListener("keydown", this.eventHandler.bind(this)); 8345 } 8346 roundUpIfGreaterThan(number, min = 8) { 8347 const decimalPart = number - Math.floor(number); 8348 return decimalPart >= min ? Math.ceil(number) : Math.floor(number); 8349 } 8350 getInViewItems() { 8351 const inViewSlides = this.track.querySelectorAll("[data-in-view]"); 8352 const firstInViewSlide = inViewSlides[0] || null; 8353 const lastInViewSlide = inViewSlides[inViewSlides.length - 1] || null; 8354 const isAtStart = firstInViewSlide === this.slides[0]; 8355 const isAtEnd = lastInViewSlide === this.slides[this.slides.length - 1]; 8356 return { 8357 inViewSlides, 8358 totalInViewSlides: inViewSlides.length, 8359 firstInViewSlide, 8360 lastInViewSlide, 8361 isAtStart, 8362 isAtEnd, 8363 hasNoOverflow: isAtStart && isAtEnd 8364 }; 8365 } 8366 groupPagerMarkers() { 8367 if (this.slides.length === 0 || !this.pager || !this.useGroupPager) return; 8368 const totalVisibleSlides = this.roundUpIfGreaterThan( 8369 this.track.offsetWidth / this.slides[0].offsetWidth 8370 ); 8371 const markers = Array.from(this.pager.querySelectorAll("a, button")); 8372 markers.forEach((marker, index) => { 8373 marker.style.display = index % totalVisibleSlides === 0 ? null : "none"; 8374 }); 8375 } 8376 handleInView(entries) { 8377 entries.forEach((entry) => { 8378 const marker = this.pager && (this.pager.querySelector(`[href="#${entry.target.id}"]`) || this.pager.querySelector( 8379 `[${this.markerIdName}="${entry.target.id}"]` 8380 )); 8381 entry.target.toggleAttribute("data-in-view", entry.isIntersecting); 8382 entry.target.toggleAttribute("inert", !entry.isIntersecting); 8383 marker?.setAttribute("aria-current", entry.isIntersecting); 8384 marker?.setAttribute("tabindex", entry.isIntersecting ? "0" : "-1"); 8385 }); 8386 const { 8387 isAtStart, 8388 isAtEnd, 8389 hasNoOverflow 8390 } = this.getInViewItems(); 8391 this.navBtns.forEach((btn) => { 8392 if (btn.hasAttribute("data-next")) { 8393 btn.style.visibility = hasNoOverflow ? "hidden" : null; 8394 isAtEnd ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled"); 8395 } 8396 if (btn.hasAttribute("data-prev")) { 8397 btn.style.visibility = hasNoOverflow ? "hidden" : null; 8398 isAtStart ? btn.setAttribute("disabled", "") : btn.removeAttribute("disabled"); 8399 } 8400 }); 8401 if (this.pager) { 8402 this.pager.style.visibility = hasNoOverflow ? "hidden" : null; 8403 } 8404 if (!this.initialLoad) { 8405 this.el.dispatchEvent( 8406 new CustomEvent("slideChange", { 8407 detail: this.getInViewItems() 8408 }) 8409 ); 8410 } else { 8411 this.initialLoad = false;
8412 } 8413 if (document.activeElement.parentElement.hasAttribute("data-pager")) { 8414 const activeItems = this.pager.querySelectorAll('[tabindex="0"]'); 8415 if (activeItems.length) { 8416 activeItems[0].focus({ preventScroll: true }); 8417 } 8418 } 8419 } 8420 getSlides() { 8421 if (!this.track) return []; 8422 return Array.from(this.track.children).filter( 8423 (child) => child.tagName.toLowerCase() !== "template" && child.tagName.toLowerCase() !== "style" && child.tagName.toLowerCase() !== "script" 8424 ); 8425 } 8426 refreshSlides() { 8427 this.initialLoad = true; 8428 this.slides = this.getSlides(); 8429 this.setupSlides(); 8430 if (this.useAutoPager) { 8431 this.createPager(); 8432 } else { 8433 this.setupPager(); 8434 } 8435 this.groupPagerMarkers(); 8436 this.setupObservers(); 8437 } 8438 setupSlides() { 8439 this.slides = this.getSlides(); 8440 this.slides.forEach((slide, index) => { 8441 const totalSlides = this.slides.length; 8442 const currentSlide = index + 1; 8443 const existingLabel = slide.getAttribute("aria-label") || ""; 8444 const isImage = slide.tagName.toLowerCase() === "img" || slide.tagName.toLowerCase() === "picture"; 8445 const slideLabelTag = isImage ? "alt" : "aria-label"; 8446 const hasAutoLabel = existingLabel.startsWith( 8447 `${currentSlide} ${this.slideLabelSepparator} ` 8448 ); 8449 if (!slide.hasAttribute("id")) { 8450 slide.setAttribute( 8451 "id", 8452 `${this.sliderId}-item-${currentSlide}` 8453 ); 8454 } 8455 if (!slide.hasAttribute(slideLabelTag) || slide.getAttribute(slideLabelTag) === "" || hasAutoLabel) { 8456 slide.setAttribute( 8457 slideLabelTag, 8458 `${currentSlide} ${this.slideLabelSepparator} ${totalSlides}` 8459 ); 8460 } 8461 if (slide.tagName.toLowerCase() === "div" && !slide.hasAttribute("role")) { 8462 slide.setAttribute("role", "group"); 8463 } 8464 if (this.pager && !isImage) { 8465 slide.setAttribute("role", "tabpanel"); 8466 } 8467 if (slide.getAttribute("role") === "group") { 8468 slide.setAttribute("aria-roledescription", "item"); 8469 } 8470 }); 8471 if (!this.el.hasAttribute("role") && this.el.tagName !== "SECTION") { 8472 this.el.setAttribute("role", "region"); 8473 } 8474 if (!this.el.hasAttribute("aria-roledescription")) { 8475 this.el.setAttribute("aria-roledescription", "carousel"); 8476 } 8477 this.track.setAttribute("tabindex", 0); 8478 this.track.setAttribute("aria-live", "polite"); 8479 } 8480 setupNav() { 8481 this.navBtns.forEach((btn) => { 8482 btn.setAttribute("disabled", ""); 8483 btn.removeAttribute("hidden"); 8484 btn.classList.remove("invisible"); 8485 btn.style.visibility = null; 8486 }); 8487 } 8488 createPager() { 8489 const newPager = document.createElement("nav"); 8490 newPager.setAttribute("data-pager", ""); 8491 newPager.setAttribute("role", "tablist"); 8492 newPager.classList.add(...this.pagerClasses.split(" ")); 8493 this.slides.forEach((slide, index) => { 8494 const marker = document.createElement("button"); 8495 const slideId = slide.id || `${this.sliderId}-item-${index + 1}`; 8496 marker.setAttribute(this.markerIdName, slideId); 8497 marker.classList.add(...this.markerClasses.split(" ")); 8498 this.setupPagerMarker(marker, index); 8499 newPager.appendChild(marker); 8500 if (slide.tagName.toLowerCase() !== "img" && slide.tagName.toLowerCase() !== "picture") { 8501 slide.removeAttribute("aria-roledescription"); 8502 slide.setAttribute("role", "tabpanel"); 8503 } 8504 }); 8505 if (this.pager) { 8506 this.pager.setAttribute("role", "tablist"); 8507 this.pager.replaceChildren(...newPager.children); 8508 } else { 8509 this.track.after(newPager); 8510 this.pager = this.el.querySelector("[data-pager]"); 8511 } 8512 } 8513 setupPager() { 8514 if (!this.pager) return; 8515 this.pager.setAttribute("role", "tablist"); 8516 const items = Array.from(this.pager.querySelectorAll("a, button"));
8517 items.forEach((marker, index) => this.setupPagerMarker(marker, index)); 8518 } 8519 setupPagerMarker(marker, index) { 8520 const markerId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName); 8521 const slideId = markerId || `${this.sliderId}-item-${index + 1}`; 8522 if (!markerId) { 8523 marker.setAttribute(this.markerIdName, slideId); 8524 } 8525 marker.setAttribute("role", "tab"); 8526 marker.setAttribute("aria-controls", slideId); 8527 marker.setAttribute("aria-posinset", index + 1); 8528 marker.setAttribute("aria-setsize", this.slides.length); 8529 marker.setAttribute("tabindex", "-1"); 8530 if (!marker.hasAttribute("aria-label")) { 8531 marker.setAttribute("aria-label", `Slide ${index + 1}`); 8532 } 8533 } 8534 setupObservers() { 8535 if (this.inViewObserver) { 8536 this.inViewObserver.disconnect(); 8537 } 8538 this.inViewObserver = new IntersectionObserver( 8539 this.handleInView.bind(this), { 8540 root: this.track, 8541 threshold: 0.8 8542 } 8543 ); 8544 this.slides.forEach((slide) => this.inViewObserver.observe(slide)); 8545 } 8546 setupMutationObserver() { 8547 this.mutationObserver = new MutationObserver( 8548 this.refreshSlides.bind(this) 8549 ); 8550 this.mutationObserver.observe(this.track, { 8551 childList: true, 8552 subtree: false 8553 }); 8554 } 8555 setupResizeObserver() { 8556 this.resizeObserver = new ResizeObserver( 8557 this.groupPagerMarkers.bind(this) 8558 ); 8559 this.resizeObserver.observe(this.el); 8560 } 8561 goToSlideDir(dir = "next") { 8562 const { 8563 firstInViewSlide, 8564 lastInViewSlide 8565 } = this.getInViewItems(); 8566 const isPrev = dir === "prev"; 8567 let targetSlide = isPrev ? firstInViewSlide?.previousElementSibling : lastInViewSlide?.nextElementSibling; 8568 if (!targetSlide) return; 8569 if (targetSlide.tagName.toLowerCase() === "template") { 8570 targetSlide = isPrev ? targetSlide?.previousElementSibling : targetSlide?.nextElementSibling; 8571 } 8572 targetSlide.scrollIntoView({ block: "nearest", inline: isPrev ? "end" : "start" }); 8573 } 8574 pagerToSlide(event) { 8575 if (!event.target.closest("[data-pager]")) return; 8576 const marker = event.target.closest("a, button"); 8577 if (!marker) return; 8578 event.preventDefault(); 8579 const slideId = marker.getAttribute("href")?.slice(1) || marker.getAttribute(this.markerIdName); 8580 const targetSlide = this.track.querySelector(`#${slideId}`); 8581 targetSlide?.scrollIntoView({ block: "nearest", inline: "start" }); 8582 } 8583 eventHandler(event) { 8584 const target = event.target.closest( 8585 "[data-next], [data-prev], [data-pager]" 8586 ); 8587 if (!target) return; 8588 if (event.type === "click") { 8589 if (target.hasAttribute("data-next")) { 8590 this.goToSlideDir("next"); 8591 } else if (target.hasAttribute("data-prev")) { 8592 this.goToSlideDir("prev"); 8593 } else if (target.closest("[data-pager]")) { 8594 this.pagerToSlide(event); 8595 } 8596 } 8597 if (event.type === "keydown" && target.closest("[data-pager]")) { 8598 if (event.key === "ArrowRight") { 8599 this.goToSlideDir("next"); 8600 } else if (event.key === "ArrowLeft") { 8601 this.goToSlideDir("prev"); 8602 } 8603 } 8604 } 8605 }; 8606 8607 (() => { 8608 function alpineSnapSlider(Alpine) { 8609 Alpine.directive("snap-slider", (el, { 8610 modifiers 8611 }, { 8612 cleanup 8613 }) => { 8614 const autoPager = modifiers.includes("auto-pager");
8615 const groupPager = modifiers.includes("group-pager"); 8616 const slider = new SnapSlider(el, { 8617 autoPager, 8618 groupPager 8619 }); 8620 cleanup(() => { 8621 slider.destroy(); 8622 }); 8623 }); 8624 } 8625 8626 document.addEventListener("alpine:init", () => { 8627 window.Alpine.plugin(alpineSnapSlider); 8628 }); 8629 })(); 8630 //# sourceURL=alpine-snap-slider.js 8631</script>
8631 8632
8633<script> 8634 (() => { 8635 // src/dialog.js 8636 function dialog_default(Alpine) { 8637 Alpine.directive("htmldialog", fylgjaAlpineDialog); 8638 function fylgjaAlpineDialog(el, { expression, modifiers }, { evaluateLater, cleanup }) { 8639 const evaluate = expression.length ? evaluateLater(expression) : () => {}; 8640 const canEvaluate = expression.length > 0; 8641 const lockPageScroll = modifiers.includes("noscroll"); 8642 const closeBy = el.getAttribute("closeby") || modifierValue(modifiers, "closeby", "closerequest"); 8643 el.style.display = null; 8644 el.style.length === 0 && el.removeAttribute("style"); 8645 if (el._x_isShown) { 8646 open(); 8647 } 8648 const closeBySupported = (() => { 8649 return "closedBy" in HTMLDialogElement.prototype; 8650 })(); 8651 function scrollLock(use = true) { 8652 document.body.style.overflow = use ? "hidden" : ""; 8653 } 8654 function dialogSubmit(event) { 8655 if (event.target.getAttribute("method") === "dialog" || event.submitter?.getAttribute("formmethod") === "dialog") { 8656 event.preventDefault(); 8657 evaluate(); 8658 } 8659 } 8660 function escapeDialog(event) { 8661 if (event.key !== "Escape") return; 8662 event.preventDefault(); 8663 if (closeBy === "none") return; 8664 evaluate(); 8665 } 8666 function handleCloseByEvent(event) { 8667 if (event.target !== el) return; 8668 const rect = el.getBoundingClientRect(); 8669 const isInDialog = rect.top <= event.clientY && event.clientY <= rect.top + rect.height && rect.left <= event.clientX && event.clientX <= rect.left + rect.width; 8670 if (!isInDialog) { 8671 if (closeBy === "any") { 8672 if (closeBySupported) { 8673 event.preventDefault(); 8674 } 8675 evaluate(); 8676 } 8677 } 8678 } 8679 function handleCloseEvent() { 8680 evaluate(); 8681 } 8682 function open() { 8683 if (el.hasAttribute("open")) return; 8684 el.showModal(); 8685 scrollLock(lockPageScroll); 8686 } 8687 function close() { 8688 if (!el.hasAttribute("open")) return; 8689 el.close(); 8690 scrollLock(false); 8691 } 8692 el._x_doShow = () => open(); 8693 el._x_doHide = () => close(); 8694 el.addEventListener("keydown", escapeDialog); 8695 el.addEventListener("submit", dialogSubmit); 8696 el.addEventListener("click", handleCloseByEvent); 8697 el.addEventListener("cancel", handleCloseEvent); 8698 cleanup(() => { 8699 el.removeEventListener("keydown", escapeDialog); 8700 el.removeEventListener("submit", dialogSubmit); 8701 el.removeEventListener("click", handleCloseByEvent); 8702 el.removeEventListener("cancel", handleCloseEvent); 8703 scrollLock(false); 8704 }); 8705 } 8706 } 8707 function modifierValue(modifiers, key, fallback) { 8708 if (modifiers.indexOf(key) === -1) return fallback; 8709 const rawValue = modifiers[modifiers.indexOf(key) + 1]; 8710 if (!rawValue) return fallback; 8711 if (key === "closeby") { 8712 const allowedValues = ["auto", "none", "closerequest", "any"]; 8713 const options = allowedValues.join(", "); 8714 if (!allowedValues.includes(rawValue)) { 8715 console.warn( 8716 `"${rawValue}" is not one of the allowed values for closeby: ${options}` 8717 ); 8718 return fallback; 8719 } 8720 } 8721 return rawValue; 8722 } 8723 8724 // src/cdn.js 8725 document.addEventListener("alpine:init", () => { 8726 window.Alpine.plugin(dialog_default); 8727 }); 8728 })(); 8729 //# sourceURL=alpine-htmldialog.js 8730</script>
8730 8731
8732<script> 8733 (() => { 8734 function src_default(Alpine) { 8735 Alpine.directive("intersect", Alpine.skipDuringClone((el, { value, expression, modifiers }, { evaluateLater, cleanup }) => { 8736 let evaluate = evaluateLater(expression); 8737 let options = { 8738 rootMargin: getRootMargin(modifiers), 8739 threshold: getThreshold(modifiers) 8740 }; 8741 let observer = new IntersectionObserver((entries) => { 8742 entries.forEach((entry) => { 8743 if (entry.isIntersecting === (value === "leave")) 8744 return; 8745 evaluate(); 8746 modifiers.includes("once") && observer.disconnect(); 8747 }); 8748 }, options); 8749 observer.observe(el); 8750 cleanup(() => { 8751 observer.disconnect(); 8752 }); 8753 })); 8754 } 8755 function getThreshold(modifiers) { 8756 if (modifiers.includes("full")) 8757 return 0.99; 8758 if (modifiers.includes("half")) 8759 return 0.5; 8760 if (!modifiers.includes("threshold")) 8761 return 0; 8762 let threshold = modifiers[modifiers.indexOf("threshold") + 1]; 8763 if (threshold === "100") 8764 return 1; 8765 if (threshold === "0") 8766 return 0; 8767 return Number(`.${threshold}`); 8768 } 8769 function getLengthValue(rawValue) { 8770 let match = rawValue.match(/^(-?[0-9]+)(px|%)?$/); 8771 return match ? match[1] + (match[2] || "px") : void 0; 8772 } 8773 function getRootMargin(modifiers) { 8774 const key = "margin"; 8775 const fallback = "0px 0px 0px 0px"; 8776 const index = modifiers.indexOf(key); 8777 if (index === -1) 8778 return fallback; 8779 let values = []; 8780 for (let i = 1; i < 5; i++) { 8781 values.push(getLengthValue(modifiers[index + i] || "")); 8782 } 8783 values = values.filter((v) => v !== void 0); 8784 return values.length ? values.join(" ").trim() : fallback; 8785 } 8786 8787 document.addEventListener("alpine:init", () => { 8788 window.Alpine.plugin(src_default); 8789 }); 8790 })(); 8791 //# sourceURL=alpine-intersect.js 8792</script>
8792 8793
8794<script> 8795 for (const [selector, deferUntil] of Object.entries({".product-slider section[x-data]:not([x-data] [x-data])":"intersect",".product-info [x-data]:not([x-data] [x-data])":"intersect","#filters-content [x-data]:not([x-data] [x-data])":"intersect","#review_form":"intersect","section[x-data^=initRecentlyViewedProductsComponent]":"intersect","div[x-data^=initBundleOptions]":"intersect","#product_addtocart_form [x-data]:not([x-data] [x-data])":"intersect","#notice-cookie-block":"idle"})) { 8796 document.querySelectorAll(selector).forEach(el => el.setAttribute('x-defer', `${deferUntil}`)); 8797 } 8798 //# sourceURL=alpine-defer-rules.js 8799</script>
vendor: 1 bytes, line 8799
8799
8800<script> 8801 (() => { 8802 const hasAlpine = new Promise(resolve => { 8803 window.addEventListener('alpine:initialized', resolve, {once: true, passive: true}); 8804 }); 8805 8806 const hasInteract = new Promise(resolve => { 8807 (events => { 8808 const onInteract = () => { 8809 resolve(); 8810 events.forEach(type => window.removeEventListener(type, onInteract)); 8811 } 8812 events.forEach(type => window.addEventListener(type, onInteract, {once: true, passive: true})) 8813 })(['touchstart', 'mouseover', 'wheel', 'scroll', 'keydown']) 8814 }); 8815 8816 const onIntersect = (el) => { 8817 return new Promise(resolve => { 8818 const observer = new IntersectionObserver(entries => { 8819 for (const entry of entries) { 8820 if (entry.isIntersecting) { 8821 observer.disconnect() 8822 resolve(); 8823 } 8824 } 8825 }, {}); 8826 observer.observe(el); 8827 }); 8828 } 8829 8830 function runComponent(el) { 8831 hasAlpine.then(() => { 8832 el.removeAttribute('x-ignore'); 8833 queueMicrotask(() => Alpine.initTree(el)); 8834 }); 8835 } 8836 8837 function initDeferredComponents() { 8838 document.querySelectorAll('[x-data][x-defer]').forEach(el => { 8839 el.setAttribute('x-ignore', ''); 8840 const deferUntil = (el.getAttribute('x-defer') || '').trim(); 8841 switch (deferUntil) { 8842 case 'interact': 8843 hasInteract.then(() => runComponent(el)); 8844 break; 8845 case 'intersect': 8846 onIntersect(el).then(() => runComponent(el)) 8847 break; 8848 case 'idle': 8849 window.requestIdleCallback 8850 ? window.requestIdleCallback(() => runComponent(el), {timeout: 4000}) 8851 : setTimeout(() => runComponent(el), 4000); 8852 break; 8853 case 'eager': 8854 runComponent(el); 8855 break; 8856 default: 8857 if (deferUntil.startsWith('event:') && deferUntil.length > 6) { 8858 window.addEventListener(deferUntil.substring(6), () => runComponent(el), {once: true, passive: true}); 8859 } 8860 } 8861 }); 8862 } 8863 8864 window.addEventListener('alpine:init', initDeferredComponents, {once: true, passive: true}); 8865 })(); 8866 //# sourceURL=alpine-defer.js 8867</script>
8867 8868 8869
8870<script type="module" 8871 src="https://www.govi.de/static/version1790667299/frontend/AMD/hyvaShop/de_DE/Hyva_Theme/js/alpine3.min.js" 8872 defer 8873 crossorigin 8874></script>
vendor: 1 bytes, line 8874
8874
8875<script> 8876 function dispatchMessages(messages, hideAfter) { 8877 const messagesEvent = new CustomEvent("messages-loaded", { 8878 detail: { 8879 messages: messages, 8880 hideAfter: hideAfter 8881 } 8882 }); 8883 window.dispatchEvent(messagesEvent); 8884 } 8885 8886 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 8887 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 8888 } 8889 8890 (function( hyva, undefined ) { 8891 8892 hyva.initFormKey = () => { 8893 const inputSelector = 'input[name="form_key"]', 8894 formKey = hyva.getFormKey(); 8895 8896 Array.from(document.querySelectorAll(inputSelector)).map(function (input) { 8897 input.value = formKey 8898 }); 8899 } 8900 8901 hyva.initMessages = () => { 8902 try { 8903 const messages = hyva.getCookie('mage-messages'); 8904 window.mageMessages = messages ? JSON.parse(decodeURIComponent(messages).replace(/\+/g, ' ')) : []; 8905 8906 dispatchMessages(window.mageMessages); 8907 8908 // empty `mage-messages` cookie 8909 const skipSetDomain = true; 8910 hyva.setCookie('mage-messages','', -1, skipSetDomain); 8911 8912 } catch (error) { 8913 console.warn('Error parsing Cookie Messages:', error); 8914 } 8915 } 8916 8917 window.addEventListener('DOMContentLoaded', hyva.initFormKey); 8918 hyva.alpineInitialized(hyva.initMessages) 8919 8920 }( window.hyva = window.hyva || {} )); 8921 //# sourceURL=hyva-cookies.js 8922</script>
vendor: 1 bytes, line 8922
8922
8923<script> 8924 { 8925 const private_content_key = 'mage-cache-storage'; 8926 const private_content_expire_key = 'mage-cache-timeout'; 8927 const private_content_version_key = 'private_content_version'; 8928 const section_data_ids_key = 'section_data_ids'; 8929 const mage_cache_session_id_key = 'mage-cache-sessid'; 8930 const last_visited_store_key = 'last_visited_store'; 8931 8932 const ttl = 3600; 8933 8934 if (typeof hyva === 'undefined' || (!hyva.getBrowserStorage || !hyva.getCookie || !hyva.setCookie)) { 8935 console.warn("Hyvä helpers are not loaded yet. Make sure they are included before this script"); 8936 } 8937 8938 function loadSectionData () { 8939 const browserStorage = hyva.getBrowserStorage(); 8940 if (!browserStorage) { 8941 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 8942 [{ 8943 type: "warning", 8944 text: "Bitte aktivieren Sie LocalStorage in Ihrem Browser." 8945 }] 8946 ); 8947 return; 8948 } 8949 try { 8950 let isInvalid = false; 8951 8952 if (hyva.getCookie(last_visited_store_key) !== CURRENT_STORE_CODE) { 8953 isInvalid = true; 8954 } 8955 hyva.setCookie(last_visited_store_key, CURRENT_STORE_CODE, false, false); 8956 8957 if (!hyva.getCookie(mage_cache_session_id_key)) { 8958 isInvalid = true; 8959 browserStorage.removeItem(private_content_key); 8960 const skipSetDomain = true; 8961 const days = false; 8962 hyva.setCookie(mage_cache_session_id_key, true, days, skipSetDomain) 8963 } 8964 8965 const cookieVersion = hyva.getCookie(private_content_version_key); 8966 const storageVersion = browserStorage.getItem(private_content_version_key); 8967 8968 if (cookieVersion && !storageVersion || cookieVersion !== storageVersion) { 8969 isInvalid = true; 8970 } 8971 8972 const privateContentExpires = browserStorage.getItem(private_content_expire_key); 8973 if (privateContentExpires && new Date(privateContentExpires) < new Date()) { 8974 browserStorage.removeItem(private_content_key); 8975 } 8976 8977 if (isInvalid && cookieVersion) { 8978 fetchPrivateContent([]); 8979 } else if (cookieVersion && storageVersion && cookieVersion === storageVersion) { 8980 const privateContent = JSON.parse(browserStorage.getItem(private_content_key)); 8981 if ( 8982 privateContent && 8983 privateContentExpires && 8984 privateContent.cart && 8985 privateContent.customer 8986 ) { 8987 dispatchPrivateContent(privateContent); 8988 } else { 8989 fetchPrivateContent([]); 8990 } 8991 } else { 8992 if (document.getElementById('default-section-data')) { 8993 const privateContent = JSON.parse(document.getElementById('default-section-data').innerText.trim()); 8994 dispatchPrivateContent(privateContent); 8995 } else { 8996 dispatchPrivateContent({}); 8997 } 8998 } 8999 9000 } catch (error) { 9001 console.warn('Error retrieving Private Content:', error); 9002 } 9003 } 9004 9005 hyva.alpineInitialized(loadSectionData) 9006 window.addEventListener('reload-customer-section-data', loadSectionData); 9007 9008 window.processSectionDataBeforeDispatch = window.processSectionDataBeforeDispatch || (data => data); 9009 9010 function dispatchPrivateContent(data) { 9011 9012 const privateContentEvent = new CustomEvent("private-content-loaded", { 9013 detail: { 9014 data: window.processSectionDataBeforeDispatch(data) 9015 } 9016 }); 9017 window.dispatchEvent(privateContentEvent); 9018 } 9019 9020 function fetchPrivateContent(sections) { 9021 fetch(`${BASE_URL}customer/section/load/?sections=${encodeURIComponent(sections.join(','))}`, { 9022 method: 'GET', 9023 headers: { 9024 'Content-Type': 'application/json', 9025 'X-Requested-With': 'XMLHttpRequest' 9026 } 9027 }) 9028 .then(response => response.ok && response.json()) 9029 .then( 9030 data => { 9031 if (data) { 9032 try { 9033 const browserStorage = hyva.getBrowserStorage(); 9034 9035 // merge new data preserving non-invalidated sections 9036 const oldSectionData = JSON.parse(browserStorage.getItem(private_content_key) || '{}') || {}; 9037 9038 if ((! data.cart || ! data.cart.cartId) && oldSectionData['checkout-data']) { 9039 delete oldSectionData['checkout-data']; 9040 } 9041 const newSectionData = Object.assign(oldSectionData, data); 9042 9043 dispatchPrivateContent(newSectionData); 9044 9045 // don't persist messages, they've been dispatched already 9046 if (newSectionData.messages && newSectionData.messages.messages ) { 9047 newSectionData.messages.messages = []; 9048 } 9049 9050 browserStorage.setItem(private_content_key, JSON.stringify(newSectionData)); 9051 9052 const expiresAt = new Date(Date.now() + (ttl * 1000)).toISOString(); 9053 browserStorage.setItem(private_content_expire_key, expiresAt); 9054 9055 const newCookieVersion = hyva.getCookie(private_content_version_key); 9056 browserStorage.setItem(private_content_version_key, newCookieVersion); 9057 9058 // We don't need the section_data_ids in Hyvä, but we store them for compatibility 9059 // with Luma Fallback. Otherwise, not all sections are loaded in Luma Checkout 9060 hyva.setCookie( 9061 section_data_ids_key, 9062 JSON.stringify( 9063 Object.keys(data).reduce((sectionDataIds, sectionKey) => { 9064 sectionDataIds[sectionKey] = data[sectionKey]['data_id']; 9065 return sectionDataIds; 9066 }, {}) 9067 ), 9068 false, 9069 true 9070 ); 9071 } catch (error) { 9072 console.warn("Couldn't store privateContent", error); 9073 } 9074 } 9075 } 9076 ) 9077 .catch(error => { 9078 console.warn("Couldn't fetch privateContent", error); 9079 }); 9080 } 9081 } 9082 //# sourceURL=hyva-private-content.js 9083</script>
vendor: 1 bytes, line 9083
9083
9084<script> 9085 (() => { 9086 document.addEventListener('submit', event => event.target.action = event.target.action.replace('%25uenc%25', hyva.getUenc())); 9087 })() 9088</script>
vendor: 1 bytes, line 9088
9088
9089<script> 9090 (events => { 9091 const dispatchUserInteractionEvent = () => { 9092 events.forEach(type => window.removeEventListener(type, dispatchUserInteractionEvent)) 9093 window.dispatchEvent(new Event('init-external-scripts')) 9094 }; 9095 events.forEach(type => window.addEventListener(type, dispatchUserInteractionEvent, {once: true, passive: true})) 9096 })(['touchstart', 'mousemove', 'wheel', 'scroll', 'keydown']); 9097 //# sourceURL=hyva-init-external-scripts.js 9098</script>
vendor: 1 bytes, line 9098
9098
9099<script> 9100 function initWishlist() { 9101 return { 9102 addToWishlist(productId) { 9103 const formKey = hyva.getFormKey(); 9104 const postUrl = BASE_URL + 'wishlist/index/add/'; 9105 9106 fetch(postUrl, { 9107 "headers": { 9108 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 9109 }, 9110 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 9111 "method": "POST", 9112 "mode": "cors", 9113 "credentials": "include" 9114 }).then(function (response) { 9115 if (response.redirected) { 9116 window.location.href = response.url; 9117 } else if (response.ok) { 9118 return response.json(); 9119 } else { 9120 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9121 [{ 9122 type: "warning", 9123 text: "Could\u0020not\u0020add\u0020item\u0020to\u0020wishlist." 9124 }], 5000 9125 ); 9126 } 9127 }).then(function (response) { 9128 if (!response) { return } 9129 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9130 [{ 9131 type: (response.success) ? "success" : "error", 9132 text: (response.success) 9133 ? "Produkt\u0020wurde\u0020zu\u0020Ihrer\u0020Wunschliste\u0020hinzugef\u00FCgt." 9134 : response.error_message 9135 }], 5000 9136 ); 9137 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 9138 window.dispatchEvent(reloadCustomerDataEvent); 9139 }).catch(function (error) { 9140 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9141 [{ 9142 type: "error", 9143 text: error 9144 }], 5000 9145 ); 9146 }); 9147 } 9148 } 9149 } 9150</script>
vendor: 1 bytes, line 9150
9150
9151<script> 9152 function initConfigurableOptions(productId, optionConfig) { 9153 9154 function findPathParam(key) { 9155 const baseUrl = (BASE_URL.substring(0, 2) === '//' ? 'http:' : '') + BASE_URL; 9156 const baseUrlParts = (new URL(baseUrl)).pathname.replace(/\/$/, '').split('/'); 9157 const pathParts = window.location.pathname.split('/').slice(baseUrlParts.length + 3); 9158 for (let i = 0; i < pathParts.length; i += 2) { 9159 if (pathParts[i] === key && pathParts.length > i) { 9160 return pathParts[i + 1]; 9161 } 9162 } 9163 } 9164 9165 return { 9166 optionConfig, 9167 productId, 9168 itemId: (new URLSearchParams(window.location.search)).get('id') || findPathParam('id'), 9169 allowedAttributeOptions: [], 9170 selectedValues: [], 9171 init() { 9172 this.findAllowedAttributeOptions(); 9173 this.$nextTick(() => { 9174 if (typeof this.optionConfig.defaultValues === 'object') { 9175 for (const [attributeId, value] of Object.entries(this.optionConfig.defaultValues)) { 9176 this.changeOption(attributeId, value + ''); 9177 } 9178 } 9179 this.preselectQuerystringItems(); 9180 this.preselectLocationHashItems(); 9181 }); 9182 }, 9183 productIndex: 0, 9184 productIndexForPrice: 0, 9185 optionIsActive(attributeId, optionId) { 9186 return !!this.getAllowedAttributeOptions(attributeId).find( 9187 option => option.id === optionId 9188 ) 9189 }, 9190 optionIsEnabled(attributeId, optionId) { 9191 for (const productId in this.optionConfig.index) { 9192 if (this.optionConfig.index[productId][attributeId] === optionId) { 9193 return true; 9194 } 9195 } 9196 return false; 9197 }, 9198 findSimpleIndex() { 9199 this.productIndex = this.calculateSimpleIndexForPartialSelection(this.selectedValues); 9200 this.productIndexForPrice = this.findCheapestProductForPartialSelection(this.selectedValues); 9201 }, 9202 calculateSimpleIndexForPartialSelection(selectedValues) { 9203 if (selectedValues.length === 0) return 0; 9204 return this.findProductIdsForPartialSelection(selectedValues)[0]; 9205 }, 9206 calculateSimpleIndexForFullSelection(selectedValues) { 9207 if (! this.isFullSelection(selectedValues)) return false; 9208 9209 const productIndexes = this.optionConfig.index; 9210 return Object.keys(productIndexes).find(productIndex => { 9211 const productCandidateOptions = productIndexes[productIndex]; 9212 9213 for (const productOption in productCandidateOptions) { 9214 if ( 9215 !selectedValues[productOption] || 9216 selectedValues[productOption] !== productCandidateOptions[productOption] 9217 ) { 9218 return false; 9219 } 9220 } 9221 return productIndex; 9222 }); 9223 }, 9224 findAllowedAttributeOptions() { 9225 this.allowedAttributeOptions = this.calculateAllowedAttributeOptions(this.selectedValues); 9226 }, 9227 calculateAllowedAttributeOptions(selectedValues) { 9228 const allAttributes = this.optionConfig.attributes; 9229 const allAttributesSorted = Object.values(allAttributes).sort((a,b) => { 9230 return a.position - b.position 9231 }); 9232 9233 const newAllowedAttributeOptions = []; 9234 9235 allAttributesSorted.forEach(attribute => { 9236 const selectionWithoutAttr = Object.assign({}, this.removeAttrFromSelection(selectedValues, attribute.id)); 9237 const availableIndexes = this.calculateAvailableProductIndexes(selectionWithoutAttr); 9238 newAllowedAttributeOptions[attribute.id] = allAttributes[attribute.id].options.filter(option => { 9239 return !!option.products.find(product => { 9240 return availableIndexes.includes(product); 9241 }) 9242 }); 9243 }); 9244 return newAllowedAttributeOptions; 9245 }, 9246 calculateAvailableProductIndexes(selectedOptions) { 9247 if (Object.keys(selectedOptions).length === 0) { 9248 if (Object.values(this.optionConfig.salable || {}).length) { 9249 return [].concat.apply([], [].concat.apply([], Object.values(this.optionConfig.salable).map(Object.values))).filter((x, i, a) => a.indexOf(x) === i) 9250 } 9251 return Object.keys(this.optionConfig.index); 9252 } 9253 9254 const selectedIds = Object.keys(selectedOptions); 9255 if (Object.values(this.optionConfig.salable || {}).length) { 9256 const selectedOptionIndexes = selectedIds.map(attrId => { 9257 const optionValue = selectedOptions[attrId]; 9258 return this.optionConfig.salable[attrId] && this.optionConfig.salable[attrId][optionValue] || [] 9259 }) 9260 return selectedOptionIndexes.reduce((acc, optionIndexes) => { 9261 return acc.filter(index => optionIndexes.includes(index)); 9262 }); 9263 } else { 9264 const productIndexes = this.optionConfig.index; 9265 return Object.keys(productIndexes).filter(index => { 9266 for (const attrId of selectedIds) { 9267 if (productIndexes[index][attrId] !== `${selectedOptions[attrId]}`) return false 9268 } 9269 return true 9270 }); 9271 } 9272 }, 9273 findAttributeByOptionId(optionId) { 9274 for (const attributeId in this.optionConfig.attributes) { 9275 const attributeOptions = this.optionConfig.attributes[attributeId].options || []; 9276 if (attributeOptions.find(option => option.id === optionId)) { 9277 return attributeId; 9278 } 9279 } 9280 }, 9281 getAllowedAttributeOptions(attributeId) { 9282 return this.allowedAttributeOptions[attributeId] || [] 9283 }, 9284 getAllAttributeOptions(attributeId) { 9285 return ( 9286 this.optionConfig.attributes[attributeId] && 9287 this.optionConfig.attributes[attributeId].options 9288 ) || [] 9289 }, 9290 getProductIdsForOption(option) { 9291 const attributeId = this.findAttributeByOptionId(option.id); 9292 const allOptions = this.optionConfig.attributes[attributeId]; 9293 const opt = (allOptions && allOptions.options || []).find(o => o.id === option.id); 9294 return opt && opt.products 9295 ? opt.products 9296 : []; 9297 }, 9298 findProductIdsForPartialSelection(optionSelection) { 9299 const candidateProducts = Object.values(optionSelection).reduce((candidates, optionId) => { 9300 const newCandidates = this.getProductIdsForOption({id: optionId}); 9301 return candidates === null 9302 ? newCandidates 9303 : candidates.filter(productId => newCandidates.includes(productId)); 9304 }, null); 9305 return candidateProducts || []; 9306 },
9307 findCheapestProductForPartialSelection(optionSelection) { 9308 const candidateProducts = this.findProductIdsForPartialSelection(optionSelection); 9309 return candidateProducts.reduce((cheapest, simpleIdx) => { 9310 // in the first iteration we start with simpleIdx as the currently cheapest product 9311 if (! this.optionConfig.optionPrices[cheapest]) return simpleIdx; 9312 const knownCheapestPrice = this.optionConfig.optionPrices[cheapest].finalPrice.amount; 9313 return knownCheapestPrice > this.optionConfig.optionPrices[simpleIdx].finalPrice.amount 9314 ? simpleIdx 9315 : cheapest; 9316 }, 0) 9317 }, 9318 findProductIdToUseForOptionPrice(option) { 9319 // try to find a product for a complete selection 9320 const attributeId = this.findAttributeByOptionId(option.id); 9321 const optionSelection = Object.assign({}, this.selectedValues, {[attributeId]: option.id}); 9322 const matchingSimpleIndex = this.calculateSimpleIndexForFullSelection(optionSelection); 9323 // if there is no complete selection, use the cheapest product for the option 9324 return matchingSimpleIndex || this.findCheapestProductForPartialSelection(optionSelection); 9325 }, 9326 getAttributeOptionLabel(option) { 9327 const optionProduct = this.findProductIdToUseForOptionPrice(option); 9328 9329 if ((! optionProduct) || (optionProduct === this.productIndexForPrice)) { 9330 return option.label; 9331 } 9332 9333 const currentPrice = this.getOptionPriceAdjustmentBasePrice(); 9334 9335 if (this.optionConfig.optionPrices[optionProduct]) { 9336 const optionPrice = this.optionConfig.optionPrices[optionProduct].finalPrice.amount; 9337 if (optionPrice !== currentPrice){ 9338 return option.label + ' ' + hyva.formatPrice(optionPrice - currentPrice, true); 9339 } 9340 } 9341 return option.label; 9342 }, 9343 getOptionPriceAdjustmentBasePrice() { 9344 if (this.optionConfig.optionPrices[this.productIndexForPrice]) { 9345 return this.optionConfig.optionPrices[this.productIndexForPrice].finalPrice.amount 9346 } 9347 return this.optionConfig.prices.finalPrice.amount; // default price if no option selection 9348 }, 9349 clearOptionIfActive(optionId, value) { 9350 if (this.selectedValues[optionId] === value) { 9351 this.blurLabel() 9352 this.changeOption(optionId, '') 9353 } 9354 }, 9355 removeAttrFromSelection(selectedValues, attributeId) { 9356 attributeId = parseInt(attributeId); 9357 return selectedValues.reduce((newSelection, val, attr) => { 9358 if (attr !== attributeId) { 9359 newSelection[attr] = val; 9360 } 9361 return newSelection; 9362 }, []); 9363 }, 9364 changeOption(attributeId, value) { 9365 if (value === '') { 9366 this.selectedValues = this.removeAttrFromSelection(this.selectedValues, attributeId) 9367 } else if (value && this.getAllowedAttributeOptions(attributeId).find(option => option.id === value)) { 9368 this.selectedValues[attributeId] = value; 9369 } 9370 this.findSimpleIndex(); 9371 this.findAllowedAttributeOptions(); 9372 this.updatePrices(); 9373 this.updateGallery(); 9374 9375 const candidates = this.findProductIdsForPartialSelection(this.selectedValues); 9376 9377 window.dispatchEvent( 9378 new CustomEvent( 9379 'configurable-selection-changed', 9380 { 9381 detail: { 9382 productId: this.productId, 9383 optionId: attributeId, 9384 value: value, 9385 productIndex: this.productIndex, 9386 selectedValues: this.selectedValues, 9387 candidates: candidates, 9388 skuCandidates: Object.values(candidates).map(id =>
9388 this.optionConfig.sku?.[id] ?? null).filter(Boolean), 9389 } 9390 } 9391 ) 9392 ); 9393 }, 9394 calculateIsMinimalPrice() { 9395 return ! this.isFullSelection(this.selectedValues); 9396 }, 9397 isFullSelection(selectedValues) { 9398 return Object.values(selectedValues).length === Object.keys(this.optionConfig.attributes).length; 9399 }, 9400 updatePrices() { 9401 const value = this.optionConfig.optionPrices[this.productIndexForPrice] || this.optionConfig.prices; 9402 window.dispatchEvent( 9403 new CustomEvent( 9404 "update-prices-" + this.productId, 9405 { 9406 detail: Object.assign( 9407 value, 9408 { isMinimalPrice: this.calculateIsMinimalPrice() } 9409 ) 9410 } 9411 ) 9412 ); 9413 }, 9414 updateGallery () { 9415 if (this.productIndex) { 9416 const images = this.optionConfig.images[this.productIndex]; 9417 images && window.dispatchEvent(new CustomEvent( 9418 "update-gallery", 9419 { detail: this.sortImagesByPosition(images) } 9420 )); 9421 } else { 9422 window.dispatchEvent(new Event("reset-gallery")); 9423 } 9424 }, 9425 sortImagesByPosition(images) { 9426 return images.sort((x, y) => { 9427 return x.position === y.position ? 0 : (parseInt(x.position) > parseInt(y.position) ? 1 : -1) 9428 }); 9429 }, 9430 onGetCartData(data) { 9431 }, 9432 preselectCartItems(data) { 9433 // pre-select options based on cart data for current (quote) itemId 9434 const cart = data && data.cart; 9435 if (cart && cart.items) { 9436 const cartItem = cart.items.find((item) => { 9437 return ( 9438 item.item_id === this.itemId 9439 && item.product_id === this.productId 9440 ) 9441 }); 9442 if (cartItem && cartItem.options && cartItem.options.length) { 9443 cartItem.options.map(option => { 9444 this.changeOption(option.option_id, option.option_value); 9445 }) 9446 } 9447 } 9448 }, 9449 preselectQuerystringItems() { 9450 // pre-select option like ?size=167 9451 const urlQueryParams = new URLSearchParams(window.location.search.replace('?','')); 9452 this.preselectItemsBasedOnLocation(attribute => urlQueryParams.get(attribute.code)); 9453 }, 9454 preselectLocationHashItems() { 9455 // pre-select option like #144=167 9456 const urlHashParams = new URLSearchParams(window.location.hash.replace('#','')); 9457 this.preselectItemsBasedOnLocation(attribute => urlHashParams.get(attribute.id)); 9458 }, 9459 preselectItemsBasedOnLocation(getLocationValue) { 9460 Object.values(this.optionConfig.attributes).map(attribute => { 9461 const v = getLocationValue(attribute); 9462 v && this.changeOption(attribute.id, v) 9463 }); 9464 } 9465 } 9466 } 9467</script>
vendor: 1 bytes, line 9467
9467
9468<script> 9469 function initSwatchOptions(swatchConfig) { 9470 return { 9471 swatchConfig, 9472 getAttributeSwatchData(attributeId) { 9473 const swatchConfig = Object.assign({}, this.swatchConfig[attributeId]); 9474 swatchConfig['details'] = JSON.parse(swatchConfig['additional_data']); 9475 9476 return swatchConfig; 9477 }, 9478 mapSwatchTypeNumberToTypeCode(typeNumber) { 9479 switch ("" + typeNumber) { 9480 case "1": 9481 return "color" 9482 case "2": 9483 return "image" 9484 case "3": 9485 return "empty" 9486 case "0": 9487 default: 9488 return "text" 9489 } 9490 }, 9491 getTypeOfFirstOption(attributeId) { 9492 for (const optionId in this.swatchConfig[attributeId]) { 9493 const option = this.swatchConfig[attributeId][optionId]; 9494 if (typeof option.type !== 'undefined') { 9495 return this.mapSwatchTypeNumberToTypeCode(option.type); 9496 } 9497 } 9498 }, 9499 getVisualSwatchType(attributeId, targetOptionId) { 9500 // If a type configuration is present for the given option id, use it 9501 const config = this.swatchConfig[attributeId]; 9502 if (config[targetOptionId] && typeof config[targetOptionId].type !== 'undefined') { 9503 return this.mapSwatchTypeNumberToTypeCode(config[targetOptionId].type); 9504 } 9505 9506 // Otherwise - if no config is present for the target option - use the type of the first option 9507 // with a type property from the attribute, thus assuming its the same type as the target option. 9508 // (This edge case condition can occur on single swatch products if some options are not salable) 9509 return this.getTypeOfFirstOption(attributeId); 9510 }, 9511 getSwatchType(attributeId, optionId) { 9512 // Deserialize the attribute details the first time they are used 9513 if (this.swatchConfig[attributeId] && ! this.swatchConfig[attributeId].details) { 9514 this.swatchConfig[attributeId] = this.getAttributeSwatchData(attributeId); 9515 } 9516 const type = this.swatchConfig[attributeId] && 9517 this.swatchConfig[attributeId].details && 9518 this.swatchConfig[attributeId].details.swatch_input_type || 9519 "empty"; 9520 return type === 'visual' ? this.getVisualSwatchType(attributeId, optionId) : type; 9521 }, 9522 isTextSwatch(attributeId, optionId) { 9523 return this.getSwatchType(attributeId, optionId) === 'text'; 9524 }, 9525 isVisualSwatch(attributeId, optionId) { 9526 const type = this.getSwatchType(attributeId, optionId); 9527 9528 return ['image', 'color'].includes(type); 9529 }, 9530 getSwatchBackgroundStyle(attributeId, optionId) { 9531 const config = this.getSwatchConfig(attributeId, optionId); 9532 const type = this.getSwatchType(attributeId, optionId); 9533 9534 if (type === "color") { 9535 return 'background-color:' + config.value; 9536 } else if (type === "image") { 9537 return "background: #fff url('" + config.value + "') no-repeat center"; 9538 } else { 9539 return ''; 9540 } 9541 }, 9542 getSwatchText(attributeId, optionId) { 9543 const config = this.getSwatchConfig(attributeId, optionId); 9544 return config.label || config.value || this.getOptionLabelFromOptionConfig(attributeId, optionId); 9545 }, 9546 getOptionLabelFromOptionConfig(attributeId, optionId) { 9547 // Fallback if no value is present in swatchConfig data 9548 // Reference issue https://gitlab.hyva.io/hyva-themes/magento2-default-theme/-/issues/190 9549 const option = this.getAllAttributeOptions(attributeId).filter(option => option.id === optionId); 9550 return option && option[0] && option[0].label ||''; 9551 }, 9552 getSwatchConfig(attributeId, optionId) { 9553 return this.swatchConfig[attributeId] && this.swatchConfig[attributeId][optionId] 9554 ? this.swatchConfig[attributeId][optionId] 9555 : false;
9556 }, 9557 activeTooltipItem: false, 9558 tooltipPositionElement: false, 9559 isTooltipVisible() { 9560 return this.activeTooltipItem && 9561 this.getSwatchConfig( 9562 this.activeTooltipItem.attribute, 9563 this.activeTooltipItem.item 9564 ); 9565 }, 9566 isFirstItemCol() { 9567 return this.activeTooltipItem.index === 0; 9568 }, 9569 getTooltipImageStyle(attributeId, optionId) { 9570 const config = this.getSwatchConfig(attributeId, optionId); 9571 const type = this.getSwatchType(attributeId, optionId); 9572 9573 if (type === "color") { 9574 return 'background-color:' + config.value + '; width: 110px; height: 90px;'; 9575 } else if (type === "image") { 9576 return "background: #ffffff url('" + config.thumb + 9577 "') center center no-repeat; width: 110px; height: 90px;"; 9578 } else { 9579 return 'display:none'; 9580 } 9581 }, 9582 getTooltipPosition() { 9583 return this.tooltipPositionElement ? 9584 `top: ${this.tooltipPositionElement.offsetTop}px;` + 9585 `left: ${ 9586 this.tooltipPositionElement.offsetLeft - ( 9587 this.tooltipPositionElement.closest('.snap') && 9588 this.tooltipPositionElement.closest('.snap').scrollLeft || 9589 0 9590 ) 9591 }px;` : '' 9592 }, 9593 getTooltipLabel() { 9594 return this.getSwatchConfig(this.activeTooltipItem.attribute, this.activeTooltipItem.item).label 9595 }, 9596 focusedLabel: false, 9597 focusLabel(optionId) { 9598 this.focusedLabel = optionId; 9599 }, 9600 blurLabel() { 9601 this.focusedLabel = false; 9602 } 9603 } 9604 } 9605</script>
9605 9606
9607<script> 9608 function initAmBundlePackGallery() { 9609 return { 9610 "active": 0, 9611 "initialImages": [], 9612 "images": [], 9613 "isSelected" : false, 9614 "currentElement": false, 9615 "appendOnReceiveImages": false, 9616 receiveImages(images) { 9617 if (this.appendOnReceiveImages) { 9618 const initialUrls = this.initialImages.map(image => image.full); 9619 const newImages = images.filter(image => ! initialUrls.includes(image.full)); 9620 this.images = [].concat(this.initialImages, newImages); 9621 this.setActive(newImages.length ? this.initialImages.length : 0); 9622 } else { 9623 this.images = images; 9624 } 9625 }, 9626 init() { 9627 this.appendOnReceiveImages = this.$el.dataset.appendOnReceiveImages; 9628 this.currentElement = this.$el; 9629 let active = this.images.findIndex(function(image) { 9630 return image.isMain === true 9631 }); 9632 if (active === -1) { 9633 active = 0; 9634 } 9635 this.setActive(active); 9636 },
9637 setActive(index) { 9638 this.active = index; 9639 }, 9640 resetGallery() { 9641 this.images = this.initialImages; 9642 this.setActive(0); 9643 }, 9644 imageCaption() { 9645 return this.image.caption || this.$el.dataset.productName; 9646 }, 9647 imageSrc() { 9648 return this.image.img; 9649 }, 9650 typeLoading() { 9651 return this.active !== this.index ? 'lazy' : 'eager'; 9652 }, 9653 showImg() { 9654 return this.active === this.index; 9655 }, 9656 eventListeners: { 9657 ['@update-gallery.window'](event) { 9658 setTimeout(() => { 9659 if (this.isSelected) { 9660 this.receiveImages(event.detail); 9661 } 9662 this.isSelected = false; 9663 }, 0) 9664 }, 9665 ['@bundle-popup-gallery-option-selected.window'](event) { 9666 let product = this.currentElement.closest('.amrelated-product-info'); 9667 let currentId = event.detail.getAttribute('id'); 9668 if (product.querySelector('#' + currentId)){ 9669 this.isSelected = true; 9670 } 9671 }, 9672 ['@reset-gallery.window'](event) { 9673 this.resetGallery(); 9674 } 9675 } 9676 } 9677 } 9678 9679 window.addEventListener( 9680 'alpine:init', 9681 () => Alpine.data('initAmBundlePackGallery', initAmBundlePackGallery), 9682 { once: true } 9683 ); 9684</script>
9684 9685
9685<script> 9686 function amBundlePackAddPopupData() { 9687 return { 9688 popupData: '', 9689 forms: false, 9690 formsData: '', 9691 popupWrapper: '', 9692 selectors: { 9693 forms: '.amrelated-product-info form.info-container-form', 9694 innerForm: 'form[id*="product_addtocart_form"]', 9695 body: 'body', 9696 productPageClass: 'catalog-product-view', 9697 cartPageClass: 'checkout-cart-index', 9698 popupWrapper: '[x-ref="bundlePopup"]', 9699 hidePopupButtonClass: '.hide-bundle-popup', 9700 swatchInputs: '.amrelated-product-info.configurable .product-option-value-input, .amrelated-product-info.configurable select' 9701 }, 9702 9703 init() { 9704 this.popupData = JSON.parse(this.$el.dataset.config); 9705 this.isOsnHyvaEnabled = Boolean(Number(this.$el.dataset.isOsnHyvaEnabled)); 9706 this.forms = this.$el.querySelectorAll(this.selectors.forms); 9707 this.popupWrapper = this.$el.closest(this.selectors.popupWrapper); 9708 this.$nextTick(() => { 9709 this.$el.addEventListener('change', (event) => { 9710 if (event.target.closest(this.selectors.swatchInputs)) { 9711 window.dispatchEvent(new CustomEvent('bundle-popup-gallery-option-selected', { detail: event.target })); 9712 } 9713 }); 9714 }) 9715 }, 9716 9717 serializeForm(form) { 9718 const data = new FormData(form) 9719 let array = []; 9720 this._setInputsToArray(data, array); 9721 9722 if (this.isOsnHyvaEnabled) { 9723 if (form.querySelector(this.selectors.innerForm)) { 9724 const data = new FormData(form.querySelector(this.selectors.innerForm)); 9725 this._setInputsToArray(data, array); 9726 } 9727 } 9728 9729 return array; 9730 }, 9731 9732 _setInputsToArray(data, arrayToSet) { 9733 for (let [key, value] of data) { 9734 arrayToSet.push({ 9735 name: key, 9736 value: value 9737 }); 9738 } 9739 }, 9740 9741 getIsProductPage() { 9742 return !!document.querySelector(this.selectors.body) 9743 .classList.contains(this.selectors.productPageClass); 9744 }, 9745 9746 getIsCartPage() { 9747 return !!document.querySelector(this.selectors.body) 9748 .classList.contains(this.selectors.cartPageClass); 9749 }, 9750 9751 scrollToElement(el) { 9752 el.scrollIntoView({ 9753 behavior: "smooth", 9754 block: "start" 9755 }); 9756 }, 9757 9758 scrollToTop() { 9759 window.scrollTo({ top: 0, behavior: 'smooth' }); 9760 }, 9761 9762 validateProductForm(form) { 9763 let flag = false; 9764 let isValid = form.reportValidity(); 9765 if (isValid) { 9766 flag = true; 9767 } else { 9768 this.scrollToElement(form); 9769 } 9770 return flag; 9771 }, 9772 9773 prepareData() { 9774 const inCartResponse = this.popupData.productsInCart; 9775 let data = false; 9776 let serializedForms = []; 9777 let formsData = ''; 9778 let isFormsValid = true; 9779 9780 this.forms.forEach((form) => { 9781 if (this.isOsnHyvaEnabled) { 9782 if (form.querySelector(this.selectors.innerForm)) { 9783 if (!this.validateProductForm(form.querySelector(this.selectors.innerForm))) { 9784 isFormsValid = false;
9785 return false; 9786 } 9787 } 9788 } 9789 9790 if (!this.validateProductForm(form)) { 9791 isFormsValid = false; 9792 return false; 9793 } 9794 }); 9795 9796 if (isFormsValid) { 9797 //forms data collect 9798 this.forms.forEach((form) => { 9799 serializedForms.push(this.serializeForm(form)); 9800 }); 9801 9802 serializedForms.forEach((form) => { 9803 formsData += 'amrelated_products_popup[]='; 9804 form.forEach((fileld, index, currentForm) => { 9805 formsData += fileld.name + '=' + fileld.value 9806 + (currentForm.length > (index + 1) ? encodeURIComponent('&') : ''); 9807 }) 9808 formsData += '&'; 9809 }) 9810 9811 data = formsData; 9812 9813 //product in cart data 9814 for (let productId in inCartResponse) { 9815 data += 'products_in_cart[' + productId + '][qty]=' + inCartResponse[productId]['qty'] + '&'; 9816 } 9817 9818 data += 'ajax_cart=' + this.popupData.isAjaxCartEnabled; 9819 data += '&form_key=' + hyva.getFormKey(); 9820 data += '&product_page=' + this.getIsProductPage(); 9821 data += '&pack_id=' + this.popupData.packId; 9822 } 9823 9824 return data; 9825 }, 9826 9827 addToCart() { 9828 const data = this.prepareData(); 9829 if (!data) { 9830 return; 9831 } 9832 this.isLoading = true; 9833 fetch(this.popupData.url, { 9834 headers: { 9835 "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8", 9836 }, 9837 body: new URLSearchParams(data), 9838 method: "POST", 9839 mode: "cors", 9840 credentials: "include" 9841 }).then( 9842 response => response.json() 9843 ).then((result) => { 9844 if (result.backUrl) { 9845 window.location.href = result.backUrl; 9846 } else { 9847 window.dispatchEvent(new CustomEvent('mostviewed-items-added')); 9848 const ref = this.$el.closest('[x-ref]').getAttribute('x-ref'); 9849 if (ref) { 9850 window.dispatchEvent(new CustomEvent('amrelated-modal-hide', {detail: ref})); 9851 } 9852 } 9853 }).catch(() => { 9854 dispatchMessages([{ 9855 type: "error", 9856 text: "Es ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut." 9857 }], 2000); 9858 const ref = this.$el.closest('[x-ref]').getAttribute('x-ref'); 9859 if (ref) { 9860 window.dispatchEvent(new CustomEvent('amrelated-modal-hide', {detail: ref})); 9861 } 9862 }).finally(() => { 9863 this.isLoading = false; 9864 this.scrollToTop(); 9865 }) 9866 } 9867 } 9868 } 9869 9870 window.addEventListener( 9871 'alpine:init', 9872 () => Alpine.data('amBundlePackAddPopupData', amBundlePackAddPopupData), 9873 { once: true } 9874 ); 9875 </script>
vendor: 1 bytes, line 9875
9875
9876<script> 9877 function initAmBundlePackWishlist() { 9878 return { 9879 addToWishlist() { 9880 const productId = this.$el.dataset.productId; 9881 const postParams = { 9882 action: BASE_URL + "wishlist/index/add/", 9883 data: { 9884 product: productId, 9885 uenc: hyva.getUenc() 9886 } 9887 } 9888 9889 postParams.data['form_key'] = hyva.getFormKey(); 9890 postParams.data['qty'] = document.getElementById(`qty[${productId}]`) 9891 ? document.getElementById(`qty[${productId}]`).value || 1 9892 : 1; 9893 9894 let postData = Object.keys(postParams.data).map(key => { 9895 return `${key}=${postParams.data[key]}`; 9896 }).join('&'); 9897 9898 // take the all the input fields that configure this product 9899 // includes custom, configurable, grouped and bundled options 9900 Array.from(document.querySelectorAll( 9901 '[name^=options], [name^=super_attribute], [name^=bundle_option], [name^=super_group], [name^=links]') 9902 ).map(input => { 9903 if (input.type === "select-multiple") { 9904 Array.from(input.selectedOptions).forEach(option => { 9905 postData += `&${input.name}=${option.value}` 9906 }) 9907 } else { 9908 // skip "checkable inputs" that are not checked 9909 if(!(['radio', 'checkbox', 'select'].includes(input.type) && !input.checked)) { 9910 postData += `&${input.name}=${input.value}` 9911 } 9912 } 9913 }); 9914 fetch(postParams.action, { 9915 "headers": { 9916 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 9917 }, 9918 "body": postData, 9919 "method": "POST", 9920 "mode": "cors", 9921 "credentials": "include" 9922 }).then((response) => { 9923 if (response.redirected) { 9924 window.location.href = response.url; 9925 } else if (response.ok) { 9926 return response.json(); 9927 } else { 9928 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9929 [{ 9930 type: "warning", 9931 text: "Could not add item to wishlist." 9932 }], 5000 9933 ); 9934 } 9935 }).then((response) => { 9936 if (!response) { 9937 return; 9938 } 9939 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9940 [{ 9941 type: (response.success) ? "success" : "error", 9942 text: (response.success) 9943 ? "Produkt wurde zu Ihrer Wunschliste hinzugefügt." 9944 : response.error_message 9945 }], 5000 9946 ); 9947 const reloadCustomerDataEvent = new CustomEvent("reload-customer-section-data"); 9948 window.dispatchEvent(reloadCustomerDataEvent); 9949 }).catch((error) => { 9950 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9951 [{ 9952 type: "error", 9953 text: error 9954 }], 5000 9955 ); 9956 }); 9957 } 9958 } 9959 } 9960 window.addEventListener('alpine:init', () => Alpine.data('initAmBundlePackWishlist', initAmBundlePackWishlist), {once: true}) 9961</script>
9961 9962
9962<script> 9963 function initAmBundlePackCompareOnProductView() { 9964 return { 9965 addToCompare: function () { 9966 const productId = 1; 9967 const formKey = hyva.getFormKey(); 9968 const postUrl = BASE_URL + 'catalog/product_compare/add/'; 9969 9970 fetch(postUrl, { 9971 "headers": { 9972 "content-type": "application/x-www-form-urlencoded; charset=UTF-8", 9973 }, 9974 "body": "form_key=" + formKey + "&product=" + productId + "&uenc=" + hyva.getUenc(), 9975 "method": "POST", 9976 "mode": "cors", 9977 "credentials": "include" 9978 }).then(function (response) { 9979 if (response.redirected) { 9980 window.location.href = response.url; 9981 } 9982 }).catch(function (error) { 9983 typeof window.dispatchMessages !== "undefined" && window.dispatchMessages( 9984 [{ 9985 type: "error", 9986 text: error 9987 }], 5000 9988 ); 9989 }); 9990 } 9991 }; 9992 } 9993 window.addEventListener('alpine:init', () => Alpine.data('initAmBundlePackCompareOnProductView', initAmBundlePackCompareOnProductView), {once: true}) 9994 </script>
vendor: 1 bytes, line 9994
9994
9995<script> 9996 'use strict'; 9997 9998 function initAmRelatedSplide() { 9999 return { 10000 isLoading: true, 10001 sliderDefaultConfig: { 10002 perPage: Number(this.$el.dataset.slidesPerView), 10003 focus: 0, 10004 type: 'loop', 10005 breakpoints: { 10006 1280: { 10007 perPage: 3 10008 }, 10009 992: { 10010 perPage: 2 10011 }, 10012 576: { 10013 perPage: 1 10014 } 10015 }, 10016 classes: { 10017 arrow: 'splide__arrow bg-neutral-700! [&_svg]:fill-white! size-8! top-1/2! -translate-y-1/2! absolute!', 10018 prev: 'splide__arrow--prev left-0!', 10019 next: 'splide__arrow--next right-0!', 10020 pagination: 'splide__pagination flex! lg:gap-5!', 10021 page: 'splide__pagination__page hover:bg-neutral-700! bg-stone-300! size-2! [&.is-active]:transform-none! [&.is-active]:bg-neutral-700!', 10022 } 10023 }, 10024 init() { 10025 window.addEventListener('amsplide-loaded', () => { 10026 this.initializeSplide(); 10027 }, { once: true }); 10028 window.dispatchEvent(new CustomEvent('load-amsplide')); 10029 this.$watch('isLoading', (isLoading) => { 10030 !isLoading && this.$nextTick(this.lazyloadCallback); 10031 }); 10032 }, 10033 initializeSplide() { 10034 const splideContainer = this.$refs.splideContainer; 10035 const splideInstance = new Splide(splideContainer, this.adjustPageItemsConfig(this.sliderDefaultConfig)); 10036 10037 splideInstance.on('moved', this.lazyloadCallback); 10038 splideInstance.mount(); 10039 this.isLoading = false; 10040 }, 10041 adjustPageItemsConfig: function (config) { 10042 const slideCount = Number(this.$el.dataset.itemsCount); 10043 const breakpointsData = Object.entries(config.breakpoints) 10044 .map(([breakpoint, option]) => 10045 [ 10046 breakpoint, 10047 { ...config.breakpoints?.[breakpoint], ...this.getItemsPerPageConfig(option, slideCount) } 10048 ] 10049 ); 10050 10051 return { 10052 ...config, 10053 ...this.getItemsPerPageConfig(config, slideCount), 10054 breakpoints: { 10055 ...Object.fromEntries(breakpointsData) 10056 } 10057 } 10058 }, 10059 getItemsPerPageConfig: function (config, slideCount) { 10060 const { perPage } = config; 10061 if (!perPage) { 10062 return config; 10063 } 10064 const shouldHideControls = perPage >= slideCount; 10065 const itemsPerPage = shouldHideControls ? slideCount : perPage; 10066 10067 return { 10068 perPage: itemsPerPage, 10069 clones: shouldHideControls ? 0 : 2 * itemsPerPage, 10070 pagination: !shouldHideControls, 10071 arrows: !shouldHideControls, 10072 drag: !shouldHideControls, 10073 ...(shouldHideControls && { width: 'fit-content' }) 10074 } 10075 }, 10076 isNotLoading() { 10077 return !this.isLoading; 10078 }, 10079 lazyloadCallback: function () { 10080 window.amlazycallback?.(); 10081 } 10082 }; 10083 } 10084 10085 window.addEventListener( 10086 'alpine:init', 10087 () => Alpine.data('initAmRelatedSplide', initAmRelatedSplide), 10088 { once: true } 10089 ); 10090</script>
vendor: 1 bytes, line 10090
10090
10091<script> 10092 'use strict'; 10093 10094 function initAmToolbar() { 10095 return { 10096 isOpen: false, 10097 altTag: { 10098 imagesLength: 0, 10099 images: new Set([]), 10100 initialCount: 2, 10101 showAll: false, 10102 countPhrase: '', 10103 }, 10104 getImagesCountPhrase: function () { 10105 return this.altTag.countPhrase; 10106 }, 10107 isNeedShowAltTagImages: function () { 10108 return this.altTag.imagesLength > 0; 10109 }, 10110 getAltImages: function () { 10111 return Array.from(this.altTag.images).slice(0, this.altTag.showAll ? this.altTag.imagesLength : this.altTag.initialCount); 10112 }, 10113 init: function () { 10114 document.querySelectorAll('img:not([alt]), img[alt=""]').forEach((imgNode) => { 10115 if (imgNode?.src) { 10116 this.altTag.images.add(imgNode.src); 10117 } 10118 10119 const observer = new MutationObserver((mutations) => { 10120 mutations.forEach((mutation) => { 10121 if (mutation.type === 'attributes') { 10122 if (imgNode?.getAttribute('alt') !== null) { 10123 this.altTag.images.delete(imgNode?.src); 10124 10125 return; 10126 } 10127 10128 imgNode?.src && this.altTag.images.add(imgNode.src); 10129 10130 this.updateAltImagesCount(); 10131 } 10132 }); 10133 }); 10134 10135 observer.observe(imgNode, { 10136 attributes: true, 10137 attributeOldValue: true, 10138 attributeFilter: ['alt', 'src'] 10139 }); 10140 10141 this.updateAltImagesCount(); 10142 }); 10143 }, 10144 updateAltImagesCount: function () { 10145 if (this.altTag.images.size) { 10146 this.altTag.imagesLength = this.altTag.images.size; 10147 this.altTag.countPhrase = this.altTag.images.size + ' image(s) without ALT tag'; 10148 } 10149 }, 10150 canShowMoreButton: function () { 10151 return !this.altTag.showAll && this.altTag.imagesLength > this.altTag.initialCount; 10152 },
10153 toolbarCssClasses: function () { 10154 return { 'h-full': this.isOpen }; 10155 }, 10156 toggleOpen: function () { 10157 this.isOpen = !this.isOpen; 10158 }, 10159 buttonCssClasses: function () { 10160 return { 'rounded-b-none': this.isOpen }; 10161 }, 10162 chevronCssClasses: function () { 10163 return { 'rotate-180': this.isOpen }; 10164 }, 10165 ariaExpanded: function () { 10166 return this.isOpen ? 'true' : 'false'; 10167 }, 10168 clickOther: function () { 10169 this.altTag.showAll = true; 10170 }, 10171 textOther: function () { 10172 return this.altTag.imagesLength - this.altTag.initialCount; 10173 } 10174 } 10175 } 10176 10177 window.addEventListener('alpine:init', () => Alpine.data('initAmToolbar', initAmToolbar), {once: true}); 10178</script>
vendor: 1 bytes, line 10178
10178
10179<script> 10180 'use strict'; 10181 10182 function initAmToolbarAiButton() { 10183 return { 10184 adminUrl: this.$el.dataset.adminUrl, 10185 selectors: { 10186 button: '[data-amaifix-js="button"]', 10187 errors: '[data-amtoolbar-js]' 10188 }, 10189 10190 init() { 10191 this.addErrorsToUrl(); 10192 }, 10193 10194 openAdmin() { 10195 open(this.adminUrl); 10196 }, 10197 10198 addErrorsToUrl() { 10199 let url = new URL(this.adminUrl), 10200 params = []; 10201 10202 document.querySelectorAll(this.selectors.errors).forEach(el => { 10203 const error = el.getAttribute('data-amtoolbar-js'); 10204 error && params.push(error); 10205 }); 10206 10207 url.searchParams.set('errors', params.join(',')); 10208 this.adminUrl = url.href; 10209 } 10210 } 10211 } 10212 10213 window.addEventListener('alpine:init', () => Alpine.data('initAmToolbarAiButton', initAmToolbarAiButton), {once: true}) 10214</script>
10214 10215 10216<section x-data="initAmGdprLoader" 10217 @amgdpr-loading-start.window="showLoader" 10218 @amgdpr-loading-stop.window="hideLoader" 10219> 10220 <div 10221 class="z-50 fixed inset-0 grid place-items-center bg-white/70 text-slate-800" 10222 x-cloak 10223 x-show="isLoading" 10224 x-transition.opacity.duration.200ms 10225> 10226 <div class="flex gap-10 items-center p-4"> 10227 <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 57 57" width="57" height="57" fill="none" stroke="currentColor" stroke-width="2" aria-hidden="true"> 10228 <style> 10229 @keyframes spinner-ball-triangle1 { 10230 0% { transform: translate(0%, 0%); } 10231 33% { transform: translate(38%, -79%); } 10232 66% { transform: translate(77%, 0%); } 10233 100% { transform: translate(0%, 0%); } 10234 } 10235 10236 @keyframes spinner-ball-triangle2 { 10237 0% { transform: translate(0%, 0%); } 10238 33% { transform: translate(38%, 79%); } 10239 66% { transform: translate(-38%, 79%); } 10240 100% { transform: translate(0%, 0%); } 10241 } 10242 10243 @keyframes spinner-ball-triangle3 { 10244 0% { transform: translate(0%, 0%); } 10245 33% { transform: translate(-77%, 0%); } 10246 66% { transform: translate(-38%, -79%); } 10247 100% { transform: translate(0%, 0%); } 10248 } 10249 </style> 10250 <circle cx="5" cy="50" r="5" style="animation: spinner-ball-triangle1 2.2s linear infinite"/> 10251 <circle cx="27" cy="5" r="5" style="animation: spinner-ball-triangle2 2.2s linear infinite"/> 10252 <circle cx="49" cy="50" r="5" style="animation: spinner-ball-triangle3 2.2s linear infinite"/> 10253</svg> 10254 <span class="text-xl select-none"> 10255 Wird geladen ⦠</span> 10256 </div> 10257</div> 10258</section> 10259
10260<script data-cfasync="false"> 10261 'use strict'; 10262 10263 function initAmGdprLoader() { 10264 return { 10265 isLoading: false, 10266 10267 /** 10268 * @returns {void} 10269 */ 10270 showLoader: function () { 10271 this.isLoading = true; 10272 }, 10273 10274 /** 10275 * @returns {void} 10276 */ 10277 hideLoader: function () { 10278 this.isLoading = false; 10279 } 10280 } 10281 } 10282 10283 window.addEventListener( 10284 'alpine:init', 10285 () => Alpine.data('initAmGdprLoader', initAmGdprLoader), 10286 { once: true } 10287 ); 10288</script>
vendor: 1 bytes, line 10288
10288
10289<script type="text/json" id="default-section-data"> 10290 {"messages":[],"customer":[],"compare-products":[],"last-ordered-items":[],"cart":[],"directory-data":{"AT":{"name":"\u00d6sterreich","regions":{"102":{"code":"BL","name":"Burgenland"},"99":{"code":"KN","name":"K\u00e4rnten"},"96":{"code":"NO","name":"Nieder\u00f6sterreich"},"97":{"code":"OO","name":"Ober\u00f6sterreich"},"98":{"code":"SB","name":"Salzburg"},"100":{"code":"ST","name":"Steiermark"},"101":{"code":"TI","name":"Tirol"},"103":{"code":"VB","name":"Vorarlberg"},"95":{"code":"WI","name":"Wien"}}},"CH":{"name":"Schweiz","regions":{"104":{"code":"AG","name":"Aargau"},"106":{"code":"AR","name":"Appenzell Ausserrhoden"},"105":{"code":"AI","name":"Appenzell Innerrhoden"},"108":{"code":"BL","name":"Basel-Landschaft"},"109":{"code":"BS","name":"Basel-Stadt"},"107":{"code":"BE","name":"Bern"},"110":{"code":"FR","name":"Friburg"},"111":{"code":"GE","name":"Geneva"},"112":{"code":"GL","name":"Glarus"},"113":{"code":"GR","name":"Graub\u00fcnden"},"114":{"code":"JU","name":"Jura"},"115":{"code":"LU","name":"Lucerne"},"116":{"code":"NE","name":"Neuch\u00e2tel"},"117":{"code":"NW","name":"Nidwalden"},"118":{"code":"OW","name":"Obwalden"},"120":{"code":"SH","name":"Schaffhausen"},"122":{"code":"SZ","name":"Schwyz"},"121":{"code":"SO","name":"Solothurn"},"119":{"code":"SG","name":"St. Gallen"},"123":{"code":"TG","name":"Thurgau"},"124":{"code":"TI","name":"Ticino"},"125":{"code":"UR","name":"Uri"},"126":{"code":"VD","name":"Vaud"},"127":{"code":"VS","name":"Wallis"},"128":{"code":"ZG","name":"Zug"},"129":{"code":"ZH","name":"Z\u00fcrich"}}},"DE":{"name":"Deutschland","regions":{"80":{"code":"BAW","name":"Baden-W\u00fcrttemberg"},"81":{"code":"BAY","name":"Bayern"},"82":{"code":"BER","name":"Berlin"},"83":{"code":"BRG","name":"Brandenburg"},"84":{"code":"BRE","name":"Bremen"},"85":{"code":"HAM","name":"Hamburg"},"86":{"code":"HES","name":"Hessen"},"87":{"code":"MEC","name":"Mecklenburg-Vorpommern"},"79":{"code":"NDS","name":"Niedersachsen"},"88":{"code":"NRW","name":"Nordrhein-Westfalen"},"89":{"code":"RHE","name":"Rheinland-Pfalz"},"90":{"code":"SAR","name":"Saarland"},"91":{"code":"SAS","name":"Sachsen"},"92":{"code":"SAC","name":"Sachsen-Anhalt"},"93":{"code":"SCN","name":"Schleswig-Holstein"},"94":{"code":"THE","name":"Th\u00fcringen"}}},"data_id":1791107426},"captcha":[],"instant-purchase":[],"loggedAsCustomer":[],"persistent":[],"review":[],"payments":[],"wishlist":{"items":[]},"amga4_event_pool":[],"amga4_hyva_event_pool":[],"hyva_checkout":[],"studi_club_data":[],"recently_viewed_product":[],"recently_compared_product":[],"product_data_storage":[],"paypal-billing-agreement":[],"paypal-buyer-country":[]}</script>
10290 10291</div></body> 10292</html>
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.