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