1<!DOCTYPE html> 2<html dir="ltr" lang="de"> 3<head> 4 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 6 <meta name="viewport" content="width=device-width, initial-scale=1" /> 7 8 <meta name="robots" content="noindex,follow" /> 9 <meta name="language" content="de" /> 10 <meta name="author" content="Querfeld's Wiener Kaffeehaus GesmbH" /> 11 <meta name="publisher" content="Querfeld's Wiener Kaffeehaus GesmbH" /> 12 <meta name="company" content="Querfeld's Wiener Kaffeehaus GesmbH" /> 13 <meta name="page-topic" content="Gutscheine Querfeld's Wiener Kaffeehaus" /> 14 <meta name="reply-to" content="" /> 15 <meta name="distribution" content="global" /> 16 <meta name="revisit-after" content="5" /> 17<link rel="apple-touch-icon" sizes="57x57" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-57x57.png"> 18<link rel="apple-touch-icon" sizes="60x60" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-60x60.png"> 19<link rel="apple-touch-icon" sizes="72x72" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-72x72.png"> 20<link rel="apple-touch-icon" sizes="76x76" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-76x76.png"> 21<link rel="apple-touch-icon" sizes="114x114" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-114x114.png"> 22<link rel="apple-touch-icon" sizes="120x120" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-120x120.png"> 23<link rel="apple-touch-icon" sizes="144x144" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-144x144.png"> 24<link rel="apple-touch-icon" sizes="152x152" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-152x152.png"> 25<link rel="apple-touch-icon" sizes="180x180" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/apple-icon-180x180.png"> 26<link rel="icon" type="image/png" sizes="16x16" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/favicon-16x16.png"> 27<link rel="icon" type="image/png" sizes="32x32" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/favicon-32x32.png"> 28<link rel="icon" type="image/png" sizes="96x96" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/favicon-96x96.png"> 29<link rel="icon" type="image/png" sizes="192x192" href="https://gutscheine.cafe-wien.at/templates/qwk/favicon/android-icon-192x192.png"> 30<meta name="msapplication-TitleImage" content="https://gutscheine.cafe-wien.at/templates/qwk/favicon/ms-icon-144x144.png"> 31 <meta name="description" content="Schenken Sie Ihren Liebsten unvergessliche Genussmomente mit unseren exklusiven Gutscheinen. Ob für einen gemütlichen Brunch oder einen schnellen Kaffee zum Mitnehmen â bei uns finden Sie das perfekte Geschenk für jeden Anlass. Bestellen Sie jetzt online und lassen Sie sich von unserem schnellen und zuverlässigen Service begeistern. Besuchen Sie uns noch heute und erleben Sie die Magie des Kaffeegenusses in unseren Kaffeehäusern!" /> 32 <meta name="keywords" content="Gutscheine Gutscheinpakete Gutscheine Schenken Freude Urlaub Kaffee Geschenk Wien" /> 33 <title>Gutscheine Querfeld's Wiener Kaffeehaus</title> 34 35<!-- icon template -->
36<script type="text/html" id="manage-consent-template"> 37 <svg width="40" height="40" version="1.1" viewBox="0 0 23.138 27.429" xmlns="http://www.w3.org/2000/svg"> 38 <g transform="translate(.24982 .72053)" fill="none" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.8521"> 39 <path d="m11.479 17.811c0.69344 3.9193 3.6964 7.0479 6.5726 7.2872"/> 40 <path d="m12.771 25.774c-10.207-8.2456 0.09164-17.214 1.9773-8.0642 1.5655 7.8623 8.9959 1.0835 6.208-4.4861-7.0193-13.782-25.331-3.8717-16.481 12.134"/> 41 <path d="m8.0864 25.566c-8.8039-10.91 5.8265-23.049 10.189-8.5278"/> 42 <path d="m21.953 8.9673c-7.2914-8.3059-16.657-6.975-21.271 1.964"/> 43 <path d="m20.404 3.6563c-7.5124-5.3367-13.285-4.0659-19.069 0.95229"/> 44 </g> 45 </svg> 46</script>
vendor: 1 bytes, line 46
46
47<script type="text/css" id="klaro-css-override"> 48/* 49 * Custom CSS override for Klaro ConsentManager 50 */ 51 52/* overlay transparent background */ 53.klaro .cookie-modal .cm-bg { 54 background-color: rgba(0,0,0,0.5); 55} 56 57/* modal */ 58.klaro .cookie-modal .cm-modal.cm-klaro, .klaro .cookie-notice:not(.cookie-modal-notice) { 59 background-color: rgb(255, 255, 255); 60} 61 62/* keywords */ 63.klaro .cookie-notice strong { 64 color: rgb(153, 123, 46); 65} 66 67/* heading */ 68.klaro .cookie-modal h1 { 69 color: rgb(153, 123, 46); 70} 71 72/* text color */ 73.klaro .cookie-modal p, .klaro .cookie-modal strong, .klaro .cookie-modal h1, .klaro .cookie-modal h2, .klaro .cookie-modal ul, .klaro .cookie-modal li, .klaro .cookie-notice p, .klaro .cookie-notice strong, .klaro .cookie-notice h1, .klaro .cookie-notice h2, .klaro .cookie-notice ul, .klaro .cookie-notice li { 74 color: rgb(56, 56, 56); 75} 76 77/* text color dark */ 78.klaro .cookie-modal .cm-list-description, .klaro .cookie-notice .cm-list-description { 79 color: rgb(56, 56, 56); 80} 81 82/* header (general description) */ 83.klaro .cookie-modal .cm-modal .cm-header { 84 border-bottom: 1px solid rgb(56, 56, 56); 85} 86 87/* footer (save-buttons) */ 88.klaro .cookie-modal .cm-modal .cm-footer { 89 border-top: 1px solid rgb(56, 56, 56); 90} 91 92/* link color */ 93.klaro .cookie-modal a, .klaro .cookie-notice a { 94 color: rgb(80, 80, 80); 95} 96 97/* toggle input */ 98.klaro .cookie-modal .cm-list-label .slider, .klaro .cookie-notice .cm-list-label .slider { 99 background-color: rgb(56, 56, 56); 100} 101 102/* input checked */ 103.klaro .cookie-modal .cm-list-input:checked+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input:checked+.cm-list-label .slider { 104 background-color: rgb(153, 123, 46); 105} 106 107/* input locked */ 108.klaro .cookie-modal .cm-list-input.required:checked+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input.required:checked+.cm-list-label .slider { 109 background-color: rgb(153, 123, 46); 110} 111 112/* input half locked */ 113 .klaro .cookie-modal .cm-list-input.only-required+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input.only-required+.cm-list-label .slider 114, .klaro .cookie-modal .cm-list-input.half-checked:checked+.cm-list-label .slider, .klaro .cookie-notice .cm-list-input.half-checked:checked+.cm-list-label .slider { 115 background-color: rgb(153, 123, 46); 116} 117 118/*close button*/ 119.klaro .cookie-modal .cm-modal .hide svg { 120 stroke: rgb(153, 123, 46); 121} 122 123/* button */ 124.klaro .cookie-modal .cm-btn, .klaro .cookie-notice .cm-btn { 125 background-color: rgb(56, 56, 56); 126 color: #ffffff; 127} 128 129/* button success */ 130.klaro .cookie-modal .cm-btn.cm-btn-info, .klaro .cookie-notice .cm-btn.cm-btn-info 131, .klaro .cookie-modal .cm-btn.cm-btn-success, .klaro .cookie-notice .cm-btn.cm-btn-success 132{ 133 background-color: rgb(153, 123, 46); 134 color: #ffffff; 135} 136 137/* fingerprint icon */ 138#klaro-edit-btn { 139 stroke: #2B3435; 140 stroke: rgb(80, 80, 80); 141} 142 143/* position fix for purpose item list */ 144#klaro label, #klaro div.label { 145 position: unset !important; 146} 147 148.klaro .cookie-modal .cm-btn, .klaro .cookie-notice .cm-btn { 149 padding: 0.6em; 150} 151 152.klaro #id-cookie-title { 153 font-size: 20px; 154} 155 156</script>
vendor: 1 bytes, line 156
156
157<script type="text/javascript"> 158 159!function (w, d) { 160 161 let configWithCallback = {"acceptAll":true,"mustConsent":null,"showNoticeTitle":true,"services":[{"name":"Session","default":null,"purposes":["functional"],"cookies":[["\/^XTCsid\\d*$\/"],["\/^XTCsid\\d*$\/","\/",".cafe-wien.at"],["\/^XTCsid\\d*$\/","\/","cafe-wien.at"],["\/^XTCsid\\d*$\/","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Warenkorb","default":null,"purposes":["functional"],"cookies":[["cart_id"],["cart_id","\/",".cafe-wien.at"],["cart_id","\/","cafe-wien.at"],["cart_id","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Land","default":null,"purposes":["functional"],"cookies":[["inc_visitor_country_iso2"],["inc_visitor_country_iso2","\/",".cafe-wien.at"],["inc_visitor_country_iso2","\/","cafe-wien.at"],["inc_visitor_country_iso2","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Referenz URL","default":null,"purposes":["functional"],"cookies":[["referrer_url"],["referrer_url","\/",".cafe-wien.at"],["referrer_url","\/","cafe-wien.at"],["referrer_url","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"Safari Drittanbieter Cookie Check","default":null,"purposes":["functional"],"cookies":[["safari_third_cookie"],["safari_third_cookie","\/",".cafe-wien.at"],["safari_third_cookie","\/","cafe-wien.at"],["safari_third_cookie","\/","gutscheine.cafe-wien.at"]],"required":true},{"name":"FacebookPixel","default":null,"purposes":["marketing"],"cookies":[["^_fbp"],["^_fbp","\/",".cafe-wien.at"],["^_fbp","\/","cafe-wien.at"],["^_fbp","\/","gutscheine.cafe-wien.at"]],"required":false}],"translations":{"de":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"Warenkorb","description":""},"Land":{"title":"Land","description":""},"Referenz URL":{"title":"Referenz URL","description":""},"Safari Drittanbieter Cookie Check":{"title":"Safari Drittanbieter Cookie Check","description":""},"FacebookPixel":{"title":"FacebookPixel","description":""},"purposes":{"advertisement":{"title":"Anzeigen","description":"Diese Dienste verarbeiten pers\u00f6nliche Daten, um Ihnen personalisierte oder interessenbezogene Werbung zu zeigen."},"functional":{"title":"Essenziell","description":"Essenzielle Cookies erm\u00f6glichen grundlegende Funktionen und sind f\u00fcr die einwandfreie Funktion der Website erforderlich."},"marketing":{"title":"Marketing","description":"Marketing Cookies werden von Drittanbietern oder Publishern verwendet, um personalisierte Werbung anzuzeigen. Sie tun dies, indem sie Besucher \u00fcber Websites hinweg verfolgen."},"performance":{"title":"Optimierung der Leistung","description":"Diese Dienste verarbeiten personenbezogene Daten, um den von dieser Website angebotenen Service zu optimieren."}},"consentModal":{"title":"Wir sch\u00e4tzen Ihre Privatsph\u00e4re","description":"Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell, w\u00e4hrend andere uns helfen, diese Website und Ihre Erfahrung zu verbessern.\r\nHier k\u00f6nnen Sie verschiedene auf dieser Website verwendete Tags \/ Tracker \/ Analyse-Tools ausw\u00e4hlen und deaktivieren."},"consentNotice":{"description":"Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell, w\u00e4hrend andere uns helfen, diese Website und Ihre Erfahrung zu verbessern.","learnMore":"Erweiterte Einstellungen "}},"en":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"Shopping Cart","description":""},"Land":{"title":"Country","description":""},"Referenz URL":{"title":"referrer url","description":""},"Safari Drittanbieter Cookie Check":{"title":"safari third party check","description":""},"FacebookPixel":{"title":"FacebookPixel","description":""},"purposes":{"advertisement":{"title":"Advertisements","description":"These services process personal information to sho"},"functional":{"title":"Essential","description":"Essential cookies enable fundamental functionaliti"},"marketing":{"title":"Marketing","description":"Marketing cookies are used by third parties or pub"},"performance":{"title":"Performance Optimization","description":"The
161se services process personal information to opt"}},"consentModal":{"title":"We value your privacy","description":"We use cookies on our website. Some of them are essential, while others help us to improve this website and your experience.\r\nHere you can choose or deactivate different tags \/ tracker \/ analytic-tools used on this website."},"consentNotice":{"description":"We use cookies on our website. Some of them are essential, while others help us to improve this website and your experience.","learnMore":"advanced settings "}},"it":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"carrello della spesa","description":""},"Land":{"title":"nazione","description":""},"Referenz URL":{"title":"URL di riferimento","description":""},"Safari Drittanbieter Cookie Check":{"title":"cookie di terze parti safari","description":""},"consentNotice":{"learnMore":"impostazioni avanzate "}},"fr":{"Session":{"title":"Session","description":""},"Warenkorb":{"title":"Panier","description":""},"Land":{"title":"Pays","description":""},"Referenz URL":{"title":"URL de r\u00e9f\u00e9rence","description":""}
161,"Safari Drittanbieter Cookie Check":{"title":"cookie tiers safari","description":""},"consentNotice":{"learnMore":"r\u00e9glages avanc\u00e9s "}},"sl":{"Warenkorb":{"title":"Ko\u0161arica","description":""},"Land":{"title":"Dr\u017eava","description":""},"Referenz URL":{"title":"Napotitveni URL","description":""},"Safari Drittanbieter Cookie Check":{"title":"Safari preverjanje tretje osebe","description":""},"consentModal":{"privacyPolicy":{"text":" "}},"app":{"required":{"title":"obvezno"},"purpose":"Namen"},"purposeItem":{"app":"Namen","apps":"Nameni"},"decline":"Zavrni","ok":"V redu","acceptSelected":"Sprejmi izbrano","acceptAll":"Sprejmi vse","poweredBy":"Klaro!"},"hr":{"Warenkorb":{"title":"Ko\u0161arica","description":""},"Land":{"title":"Dr\u017eava","description":""},"Referenz URL":{"title":"Referentni URL","description":""},"Safari Drittanbieter Cookie Check":{"title":"Safari provjera tre\u0107e strane","description":""},"consentNotice":{"learnMore":"Saznajte vi\u0161e "},"purposeItem":{"app":"Svrha","apps":"Svrhe"},"acceptSelected":"Prihvati odabrano","acceptAll":"Prihvati sve"}}}; 162 for (let a of configWithCallback.services) { 163 a.callback = function (s, o) { 164 //callback for specific service 165 } 166 } 167 168 configWithCallback.callback = function (s, o) { 169 //callback for every service 170 if (0) { 171 window.dataLayer = window.dataLayer || [] 172 dataLayer.push({event: "consentManagerChange", service_name: o.name, service_value: s}); 173 } 174 } 175 176 var 177 // script element 178 klaroScript = d.createElement("SCRIPT") 179 180 // Klaro source - current version: 0.7.22 181 , klaroSrc = "https://gutscheine.cafe-wien.at/includes/javascript/klaro/klaro.js" 182 183 // load indicator 184 , klaroLoaded = false 185 186 , klaroCssOverride = d.querySelector("#klaro-css-override") 187 188 // main function 189 , callback = function () { 190 var consentConfig = (configWithCallback); 191 var i, x, cookies, rgx, editBtn, style; 192 193 window.consentConfig = consentConfig; 194 195 // turn cookie regex strings to actual regex 196 for(i = 0; i < consentConfig.services.length; i++) { 197 cookies = consentConfig.services[i].cookies; 198 for(x = 0; x < cookies.length; x++) { 199 200 if(cookies[x][0].match(/^\/?\^|\$$/)) { 201 rgx = new RegExp(cookies[x][0].replace(/^\/|\/$/g, "")); 202 consentConfig.services[i].cookies[x][0] = rgx; 203 } 204 } 205 } 206 207 // append klaroManager to global scope 208 window.klaroManager = klaro.getManager(consentConfig); 209 210 // dynamically append style element after Klaro was loaded 211 // to make sure styles are overridden 212 style = d.createElement("STYLE"); 213 style.innerHTML = klaroCssOverride.innerHTML; 214 d.head.appendChild(style); 215 216 // note: after confirmation, Kalro can't be displayed as notice 217 if(!klaroManager.confirmed) { 218 klaro.show(consentConfig); 219 } 220 221 // add edit button (fingerprint icon) 222 editBtn = d.createElement("a"); 223 editBtn.href = "#"; 224 editBtn.title = "Cookies bearbeiten "; 225 editBtn.innerHTML = d.querySelector("#manage-consent-template").innerHTML; 226 editBtn.id = "klaro-edit-btn"; 227 editBtn.style = "position:fixed; bottom:20px; right:20px; font-size:10px;"; 228 editBtn.addEventListener("click", function(event) { 229 event.preventDefault(); 230 klaro.show(consentConfig); 231 return false; 232 }); 233 d.body.appendChild(editBtn); 234 } 235 236 237 // load trigger for main function 238 , loadCallback = function() { 239 // check if Klaro was loaded and document is ready 240 if(klaroLoaded === false || ["interactive", "complete"].indexOf(d.readyState) === -1) { 241 return; 242 } 243 244 callback(); 245 246 d.removeEventListener("readystatechange", loadCallback); 247 klaroScript.removeEventListener("load", loadCallback); 248 } 249 250 ; 251 252 253 d.addEventListener("readystatechange", loadCallback); 254 255 // append script element to load Klaro.js 256 klaroScript.src = klaroSrc;
257 klaroScript.addEventListener("load", function() { 258 klaroLoaded = true; 259 loadCallback(); 260 }); 261 d.head.appendChild(klaroScript); 262 263 loadCallback(); 264} (window, document); 265 266</script>
266 267<!-- Google Tag Manager -->
268<script>
vendor: 341 bytes, lines 268-272
268 269 (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'}); 270 var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:''; 271 j.async=true;j.src= '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); }) 272 (window,document,'script','dataLayer','
272GTM-KRB2DS3
vendor: 4 bytes, line 272
272');
273</script>
vendor: 68 bytes, lines 273-274
273 274<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=
274GTM-KRB2DS3
vendor: 83 bytes, line 274
274" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
275<!-- End Google Tag Manager -->
276<script> 277 function waitForGTM(callback) { 278 const timeout = 5000; 279 const start = Date.now(); 280 (function isLoaded() { 281 if (checkGTMs()) { 282 callback(); 283 } else if (Date.now() - start < timeout) { 284 setTimeout(isLoaded, 50); 285 } else { 286 console.log('GTM not loaded in time'); 287 } 288 })(); 289 290 function checkGTMs() { 291 292 293 294 if (!window.google_tag_manager) { 295 return false; 296 } 297 298 299 if (!window.google_tag_manager['GTM-KRB2DS3']) { 300 return false; 301 } 302 303 304 return true; 305 } 306 } 307</script>
307 308 309
310<script data-type="text/javascript" data-name="FacebookPixel" type="text/plain">
vendor: 439 bytes, lines 310-316
310 311 !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? 312 n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; 313 n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; 314 t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, 315 document,'script','https://connect.facebook.net/en_US/fbevents.js'); 316 fbq('init', '
316586203133161955
vendor: 39 bytes, lines 316-318
316'); 317 318 fbq('track', 'PageView');
319</script>
319 320 321<!-- Copyright (c) 2000-2020 etracker GmbH. All rights reserved. --> 322<!-- This material may not be reproduced, displayed, modified or distributed --> 323<!-- without the express prior written permission of the copyright holder. --> 324<!-- etracker tracklet 5.0 -->
325<script> 326 327 var et_seg1 = "qwk"; 328 var et_seg2 = "ecom"; 329</script>
vendor: 1 bytes, line 329
329
330<script id="_etLoader" data-block-cookies="true" data-respect-dnt="true" data-secure-code="OXELj9" src="//code.etracker.com/code/e.js" async></script>
330 331<!-- etracker tracklet 5.0 end --> 332 333 334
335<script> 336 window.dataLayer = window.dataLayer || []; 337 338 waitForGTM(function () { 339 let items = 340 [] 341 342 dataLayer.push({ecommerce: null}); 343 dataLayer.push({ 344 event: "view_cart", 345 ecommerce: { 346 currency: "EUR", 347 value: 0, 348 items: items 349 } 350 }); 351 }); 352</script>
352 353 <base href="https://gutscheine.cafe-wien.at/" /> 354 355 <link rel="stylesheet" type="text/css" href="templates/qwk/t1/stylesheet.css?v=2157"/> 356 357
357<script> 358 359// init CookieHandler in global namespace 360var CookieHandler; 361 362 363!function (w, d) { 364 365 "use strict"; 366 367 368 /** {Object} */ 369 var COOKIE_SUPPORT = {"device":null,"version":"","isSafari":false,"isMobile":false,"browser":null,"sameSiteSupport":true,"isFbAppBrowser":false}, 370 371 372 /** 373 * 374 * @param v 375 * @returns {boolean} 376 * @private 377 */ 378 _bool = function (v) { 379 if(typeof v === "string" && v.toUpperCase() === "FALSE") { 380 return false; 381 } 382 return !!v; 383 } 384 /** 385 * 386 * @param v 387 * @returns {boolean} 388 * @private 389 */ 390 , _defined = function (v) { 391 return typeof v !== "undefined"; 392 } 393 ; 394 395 /** 396 * 397 * @type {{get: CookieHandler.get, set: CookieHandler.set, remove: CookieHandler.remove}} 398 */ 399 CookieHandler = { 400 /** 401 * get all cookies or cookie value by name 402 * @param name {string} 403 * @returns {*} 404 */ 405 get : function (name) { 406 var cookies = document.cookie.split(/\s*;\s*/) // array with cookie strings (name=value) 407 , i // iterator number 408 , t // temporary array containing name and value ([name, value]) 409 , r = {} // result object 410 ; 411 for(i = 0; i < cookies.length; i++) { 412 t = cookies[i].split("="); 413 t[0] = decodeURIComponent(t[0]); 414 t[1] = decodeURIComponent(t[1]); 415 r[t[0]] = t[1]; 416 if(name && t[0] === name) { 417 return t[1]; 418 } 419 } 420 return r; 421 }, 422 /** 423 * sets cookie and adds default flags if not given 424 * @param name {string} 425 * @param value {string} 426 * @param s {object} 427 * object containing the settings i.e. 428 * { 429 * path : "/", 430 * domain : "example.com", 431 * expires : 86400, // seconds till expiration date (will be converted to date string) 432 * SameSite: "none", 433 * secure : true 434 * } 435 * @returns {string|boolean} 436 */ 437 set : function (name, value, s) { 438 var parts, 439 i, 440 cookieStr, 441 remove = false; 442 443 // prepare value and name 444 // .get() will always return a string 445 value = value.toString(); 446 name = name.toString(); 447 s = s || {}; 448 449 parts = [encodeURIComponent(name) + "=" + encodeURIComponent(value)]; 450 451 if(!_defined(s.SameSite) && document.location.protocol === 'https:') { 452 // Safari turns any SameSite flag into strict => solution: do not add it 453 if(COOKIE_SUPPORT.sameSiteSupport === true) { 454 s.SameSite = "none"; 455 } 456 if(!_defined(s.secure)) { 457 s.secure = true; 458 } 459 } 460 461 for(i in s) { 462 switch(i) { 463 case "expires": 464 if(s[i] < 0) { 465 remove = true; 466 } 467 s[i] = (new Date(Date.now()+(s[i] * 1000))).toGMTString(); 468 break; 469 case "secure": 470 if(_bool(s[i])) { 471 s[i] = ""; 472 } else { 473 delete s[i]; 474 } 475 break; 476 case "path": 477 case "domain": 478 case "SameSite": 479 default: 480 break; 481 } 482 if(_defined(s[i])) { 483 parts.push(i + (s[i] ? "=" + s[i] : "")); 484 } 485 } 486 cookieStr = parts.join("; "); 487 document.cookie = cookieStr; 488 489 if(remove === false && this.get(name) !== value) { 490 console.error("Cookiehandler.set() failed to set cookie with string \"" + cookieStr + "\""); 491 return false;
492 } 493 494 console.info("CookieHandler.set() set cookie with string %c\"" + cookieStr + "\"", "color: #50B000; text-decoration: underline;"); 495 return cookieStr; 496 }, 497 /** 498 * remove cookie by name (sets expiration date 1 minute in the past) 499 * @param name 500 * @returns {*} 501 */ 502 remove : function (name) { 503 return this.set(name, "", {expires : -60}); 504 }, 505 506 /** 507 * prints help to console 508 */ 509 help : function () { 510 var nl = "\n", 511 tb = "\t", 512 lines = [ 513 "CookieHandler.get([name]) {...}" 514 , tb + "Returns cookie value by name." 515 , tb + "Returns object with key => values if no name given." 516 , "" 517 , "CookieHandler.set(name, value[, s]) {...}" 518 , tb + "Sets the cookie with name and value." 519 , tb + "The third parameter s(ettings) is optional." 520 , tb + "Returns false on error." 521 , tb + "Some settings may be applied by default (SameSite=none; secure)" 522 , tb + "example:" 523 , tb + "{" 524 , tb + " path : \"/\"," 525 , tb + " domain : \"example.com\"," 526 , tb + " expires : 86400, // seconds till expiration date (will be converted to date string)" 527 , tb + " SameSite: \"none\"," 528 , tb + " secure : true" 529 , tb + "}" 530 , "" 531 , "CookieHandler.remove(name) {...}" 532 , tb + "Removes cookie by setting its expiration date 1 minute into the past." 533 , "" 534 , "CookieHandler.help() {...}" 535 , tb + "Prints help to console." 536 ]; 537 538 console.info("%c" + lines.join(nl), "color: #888888;"); 539 } 540 }; 541 542 543} (window, document); 544 </script>
544 545 546
546<script> 547 var selected; 548 var submitter = null; 549 550 function submitFunction() { 551 submitter = 1; 552 } 553 function popupWindow(url) { 554 window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,left=150') 555 } 556 557 function selectRowEffect(object, buttonSelect) { 558 if (!selected) { 559 if (document.getElementById) { 560 selected = document.getElementById('defaultSelected'); 561 } else { 562 selected = document.all['defaultSelected']; 563 } 564 } 565 566 if (selected) selected.className = 'moduleRow'; 567 object.className = 'moduleRowSelected'; 568 selected = object; 569 } 570 571 function rowOverEffect(object) { 572 if (object.className == 'moduleRow') object.className = 'moduleRowOver'; 573 } 574 575 function rowOutEffect(object) { 576 if (object.className == 'moduleRowOver') object.className = 'moduleRow'; 577 } 578 579 580 // Für Checkout Prozess 581 582 function selectRowEffectCheckoutP(object, buttonSelect) { 583 584 if (selected) selected.className = 'moduleRowCheckout'; 585 object.className = 'moduleRowSelectedCheckout'; 586 selected = object; 587 588 } 589 590 function selectRowEffectCheckout(object, buttonSelect) { 591 592 if (!selected) { 593 if (document.getElementById) { 594 selected = document.getElementById('defaultSelected'); 595 } else { 596 selected = document.all['defaultSelected']; 597 } 598 } 599 600 if (selected) { 601 selected.className = 'moduleRowCheckout'; 602 var oldPayment = $(selected).find(":radio").attr("value"); 603 if(selected !== object) { 604 $("#subDiv_"+oldPayment).slideUp(function() { 605 crossDomainIframeResize(false); 606 }); 607 } 608 } 609 object.className = 'moduleRowSelectedCheckout'; 610 selected = object; 611 612 $(object).find(":radio").attr("checked", "checked"); 613 var payment = $(object).find(":radio").attr("value"); 614 $("#subDiv_"+payment).slideDown(function() { 615 crossDomainIframeResize(false); 616 }); 617 618 //remove subselection 619 if (typeof subSelected !== "undefined" && subSelected) { 620 subSelected.className = 'moduleSubRowCheckout'; 621 } 622 } 623 624 function rowOverEffectCheckout(object) { 625 if (object.className == 'moduleRowCheckout') object.className = 'moduleRowOverCheckout'; 626 } 627 628 function rowOutEffectCheckout(object) { 629 if (object.className == 'moduleRowOverCheckout') object.className = 'moduleRowCheckout'; 630 } 631 632 // ENDE 633 634 // Für Checkout Prozess im Administrationsbereich (ROX) 635 636 function selectRowEffectCheckoutROX(object, buttonSelect) { 637 if (!selected) { 638 if (document.getElementById) { 639 selected = document.getElementById('defaultSelected'); 640 } else { 641 selected = document.all['defaultSelected']; 642 } 643 } 644 645 if (selected) 646 selected.className = 'moduleRowCheckout_rox'; 647 object.className = 'moduleRowSelectedCheckout_rox'; 648 selected = object; 649 650 } 651 652 function rowOverEffectCheckoutROX(object) { 653 if (object.className == 'moduleRowCheckout_rox') object.className = 'moduleRowOverCheckout_rox'; 654 } 655 656 function rowOutEffectCheckoutROX(object) { 657 if (object.className == 'moduleRowOverCheckout_rox') object.className = 'moduleRowCheckout_rox'; 658 } 659 660 // ENDE 661 662 function optimizeSizeSelectbox() 663 { 664 var inputSize = $(":text").eq(-1).outerWidth(); 665 var webbrowser = jQuery.browser; 666 var sizeEdit = 0; 667 chrome = navigator.userAgent.toLowerCase().indexOf('chrome') > -1; 668 669 if(inputSize > 20) 670 { 671 $("select").css("width", inputSize + sizeEdit); 672 } 673 } 674 // ENDE 675 676 function popupImageWindow(url) { 677 window.open(url,'popupImageWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,left=150') 678 } 679 </script>
679 680
680<script> 681 if (top === self && "" != ''){ 682 function iCheckWebsiteRedirect() 683 { 684 window.location = ""; 685 } 686 687 if(typeof jQuery == "undefined" || false === false) 688 { 689 iCheckWebsiteRedirect(); 690 } 691 else 692 { 693 jQuery.ajax({ 694 url: "logoff.php?action=ajax", 695 success: function() { 696 iCheckWebsiteRedirect(); 697 }, 698 error: function() { 699 iCheckWebsiteRedirect(); 700 }, 701 async: false 702 }); 703 } 704 } 705 </script>
705 706
707<script type="text/javascript" src="./templates/qwk/t1/javascript/libs/jquery/jquery.js"></script>
vendor: 1 bytes, line 707
707
708<script type="text/javascript" src="./templates/qwk/t1/javascript/libs/jquery-ui/jquery-ui.js"></script>
708 709
710<script type="text/javascript" > 711 712 function strpos (haystack, needle, offset) { 713 // Finds position of first occurrence of a string within another 714 var i = (haystack+'').indexOf(needle, (offset ? offset : 0)); 715 return i === -1 ? false : i; 716 } 717 718 var prevHeight = 0, alreadyJumped = false; 719 function crossDomainIframeResize(jumpToNavtrailAnchor, jumpOffset) { 720 721 var iframe = document.getElementById( 'inneriframe' ); 722 723 if (typeof jumpOffset == "undefined") jumpOffset = 0; 724 725 // webkit browsers (safari,chrome) provide wrong scrollHeight so get only offsetHeight ### 10_215 ### 726 727 var height = $("#navtrail_anchor").height(); 728 //var height = document.body.offsetHeight; 729 if (height != prevHeight || jumpToNavtrailAnchor) { 730 prevHeight = height; 731 732 if(height == 0) { 733 height = 1800; 734 } 735 736 if (window.parent != window) { 737 try { 738 if(window.parent.updateIFrame) 739 window.parent.updateIFrame(height,''); 740 741 } catch (e) { 742 //console.warn("not embedded in start.php"); 743 } 744 745 try { 746 747 var navtrailJumpOffset 748 = parseInt(window.getComputedStyle(document.getElementById("navtrail_anchor")).marginTop) 749 + jumpOffset; 750 751 if (typeof console !== "undefined") { 752 console.warn("ResizeIframe url is not configured. Fallback to postMessge-API."); 753 if (!alreadyJumped || jumpToNavtrailAnchor) { 754 window.top.postMessage(["Inc.updateIFrame", height, true, navtrailJumpOffset], "*"); 755 alreadyJumped = true; 756 } else { 757 window.top.postMessage(["Inc.updateIFrame", height], "*"); 758 } 759 } 760 } catch (e) { 761 console.error(e); 762 } 763 } else { 764 $("body").addClass("standalone"); 765 } 766 } 767 } 768 769 $().ready(function() { 770 crossDomainIframeResize(true); 771 }); 772 773 $(window).on("load", function() { 774 setTimeout(function() {crossDomainIframeResize(true) }, 300); 775 crossDomainIframeResize(true); 776 $(window).resize(function() { 777 if (crossDomainResizeHandler) clearTimeout(crossDomainResizeHandler); 778 crossDomainResizeHandler = setTimeout(function() {crossDomainIframeResize(false) }, 300); 779 }); 780 }); 781 782</script>
782 783<!-- xtc_get_shop_analytics_code -->
783<script> 784 // Input Replacement 785 function textReplacement(input){ 786 var originalvalue = input.val(); 787 input.focus( function(){ 788 if( $.trim(input.val()) == originalvalue ){ input.val(''); } 789 }); 790 input.blur( function(){ 791 if( $.trim(input.val()) == '' ){ input.val(originalvalue); } 792 }); 793 } 794 795 // FIX SAFARI THIRD PARTY COOKIE PROBLEM 796 if (window.top != window) { // wenn in iframe 797 if (navigator.userAgent.indexOf("Safari") >= 0 && navigator.userAgent.indexOf("Chrome") == -1) { // und der Browser ist safari 798 799 var safariCookieFirstPartySaved = false; 800 801 var safariPopupFunc = function (event) { 802 var target; 803 if (document.cookie.indexOf("safari_third_cookie=1") == -1 && (!localStorage || (localStorage && localStorage.getItem("safari_third_cookie") !== "1"))) { // only ONCE 804 805 // find target of click event 806 target = event.target || event.srcElement; 807 if(target.nodeType === 3) { 808 target = target.parentNode; 809 } 810 811 CookieHandler.set("safari_third_cookie", "1"); 812 try { 813 localStorage.setItem("safari_third_cookie", "1"); 814 } catch(e) { 815 console.log("localStorage could not be written"); 816 } 817 818 if (!safariCookieFirstPartySaved) { 819 var safariCookieUrl = "https://gutscheine.cafe-wien.at/safari_third_party.php"; 820 var safariPopup = window.open(safariCookieUrl); 821 if (safariPopup) { 822 safariPopup.blur(); 823 window.focus(); 824 } else { 825 if (console) console.log("Safari Third Party Fix probably blocked by popup blocker."); 826 } 827 safariCookieFirstPartySaved = true; 828 } 829 830 // check for file input and 831 // use preventDefault to stop file dialog in Safari 832 if(target && target.nodeName === 'INPUT' && target.type === 'file') { 833 event.preventDefault(); 834 return false; 835 } 836 } 837 window.removeEventListener('click', safariPopupFunc); 838 }; 839 840 window.addEventListener('click', safariPopupFunc); 841 // $(window).one('click', safariPopupFunc); 842 843 } 844 } 845 </script>
845 846
847<script> 848 document.addEventListener("DOMContentLoaded", function() { 849 var html = '<div class="cookie-msg">' + 850 'Diese Internetseite verwendet Cookies, um die Nutzererfahrung zu verbessern und den Benutzern bestimmte Dienste und Funktionen bereitzustellen. ' + 851 '<a href="https://gutscheine.cafe-wien.at/datenschutz" target="_blank" rel="noopener" class="cookie-details">Details anzeigen</a> ' + 852 '<div class="button">' + 853 '<a id="cookie-btn" class="buttonLink">OK</a>' + 854 '</div>' + 855 '</div>'; 856 var div = document.createElement("div"); 857 div.innerHTML = html; 858 div.id = "cookie-bar"; 859 div.style.display = 'none'; 860 861 if (localStorage && localStorage.getItem("cookiesallowed") !== "1") { 862 div.style.display = 'block'; 863 } 864 document.body.appendChild(div); 865 document.getElementById("cookie-btn").addEventListener("click", function() { 866 if (localStorage) { 867 localStorage.setItem("cookiesallowed", "1"); 868 div.style.display = 'none'; 869 } 870 }); 871 }); 872</script>
872 873<style> 874 #cookie-bar { 875 z-index: 1000; 876 position: fixed; 877 bottom: 0; 878 left: 0; 879 right: 0; 880 background:white; 881 } 882 .cookie-msg { 883 padding:1em; 884 text-align: center; 885 } 886 .cookie-msg .button, .cookie-msg .button .buttonLink { 887 display: inline-block; 888 vertical-align: middle; 889 } 890</style> 891 892
893<script type="text/javascript"> 894 !function(w, d) { 895 896 "use strict"; 897 898 /** 899 * @type Array 900 */ 901 var localStorageWhitelist = []; 902 903 /** 904 * 905 * @param name 906 * @param whitelist 907 * @param getResult 908 * @returns {boolean} 909 */ 910 var whitelistCheck = function (name, whitelist, getResult) { 911 if(whitelist.indexOf(name) === -1) { 912 if(getResult) { 913 return false; 914 } 915 throw "\"" + name + "\" not whitelisted! whitelist: " + whitelist.join(", "); 916 } 917 return true; 918 }; 919 920 /** 921 * 922 * @type {} 923 * object containing functions that can be called from outside 924 */ 925 var Inc = { 926 927 setLocalStorage : function (name, value) { 928 whitelistCheck(name, localStorageWhitelist); 929 localStorage.setItem(name, value); 930 } 931 , removeLocalStorage : function (name) { 932 whitelistCheck(name, localStorageWhitelist); 933 localStorage.removeItem(name); 934 } 935 936 937 , consentManager : { 938 /** 939 * accept/reject single service and it's cookies 940 * @param name 941 * @param value 942 */ 943 set : function (name, value) { 944 if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!"); 945 klaroManager.updateConsent(name, !!value); 946 klaroManager.saveAndApplyConsents(); 947 } 948 949 /** 950 * reset service to default 951 * @param name 952 */ 953 , reset : function (name) { 954 if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!"); 955 if(name) { 956 this.set(klaroManager.getDefaultConsent(name)); 957 return; 958 } 959 klaroManager.resetConsents(); 960 klaroManager.saveAndApplyConsents(); 961 } 962 963 /** 964 * accept/reject all services and their cookies that match given purpose 965 * @param purpose 966 * @param value 967 */ 968 , setByPurpose : function (purpose, value) { 969 if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!"); 970 var services = klaroManager.config.services, i; 971 for(i = 0; i < services.length; i++) { 972 if(services[i].purposes.indexOf(purpose) !== -1) { 973 this.set(services[i].name, value); 974 } 975 } 976 klaroManager.saveAndApplyConsents(); 977 } 978 979 /** 980 * accept/reject all services and their cookies that are optional 981 * @param value 982 */ 983 , setByOptional : function ( value ) { 984 if(typeof klaroManager === "undefined") return console.error("klaroManager undefined!"); 985 var services = klaroManager.config.services, i; 986 for(i = 0; i < services.length; i++) { 987 if(services[i].required === false) { 988 this.set(services[i].name, value); 989 } 990 } 991 klaroManager.saveAndApplyConsents(); 992 993 } 994 995 /** 996 * alias for this.setByOptional() 997 * @param value 998 * @returns {void | undefined} 999 */ 1000 , setAll : function ( value ) { 1001 return this.setByOptional ( value ); 1002 } 1003 } 1004 1005 }; 1006 1007 w.incTest = Inc; 1008 1009 // listen for postMessage event 1010 w.addEventListener("message", function (event) { 1011 1012 var funcName, args, rawName, returnValue, funcArr, tempFunc, i; 1013 1014 // check data-type 1015 switch(({}).toString.call(event.data).replace(/^\[\w+ |\]$/g,"").toUpperCase()) { 1016 // array 1017 case "ARRAY": 1018 args = event.data; 1019 rawName = args.shift(); 1020 funcName = rawName.replace(/^inc(ert)?\./i, ""); 1021 funcArr = funcName.split("."); 1022 1023 // check if function name is prefixed with Inc. or Incert. 1024 if(funcName === rawName) { 1025 return; 1026 } 1027 1028 tempFunc = Inc; 1029 1030 // search in IncertClass instance 1031 for( i = 0; i < funcArr.length; i++) { 1032 if(!tempFunc[funcArr[i]]) { 1033 break; 1034 } 1035 if(i === (funcArr.length -1)) { 1036 // apply args to function with appropriate context 1037 returnValue = tempFunc[funcArr[i]].apply(tempFunc, args); 1038 console.info("\"" + rawName + "\" called successfully!; arguments:", args, "; returnValue:", returnValue); 1039 return; 1040 } 1041 tempFunc = tempFunc[funcArr[i]]; 1042 } 1043 1044 throw "\"" + rawName + "\" is not defined"; 1045 1046 break; 1047 default: 1048 break; 1049 } 1050 }); 1051 } (window, document); 1052</script>
1052 1053 1054</head> 1055<body class="body" onload="crossDomainIframeResize();"> 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076
1077<script> 1078 var oneColumnWindowWidth = parseInt("600") || 400, 1079 twoColumnWindowWidth = parseInt("1200") || 640, 1080 respDropSidebarWindowWidth = parseInt("800") || 800, 1081 voucherSliderItemMargin = ((parseInt("20") || 20) / 2), 1082 listingSpecialCountdownFormat = "" | "%DT %Hh %Mm %Ss"; 1083 1084 //Thumbs Voucher Slider Settings (see slick-init.js) 1085 var voucherSliderShowArrows = ("" == "1") || false, 1086 voucherSliderShowDots = ("1" == "1") || false, 1087 voucherSliderCenterMode = ("" == "1") || false, 1088 vSliderMinItems = parseInt("1") || 1, 1089 vSliderMaxItems = parseInt("2") || 3, 1090 cSliderMinItems = parseInt("1") || 1, 1091 cSliderMaxItems = parseInt("3") || 1, 1092 voucherSliderItemsToShowMobile = parseInt("3") || 1, 1093 voucherSliderItemsToShowTablet = parseInt("5") || 3, 1094 voucherSliderItemsToShowDesktop = parseInt("5") || 5; 1095 1096 var currentCurrencySymbol = "\u20ac"; 1097</script>
1097 1098 1099
1100<script> 1101 const subShopId = -1; 1102</script>
1102 1103
1104<script type="text/javascript" 1105 src="./templates/qwk/t1/javascript/live.min.js?v=2157"></script>
1105 1106 1107<div class="body-inc " id="navtrail_anchor"> 1108 <!--Header --> 1109 <header class="inc-header sticky"> 1110 <a href="#inc-body" class="sr-only">Zum Hauptinhalt</a> 1111 <div class="inc-header-inner"> 1112 1113 1114<div class="box-header"> 1115 <a href="https://gutscheine.cafe-wien.at/" class="header-logo" > 1116 <img src="templates/qwk/images/exp_logo.png" alt="Schritt zurück" /> 1117 </a> 1118 <a class="customer-website" href="https://www.cafe-wien.at/" target="_blank"> <span class="icon-sphere" aria-hidden="true"></span> 1119 <span class="website-url hidden-xs" >zur Website</span> 1120 </a> 1121 </div> 1122 1123 <div class="inc-navigation-container "> 1124 1125 1126 1127 1128<ul class="inc-page-navigation" role="navigation" id="inc-page-navigation-container"> 1129 <li> 1130 <a href="https://www.cafe-wien.at/de/die-cafes/standorte.html"> 1131 Unsere Cafes & Restaurants 1132 </a> 1133 </li> 1134 <li class="language-switch-burger hidden-navi-sm-md-lg"> 1135 1136<div class="language-switch"> 1137 <div class="language-switch-shortcode"> 1138 <a href="https://gutscheine.cafe-wien.at/warenkorb" aria-label="Deutsch" class="language-item selected"> 1139 <span class="language-item-shortcode">de</span> 1140 </a> 1141 <a href="https://gutscheine.cafe-wien.at/en/shoppingcart" aria-label="Englisch" class="language-item "> 1142 <span class="language-item-shortcode">en</span> 1143 </a> 1144 </div> 1145 </div> 1146 1147
1148<script> 1149 $(".language-toggle-active-element").on('click', function(event){ 1150 event.stopImmediatePropagation(); 1151 $(this).parent().toggleClass('opened'); 1152 }); 1153</script>
1153 1154 1155 </li> 1156 </ul> 1157
1158<script> 1159 let id = 0; 1160 let currentId = 0; 1161</script>
1161 1162 1163 1164 1165 <ul class="inc-shop-navi"> 1166 <li class="inc-nav-item"> 1167 <a class="inc-nav-link inc-nav-value-check-page" href="https://gutscheine.cafe-wien.at/wert-abfragen" title="Wertabfrage" aria-label="Wertabfrage"> 1168 <i class="im icon-card" aria-hidden="true"></i> 1169 <span class="inc-nav-link-caption">Wertabfrage</span> 1170 </a> 1171 </li> 1172 1173 <!-- 1174 <li class="inc-nav-item"> 1175 <a class="inc-nav-link inc-nav-account" href="https://gutscheine.cafe-wien.at/wert-abfragen" title="Konto" aria-label="Konto"> 1176 <i class="im icon-card" aria-hidden="true"></i> 1177 <span class="inc-nav-link-caption">Wertabfrage</span> 1178 </a> 1179 </li> 1180 --> 1181 1182 <li class="inc-nav-item "> 1183 <a class="inc-nav-link inc-nav-cart inc-modal-control" 1184 href="https://gutscheine.cafe-wien.at/warenkorb" data-toggle="modal-cart"> 1185 <div class="inc-nav-cart-inner"> 1186 <i class="im icon-shopping-cart" aria-hidden="true"></i> 1187 <span class="inc-nav-link-caption"> Warenkorb</span> 1188 <span id="inc-cartItemCount" 1189 class="empty">0</span> 1190 </div> 1191 </a> 1192 <div class="inc-modal-menu inc-nav-cart " id="modal-cart"> 1193 <div class="inc-modal-menu-inner"> 1194 1195 1196 1197 1198 1199<div class="infobox-cart"> 1200 <div class="infobox-cart-header"> 1201 <h3><a href="https://gutscheine.cafe-wien.at/warenkorb">Ihr Warenkorb</a></h3> 1202 </div> 1203 <div class="infobox-cart-content-container"> 1204 <table class="infobox-cart-content"> 1205 <tbody class="infobox-cart-content-tbody"> 1206 <!-- Fill via Ajax --> 1207 </tbody> 1208 </table> 1209 <div class="infobox-cart-empty-content" style="display: none;"> 1210 Sie haben noch keine Artikel in Ihrem Warenkorb. 1211 </div> 1212 </div> 1213 <div id="infobox-cart-reservations"></div> 1214</div> 1215<div class="inc-modal-menu-footer"> 1216 <div class="infobox-cart-total-sum-text-container"> 1217 <div class="infobox-cart-total-sum-text"> 1218 Summe 1219 <span id="infobox-cart-total-sum"></span> 1220 </div> 1221 <span id="infobox-cart-total-points"></span> 1222 1223 <div class="infobox-shipping-link"> 1224 <a href="https://gutscheine.cafe-wien.at/popup?coID=1" class="ajax popup"> 1225 zzgl. Versandkosten 1226 </a> 1227 </div> 1228 </div> 1229 1230 1231 <a class="call-to-action" href="https://gutscheine.cafe-wien.at/checkout-daten">zur Kasse</a> 1232 </div> 1233
1234<script> 1235 let showCartImage = ""; 1236 let showCartItemQuantity = ""; 1237 let showCartItemDelete = ""; 1238 let pointSingleLabel = "Punkt"; 1239 let pointsMultipleLabel = "Punkte"; 1240</script>
1240 1241 1242
1243<script> 1244 $().ready(function () { 1245 1246 loadShoppingCart(); 1247 }); 1248 1249 if (!String.format) { 1250 // String format function is used to inject variables into lang-file strings 1251 // {i} indicators will be replaced by the corresponding variables 1252 String.format = function (format) { 1253 var args = Array.prototype.slice.call(arguments, 1); 1254 return format.replace(/{(\d+)}/g, function (match, number) { 1255 return typeof args[number] != 'undefined' ? args[number] : match; 1256 }); 1257 }; 1258 } 1259 1260 1261</script>
1261 1262 1263 1264 </div> 1265 </div> 1266 </li> 1267 1268 <div class="hidden-navi-xs"> 1269 1270<div class="language-switch"> 1271 <div class="language-switch-shortcode"> 1272 <a href="https://gutscheine.cafe-wien.at/warenkorb" aria-label="Deutsch" class="language-item selected"> 1273 <span class="language-item-shortcode">de</span> 1274 </a> 1275 <a href="https://gutscheine.cafe-wien.at/en/shoppingcart" aria-label="Englisch" class="language-item "> 1276 <span class="language-item-shortcode">en</span> 1277 </a> 1278 </div> 1279 </div> 1280 1281
1282<script> 1283 $(".language-toggle-active-element").on('click', function(event){ 1284 event.stopImmediatePropagation(); 1285 $(this).parent().toggleClass('opened'); 1286 }); 1287</script>
1287 1288 1289 </div> 1290 </ul> 1291 1292 1293<button type="button" id="navigation-toggle-responsive" aria-expanded="false" aria-controls="inc-page-navigation-container"> 1294 <span class="sr-only"> 1295 <span class="navigation-toggle-responsive-open">Navigation öffnen</span> 1296 <span class="navigation-toggle-responsive-close" style="display: none">Navigation schlieÃen</span> 1297 </span> 1298 <div class="navigation-toggle-responsive-burger" aria-hidden="true"> 1299 <span></span> 1300 <span></span> 1301 <span></span> 1302 </div> 1303</button>
1304<script src="./templates/qwk/t1/javascript/header-mobile.js"></script>
1304 </div> 1305 </div> 1306 </header> 1307 1308 <noscript> 1309 <div class="inc-error-box center" role="alert"> 1310 Bitte <b>aktivieren Sie JavaScript</b> in Ihrem Browser! Andernfalls kann es zu Problemen bei der Anzeige der Produkte, bzw. bei der Durchführung Ihrer Bestellung kommen. 1311 </div> 1312 </noscript> 1313 1314 <!--Sidebar --> 1315 1316 <!--Content --> 1317 <div class="content-inc " id="inc-body" role="main"> 1318 <!-- Breadcrumbs / Navtrail and Wizard --> 1319 <div class="navtrail"> 1320 <div class="inc-content-container cc-reset-padding-top-bottom"> 1321 <a href="https://gutscheine.cafe-wien.at/" class="headerNavigation">Shop</a> / <a href="https://gutscheine.cafe-wien.at/warenkorb" class="headerNavigation">Warenkorb</a> 1322 </div> 1323 </div> 1324 1325 1326 <!-- DISPLAY_CATEGORIES_WITH_PRODUCTS --> 1327 1328 1329 1330<div class="inc-checkout inc-shopping-cart "> 1331 <div class="inc-content-container button-back-top"> 1332 <div class="button-back"> 1333 <div class="button"> 1334 <a class="buttonLink" href="javascript:goBack();" tabindex="0" 1335 data-goback-fallback="https://gutscheine.cafe-wien.at/" 1336 data-goback-fallback-text="Schritt zurück">Schritt zurück</a> 1337 </div> 1338 </div> </div> 1339 <div class="inc-content-container"> 1340 <h1>Ihr Warenkorb</h1> 1341 <div class="error-container"> 1342 </div> 1343 <div class="center"> 1344 Sie haben noch keine Artikel in Ihrem Warenkorb. 1345 </div> 1346 <div class="button-row"> 1347 <div class="button"><a class="buttonLink" href="https://gutscheine.cafe-wien.at/">weitere Artikel</a></div> 1348
1348<script> 1349 var link = document.createElement("LINK"); 1350 link.rel = "stylesheet"; 1351 link.href = "https://deingeschenk.einfach-schenken.com/templates/global/t1/teaser.css"; 1352 document.head.appendChild(link); 1353 1354 var teaser = document.createElement("div"); 1355 teaser.classList.add("digital-schenken-teaser-inc"); 1356 1357 var teaserText = document.createElement('div'); 1358 teaserText.classList.add("digital-schenken-teaser-text-inc"); 1359 1360 var heading = document.createElement("H2"); 1361 heading.innerHTML = "Gutscheine JETZT digital verschenken!"; 1362 1363 var paragraph = document.createElement("P"); 1364 paragraph.innerHTML = "Verschenken Sie die gekauften Gutscheine nun digital: Wählen Sie das Design der Abholseite und senden Sie den Link beispielsweise per WhatsApp, Signal oder E-Mail an den Beschenkten.<br/><br/><strong>Hierzu einfach auf den Button âDigitale Ãbergabeâ unter dem Gutschein klicken.</strong>"; 1365 1366 var teaserImgContainer = document.createElement("div"); 1367 teaserImgContainer.classList.add("digital-schenken-teaser-img-inc"); 1368 var teaserImg = document.createElement("img"); 1369 teaserImg.src = ""; 1370 teaserImg.alt = ""; 1371 1372 teaserImgContainer.appendChild(teaserImg); 1373 teaserText.appendChild(heading); 1374 teaserText.appendChild(paragraph); 1375 teaser.appendChild(teaserText); 1376 teaser.appendChild(teaserImgContainer); 1377 1378 window.setTimeout(function () 1379 { 1380 var container = document.getElementById("inc-info-content-container"); 1381 if (container) 1382 { 1383 container.querySelector(".inc-content-container").appendChild(teaser); 1384 return; 1385 } 1386 1387 container = document.querySelector(".shop-cart"); 1388 if (container) 1389 { 1390 container.insertBefore(teaser, document.querySelector(".clearfix")); 1391 return; 1392 } 1393 1394 container = document.querySelector("#incert-ds-teaser"); 1395 if (container) 1396 { 1397 container.appendChild(teaser); 1398 return; 1399 } 1400 }, 300); 1401 </script>
1401 1402 </div> 1403 </div> 1404 1405 1406 <div id="inc-info-content-container"> 1407 <div class="inc-content-container"> 1408 </div> 1409 </div> 1410 1411 1412<div id="inc-faq-container"> 1413 <div class="inc-content-container"> 1414 <h2 class="contentsTopicsStartpage">FAQ</h2> 1415 <div id="inc-faq-accordion" class="accordion faq"></div> 1416 </div> 1417</div> 1418
1419<script> 1420 let filterSection = "shopping_cart"; 1421 let filterProduct = ""; 1422 let filterCategory = ""; 1423 1424 let filterParentProduct = ""; 1425</script>
1425 1426
1427<script> 1428 let faqUrl= "api/frontend/faq"; 1429 1430 if(filterSection !== '') faqUrl += "/" + filterSection; 1431 1432 if(filterParentProduct !== '') faqUrl += "?product=" + filterParentProduct; 1433 else if(filterProduct !== '') faqUrl += "?product=" + filterProduct; 1434 1435 if(filterCategory !== '' && filterProduct == '') faqUrl += "?category=" + filterCategory; 1436 else if(filterCategory !== '') faqUrl += "&category=" + filterCategory; 1437 1438 $().ready(function() { 1439 getFaqData(); 1440 }); 1441 async function getFaqData() { 1442 await $.ajax({ 1443 url: appendSubShopId(faqUrl), 1444 async: true, 1445 success: (data) => { 1446 if(data.length > 0) { 1447 //FAQ SCHEMA (SEO) 1448 const script = document.createElement('script'); 1449 script.setAttribute('type', 'application/ld+json'); 1450 var schemaData = { 1451 "@context":"https://schema.org", 1452 "@type":"FAQPage", 1453 "mainEntity":[] 1454 }; 1455 1456 //All Questions and answers 1457 for (let i = 0; i < data.length; i++) { 1458 let accordionRowButton = `<button type="button" aria-expanded="false" class="accordion-button" 1459 aria-controls="sect${i}" id="accordion-sect-${i}">${data[i].question}</button>`; 1460 1461 let accordionRowInner = `<div id="sect${i}" role="region" aria-labelledby="accordion-sect-${i}" 1462 class="accordion-content" style="height:0;"><div class="accordion-content-inner">${data[i].answer}</div></div>`; 1463 $('#inc-faq-accordion').append($('<div class="accordion-section"></div>').append(accordionRowButton).append(accordionRowInner)); 1464 1465 1466 //FAQ schema (SEO)s 1467 schemaData.mainEntity.push({ 1468 "@type":"Question", 1469 "name":data[i].question, 1470 "acceptedAnswer": { 1471 "@type": "Answer", 1472 "text":data[i].answer 1473 } 1474 }); 1475 } 1476 1477 //FAQ schema (SEO) 1478 script.textContent = JSON.stringify(schemaData); 1479 document.head.appendChild(script); 1480 } else { 1481 $('#inc-faq-container').hide(); 1482 } 1483 }, 1484 error: () => { 1485 console.log('error getting faq'); 1486 1487 $('#inc-faq-container').hide(); 1488 } 1489 }); 1490 } 1491</script>
1491 1492</div> 1493
1494<script> 1495 1496 function adjustQuantity(element, id, link){ 1497 window.location = link.substr(0, link.indexOf('?'))+"?action=adjust_qty&quantity="+element.value+"&product_id="+id; 1498 return false; 1499 } 1500 $().ready(function() { 1501 $('.inc-cart-quantity').keydown(function(event){ 1502 if(event.keyCode == 13) { 1503 event.preventDefault(); 1504 return false; 1505 } 1506 }); 1507 var $btnRedeemCouponCode = $("#inc-cart-coupon-redeem"); 1508 var $cartCouponTitle = $(".inc-cart-coupon-toggle"); 1509 if($btnRedeemCouponCode.length) { 1510 $btnRedeemCouponCode.click(function(e) { 1511 e.preventDefault(); 1512 e.stopPropagation(); 1513 $("input[name=gv_redeem_code]").val($("input[id=inc-cart-coupon-code]").val()); 1514 if (typeof window.captcha === "object") { 1515 window.captcha.submit().then(function (data) { 1516 const form = $("form#gift_coupon"); 1517 1518 for (const key in data) { 1519 const input = document.createElement('input'); 1520 input.type = 'hidden'; 1521 input.name = key; 1522 input.value = data[key]; 1523 form.append(input); 1524 } 1525 1526 form.trigger("submit"); 1527 }); 1528 } 1529 else { 1530 $("form#gift_coupon").trigger("submit"); 1531 } 1532 }); 1533 } 1534 if($cartCouponTitle.length) { 1535 var $cartCouponContent = $(".inc-cart-coupon-content"); 1536 $cartCouponTitle.click(function(){ 1537 $cartCouponContent.stop().slideToggle(); 1538 }); 1539 } 1540 }); 1541 1542</script>
1542 1543 1544 1545 1546 <section class="inc-section-value-check"> 1547 1548 1549 1550 1551 <div class="infobox-value-check"> 1552 <div class="inc-content-container"> 1553 <h2> 1554 Wertabfrage & Digitale Ablage 1555 </h2> 1556 <div class="infobox-content"> 1557 1558
1559<script src="./templates/qwk/t1/javascript/libs/vue/vue.js"></script>
vendor: 1 bytes, line 1559
1559
1560<script src="./templates/qwk/t1/javascript/libs/qrcodejs/qrcodejs.js"></script>
vendor: 1 bytes, line 1560
1560
1561<script type="text/javascript" src="./templates/qwk/t1/javascript/getCaptcha.js"></script>
1561 1562
1563<script> 1564 const currentRequestCount = null; 1565 const maxRequestCount = 3; 1566</script>
1566 1567 <div id="inc-value-check"> 1568 <div class="inc-voucher-lookup-container"> 1569 <div class="inc-value-check-form"> 1570 <div class="inc-content-container"> 1571 <p> 1572 Barcode / QR-Code eingeben, Wert abfragen und im Wallet am Smartphone speichern. 1573 </p> 1574 <message 1575 v-bind:status="status" 1576 ></message> 1577 <check-form 1578 v-on:set-status="setStatus" 1579 v-on:set-success-message="setSuccessMessage" 1580 ></check-form> 1581 </div> 1582 </div> 1583 <div class="inc-value-check-result " v-if="success.show"> 1584 <div class="inc-content-container"> 1585 <booking 1586 v-bind:status="status" 1587 v-bind:success="success"> 1588 </booking> 1589 <div class="inc-value-check-result-inner "> 1590 <status 1591 v-bind:status="status" 1592 v-bind:success="success" 1593 ></status> 1594 <recharge-value-card 1595 v-bind:status="status" 1596 v-bind:success="success"> 1597 </recharge-value-card> 1598 <qrcode 1599 v-bind:status="status" 1600 v-bind:success="success" 1601 ></qrcode> 1602 </div> 1603 </div> 1604 </div> 1605 </div> 1606 </div> 1607 1608
1609<script type="text/x-template" id="message"> 1610 <div v-if="!status.state && status.msg" class="inc-error-box">{{ status.msg }}</div> 1611</script>
vendor: 1 bytes, line 1611
1611
1612<script type="text/x-template" id="status"> 1613 <div id="inc-value-check-response-details" class="inc-value-check-result-item" v-if="success.show"> 1614 <h3>{{response.name}}</h3> 1615 <span class="voucher-price"> 1616 <span class="currency-left">â¬</span> 1617 {{ response.currentValue }} 1618 <span class="currency-left"></span> 1619 </span> 1620 1621 <p>{{response.shortDescription}}</p> 1622 1623 <p class="voucher-redeem-date-info"> 1624 <span><b>Ausstellungsdatum:</b> <span>{{response.issueDate}}</span></span><br/> 1625 <span><b>Gültig bis:</b> <span>{{response.validUntil}}</span></span> 1626 </p> 1627 1628 1629 </div> 1630</script>
1630 1631
1632<script type="text/x-template" id="qrcode"> 1633 <div id="inc-value-check-qr-code" class="inc-value-check-result-item" v-if="success.show"> 1634 <h3>Download und im Wallet speichern</h3> 1635 <p></p> 1636 <div id="qr-code-outlet"></div> 1637 <a href="" id="qr-code-link" class="inc-download-link default-button"><span class="icon-download"></span>Download</a> 1638 </div> 1639</script>
1639 1640
1641<script type="text/x-template" id="booking"> 1642 <div id="inc-value-check-info-booking" v-if="success.show" class="inc-value-check-result-item"> 1643 {{response.code}} 1644 Code ist gültig. 1645 <template v-if="response.master"> 1646 Sie können den Artikel einlösen: 1647 <a v-bind:href="response.variantTicketMaster.link">{{ response.variantTicketMaster.name }}</a> 1648 <button class="call-to-action" onclick="fetchProductVariants(openQuickbuy, response.master, true, '', true)"> Jetzt buchen </button> 1649 </template> 1650 <template v-else> 1651 Sie können den Artikel nun einlösen. 1652 </template> 1653 <form id="applyVoucherForm" class="hidden" action="" method="post"> 1654 <input type="text" name="gv_redeem_code" v-bind:value="response.code"/> 1655 </form> 1656 </div> 1657</script>
1657 1658
1659<script type="text/x-template" id="recharge-value-card"> 1660 <div id="inc-value-check-recharge" class="inc-value-check-result-item" v-if="success.show && success.chargeLimits"> 1661 <div class="inc-value-recharge-form" > 1662 <h3>Wertkarte beladen</h3> 1663 1664 <p>Bitte tragen Sie den Wert ein, den Sie auf die Karte laden möchten. Sie werden dann in den Warenkorb weitergeleitet.</p> 1665 1666 <form v-on:submit="validate" class="inc-form-inner "> 1667 <div class="inc-value-recharge-form-inner"> 1668 <div class="form-field"> 1669 <span class="currency-left">â¬</span> 1670 <input type="text" v-model="updateValue.value" :class="(updateValue.value ? 'not-empty' : '') + (updateValue.hasError ? ' invalid' : '')" 1671 placeholder="Wert eingeben" required/> 1672 <span class="currency-right"></span> 1673 </div> 1674 <button class="button call-to-action" type="submit">Beladen</button> 1675 </div> 1676 <span class="error" v-if="updateValue.hasMinError"> 1677 Der Mindestbetrag beträgt â¬{{success.chargeLimits.min}} 1678 </span> 1679 <span class="error" v-if="updateValue.hasMaxError"> 1680 Der Maximalbetrag beträgt â¬{{success.chargeLimits.min}} 1681 </span> 1682 </form> 1683 </div> 1684 </div> 1685 1686</script>
1686 1687
1688<script type="text/x-template" id="check-form"> 1689 <form v-on:submit="validate" class="inc-form-inner inc-value-check-form"> 1690 <div class="inc-value-check-form-inner"> 1691 <div class="form-field"> 1692 <input type="text" v-model="voucher.value" :class="(voucher.value ? 'not-empty' : '') + (voucher.hasError ? ' invalid' : '')" 1693 placeholder="Code eingeben" required/> 1694 </div> 1695 <button class="button call-to-action" type="submit">Code überprüfen</button> 1696 </div> 1697 <div ref="captcha"></div> 1698 </form> 1699</script>
1699 1700
1701<script> 1702 window.addEventListener('DOMContentLoaded', function() { 1703 1704 Vue.component("status", 1705 { 1706 template: "#status", 1707 props: ["status", "success"], 1708 methods: { 1709 applyVoucher: function(){ 1710 $('#applyVoucherForm').submit(); 1711 } 1712 } 1713 }); 1714 Vue.component("booking", 1715 { 1716 template: "#booking", 1717 props: ["status", "success"] 1718 }); 1719 1720 Vue.component("qrcode", 1721 { 1722 template: "#qrcode", 1723 props: ["status", "success"] 1724 }); 1725 1726 Vue.component("message", 1727 { 1728 template: "#message", 1729 props: ["status", "success"] 1730 }); 1731 1732 Vue.component("recharge-value-card", 1733 { 1734 template: "#recharge-value-card", 1735 props: ["status", "success"], 1736 data: function () { 1737 let getParams = new URLSearchParams(location.search); 1738 let rechargeValue = ''; 1739 if(getParams.has('code')){ 1740 rechargeValue = getParams.get('code'); 1741 } 1742 return { 1743 updateValue: 1744 { 1745 value: rechargeValue, 1746 hasError: false, 1747 hasMinError: false, 1748 hasMaxError: false 1749 } 1750 } 1751 }, 1752 methods: 1753 { 1754 validate: function (e) { 1755 if(e) e.preventDefault(); 1756 this._data.updateValue.hasError = false; 1757 let value = parseFloat(this._data.updateValue.value); 1758 if (!this._data.updateValue.value || this._data.updateValue.value.trim() == "") { 1759 this._data.updateValue.hasError = true; 1760 return; 1761 } 1762 else { 1763 if(value < voucherValueCheck.success.chargeLimits.min) { 1764 this._data.updateValue.hasMinError = true; 1765 this._data.updateValue.hasError = true; 1766 return; 1767 } 1768 else if(value > voucherValueCheck.success.chargeLimits.max) { 1769 this._data.updateValue.hasMaxError = true; 1770 this._data.updateValue.hasError = true; 1771 return; 1772 } 1773 var _this = this; 1774 _this.submitRequest(null); 1775 } 1776 }, 1777 submitRequest() { 1778 var _this = this; 1779 fetch("/api/frontend/shoppingCart/addCardRecharge", { 1780 method: "POST", 1781 body: JSON.stringify({ 1782 cardCode: voucherValueCheck.success.code, 1783 rechargeAmount: parseFloat(this.updateValue.value) 1784 }) 1785 }) 1786 .then(async response => { 1787 const data = await response.json(); 1788 if(response.status == 200) { 1789 location.href= data; //link to shoppingcart 1790 } 1791 }) 1792 .catch((err) => { 1793 console.error(err); 1794 }); 1795 } 1796 } 1797 }); 1798 Vue.component("check-form", 1799 { 1800 template: "#check-form", 1801 props: [], 1802 data: function () { 1803 let getParams = new URLSearchParams(location.search); 1804 let code = ''; 1805 if(getParams.has('code')){ 1806 code = getParams.get('code'); 1807 } 1808 return { 1809 attempt: { 1810 current: currentRequestCount, 1811 tracked: 0, 1812 max: maxRequestCount 1813 }, 1814 voucher: 1815 { 1816 value: code, 1817 hasError: false 1818 }, 1819 success: false, 1820 captcha: { 1821 instance: null 1822 } 1823 } 1824 }, 1825 mounted: function(){ 1826 if(this.voucher.value != '') 1827 this.validate(null, true); 1828 }, 1829 methods: 1830 { 1831 renderQRCode: function (token) { 1832 setTimeout(function () { 1833 let url = window.location.origin + "/download_passbook.php?token=" + token; 1834 1835 // QRCode can't handle strings in the length range of 192 - 220 1836 // https://stackoverflow.com/questions/30796584/qrcode-js-error-code-length-overflow-17161056/73544657#comment123108831_34890253 1837 if (url.length >= 192) { 1838 url = url.padEnd(220); 1839 } 1840 1841 $('#qr-code-outlet').html(''); 1842 new QRCode( 1843 document.getElementById("qr-code-outlet"), 1844 url); 1845 document.getElementById("qr-code-link").setAttribute("href", url); 1846 }, 200) 1847 }, 1848 setStatus: function (msg, state) { 1849 this.$emit( 1850 'set-status', 1851 { 1852 msg: msg, 1853 status: state 1854 } 1855 ); 1856 }, 1857 setSuccessMessage: function (response) { 1858 if (typeof response !== "undefined") { 1859 this.$emit( 1860 'set-success-message', 1861 { 1862 initialValue: response.initialValue, 1863 currentValue: response.currentValue, 1864 orderId: response.orderId, 1865 code: response.code, 1866 chargeLimits: response.chargeLimits, 1867 show: true 1868 } 1869 ); 1870 } else { 1871 this.$emit( 1872 'set-success-message', 1873 false 1874 ); 1875 } 1876 }, 1877 requiresCaptcha: function () 1878 { 1879 return this._data.captcha.instance || (this._data.attempt.tracked + this._data.attempt.current >= this._data.attempt.max); 1880 }, 1881 validate: function (e) { 1882 if(e) e.preventDefault(); 1883 this._data.voucher.hasError = false;
1884 this.setStatus("", false); 1885 this.setSuccessMessage(); 1886 if (!this._data.voucher.value || this._data.voucher.value.trim() == "") { 1887 this._data.voucher.hasError = true; 1888 this.setStatus("Bitte geben Sie einen Code ein.", false); 1889 } 1890 else if(this.requiresCaptcha() && !this._data.captcha.instance.validate()) 1891 { 1892 this.setStatus("", false); 1893 } 1894 else { 1895 var _this = this; 1896 if (this.requiresCaptcha()) { 1897 this._data.captcha.instance.submit().then(function (captchaData) { 1898 _this.submitRequest(captchaData); 1899 }); 1900 } 1901 else { 1902 _this.submitRequest(null); 1903 } 1904 } 1905 }, 1906 submitRequest(captchaData) { 1907 var _this = this; 1908 const captchaParams = captchaData ? '?' + new URLSearchParams(captchaData).toString() : ''; 1909 1910 let voucherValue = _this._data.voucher.value.replaceAll("=", "%3D").replaceAll("&", "%26").replaceAll("?", "%3F").replaceAll("/", "%E2"); 1911 fetch("api/redeemapp/voucher/valueCheck/" + voucherValue + captchaParams) 1912 .then(function (res) { return res.json(); }) 1913 .then(function (res) { 1914 response = res; 1915 try { 1916 if (parseInt(response.status) === -1) { 1917 _this.setStatus("Bitte überprüfen Sie die Captcha Eingabe.", false); 1918 // _this.increaseAttempt(); 1919 _this.renderCaptcha(); 1920 } 1921 else if (!response.status) { 1922 _this._data.voucher.hasError = true; 1923 _this.setStatus("Ungültiger Code.", false); 1924 _this.increaseAttempt(); 1925 } else { 1926 if(response.variantTicketMaster) { 1927 response.master = { 1928 VARIANT_PRODUCT_IDS: response.variantTicketMaster.variants, 1929 PRODUCTS_IMAGE_POPUP: response.variantTicketMaster.image, 1930 PRODUCTS_LINK: response.variantTicketMaster.link, 1931 PRODUCTS_ID: response.variantTicketMaster.id, 1932 PRODUCTS_NAME: response.variantTicketMaster.name, 1933 PRODUCTS_IMAGE_ALT_TEXT: response.variantTicketMaster.imageAltText 1934 }; 1935 presetVariant = response.assignedVariantTicketId; 1936 } 1937 _this.setSuccessMessage(response); 1938 if(response.pkpassToken) _this.renderQRCode(response.pkpassToken); 1939 $('#applyVoucherForm input[name=gv_redeem_code]').val(response.code); 1940 productsId = response.variantTicketMaster ? response.variantTicketMaster.id : ''; 1941 1942 1943 1944 } 1945 if (typeof crossDomainIframeResize === "function") setTimeout(function(){crossDomainIframeResize(false);}, 0); 1946 } catch (exception) { 1947 if (exception instanceof SyntaxError) { 1948 _this.setStatus("Ein interner Fehler ist aufgetreten. Bitte versuchen Sie es erneut.", false); 1949 _this.increaseAttempt(); 1950 } 1951 else { 1952 console.error(exception); 1953 } 1954 } 1955 }).catch(function (err) { 1956 if (err.response && err.response.data.code == "ERR_VOUCHER_CANCELED") 1957 { 1958 _this.setStatus("Dieser Artikel wurde storniert und kann nicht mehr eingelöst werden.", false); 1959 } 1960 else 1961 { 1962 _this.increaseAttempt(); 1963 } 1964 }); 1965 }, 1966 increaseAttempt: function () { 1967 this._data.attempt.tracked++; 1968 1969 if (this._data.captcha.instance) { 1970 this._data.captcha.instance.refresh(); 1971 } 1972 else if (this.requiresCaptcha()) { 1973 this.renderCaptcha(); 1974 } 1975 }, 1976 renderCaptcha: function () { 1977 var _this = this; 1978 getCaptcha().then(function () { 1979 _this._data.captcha.instance = IncCaptcha.render(_this.$refs.captcha); 1980 _this.$refs.captcha.classList.add('captcha-container'); 1981 }); 1982 } 1983 }, 1984 mounted: function () { 1985 if (this.requiresCaptcha()) { 1986 this.renderCaptcha(); 1987 } 1988 } 1989 }); 1990 1991 Vue.config.ignoredElements = ['d']; 1992 1993 var voucherValueCheck = new Vue( 1994 { 1995 el: "#inc-value-check", 1996 data: 1997 { 1998 status: 1999 { 2000 state: "", 2001 msg: "" 2002 }, 2003 success: 2004 { 2005 initialValue: "", 2006 currentValue: "", 2007 orderId: "", 2008 show: false, 2009 code: "", 2010 chargeLimits: { 2011 min: null, 2012 max: null 2013 }, 2014 }, 2015 downloadUrl: "" 2016 }, 2017 methods: 2018 { 2019 setStatus: function (status) { 2020 this.status.state = status.state; 2021 this.status.msg = status.msg; 2022 }, 2023 setSuccessMessage: function (response) { 2024 if (response) { 2025 this.success.show = true; 2026 this.success.initialValue = response.initialValue; 2027 this.success.currentValue = response.currentValue; 2028 this.success.orderId = response.orderId; 2029 this.success.code = response.code; 2030 this.success.chargeLimits = response.chargeLimits; 2031 } else { 2032 this.success.show = false;
2033 } 2034 } 2035 } 2036 } 2037 ); 2038 }); 2039</script>
2039 2040 2041 2042 </div> 2043 </div> 2044 </div> 2045 2046 </section> 2047 </div> 2048 2049 <!--Footer --> 2050 <footer> 2051 <div class="footer-main-bar"> 2052 <div class="inner-footer-main-bar inc-content-container cc-clear-padding-top-bottom"> 2053 <div class="footer-content-links footer-column"> 2054 2055 2056 2057<div class="infobox-more"> 2058 <h3>Info</h3> 2059 <div class="infobox-content-left"> 2060 <ul class="content-links"><li><a class="content_link" href="https://gutscheine.cafe-wien.at/widerrufsformular"> Widerruf</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/versand-de"> Versand</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/datenschutz"> Datenschutz</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/agb"> AGB</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/impressum"> Impressum</a></li><li><a class="content_link" href="https://gutscheine.cafe-wien.at/kontakt"> Kontakt</a></li></ul> 2061 </div> 2062</div> 2063 2064 </div> 2065 <div class="footer-column footer-column-incert-logo"> 2066 <!-- Incert Logo --> 2067 <div class="incert-logo" role="contentinfo" aria-label="author of the website"> 2068 <span class="incert-logo-info ">eCommerce-System by</span> 2069 <a target="_blank" href="https://www.incert.at" class="incert-logo-link"> 2070 <img class="regular-incert-logo" src="./images/incert-logo.png" alt="INCERT eTourismus GmbH" /> 2071 <img class="hover-incert-logo" src="./images/incert-logo-green.png" alt="INCERT eTourismus GmbH hover" aria-hidden="true" /> 2072 </a> 2073 </div> </div> 2074 </div> 2075 </div> 2076 2077 </footer> 2078 </div> 2079
2080<script type="text/javascript" src="./templates/qwk/t1/javascript/localization/datepicker-de.js"></script>
vendor: 1 bytes, line 2080
2080
2081<script> 2082 let lightboxImages = []; 2083 let lightboxContent = []; 2084</script>
2084 2085<div id="inc-lightbox" class="inc-lightbox-overlay inc-lightbox-close"> 2086 2087 <div class="inc-lightbox-inner"> 2088 <button class="inc-lightbox-switch inc-prev" disabled></button> 2089 <button class="inc-lightbox-close"></button> 2090 <h3 class="inc-lightbox-header"></h3> 2091 <div class="inc-lightbox-content"></div> 2092 2093 <div class="inc-cart-info"> 2094 <p class="inc-lightbox-message"></p> 2095 <div class="inc-lightbox-buttons"> 2096 <button class="inc-lightbox-close">weitere Artikel</button> 2097 <div><a role="button" href="https://gutscheine.cafe-wien.at/warenkorb">zur Kasse</a></div> 2098 </div> 2099 </div> 2100 2101 <button class="inc-lightbox-switch inc-next" disabled></button> 2102 </div> 2103</div> 2104
2105<script type="text/html" id="inc-lightbox-reference"> 2106 <div class="inc-lightbox-overlay inc-lightbox-close"></div> 2107 <div class="inc-lightbox-inner"> 2108 <button class="inc-lightbox-close"></button> 2109 <div class="inc-cart-info"> 2110 <p class="inc-lightbox-message">Message</p> 2111 <div class="inc-lightbox-buttons"> 2112 <button class="inc-lightbox-close">weitere Artikel</button> 2113 <div><a role="button" href="https://gutscheine.cafe-wien.at/warenkorb">zur Kasse</a></div> 2114 </div> 2115 </div> 2116 </div> 2117</script>
2117 2118 2119 2120 2121
2121<script>var CURRENT_TEMPLATE = "qwk/t1";</script>
2121 2122
2122<script> 2123 var $meta = $("<meta>").attr("name", "viewport").attr("content", "width=device-width"); 2124 $("head").append($meta); 2125 </script>
2125 2126 2127
2127<script> 2128 //Systeme die in FB integriert sind und wenn man dort im Warenkorb auf "Bestellen" klickt, 2129 //dass man weitergeleitet wird in ein neues Fenster und nicht in FB 2130 if (window.parent.testFacebook && window.parent.testFacebook() == "true") { 2131 $().ready(function () { 2132 $("body").addClass("facebook"); 2133 $(".total_sum_buttons div.button a.buttonLink").click(function () { 2134 2135 window.open("?gotocat=checkout", "_blank"); 2136 window.location.href = "index.php"; 2137 2138 return false; 2139 }); 2140 }); 2141 } 2142 </script>
2142 2143
2143<script> 2144 (function() 2145 { 2146 var div = document.createElement('DIV'); 2147 div.setAttribute('style', 'display:none;'); 2148 div.innerHTML = '<iframe id="inneriframe" width="1" height="1"></iframe>'; 2149 document.body.appendChild(div); 2150 })(); 2151 </script>
2151 </body> </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.