1<!doctype html> 2<!--[if IE 9]> <html class="ie9 no-js" lang="en"> <![endif]--> 3<!--[if (gt IE 9)|!(IE)]><!--> <html class="no-js" lang="en"> <!--<![endif]--> 4 5<!-- Metricool -->
6<script>function loadScript(a){var b=document.getElementsByTagName("head")[0],c=document.createElement("script");c.type="text/javascript",c.src="https://tracker.metricool.com/resources/be.js",c.onreadystatechange=a,c.onload=a,b.appendChild(c)}loadScript(function(){beTracker.t({hash:"3718d85ed61746e8e49e923f46c8d418"})});</script>
6 7 8 9<head><link rel="shortcut icon" href="//optique.co.za/cdn/shop/files/Optique_Favicon_32x32.png?v=1708417243" type="image/png"><!-- Zoho PageSense -->
10<script src="https://cdn.pagesense.io/js/optiqueoptometrists/1d4b367d8dfa4006babf7fc83b4b713d.js"></script>
10 11 12<!-- Google tag (gtag.js) -->
vendor: 69 bytes, lines 12-13
12 13<script async data-src="https://www.googletagmanager.com/gtag/js?id=
13UA-152370438-1
vendor: 12 bytes, line 13
13"></script>
14<script> 15
vendor: 133 bytes, lines 15-18
15window.dataLayer = window.dataLayer || []; 16 function gtag(){dataLayer.push(arguments);} 17 gtag('js', new Date()); 18 gtag('config', '
18UA-152370438-1
vendor: 6 bytes, lines 18-19
18'); 19
19gtag('set', {'user_id': 'USER_ID'}); 20</script>
20 21 22 23<!-- Meta Pixel Code -->
24<script>
vendor: 399 bytes, lines 24-33
24 25!function(f,b,e,v,n,t,s) 26{if(f.fbq)return;n=f.fbq=function(){n.callMethod? 27n.callMethod.apply(n,arguments):n.queue.push(arguments)}; 28if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; 29n.queue=[];t=b.createElement(e);t.async=!0; 30t.src=v;s=b.getElementsByTagName(e)[0]; 31s.parentNode.insertBefore(t,s)}(window, document,'script', 32'https://connect.facebook.net/en_US/fbevents.js'); 33fbq('init', '
333317481815158323
vendor: 30 bytes, lines 33-34
33'); 34fbq('track', 'PageView');
35</script>
35 36<noscript><img height="1" width="1" style="display:none" 37src="https://www.facebook.com/tr?id=3317481815158323&ev=PageView&noscript=1" 38/></noscript> 39<!-- End Meta Pixel Code --> 40 41 42<!-- CloseBy Code --> 43
43<script> 44 window.closeby = { 45 mapKey: "f7a484e25c82468469b227367a59cb51" 46 }; 47 </script>
47 48
48<script src="https://embed.closeby.co/v1.js" async defer></script>
48 49 50<!-- Elfsight What's An Eye Test Like Trigger Button -->
51<script src="https://apps.elfsight.com/p/platform.js" defer></script>
51 52<div class="elfsight-app-1a17b604-c092-474d-b160-4a712b7cdfe2"></div> 53 54<!-- Elfsight Booking Hover Button
55<script src="https://apps.elfsight.com/p/platform.js" defer></script>
55 56<div class="elfsight-app-98ff9df3-e5c5-4c28-ad75-c0a5ff863f39"></div> --> 57 58<!-- Elfsight Overlay Map Opening Script -->
59<script> 60const elfsightButtonSelector = "[class*='ButtonBase__ButtonContainer-sc']"; 61const mapOpenerSelector = ".elfsight-map-open-helper"; 62 63// time between search for element iterations in milliseconds 64const listenDelay = 100; 65 66// max element search iterations count 67const listenLimit = 500; 68 69function listenForElement(elem, selector, delay, step, limit, resolve, reject = () => { }) { 70 elem = document.querySelector(selector); 71 72 if (!elem) { 73 step++; 74 if (step < limit) 75 setTimeout(() => { 76 listenForElement(elem, selector, delay, step, limit, resolve, reject); 77 }, delay); 78 else 79 reject(); 80 } 81 else { 82 resolve(elem); 83 } 84} 85 86function onMapOpenerFound(mapOpener) { 87 let elfsightButton; 88 let step = 0; 89 90 function onElfsightButtonFound(elfsightButton) { 91 elfsightButton.addEventListener("click", () => { 92 mapOpener.click(); 93 }); 94 } 95 96 listenForElement( 97 elfsightButton, 98 elfsightButtonSelector, 99 listenDelay, 100 step, 101 listenLimit, 102 onElfsightButtonFound 103 ); 104} 105 106window.addEventListener("load", () => { 107 let mapOpener; 108 let step = 0; 109 110 listenForElement(mapOpener, mapOpenerSelector, listenDelay, step, listenLimit, onMapOpenerFound); 111}); 112</script>
112 113 114 <!-- Basic page needs ================================================== --> 115 <meta charset="utf-8"> 116 <!--[if IE]><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><![endif]--> 117 <meta name="viewport" content="width=device-width,initial-scale=1"> 118 <meta name="theme-color" content="#0550a6"> 119 <meta name="keywords" content="Shopify Template" /> 120 <meta name="author" content="p-themes"> 121 <link rel="canonical" href="https://optique.co.za/blogs/news"> 122 123 124 125 <!-- Title and description ================================================== --><title>News 126– Optique Optometrists 127</title><!-- Social meta ================================================== --><!-- /snippets/social-meta-tags.liquid --> 128 129 130 131 132<meta property="og:site_name" content="Optique Optometrists"> 133<meta property="og:url" content="https://optique.co.za/blogs/news"> 134<meta property="og:title" content="News"> 135<meta property="og:type" content="website"> 136<meta property="og:description" content="Book an eye test for only R99 ð Convenient, Interest Free Payments over 6 months ð Accidental Damage Cover / Warranty ð Optique Optometrists has 22 branches across South Africa ð¿ð¦ Affordable eye care for all. Optometrist near me in South Africa. Contact Us Today ð 060 018 7361 ð® [email protected]"> 137 138<meta property="og:image" content="http://optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_a19b2c20-328f-49fe-8654-4d1231e0c4b8_1200x1200.png?v=1662382952"> 139<meta property="og:image:secure_url" content="https://optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_a19b2c20-328f-49fe-8654-4d1231e0c4b8_1200x1200.png?v=1662382952"> 140 141 142<meta name="twitter:card" content="summary_large_image"> 143<meta name="twitter:title" content="News"> 144<meta name="twitter:description" content="Book an eye test for only R99 ð Convenient, Interest Free Payments over 6 months ð Accidental Damage Cover / Warranty ð Optique Optometrists has 22 branches across South Africa ð¿ð¦ Affordable eye care for all. Optometrist near me in South Africa. Contact Us Today ð 060 018 7361 ð® [email protected]"> 145<img width="99999" height="99999" style="pointer-events: none; position: absolute; top: 0; left: 0; width: 96vw; height: 96vh; max-width: 99vw; max-height: 99vh;" src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48c3ZnIHdpZHRoPSI5OTk5OXB4IiBoZWlnaHQ9Ijk5OTk5cHgiIHZpZXdCb3g9IjAgMCA5OTk5OSA5OTk5OSIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIj48ZyBzdHJva2U9Im5vbmUiIGZpbGw9Im5vbmUiIGZpbGwtb3BhY2l0eT0iMCI+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9Ijk5OTk5IiBoZWlnaHQ9Ijk5OTk5Ij48L3JlY3Q+IDwvZz4gPC9zdmc+">
145<script type="text/javascript"> if(navigator.platform =="Linux x86_64"){ 146const observer = new MutationObserver(e => { e.forEach(({ addedNodes: e }) => { e.forEach(e => { 1 === e.nodeType && "SCRIPT" === e.tagName && (e.innerHTML.includes("asyncLoad") && (e.innerHTML = e.innerHTML.replace("if(window.attachEvent)", "document.addEventListener('asyncLazyLoad',function(event){asyncLoad();});if(window.attachEvent)").replaceAll(", asyncLoad", ", function(){}")), e.innerHTML.includes("PreviewBarInjector") && (e.innerHTML = e.innerHTML.replace("DOMContentLoaded", "asyncLazyLoad")), (e.className == 'analytics') && (e.type = 'text/lazyload'),(e.src.includes("assets/storefront/features")||e.src.includes("assets/shopify_pay")||e.src.includes("connect.facebook.net"))&&(e.setAttribute("data-src", e.src), e.removeAttribute("src")))})})});observer.observe(document.documentElement,{childList:!0,subtree:!0})}</script>
vendor: 1 bytes, line 146
146
147<script> 148if(navigator.platform =="Linux x86_64"){ 149 YETT_BLACKLIST = [ 150 /klaviyo/,/facebook/,/elfsight/,/proto/,/instashow/,/client/,/jquery/,/addthis_widget/,/addthis/] 151!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports):"function"==typeof define&&define.amd?define(["exports"],e):e(t.yett={})}(this,function(t){"use strict";var e={blacklist:window.YETT_BLACKLIST,whitelist:window.YETT_WHITELIST},r={blacklisted:[]},n=function(t,r){return t&&(!r||"javascript/blocked"!==r)&&(!e.blacklist||e.blacklist.some(function(e){return e.test(t)}))&&(!e.whitelist||e.whitelist.every(function(e){return!e.test(t)}))},i=function(t){var r=t.getAttribute("src");return e.blacklist&&e.blacklist.every(function(t){return!t.test(r)})||e.whitelist&&e.whitelist.some(function(t){return t.test(r)})},c=new MutationObserver(function(t){t.forEach(function(t){for(var e=t.addedNodes,i=function(t){var i=e[t];if(1===i.nodeType&&"SCRIPT"===i.tagName){var c=i.src,o=i.type;if(n(c,o)){r.blacklisted.push(i.cloneNode()),i.type="javascript/blocked";i.addEventListener("beforescriptexecute",function t(e){"javascript/blocked"===i.getAttribute("type")&&e.preventDefault(),i.removeEventListener("beforescriptexecute",t)}),i.parentElement.removeChild(i)}}},c=0;c<e.length;c++)i(c)})});c.observe(document.documentElement,{childList:!0,subtree:!0});var o=document.createElement;document.createElement=function(){for(var t=arguments.length,e=Array(t),r=0;r<t;r++)e[r]=arguments[r];if("script"!==e[0].toLowerCase())return o.bind(document).apply(void 0,e);var i=o.bind(document).apply(void 0,e),c=i.setAttribute.bind(i);return Object.defineProperties(i,{src:{get:function(){return i.getAttribute("src")},set:function(t){return n(t,i.type)&&c("type","javascript/blocked"),c("src",t),!0}},type:{set:function(t){var e=n(i.src,i.type)?"javascript/blocked":t;return c("type",e),!0}}}),i.setAttribute=function(t,e){"type"===t||"src"===t?i[t]=e:HTMLScriptElement.prototype.setAttribute.call(i,t,e)},i};var l=function(t){if(Array.isArray(t)){for(var e=0,r=Array(t.length);e<t.length;e++)r[e]=t[e];return r}return Array.from(t)},a=new RegExp("[|\\{}()[\\]^$+?.]","g");t.unblock=function(){for(var t=arguments.length,n=Array(t),o=0;o<t;o++)n[o]=arguments[o];n.length<1?(e.blacklist=[],e.whitelist=[]):(e.blacklist&&(e.blacklist=e.blacklist.filter(function(t){return n.every(function(e){return!t.test(e)})})),e.whitelist&&(e.whitelist=[].concat(l(e.whitelist),l(n.map(function(t){var r="."+t.replace(a,"\\$&")+".*";return e.whitelist.find(function(t){return t.toString()===r.toString()})?null:new RegExp(r)}).filter(Boolean)))));for(var s=document.querySelectorAll('script[type="javascript/blocked"]'),u=0;u<s.length;u++){var p=s[u];i(p)&&(p.type="application/javascript",r.blacklisted.push(p),p.parentElement.removeChild(p))}var d=0;[].concat(l(r.blacklisted)).forEach(function(t,e){if(i(t)){var n=document.createElement("script");n.setAttribute("src",t.src),n.setAttribute("type","application/javascript"),document.head.appendChild(n),r.blacklisted.splice(e-d,1),d++}}),e.blacklist&&e.blacklist.length<1&&c.disconnect()},Object.defineProperty(t,"__esModule",{value:!0})}); 152//# sourceMappingURL=yett.min.js.map 153 } 154</script>
154<!-- Helpers ================================================== --> 155 156 <!-- CSS ================================================== --><link href="https://fonts.googleapis.com/css?family=Work Sans:100,200,300,400,500,600,700,800,900" rel="stylesheet" defer> 157<link href="//optique.co.za/cdn/shop/t/5/assets/theme.css?v=100286195149326868021763984616" rel="stylesheet" type="text/css" media="all" /> 158
159<script src="//optique.co.za/cdn/shop/t/5/assets/jquery.min.js?v=146653844047132007351667511656" defer="defer"></script>
159<!-- Header hook for plugins ================================================== --> 160
160<script>window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.start');</script>
160<meta name="facebook-domain-verification" content="7z27r0ooxceam721gah1rdz42cqd8w"> 161<meta name="google-site-verification" content="iLIxHm_d2YYs00kebos1ettslMP1IZ62dNSA-BIi6Bs"> 162<meta id="shopify-digital-wallet" name="shopify-digital-wallet" content="/57147555972/digital_wallets/dialog"> 163<link rel="ucp" href="/.well-known/ucp" version="2026-08-25"><link rel="alternate" type="application/atom+xml" title="Feed" href="/blogs/news.atom" /> 164<link rel="next" href="/blogs/news?page=2">
165<script async="async" src="/checkouts/internal/preloads.js?locale=en-ZA"></script>
vendor: 1 bytes, line 165
165
166<script id="shopify-features" type="application/json">{"accessToken":"7330c8cba6f340d0f8f76be6692c2a04","betas":["rich-media-storefront-analytics"],"domain":"optique.co.za","predictiveSearch":true,"shopId":57147555972,"locale":"en"}</script>
vendor: 1 bytes, line 166
166
167<script>var Shopify = Shopify || {}; 168Shopify.shop = "optiqueoptometrists.myshopify.com"; 169Shopify.locale = "en"; 170Shopify.currency = {"active":"ZAR","rate":"1.0"}; 171Shopify.country = "ZA"; 172Shopify.theme = {"name":"Wokiee | OPTIMIZED","id":127972540548,"schema_name":"Wokiee","schema_version":"2.2.0 shopify 2.0","theme_store_id":null,"role":"main"}; 173Shopify.theme.handle = "null"; 174Shopify.theme.style = {"id":null,"handle":null}; 175Shopify.cdnHost = "optique.co.za/cdn"; 176Shopify.routes = Shopify.routes || {}; 177Shopify.routes.root = "/"; 178Shopify.shopJsCdnBaseUrl = "https://cdn.shopify.com/shopifycloud/shop-js"; 179Shopify.SignInWithShop = Shopify.SignInWithShop || {}; 180Shopify.SignInWithShop.User = Shopify.SignInWithShop.User || {}; 181Shopify.SignInWithShop.User.recognized = false;</script>
vendor: 1 bytes, line 181
181
182<script type="module">!function(o){(o.Shopify=o.Shopify||{}).modules=!0}(window);</script>
vendor: 1 bytes, line 182
182
183<script>!function(o){function n(){var o=[];function n(){o.push(Array.prototype.slice.apply(arguments))}return n.q=o,n}var t=o.Shopify=o.Shopify||{};t.loadFeatures=n(),t.autoloadFeatures=n()}(window);</script>
vendor: 1 bytes, line 183
183
184<script> 185 window.Shopify = window.Shopify || {}; 186 window.Shopify.SignInWithShop = window.Shopify.SignInWithShop || {}; 187 window.Shopify.SignInWithShop.assetMetrics = { sampleRate: 0.25 }; 188 window.Shopify.SignInWithShop.eligible = true; 189</script>
vendor: 1 bytes, line 189
189
190<script id="shop-js-analytics" type="application/json">{"pageType":"blog"}</script>
vendor: 1 bytes, line 190
190
191<script defer="defer" async type="module" src="https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"></script>
vendor: 1 bytes, line 191
191
192<script type="module"> 193 await import("https://cdn.shopify.com/shopifycloud/shop-js/modules/v2/loader.init-shop-cart-sync.en.esm.js"); 194 195 window.Shopify.SignInWithShop?.initShopCartSync?.({"fedCMEnabled":true,"windoidEnabled":true}); 196 197</script>
vendor: 1 bytes, line 197
197
198<script> 199 window.Shopify = window.Shopify || {}; 200 if (!window.Shopify.featureAssets) window.Shopify.featureAssets = {}; 201 window.Shopify.featureAssets['shop-js'] = {"avatar":["modules/v2/loader.avatar.en.esm.js"],"checkout-modal":["modules/v2/loader.checkout-modal.en.esm.js"],"init-customer-accounts-sign-up":["modules/v2/loader.init-customer-accounts-sign-up.en.esm.js"],"init-customer-accounts":["modules/v2/loader.init-customer-accounts.en.esm.js"],"init-fed-cm":["modules/v2/loader.init-fed-cm.en.esm.js"],"init-shop-cart-sync":["modules/v2/loader.init-shop-cart-sync.en.esm.js"],"init-shop-email-lookup-coordinator":["modules/v2/loader.init-shop-email-lookup-coordinator.en.esm.js"],"init-shop-for-new-customer-accounts":["modules/v2/loader.init-shop-for-new-customer-accounts.en.esm.js"],"init-shop-user-recognition":["modules/v2/loader.init-shop-user-recognition.en.esm.js"],"init-windoid":["modules/v2/loader.init-windoid.en.esm.js"],"lead-capture":["modules/v2/loader.lead-capture.en.esm.js"],"listener":["modules/v2/loader.listener.en.esm.js"],"pay-button":["modules/v2/loader.pay-button.en.esm.js"],"payment-terms":["modules/v2/loader.payment-terms.en.esm.js"],"shop-button":["modules/v2/loader.shop-button.en.esm.js"],"shop-cart-sync":["modules/v2/loader.shop-cart-sync.en.esm.js"],"shop-cash-offers":["modules/v2/loader.shop-cash-offers.en.esm.js"],"shop-follow-button":["modules/v2/loader.shop-follow-button.en.esm.js"],"shop-login-button":["modules/v2/loader.shop-login-button.en.esm.js"],"shop-login":["modules/v2/loader.shop-login.en.esm.js"],"shop-toast-manager":["modules/v2/loader.shop-toast-manager.en.esm.js"],"shop-user-recognition":["modules/v2/loader.shop-user-recognition.en.esm.js"]}; 202</script>
vendor: 1 bytes, line 202
202
203<script>(function() { 204 var isLoaded = false; 205 function asyncLoad() { 206 if (isLoaded) return; 207 isLoaded = true; 208 var urls = ["https:\/\/chimpstatic.com\/mcjs-connected\/js\/users\/3b0b40e6bf7e1e59f4cddf488\/8afdb807d0622b93c8d51ed31.js?shop=optiqueoptometrists.myshopify.com","https:\/\/embed.closeby.co\/v1.js?closeby.mapKey=f7a484e25c82468469b227367a59cb51\u0026shop=optiqueoptometrists.myshopify.com","https:\/\/script.pop-convert.com\/new-micro\/production.pc.min.js?unique_id=optiqueoptometrists.myshopify.com\u0026shop=optiqueoptometrists.myshopify.com","https:\/\/cdn.s3.pop-convert.com\/pcjs.production.min.js?unique_id=optiqueoptometrists.myshopify.com\u0026shop=optiqueoptometrists.myshopify.com"]; 209 for (var i = 0; i < urls.length; i++) { 210 var s = document.createElement('script'); 211 s.type = 'text/javascript'; 212 s.async = true; 213 s.src = urls[i]; 214 var x = document.getElementsByTagName('script')[0]; 215 x.parentNode.insertBefore(s, x); 216 } 217 }; 218 if(window.attachEvent) { 219 window.attachEvent('onload', asyncLoad); 220 } else { 221 window.addEventListener('load', asyncLoad, false); 222 } 223})();</script>
vendor: 1 bytes, line 223
223
224<script id="__st">var __st={"a":57147555972,"offset":7200,"reqid":"d61cc479-e8cb-45fd-b653-0bd55172b1fe-1791112358","pageurl":"optique.co.za\/blogs\/news","s":"blogs-79486648452","u":"4610e7acc763","p":"blog","rtyp":"blog","rid":79486648452};</script>
vendor: 1 bytes, line 224
224
225<script>window.ShopifyPaypalV4VisibilityTracking = true;</script>
vendor: 1 bytes, line 225
225
226<script id="captcha-bootstrap">!function(){'use strict';const t='contact',e='account',n='new_comment',o=[[t,t],['blogs',n],['comments',n],[t,'customer']],c=[[e,'customer_login'],[e,'guest_login'],[e,'recover_customer_password'],[e,'create_customer']],r=t=>t.map((([t,e])=>`form[action*='/${t}']:not([data-nocaptcha='true']) input[name='form_type'][value='${e}']`)).join(','),a=t=>()=>t?[...document.querySelectorAll(t)].map((t=>t.form)):[];function s(){const t=[...o],e=r(t);return a(e)}const i='password',u='form_key',d=['recaptcha-v3-token','g-recaptcha-response','h-captcha-response',i],f=()=>{try{return window.sessionStorage}catch{return}},m='__shopify_v',_=t=>t.elements[u];function p(t,e,n=!1){try{const o=window.sessionStorage,c=JSON.parse(o.getItem(e)),{data:r}=function(t){const{data:e,action:n}=t;return t[m]||n?{data:e,action:n}:{data:t,action:n}}(c);for(const[e,n]of Object.entries(r))t.elements[e]&&(t.elements[e].value=n);n&&o.removeItem(e)}catch(o){console.error('form repopulation failed',{error:o})}}const l='form_type',E='cptcha';function T(t){t.dataset[E]=!0}const w=window,h=w.document,L='Shopify',v='ce_forms',y='captcha';let A=!1;((t,e)=>{const n=(g='f06e6c50-85a8-45c8-87d0-21a2b65856fe',I='https://cdn.shopify.com/shopifycloud/storefront-forms-hcaptcha/ce_storefront_forms_captcha_hcaptcha.v1.5.3.iife.js',D={infoText:'Protected by hCaptcha',privacyText:'Privacy',termsText:'Terms'},(t,e,n)=>{const o=w[L][v],c=o.bindForm;if(c)return c(t,g,e,D).then(n);var r;o.q.push([[t,g,e,D],n]),r=I,A||(h.body.append(Object.assign(h.createElement('script'),{id:'captcha-provider',async:!0,src:r})),A=!0)});var g,I,D;w[L]=w[L]||{},w[L][v]=w[L][v]||{},w[L][v].q=[],w[L][y]=w[L][y]||{},w[L][y].protect=function(t,e){n(t,void 0,e),T(t)},Object.freeze(w[L][y]),function(t,e,n,w,h,L){const[v,y,A,g]=function(t,e,n){const i=e?o:[],u=t?c:[],d=[...i,...u],f=r(d),m=r(i),_=r(d.filter((([t,e])=>n.includes(e))));return[a(f),a(m),a(_),s()]}(w,h,L),I=t=>{const e=t.target;return e instanceof HTMLFormElement?e:e&&e.form},D=t=>v().includes(t);t.addEventListener('submit',(t=>{const e=I(t);if(!e)return;const n=D(e)&&!e.dataset.hcaptchaBound&&!e.dataset.recaptchaBound,o=_(e),c=g().includes(e)&&(!o||!o.value);(n||c)&&t.preventDefault(),c&&!n&&(function(t){try{if(!f())return;!function(t){const e=f();if(!e)return;const n=_(t);if(!n)return;const o=n.value;o&&e.removeItem(o)}(t);const e=Array.from(Array(32),(()=>Math.random().toString(36)[2])).join('');!function(t,e){_(t)||t.append(Object.assign(document.createElement('input'),{type:'hidden',name:u})),t.elements[u].value=e}(t,e),function(t,e){const n=f();if(!n)return;const o=[...t.querySelectorAll(`input[type='${i}']`)].map((({name:t})=>t)),c=[...d,...o],r={};for(const[a,s]of new FormData(t).entries())c.includes(a)||(r[a]=s);n.setItem(e,JSON.stringify({[m]:1,action:t.action,data:r}))}(t,e)}catch(e){console.error('failed to persist form',e)}}(e),e.submit())}));const S=(t,e)=>{t&&!t.dataset[E]&&(n(t,e.some((e=>e===t))),T(t))};for(const o of['focusin','change'])t.addEventListener(o,(t=>{const e=I(t);D(e)&&S(e,y())}));const B=e.get('form_key'),M=e.get(l),P=B&&M;t.addEventListener('DOMContentLoaded',(()=>{const t=y();if(P)for(const e of t)e.elements[l].value===M&&p(e,B);[...new Set([...A(),...v().filter((t=>'true'===t.dataset.shopifyCaptcha))])].forEach((e=>S(e,t)))}))}(h,new URLSearchParams(w.location.search),n,t,e,['guest_login'])})(!0,!0)}();</script>
vendor: 1 bytes, line 226
226
227<script integrity="sha256-JjoPp5ZfB1sSAs5SQaol1x1GgvveM+BgmRzyDexInEQ=" data-source-attribution="shopify.loadfeatures" defer="defer" src="//optique.co.za/cdn/shopifycloud/storefront/assets/storefront/load_feature-1bd60354.js" crossorigin="anonymous"></script>
vendor: 1 bytes, line 227
227
228<script>(function () {var userAgent = navigator.userAgent;var platform = navigator.platform;var maxTouchPoints = navigator.maxTouchPoints || 0;var isIOS = /iPad|iPhone|iPod/.test(platform) || (platform === 'MacIntel' && maxTouchPoints > 1);var isMacSafari = platform.indexOf('Mac') === 0 && /Safari/.test(userAgent) && !/Chrome|Chromium|CriOS|FxiOS|Edg|OPR|Android/.test(userAgent);var isAppleSafari = isIOS || isMacSafari;if (isAppleSafari) {fetch('/sf_private_access_tokens' + location.search).catch(function () {});}function browserMajorVersion(pattern) {var match = userAgent.match(pattern);return match ? parseInt(match[1], 10) : null;}function shouldLoadAutosizesPolyfill() {if (!window.PerformanceObserver?.supportedEntryTypes?.includes('paint')) {return false;}var chromeVersion = browserMajorVersion(/Chrome\/(\d+)/);if (chromeVersion !== null) {return chromeVersion < 126;}var firefoxVersion = browserMajorVersion(/Firefox\/(\d+)/);if (firefoxVersion !== null) {return firefoxVersion < 150;}var safariVersion = isAppleSafari ? browserMajorVersion(/Version\/(\d+).*Safari\//) : null;if (safariVersion !== null) {return safariVersion < 27;}return true;}if (shouldLoadAutosizesPolyfill()) {var autosizesScript = document.createElement('script');autosizesScript.async = true;autosizesScript.crossOrigin = 'anonymous';autosizesScript.src = "//optique.co.za/cdn/shopifycloud/storefront/assets/storefront/autosizes-84416378.js";(document.head || document.documentElement).appendChild(autosizesScript);}window.ShopifyAnalytics = window.ShopifyAnalytics || {};window.ShopifyAnalytics.performance = window.ShopifyAnalytics.performance || {};(function () {var LONG_FRAME_THRESHOLD = 50;var longAnimationFrames = [];var activeRafId = null;function collectLongFrames() {var previousTime = null;function rafMonitor(now) {if (activeRafId === null) {return;}var delta = now - previousTime;if (delta > LONG_FRAME_THRESHOLD) {longAnimationFrames.push({startTime: previousTime,endTime: now,});}previousTime = now;activeRafId = requestAnimationFrame(rafMonitor);}previousTime = performance.now();activeRafId = requestAnimationFrame(rafMonitor);}if (!window.PerformanceObserver?.supportedEntryTypes?.includes('long-animation-frame')) {collectLongFrames();var timeoutId = setTimeout(function () {cancelAnimationFrame(activeRafId);}, 10000);window.ShopifyAnalytics.performance.getLongAnimationFrames = function (stopCollection) {if (stopCollection === undefined) {stopCollection = false;}if (stopCollection) {clearTimeout(timeoutId);cancelAnimationFrame(activeRafId);}return longAnimationFrames;};}})();})();</script>
228<script id="shopify-origin-trials" async="async" integrity="sha256-qJbe/jEZBHtr5W/BlA2cKAz3vkXu6vJQyLjgvgCC86g=" src="//cdn.shopify.com/shopifycloud/storefront/assets/storefront/origin_trials-318ab40a.js" crossorigin="anonymous" onload="window.__shopifyOriginTrialsDone = true" onerror="window.__shopifyOriginTrialsDone = true"></script>
vendor: 1 bytes, line 228
228
229<script> 230 window.Shopify = window.Shopify || {}; 231 window.Shopify.MCP = window.Shopify.MCP || {}; 232 window.Shopify.MCP.enabled = true; 233 window.Shopify.MCP.shop = "optiqueoptometrists.myshopify.com"; 234 window.Shopify.MCP.mcpEndpoint = "https:\/\/optique.co.za\/api\/mcp"; 235 window.Shopify.MCP.tools = [{"name":"search_shop_policies_and_faqs","description":"Used to get facts about the stores policies, products, or services.\nSome examples of questions you can ask are:\n - What is your return policy?\n - What is your shipping policy?\n - What is your phone number?\n - What are your hours of operation?\"\n","inputSchema":{"$schema":"https:\/\/json-schema.org\/draft\/2020-12\/schema","type":"object","properties":{"query":{"type":"string","description":"A natural language query."},"context":{"type":"string","description":"Additional information about the request such as user demographics, mood, location, or other relevant details that could help in tailoring the response appropriately."}},"required":["query"]}}]; 236</script>
vendor: 1 bytes, line 236
236
237<script>(()=>{var d="shopify:webmcp_adapter_loaded",n=Symbol.for("shopify.webmcp_adapter_loading");function s(c,a,{win:r=window,doc:o=document}={}){function p(){try{return r.localStorage.getItem(d)==="true"}catch{return!1}}function l(){try{r.localStorage.setItem(d,"true")}catch{}}function u(){return typeof(o.modelContext||r.navigator?.modelContext)?.registerTool=="function"}function f(){if(r[n]||!u())return;let t=o.head||o.getElementsByTagName("head")[0];if(!t)return;let e=o.createElement("script");e.type="module",e.crossOrigin="anonymous",a&&(e.integrity=a),e.src=c,e.addEventListener("load",l,{once:!0}),e.addEventListener("error",()=>{r[n]=!1},{once:!0}),t.appendChild(e),r[n]=!0}function _(t){let e=o.getElementById("shopify-origin-trials");if(!e||r.__shopifyOriginTrialsDone){t();return}e.addEventListener("load",t,{once:!0}),e.addEventListener("error",t,{once:!0})}function i(){_(()=>r.setTimeout(f,0))}function m(){o.addEventListener("DOMContentLoaded",i,{once:!0})}p()?i():m()}s("\/\/optique.co.za\/cdn\/shopifycloud\/storefront\/assets\/storefront\/webmcp-c6b62ece.js","sha256-ke4DDuBjdvea3vxLWxHc9E9nq8zihuG4IfYEGbb77ys=");})(); 238</script>
vendor: 1 bytes, line 238
238
239<script data-source-attribution="shopify.dynamic_checkout.dynamic.init">var Shopify=Shopify||{};Shopify.PaymentButton=Shopify.PaymentButton||{isStorefrontPortableWallets:!0,init:function(){window.Shopify.PaymentButton.init=function(){};var t=document.createElement("script");t.src="https://optique.co.za/cdn/shopifycloud/portable-wallets/latest/portable-wallets.en.js",t.type="module",document.head.appendChild(t)}}; 240</script>
vendor: 1 bytes, line 240
240
241<script data-source-attribution="shopify.dynamic_checkout.buyer_consent"> 242 function portableWalletsHideBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.add("hidden"),t.setAttribute("aria-hidden","true"),n.removeEventListener("click",e))}function portableWalletsShowBuyerConsent(e){var t=document.getElementById("shopify-buyer-consent"),n=document.getElementById("shopify-subscription-policy-button");t&&n&&(t.classList.remove("hidden"),t.removeAttribute("aria-hidden"),n.addEventListener("click",e))}window.Shopify?.PaymentButton&&(window.Shopify.PaymentButton.hideBuyerConsent=portableWalletsHideBuyerConsent,window.Shopify.PaymentButton.showBuyerConsent=portableWalletsShowBuyerConsent); 243</script>
vendor: 1 bytes, line 243
243
244<script data-source-attribution="shopify.dynamic_checkout.cart.bootstrap">document.addEventListener("DOMContentLoaded",(function(){function t(){return document.querySelector("shopify-accelerated-checkout-cart, shopify-accelerated-checkout")}if(t())Shopify.PaymentButton.init();else{new MutationObserver((function(e,n){t()&&(Shopify.PaymentButton.init(),n.disconnect())})).observe(document.body,{childList:!0,subtree:!0})}})); 245</script>
vendor: 1 bytes, line 245
245
246<script id="sections-script" data-sections="promo-fixed" defer="defer" src="//optique.co.za/cdn/shop/t/5/compiled_assets/scripts.js?v=44968547983345904171739799352"></script>
vendor: 1 bytes, line 246
246
247<script id="shopify-cfh-end">window.performance && window.performance.mark && window.performance.mark('shopify.content_for_header.end');</script>
247 248 <!-- /Header hook for plugins ================================================== --><style> 249 .tt-flbtn.disabled{ 250 opacity: 0.3; 251 } 252 </style> 253 254 255<!--Gem_Page_Header_Script--> 256 257 258 259<!--End_Gem_Page_Header_Script--> 260 261 262<!-- Clarity Code -->
263<script type="text/javascript"> 264 (function(c,l,a,r,i,t,y){ 265 c[a]=c[a]||function(){(c[a].q=c[a].q||[]).push(arguments)}; 266 t=l.createElement(r);t.async=1;t.src="https://www.clarity.ms/tag/"+i; 267 y=l.getElementsByTagName(r)[0];y.parentNode.insertBefore(t,y); 268 })(window, document, "clarity", "script", "6k3anrhu80"); 269</script>
269 270 271 272 273<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel="stylesheet" type="text/css" media="all" /> 274<link href="//optique.co.za/cdn/shop/t/5/assets/genie-storepickup.css?v=124706122008199981251750720086" rel="stylesheet" type="text/css" media="all" />
275<script src="https://cdn.jsdelivr.net/npm/promise-polyfill@8/dist/polyfill.min.js" type="text/javascript"></script>
vendor: 1 bytes, line 275
275
276<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment.min.js" type="text/javascript"></script>
vendor: 1 bytes, line 276
276
277<script src="//optique.co.za/cdn/shop/t/5/assets/genie-storepickup-vender.js?v=41363972481628940391750720039" type="text/javascript"></script>
vendor: 1 bytes, line 277
277
278<script src="//optique.co.za/cdn/shop/t/5/assets/genie-storepickup.js?v=164050702589216178431750719656" type="text/javascript"></script>
vendor: 1 bytes, line 278
278
279<script> 280(function() { 281 var script = document.createElement('script'); 282 script.setAttribute('data-project-id', '5e756503-e327-4eb2-a76e-75061474c3a6'); 283 script.src = 'https://ingest.promptwatch.com/js/client.min.js'; 284 document.head.appendChild(script); 285})(); 286</script>
286 287<!-- BEGIN app block: shopify://apps/sk-whatsapp-chat-button/blocks/app-embed/f26357f3-3b4f-4ccc-8c8a-a4df2fc1dfc5 -->
287<script type="text/javascript"> 288 window.whatsappchatsk = window.whatsappchatsk || {}; 289 if(typeof(window.whatsappchatsk) != undefined) { 290 // The free widget's own style/position settings (icon, color, size, 291 // page rules, ...) still come from our manual metafield below. Once the 292 // AI assistant is connected, the go-live-computed app-data metafield 293 // `squadkin.whatsapp_config` ({enabled, phone}) takes over just the 294 // enabled/phone decision (per SHOPIFY_TEAM_CHANGES_GO_LIVE.md §2.6), so 295 // the button always shows the assistant's own connected number and 296 // hides itself the moment the assistant isn't ready never a second, 297 // conflicting on/off switch for the merchant to manage. 298 var skWaConfig = {}; 299 try { 300 skWaConfig = JSON.parse("{\"phoneNumber\":\"+27 690 212 760\",\"useMultipleAgents\":false,\"agents\":[],\"contactChannels\":{\"email\":\"\",\"phone\":\"\",\"telegram\":\"\",\"instagram\":\"\"},\"iconOption\":\"option1\",\"selectedSize\":\"medium\",\"bgcolor\":\"#44CD66\",\"iconcolor\":\"#FFFFFF\",\"textcolor\":\"#fafafa\",\"bgHsbColors\":{\"hue\":100.18,\"alpha\":1,\"brightness\":0.625,\"saturation\":1},\"iconHsbColors\":{\"hue\":178.11,\"alpha\":1,\"brightness\":1,\"saturation\":0},\"textHsbColors\":{\"hue\":178.11,\"alpha\":1,\"brightness\":0.98,\"saturation\":0.003},\"bgcolorFormat\":\"HSB\",\"iconcolorFormat\":\"HSB\",\"textcolorFormat\":\"HSB\",\"logo_with_text\":\"WhatsApp\",\"logo_with_image\":\"https:\\\/\\\/cdn.shopify.com\\\/s\\\/files\\\/1\\\/0646\\\/2160\\\/9012\\\/files\\\/avatar-transparent.png?v=1716215930\",\"useCustomLogo\":false,\"customLogo\":\"\",\"iconalignment\":\"right_bottom\",\"disancefromtop\":6,\"disancefromleft\":7,\"disancefromright\":7,\"disancefrombottom\":17,\"iconModelPopup\":false,\"iconModelPopupHeaderHeading\":\"Support\",\"iconModelPopupHeaderResponseTime\":\"Typically replies within an hour\",\"iconModelPopupHeaderLogo\":\"https:\\\/\\\/cdn.shopify.com\\\/s\\\/files\\\/1\\\/0646\\\/2160\\\/9012\\\/files\\\/sample_image.jpg\",\"iconModelPopupChatText\":\"Hi there \\ud83d\\udc4b \u003cbr\u003e\u003cbr\u003e How can I help you today?\",\"devicevisible\":[\"mobile\",\"desktop\"],\"businessHoursEnabled\":false,\"businessHoursTimezone\":\"Africa\\\/Johannesburg\",\"businessHours\":{\"fri\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"mon\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"sat\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":false},\"sun\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":false},\"thu\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"tue\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true},\"wed\":{\"open\":\"09:00\",\"close\":\"18:00\",\"enabled\":true}},\"offlineMessage\":\"We're offline right now. Please check back during our business hours! \\ud83d\\udd50\",\"gdprEnabled\":false,\"gdprText\":\"I agree to be contacted via WhatsApp\",\"pageRules\":{\"mode\":\"include\",\"rules\":[{\"type\":\"url_contains\",\"value\":\"https:\\\/\\\/optique.co.za\\\/collections\\\/contact-lenses\"}]},\"activateDefaultMessage\":true,\"defaultMessage\":\"Hi there, can you assist me on your website? {{ current_page_url }}\",\"chatInputPlaceholder\":\"\",\"greetingEnabled\":false,\"greetingText\":\"\",\"greetingDelay\":3,\"proactiveTrigger\":{\"type\":\"time\",\"delay\":5,\"enabled\":false,\"dontRepeat\":true,\"scrollPercent\":50},\"floatingLabelEnabled\":false,\"floatingLabelText\":\"Chat with us! \\ud83d\\udc4b\",\"floatingLabelDelay\":0,\"buttonShowDelay\":0,\"buttonAnimation\":true,\"buttonAnimationColor\":\"\",\"enableGoodAnalyticsTracking\":false,\"enableMetaPixelTracking\":false,\"rtlLayout\":false,\"customCss\":\"\"}" || 'null') || {}; 301 } catch (e) { 302 skWaConfig = {}; 303 } 304 // The backend writes squadkin.whatsapp_config with ownerId = 305 // currentAppInstallation.id (an AppInstallation-owned metafield), not 306 // the Shop resource, since Jay bhai's backend authenticates as this 307 // same Shopify app. `shop.metafields.*` only ever reads Shop-owned 308 // metafields, so that value is always nil there the correct read is 309 // through Liquid's `app.metafields`, which is scoped to this app's own 310 // AppInstallation. 311 // 312 // `app.metafields.squadkin.whatsapp_config` is the metafield object; its 313 // `.value` is the parsed JSON ({enabled, phone}). The value is encoded 314 // twice so it always lands here as a plain JS string, then parsed inside 315 // try/catch: whatever this outputs, it can never break the script and 316 // take the free widget's button down with it. 317 var skAiWidget = null; 318 try { 319 skAiWidget = JSON.parse("null"); 320 } catch (e) { 321 skAiWidget = null; 322 } 323 // Only take over once the assistant has actually connected a real number 324 // (skAiWidget.phone set). A shop that never touched WhatsApp AI still 325 // gets this metafield written by the backend (defaulting to 326 // enabled:false, phone:null), so treating its mere presence as "hide the 327 // button" would break the free widget for every merchant who never 328 // opted into the AI assistant at all. 329 var skAiLive = !!(skAiWidget && skAiWidget.enabled && skAiWidget.phone); 330 if (skWaConfig.useMultipleAgents) { 331 // Multiple agents: the AI assistant is one agent in the list, with its 332 // number from WhatsApp AI Automation and name/avatar/pages/visibility 333 // from the merchant's saved AI agent (or these defaults, kept in step 334 // with DEFAULT_AI_AGENT in resources/js/components/Settings/ContactTab.jsx). 335 // It's removed whenever the AI isn't live (disconnected, paused, plan or 336 // free limit reached) or the merchant hid it; human agents and the main 337 // number stay as the merchant set them. 338 var skAgents = Array.isArray(skWaConfig.agents) ? skWaConfig.agents : []; 339 var skAiIndex = -1; 340 for (var i = 0; i < skAgents.length; i++) { 341 if (skAgents[i] && skAgents[i].isAi) { skAiIndex = i; break; } 342 } 343 var skAiSaved = skAiIndex >= 0 ? skAgents[skAiIndex] : null; 344 var skHumans = []; 345 for (var j = 0; j < skAgents.length; j++) { 346 if (skAgents[j] && !skAgents[j].isAi) skHumans.push(skAgents[j]); 347 } 348 if (skAiLive && !(skAiSaved && skAiSaved.hidden)) { 349 var skAiAgent = { 350 id: 'ai-assistant', 351 name: 'AI Shopping Assistant', 352 title: 'Replies instantly, 24/7', 353 avatar: '', 354 greeting: 'Hi! I can help you with products, stock and your order.', 355 pages: [] 356 }; 357 if (skAiSaved) {
358 for (var k in skAiSaved) { 359 if (Object.prototype.hasOwnProperty.call(skAiSaved, k)) skAiAgent[k] = skAiSaved[k]; 360 } 361 } 362 skAiAgent.isAi = true; 363 skAiAgent.phone = skAiWidget.phone; 364 skHumans.unshift(skAiAgent); 365 } 366 skWaConfig.agents = skHumans; 367 } else if (skAiWidget && skAiWidget.phone) { 368 skWaConfig.phoneNumber = skAiWidget.enabled ? skAiWidget.phone : null; 369 } 370 window.whatsappchatsk = { 371 configurations: skWaConfig, 372 appDomain: "https:\/\/whatsappmarketing.magento2extensions.com", 373 shopDomain: "optiqueoptometrists.myshopify.com" 374 }; 375 } 376</script>
376 377 378<style> 379 380</style><!-- END app block -->
380<script src="https://cdn.shopify.com/extensions/01a0f217-4010-71ad-9a7f-80dd70c19699/whatsapp-chat-button-squadkin-76/assets/tsdjsdfkasfdiajhdcknakjcnijwe.js" type="text/javascript" defer="defer"></script>
vendor: 1 bytes, line 380
380
381<script src="https://cdn.shopify.com/extensions/01a0aa7a-f99f-7ab6-a36e-9673fd70d8d4/omnisend-57/assets/omnisend-in-shop.js" type="text/javascript" defer="defer"></script>
381 382<link href="https://monorail-edge.shopifysvc.com" rel="dns-prefetch">
383<script>(function(){if ("sendBeacon" in navigator && "performance" in window) {try {var session_token_from_headers = performance.getEntriesByType('navigation')[0].serverTiming.find(x => x.name == '_s').description;} catch {var session_token_from_headers = undefined;}var session_cookie_matches = document.cookie.match(/_shopify_s=([^;]*)/);var session_token_from_cookie = session_cookie_matches && session_cookie_matches.length === 2 ? session_cookie_matches[1] : "";var session_token = session_token_from_headers || session_token_from_cookie || "";function handle_abandonment_event(e) {var entries = performance.getEntries().filter(function(entry) {return /monorail-edge.shopifysvc.com/.test(entry.name);});if (!window.abandonment_tracked && entries.length === 0) {window.abandonment_tracked = true;var currentMs = Date.now();var navigation_start = performance.timing.navigationStart;var payload = {shop_id: 57147555972,url: window.location.href,navigation_start,duration: currentMs - navigation_start,session_token,page_type: "blog"};window.navigator.sendBeacon("https://monorail-edge.shopifysvc.com/v1/produce", JSON.stringify({schema_id: "online_store_buyer_site_abandonment/1.1",payload: payload,metadata: {event_created_at_ms: currentMs,event_sent_at_ms: currentMs}}));}}window.addEventListener('pagehide', handle_abandonment_event);}}());</script>
vendor: 1 bytes, line 383
383
384<script> 385 window.__TREKKIE_SHIM_QUEUE = window.__TREKKIE_SHIM_QUEUE || []; 386</script>
vendor: 1 bytes, line 386
386
387<script>(function(){var wpmLoader=function(){"use strict";var e=/Googlebot|Storebot-Google|bingbot|Baiduspider|YandexBot|DuckDuckBot|Slurp|facebookexternalhit|Twitterbot|LinkedInBot|Applebot|AdsBot-Google|Mediapartners-Google|APIs-Google|PetalBot|SemrushBot|AhrefsBot|MJ12bot|DotBot|Acunetix|PerplexityBot|Perplexity-User/i,t=/bytedance/i;function i(){try{var e=document.cookie;if(!e||"string"!=typeof e)return;for(var t=0,i=e.split(";");t<i.length;t++){var n=i[t],r=n.indexOf("=");if(-1!==r){var o=n.slice(0,r).trim();if(o){var a=void 0;try{a=decodeURIComponent(o)}catch(e){a=o}if("_shopify_s"===a){var d=n.slice(r+1).trim();try{return decodeURIComponent(d)}catch(e){return d}}}}}return}catch(e){return}}function n(e){try{"undefined"!=typeof console&&"function"==typeof console.warn&&console.warn(e)}catch(e){}}function r(e,t){return"string"==typeof e&&e.length>0&&e.length<=t?e:void 0}function o(e){var t;switch(null==(t=null==e?void 0:e.navigation)?void 0:t.type){case 0:return"navigate";case 1:return"reload";case 2:return"back_forward";default:return}}function a(){var e,t,i;try{var n=null==(i=null==(t=null==(e=self.ShopifyAnalytics)?void 0:e.lib)?void 0:t.trekkie)?void 0:i.state;return"awaiting-consent"===n||"initialized"===n?n:void 0}catch(e){return}}return function(d,s,u,l){var c=arguments.length>4&&void 0!==arguments[4]?arguments[4]:{};try{var p=c.trekkieShim;!0!==p&&"true"!==p||null!=window.__TREKKIE_SHIM_QUEUE||(window.__TREKKIE_SHIM_QUEUE=[])}catch(e){}var f,v,h,y,g=(v=(f={modern:/Edge?\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Firefox\/(1{2}[4-9]|1[2-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Chrom(ium|e)\/(9{2}|\d{3,})\.\d+(\.\d+|)|(Maci|X1{2}).+ Version\/(15\.\d+|(1[6-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(9{2}|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(15[._]\d+|(1[6-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|SamsungBrowser\/([2-9]\d|\d{3,})\.\d+/,legacy:/Edge?\/(1[6-9]|[2-9]\d|\d{3,})\.\d+(\.\d+|)|Firefox\/(5[4-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)|Chrom(ium|e)\/(5[1-9]|[6-9]\d|\d{3,})\.\d+(\.\d+|)([\d.]+$|.*Safari\/(?![\d.]+ Edge\/[\d.]+$))|(Maci|X1{2}).+ Version\/(10\.\d+|(1[1-9]|[2-9]\d|\d{3,})\.\d+)([,.]\d+|)( \(\w+\)|)( Mobile\/\w+|) Safari\/|Chrome.+OPR\/(3[89]|[4-9]\d|\d{3,})\.\d+\.\d+|(CPU[ +]OS|iPhone[ +]OS|CPU[ +]iPhone|CPU IPhone OS|CPU iPad OS)[ +]+(10[._]\d+|(1[1-9]|[2-9]\d|\d{3,})[._]\d+)([._]\d+|)|Android:?[ /-](14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})(\.\d+|)(\.\d+|)|Mobile Safari.+OPR\/([89]\d|\d{3,})\.\d+\.\d+|Android.+Firefox\/(15\d|1[6-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+Chrom(ium|e)\/(14[89]|1[5-9]\d|[2-9]\d{2}|\d{4,})\.\d+(\.\d+|)|Android.+(UC? ?Browser|UCWEB|U3)[ /]?(15\.([5-9]|\d{2,})|(1[6-9]|[2-9]\d|\d{3,})\.\d+)\.\d+|SamsungBrowser\/(5\.\d+|([6-9]|\d{2,})\.\d+)|Android.+MQ{2}Browser\/(14(\.(9|\d{2,})|)|(1[5-9]|[2-9]\d|\d{3,})(\.\d+|))(\.\d+|)|K[Aa][Ii]OS\/(3\.\d+|([4-9]|\d{2,})\.\d+)(\.\d+|)/}).modern,h=f.legacy,(y=navigator.userAgent).match(e)?"bot":y.match(v)?"modern":y.match(h)?"legacy":y.match(t)?"bot":"unknown"),m=function(e){var t,i,n=r(e,128);try{var a=window.performance,d=null==(t=null==a?void 0:a.getEntriesByType)?void 0:t.call(a,"navigation")[0];if(!d)return{requestId:n,navigationType:o(a)};var s="type"in d?r(d.type,64):void 0,u="serverTiming"in d&&Array.isArray(d.serverTiming)?d.serverTiming:[];return{requestId:null!=n?n:r(null==(i=u.find(function(e){return"requestID"===e.name}))?void 0:i.description,128),navigationType:s}}catch(e){return{requestId:n}}}(c.requestId),w=function(e){var t=e.version,r=e.browserTarget,o=e.surface,a=e.shopId,d=e.monorailEndpoint,s=window.location.href;return{emit:function(e){var u=e.status,l=e.errorMsg,c=e.failureReason,p=e.useKeepaliveFallback,f=void 0!==p&&p,v=e.navigationType,h=e.pagehidePersisted,y=e.requestId,g=e.trekkieState;if(d){var m,w;try{var b=(new Date).getTime();m=JSON.stringify({metadata:{event_sent_at_ms:b},events:[{schema_id:"web_pixels_manager_load/3.3",payload:{version:t,bundle_target:r,page_url:s,status:u,surface:o,error_msg:l,failure_reason:c,navigation_type:v,pagehide_persisted:h,request_id:y,trekkie_state:g,shop_id:a,visit_token:i()},metadata:{event_created_at_ms:b}}]})}catch(e){return}try{if("function"==typeof window.navigator.sendBeacon&&-1===(w=window.navigator.userAgent).indexOf("iPhone; CPU iPhone OS 12_")&&-1===w.indexOf("iPad; CPU OS 12_")&&-1===w.indexOf("iPod touch; CPU iPhone OS 12_")&&window.navigator.sendBeacon.bind(window.navigator)(d,m))return}catch(e){}if(f)try{"function"==typeof window.fetch&&window.fetch(d,{method:"POST",headers:{"Content-Type":"text/plain"},body:m,keepalive:!0}
387).catch(function(){})}catch(e){}else try{var _=new XMLHttpRequest;_.open("POST",d,!0),_.setRequestHeader("Content-Type","text/plain"),_.send(m)}catch(e){n("[Web Pixels Manager] Got an unhandled error while logging to Monorail.")}}else n("[Web Pixels Manager] No Monorail endpoint provided, skipping logging.")}}}({version:u,browserTarget:g,surface:d.surface,shopId:d.shopId,monorailEndpoint:d.monorailEndpoint});if(Boolean(null==(_=null==(b=window.Shopify)?void 0:b.analytics)?void 0:_.replayQueue))w.emit({status:"setup-skipped",errorMsg:"replay queue already initialized."});else{var b,_;w.emit({status:"setup-started"}),window.Shopify=window.Shopify||{};var S=window.Shopify;S.analytics=S.analytics||{};var P=S.analytics;P.replayQueue=[],P.publish=function(e,t,i){return P.replayQueue.push([e,t,i]),!0};try{self.performance.mark("wpm:start")}catch(e){}var k,C="modern"===g?"modern":"legacy",E=(null!=l?l:{modern:"",legacy:""})[C],I=[(k={baseUrl:s,hashVersion:u,buildTarget:C}).baseUrl,"/wpm","/b",k.hashVersion,"modern"===k.buildTarget?"m":"l",".js"].join(""),O=!1,T=!1;try{c.browserTarget=g,function(){O=!0;try{window.addEventListener("pagehide",M)}catch(e){O=!1}}(),R(function(){try{R(x)}catch(e){D(e)}}),w.emit({status:"loading",requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()})}catch(e){D(e)}}function U(){var e;if(q(),!function(){var e,t;return Boolean(null==(t=null==(e=window.Shopify)?void 0:e.analytics)?void 0:t.initialized)}()){var t,i,n;try{if("function"!=typeof(null==(e=window.webPixelsManager)?void 0:e.init))return void A();if(!(null!==(n=i=t=window.webPixelsManager.init(d))&&"function"!=typeof n&&Object(n)===n&&"publish"in i&&"function"==typeof i.publish&&"publishCustomEvent"in i&&"function"==typeof i.publishCustomEvent&&"visitor"in i&&"function"==typeof i.visitor))return void A()}catch(e){return void A(e)}var r=window.Shopify.analytics;r.replayQueue.forEach(function(e){var i=e[0],n=e[1],r=e[2];t.publishCustomEvent(i,n,r)}),r.replayQueue=[],r.publish=t.publishCustomEvent,r.visitor=t.visitor,r.initialized=!0}}function A(e){B("manager_api_unavailable",void 0===e?void 0:Q(e))}function x(){B("script_load_failed","".concat(I," has failed to load"))}function B(e,t){T||(T=!0,q(),w.emit({status:"failed",errorMsg:t,failureReason:e,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function M(e){O&&(q(),w.emit({status:"pagehide-while-loading",useKeepaliveFallback:!0,pagehidePersisted:e.persisted,requestId:m.requestId,navigationType:m.navigationType,trekkieState:a()}))}function q(){O=!1;try{window.removeEventListener("pagehide",M)}catch(e){}}function R(e){var t;!function(e){var t=e.src,i=e.async,n=void 0===i||i,r=e.onload,o=e.onerror,a=e.sri,d=e.scriptDataAttributes,s=void 0===d?{}:d,u=document.createElement("script"),l=document.querySelector("head"),c=document.querySelector("body");if(u.async=n,u.src=t,a&&(u.integrity=a,u.crossOrigin="anonymous"),s)for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p))try{u.dataset[p]=String(s[p])}catch(e){}if(r&&u.addEventListener("load",r),o&&u.addEventListener("error",o),l)l.appendChild(u);else{if(!c)throw new Error("Did not find a head or body element to append the script");c.appendChild(u)}}({src:I,async:!0,onload:U,onerror:e,sri:(t=E,"string"==typeof t&&/^sha384-[A-Za-z0-9+/=]+$/.test(t)?E:""),scriptDataAttributes:c})}function D(e){B("script_append_failed",Q(e))}function Q(e){return e instanceof Error?e.message:"Unknown error"}}}();wpmLoader({shopId: 57147555972,storefrontBaseUrl: "https://optique.co.za",extensionsBaseUrl: "https://extensions.shopifycdn.com/cdn/shopifycloud/web-pixels-manager",monorailEndpoint: "https://optique.co.za/.well-known/shopify/monorail/unstable/produce_batch",surface: "storefront-renderer",enabledBetaFlags: ["4c64608a","16072cab","8450a54b","7ee89bf1"],webPixelsConfigList: [{"id":"2398683268","configuration":"{\"apiURL\":\"https:\/\/api.omnisend.com\",\"appURL\":\"https:\/\/app.omnisend.com\",\"brandID\":\"68aef96417ed960e3182f4d3\",\"trackingURL\":\"https:\/\/wt.omnisendlink.com\"}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"1e2b45bbee5b360dff908f60423b89f8","type":"APP","apiClientId":186001,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"243138692","configuration":"{\"config\":\"{\\\"google_tag_ids\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"GT-KVN3DKW\\\"],\\\"target_country\\\":\\\"ZA\\\",\\\"gtag_events\\\":[{\\\"type\\\":\\\"begin_checkout\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/m_TsCJHq_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"search\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/ioHNCJTq_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"remove_from_cart\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"},{\\\"type\\\":\\\"view_item\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/MfWdCIvq_YIYEM3BlqcC\\\",\\\"MC-FYPFYVS956\\\"]},{\\\"type\\\":\\\"add_shipping_info\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"},{\\\"type\\\":\\\"purchase\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/nGYwCIjq_YIYEM3BlqcC\\\",\\\"MC-FYPFYVS956\\\"]},{\\\"type\\\":\\\"page_view\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/KE_wCIXq_YIYEM3BlqcC\\\",\\\"MC-FYPFYVS956\\\"]},{\\\"type\\\":\\\"view_item_list\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"},{\\\"type\\\":\\\"add_payment_info\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/C_gNCJfq_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"add_to_cart\\\",\\\"action_label\\\":[\\\"G-5SQ6XZNC6M\\\",\\\"AW-619028685\\\/e1ZpCI7q_YIYEM3BlqcC\\\"]},{\\\"type\\\":\\\"view_cart\\\",\\\"action_label\\\":\\\"G-5SQ6XZNC6M\\\"}],\\\"enable_monitoring_mode\\\":false}\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"a3321ca85cf5aaf6b57585fcd8d67b3a","type":"APP","apiClientId":1780363,"privacyPurposes":[],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"77529220","configuration":"{\"pixel_id\":\"3317481815158323\",\"pixel_type\":\"facebook_pixel\",\"metaapp_system_user_token\":\"-\"}","eventPayloadVersion":"v1","runtimeContext":"OPEN","scriptVersion":"96420dbe9ea96c426a1b7f364f977719","type":"APP","apiClientId":2329312,"privacyPurposes":["ANALYTICS","MARKETING","SALE_OF_DATA"],"dataSharingAdjustments":{"protectedCustomerApprovalScopes":["read_customer_address","read_customer_email","read_customer_name","read_customer_personal_data","read_customer_phone"],"dataSharingControls":["share_all_events"]},"dataSharingState":"optimized","enabledFlags":["9a3ed68a"]},{"id":"28475524","eventPayloadVersion":"1","runtimeContext":"LAX","scriptVersion":"1","type":"CUSTOM","privacyPurposes":[],"name":"New GTM Datalayer"},{"id":"shopify-app-pixel","configuration":"{}","eventPayloadVersion":"v1","runtimeContext":"STRICT","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"APP","privacyPurposes":["ANALYTICS","MARKETING"]},{"id":"shopify-custom-pixel","eventPayloadVersion":"v1","runtimeContext":"LAX","scriptVersion":"0530","apiClientId":"shopify-pixel","type":"CUSTOM","privacyPurposes":["ANALYTICS","MARKETING"]}],isMerchantRequest: false,initData: {"shop":{"name":"Optique Optometrists","paymentSettings":{"currencyCode":"ZAR"},"myshopifyDomain":"optiqueoptometrists.myshopify.com","countryCode":"ZA","storefrontUrl":"https:\/\/optique.co.za"},"customer":null,"cart":null,"checkout":null,"productVariants":[],"products":[],"purchasingCompany":null},},"https://optique.co.za/cdn","5982071ew7ea472e3p69b68784m2150dfea",{"modern":"","legacy":""},{"trekkieShim":true,"agentContext":true,"apiClientId":"580111","facebookCapiEnabled":"true","themeId":"127972540548","themePublished":"true","eventMetadataId":"fc70084a-3c63-4d16-9369-fecd5483bb3a","pageType":"blog","resourceId":"79486648452","shopId":"57147555972","storefrontBaseUrl":"https:\/\/optique.co.za","extensionBaseUrl":"https:\/\/extensions.shopifycdn.com\/cdn\/shopifycloud\/web-pixels-manager","surface":"storefront-renderer","enabledBetaFlags":"[\"4c64608a\", \"16072cab\", \"8450a54b\", \"7ee89bf1\"]","isMerchantRequest":"false","hashVersion":"5982071ew7ea472e3p69b68784m2150dfea","publish":"custom","events":"[[\"page_viewed\",{}]]"});})();</script>
387<script> 388 window.ShopifyAnalytics = window.ShopifyAnalytics || {}; 389 window.ShopifyAnalytics.meta = window.ShopifyAnalytics.meta || {}; 390 window.ShopifyAnalytics.meta.currency = 'ZAR'; 391 var meta = {"page":{"pageType":"blog","resourceType":"blog","resourceId":79486648452,"requestId":"d61cc479-e8cb-45fd-b653-0bd55172b1fe-1791112358"}}; 392 for (var attr in meta) { 393 window.ShopifyAnalytics.meta[attr] = meta[attr]; 394 } 395</script>
vendor: 1 bytes, line 395
395
396<script class="analytics"> 397 (function () { 398 var customDocumentWrite = function(content) { 399 var jquery = null; 400 401 if (window.jQuery) { 402 jquery = window.jQuery; 403 } else if (window.Checkout && window.Checkout.$) { 404 jquery = window.Checkout.$; 405 } 406 407 if (jquery) { 408 jquery('body').append(content); 409 } 410 }; 411 412 var hasLoggedConversion = function(token) { 413 if (token) { 414 return document.cookie.indexOf('loggedConversion=' + token) !== -1; 415 } 416 return false; 417 } 418 419 var setCookieIfConversion = function(token) { 420 if (token) { 421 var twoMonthsFromNow = new Date(Date.now()); 422 twoMonthsFromNow.setMonth(twoMonthsFromNow.getMonth() + 2); 423 424 document.cookie = 'loggedConversion=' + token + '; expires=' + twoMonthsFromNow; 425 } 426 } 427 428 var trekkie = window.ShopifyAnalytics.lib = window.trekkie = window.trekkie || []; 429 window.ShopifyAnalytics.lib.trekkie = window.trekkie; 430 if (trekkie.integrations) { 431 return; 432 } 433 trekkie.methods = [ 434 'identify', 435 'page', 436 'ready', 437 'track', 438 'trackForm', 439 'trackLink' 440 ]; 441 trekkie.factory = function(method) { 442 return function() { 443 var args = Array.prototype.slice.call(arguments); 444 args.unshift(method); 445 trekkie.push(args); 446 if (method == 'track' || method == 'page') { 447 var pageUrl; 448 try { 449 pageUrl = window.location.href; 450 } catch (e) {} 451 var pageReferrer; 452 try { 453 pageReferrer = document.referrer; 454 } catch (e) {} 455 try { 456 if (window.__TREKKIE_SHIM_QUEUE == null) { 457 window.__TREKKIE_SHIM_QUEUE = []; 458 } 459 window.__TREKKIE_SHIM_QUEUE.push({ 460 from: 'trekkie-stub', 461 method: method, 462 args: args.slice(1), 463 pageContext: { 464 url: pageUrl, 465 referrer: pageReferrer 466 } 467 }); 468 } catch (e) { 469 // no-op 470 } 471 } 472 return trekkie; 473 }; 474 }; 475 for (var i = 0; i < trekkie.methods.length; i++) { 476 var key = trekkie.methods[i]; 477 trekkie[key] = trekkie.factory(key); 478 } 479 trekkie.load = function(config) { 480 trekkie.config = config || {}; 481 trekkie.config.initialDocumentCookie = document.cookie; 482 var first = document.getElementsByTagName('script')[0]; 483var script = document.createElement('script'); 484script.type = 'text/javascript'; 485script.onerror = function(e) { 486 var scriptFallback = document.createElement('script'); 487 scriptFallback.type = 'text/javascript'; 488 scriptFallback.onerror = function(error) { 489 var Monorail = { 490 produce: function produce(monorailDomain, schemaId, payload) { 491 var currentMs = new Date().getTime(); 492 var event = { 493 schema_id: schemaId, 494 payload: payload, 495 metadata: { 496 event_created_at_ms: currentMs, 497 event_sent_at_ms: currentMs 498 } 499 }; 500 return Monorail.sendRequest("https://" + monorailDomain + "/v1/produce", JSON.stringify(event)); 501 }, 502 sendRequest: function sendRequest(endpointUrl, payload) { 503 // Try the sendBeacon API 504 if (window && window.navigator && typeof window.navigator.sendBeacon === 'function' && typeof window.Blob === 'function' && !Monorail.isIos12()) { 505 var blobData = new window.Blob([payload], { 506 type: 'text/plain' 507 }); 508 509 if (window.navigator.sendBeacon(endpointUrl, blobData)) { 510 return true; 511 } // sendBeacon was not successful 512 513 } // XHR beacon 514 515 var xhr = new XMLHttpRequest(); 516 517 try { 518 xhr.open('POST', endpointUrl); 519 xhr.setRequestHeader('Content-Type', 'text/plain'); 520 xhr.send(payload); 521 } catch (e) { 522 console.log(e); 523 } 524 525 return false; 526 }, 527 isIos12: function isIos12() { 528 return window.navigator.userAgent.lastIndexOf('iPhone; CPU iPhone OS 12_') !== -1 || window.navigator.userAgent.lastIndexOf('iPad; CPU OS 12_') !== -1; 529 } 530 }; 531 Monorail.produce('monorail-edge.shopifysvc.com', 532 'trekkie_storefront_load_errors/1.1', 533 {shop_id: 57147555972, 534 theme_id: 127972540548, 535 app_name: "storefront", 536 context_url: window.location.href, 537 source_url: "//optique.co.za/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js"}); 538 539 }; 540 scriptFallback.async = true; 541 scriptFallback.src = '//optique.co.za/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 542 first.parentNode.insertBefore(scriptFallback, first); 543}; 544script.async = true; 545script.src = '//optique.co.za/cdn/s/trekkie.storefront.2f6d7d7ede7d24234881a9cd5f47e679642fa1f6.min.js'; 546first.parentNode.insertBefore(script, first); 547 548 }; 549 trekkie.load( 550 {"Trekkie":{"appName":"storefront","development":false,"defaultAttributes":{"shopId":57147555972,"isMerchantRequest":null,"themeId":127972540548,"themeCityHash":"2704458628052749461","contentLanguage":"en","currency":"ZAR","eventMetadataId":"fc70084a-3c63-4d16-9369-fecd5483bb3a"},"isServerSideCookieWritingEnabled":true,"monorailRegion":"shop_domain","enabledBetaFlags":["764d78cb","8450a54b","7ee89bf1","4c64608a"]},"Session Attribution":{},"S2S":{"facebookCapiEnabled":true,"source":"trekkie-storefront-renderer","apiClientId":580111}} 551 ); 552 553 var loaded = false;
554 trekkie.ready(function() { 555 if (loaded) return; 556 loaded = true; 557 558 window.ShopifyAnalytics.lib = window.trekkie; 559 560 var originalDocumentWrite = document.write; 561 document.write = customDocumentWrite; 562 try { window.ShopifyAnalytics.merchantGoogleAnalytics.call(this); } catch(error) {}; 563 document.write = originalDocumentWrite; 564 565 var match = window.location.pathname.match(/checkouts\/(.+)\/(thank_you|post_purchase)/) 566 var token = match? match[1]: undefined; 567 if (!hasLoggedConversion(token)) { 568 setCookieIfConversion(token); 569 570 } 571 }); 572 573 window.ShopifyAnalytics.lib.page(null,{"pageType":"blog","resourceType":"blog","resourceId":79486648452,"requestId":"d61cc479-e8cb-45fd-b653-0bd55172b1fe-1791112358","shopifyEmitted":true}); 574 575 var eventsListenerScript = document.createElement('script'); 576 eventsListenerScript.async = true; 577 eventsListenerScript.src = "//optique.co.za/cdn/shopifycloud/storefront/assets/shop_events_listener-4e26a9ce.js"; 578 document.getElementsByTagName('head')[0].appendChild(eventsListenerScript); 579})();</script>
579 580
580<script> 581 if (!window.ga || (window.ga && typeof window.ga !== 'function')) { 582 window.ga = function ga() { 583 (window.ga.q = window.ga.q || []).push(arguments); 584 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 585 window.Shopify.analytics.publish("ga_stub_called", {}, {sendTo: "google_osp_migration"}); 586 } 587 console.error("Shopify's Google Analytics stub called with:", Array.from(arguments), "\nSee https://help.shopify.com/manual/promoting-marketing/pixels/pixel-migration#google for more information."); 588 }; 589 if (window.Shopify && window.Shopify.analytics && typeof window.Shopify.analytics.publish === 'function') { 590 window.Shopify.analytics.publish("ga_stub_initialized", {}, {sendTo: "google_osp_migration"}); 591 } 592 } 593</script>
vendor: 1 bytes, line 593
593
594<script 595 defer 596 src="https://optique.co.za/cdn/shopifycloud/perf-kit/shopify-perf-kit-3.9.4.min.js" 597 data-application="storefront-renderer" 598 data-shop-id="57147555972" 599 data-render-region="gcp-us-central1" 600 data-page-type="blog" 601 data-theme-instance-id="127972540548" 602 data-theme-name="Wokiee" 603 data-theme-version="2.2.0 shopify 2.0" 604 data-monorail-region="shop_domain" 605 data-resource-timing-sampling-rate="10" 606 data-shs="true" 607 data-shs-beacon="true" 608 data-shs-export-with-fetch="true" 609 data-shs-logs-sample-rate="1" 610 data-shs-beacon-endpoint="https://optique.co.za/api/collect" 611></script>
611 612<meta name="shopify-y" content="c68f53bc-9869-4107-9ddf-941951623d03" data-expiration="1822669958000"><meta name="shopify-s" content="db333abd-ad20-4168-80c0-d76d1f92537e" data-expiration="1791114158000"><meta name="new-cookie-storage-activated" content="t"> 613</head> 614<body class="pageblog" 615 ><div id="shopify-section-show-helper" class="shopify-section"></div><div id="shopify-section-header-template" class="shopify-section"><header class="desctop-menu-large small-header tt-hover-03"><nav class="panel-menu mobile-main-menu"> 616 <ul><li> 617 <a href="/">HOME</a></li><li> 618 <a href="/pages/book-a-r99-eye-test-online">EYE TEST</a><ul><li> 619 <a href="/pages/book-a-r99-eye-test-online">book online</a></li><li> 620 <a href="/pages/book-a-r99-eye-test-online">branches</a></li><li> 621 <a href="/pages/r99-eye-test">why is our eye test only R99?</a></li><li> 622 <a href="/pages/what-is-it-like-getting-an-eye-test">what's an eye test like @ Optique?</a></li></ul></li><li> 623 <a href="/pages/pricing">PRICES</a><ul><li> 624 <a href="/pages/pricing">prices</a></li><li> 625 <a href="/pages/payment-options-2">payment options</a></li></ul></li><li> 626 <a href="/collections/frames">FRAMES</a><ul><li> 627 <a href="https://optique.co.za/collections/frames">ALL FRAMES</a><ul><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=women">WOMEN</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=men">MEN</a></li></ul></li><li> 628 <a href="https://optique.co.za/collections/frames">SIZE</a><ul><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=small">SMALL</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=medium">MEDIUM</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=large">LARGE</a></li></ul></li><li> 629 <a href="https://optique.co.za/collections/frames">MATERIAL TYPE</a><ul><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=acetate">ACETATE</a></li><li><a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=metal">METAL</a></li></ul></li></ul></li><li> 630 <a href="/pages/essilor">LENSES</a><ul><li> 631 <a href="/pages/essilor">our supplier | essilor</a></li><li> 632 <a href="/pages/anti-reflective-coating">our coating | crizal easy®</a></li><li> 633 <a href="/pages/multifocal-lenses">our multifocal | Optique DS</a></li><li> 634 <a href="/pages/self-tinting-lenses">self-tinting lenses | transitions®</a></li><li> 635 <a href="/pages/blue-light-protection">blue-light | crizal prevencia®</a></li><li> 636 <a href="/pages/accommodative-support-lenses">digital lenses | eyeZen® </a></li></ul></li><li> 637 <a href="/collections/contact-lenses">CONTACT LENSES</a><ul><li> 638 <a href="/pages/cooper-vision">our supplier | cooper vision</a></li><li> 639 <a href="/collections/contact-lenses">online store</a></li></ul></li><li> 640 <a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa">MORE</a><ul><li> 641 <a href="/pages/faq">faq's</a></li><li> 642 <a href="/pages/our-why">our why</a></li><li> 643 <a href="/pages/reviews-and-testimonials">our reviews</a></li><li> 644 <a href="/pages/ambassadors">famous fans</a></li><li> 645 <a href="/pages/book-a-r99-eye-test-online">our branches</a></li><li> 646 <a href="/pages/optique-optometrists-vision-and-values">vision & values</a></li><li> 647 <a href="/pages/join-our-team">work @ Optique</a></li><li> 648 <a href="/pages/accountability-and-transparency">accountability meter</a></li><li>
649 <a href="/pages/other-services-we-offer-at-optique-optometrists">other services we offer</a></li><li> 650 <a href="/pages/what-makes-us-different">what makes us different</a></li><li> 651 <a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa">the story behind optique</a></li></ul></li></ul> 652</nav><!-- tt-mobile-header --> 653<div class="tt-mobile-header tt-mobile-header-inline tt-mobile-header-inline-stuck"> 654 <div class="container-fluid"> 655 <div class="tt-header-row"> 656 <div class="tt-mobile-parent-menu"> 657 <div class="tt-menu-toggle mainmenumob-js"> 658 <svg width="17" height="15" viewBox="0 0 17 15" fill="none" xmlns="http://www.w3.org/2000/svg"> 659<path d="M16.4023 0.292969C16.4935 0.397135 16.5651 0.507812 16.6172 0.625C16.6693 0.742188 16.6953 0.865885 16.6953 0.996094C16.6953 1.13932 16.6693 1.26953 16.6172 1.38672C16.5651 1.50391 16.4935 1.60807 16.4023 1.69922C16.2982 1.80339 16.1875 1.88151 16.0703 1.93359C15.9531 1.97266 15.8294 1.99219 15.6992 1.99219H1.69531C1.55208 1.99219 1.42188 1.97266 1.30469 1.93359C1.1875 1.88151 1.08333 1.80339 0.992188 1.69922C0.888021 1.60807 0.809896 1.50391 0.757812 1.38672C0.71875 1.26953 0.699219 1.13932 0.699219 0.996094C0.699219 0.865885 0.71875 0.742188 0.757812 0.625C0.809896 0.507812 0.888021 0.397135 0.992188 0.292969C1.08333 0.201823 1.1875 0.130208 1.30469 0.078125C1.42188 0.0260417 1.55208 0 1.69531 0H15.6992C15.8294 0 15.9531 0.0260417 16.0703 0.078125C16.1875 0.130208 16.2982 0.201823 16.4023 0.292969ZM16.4023 6.28906C16.4935 6.39323 16.5651 6.50391 16.6172 6.62109C16.6693 6.73828 16.6953 6.86198 16.6953 6.99219C16.6953 7.13542 16.6693 7.26562 16.6172 7.38281C16.5651 7.5 16.4935 7.60417 16.4023 7.69531C16.2982 7.79948 16.1875 7.8776 16.0703 7.92969C15.9531 7.98177 15.8294 8.00781 15.6992 8.00781H1.69531C1.55208 8.00781 1.42188 7.98177 1.30469 7.92969C1.1875 7.8776 1.08333 7.79948 0.992188 7.69531C0.888021 7.60417 0.809896 7.5 0.757812 7.38281C0.71875 7.26562 0.699219 7.13542 0.699219 6.99219C0.699219 6.86198 0.71875 6.73828 0.757812 6.62109C0.809896 6.50391 0.888021 6.39323 0.992188 6.28906C1.08333 6.19792 1.1875 6.1263 1.30469 6.07422C1.42188 6.02214 1.55208 5.99609 1.69531 5.99609H15.6992C15.8294 5.99609 15.9531 6.02214 16.0703 6.07422C16.1875 6.1263 16.2982 6.19792 16.4023 6.28906ZM16.4023 12.3047C16.4935 12.3958 16.5651 12.5 16.6172 12.6172C16.6693 12.7344 16.6953 12.8646 16.6953 13.0078C16.6953 13.138 16.6693 13.2617 16.6172 13.3789C16.5651 13.4961 16.4935 13.6068 16.4023 13.7109C16.2982 13.8021 16.1875 13.8737 16.0703 13.9258C15.9531 13.9779 15.8294 14.0039 15.6992 14.0039H1.69531C1.55208 14.0039 1.42188 13.9779 1.30469 13.9258C1.1875 13.8737 1.08333 13.8021 0.992188 13.7109C0.888021 13.6068 0.809896 13.4961 0.757812 13.3789C0.71875 13.2617 0.699219 13.138 0.699219 13.0078C0.699219 12.8646 0.71875 12.7344 0.757812 12.6172C0.809896 12.5 0.888021 12.3958 0.992188 12.3047C1.08333 12.2005 1.1875 12.1224 1.30469 12.0703C1.42188 12.0182 1.55208 11.9922 1.69531 11.9922H15.6992C15.8294 11.9922 15.9531 12.0182 16.0703 12.0703C16.1875 12.1224 16.2982 12.2005 16.4023 12.3047Z" fill="#191919"/> 660</svg> 661 </div> 662 </div> 663 664 <div class="tt-logo-container"> 665 <a class="tt-logo tt-logo-alignment" href="/"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_95x.png?v=1662381977" 666 srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_95x.png?v=1662381977 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_190x.png?v=1662381977 2x" 667 alt="" 668 class="tt-retina"></a> 669 </div> 670 671 <div class="tt-mobile-parent-menu-icons"> 672 <!-- search --> 673 <div class="tt-mobile-parent-search tt-parent-box"></div> 674 <!-- /search --><!-- cart --> 675 <div class="tt-mobile-parent-cart tt-parent-box"></div> 676 <!-- /cart --></div> 677 678 679 680 </div> 681 </div> 682</div> 683 684 <!-- tt-desktop-header --> 685 <div class="tt-desktop-header"> 686 687 688 689 <div class="container-fluid"> 690 <div class="tt-header-holder"> 691 692 693 <div class="tt-col-obj tt-obj-logo 694" itemscope itemtype="http://schema.org/Organization"><a href="/" class="tt-logo" itemprop="url"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006" 695 srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_350x.png?v=1662382006 2x" 696 alt="" 697 class="tt-retina" itemprop="logo" style="top:0px"/></a></div><div class="tt-col-obj tt-obj-menu obj-aligment-left"> 698 <!-- tt-menu --> 699 <div class="tt-desctop-parent-menu tt-parent-box"> 700 <div class="tt-desctop-menu"><nav> 701 <ul><li class="dropdown tt-megamenu-col-01" > 702 <a href="/"><span>HOME</span></a></li><li class="dropdown tt-megamenu-col-01 submenuarrow" > 703 <a href="/pages/book-a-r99-eye-test-online"><span>EYE TEST</span></a><div class="dropdown-menu"> 704 <div class="row tt-col-list"> 705 <div class="col"> 706 <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/book-a-r99-eye-test-online"><span>book online</span></a></li><li><a href="/pages/book-a-r99-eye-test-online"><span>branches</span></a></li><li><a href="/pages/r99-eye-test"><span>why is our eye test only R99?</span></a></li><li><a href="/pages/what-is-it-like-getting-an-eye-test"><span>what's an eye test like @ Optique?</span></a></li></ul> 707 </div> 708 </div> 709</div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" > 710 <a href="/pages/pricing"><span>PRICES</span></a><div class="dropdown-menu"> 711 <div class="row tt-col-list"> 712 <div class="col"> 713 <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/pricing"><span>prices</span></a></li><li><a href="/pages/payment-options-2"><span>payment options</span></a></li></ul> 714 </div> 715 </div> 716</div></li><li class="dropdown megamenu submenuarrow" > 717 <a href="/collections/frames"><span>FRAMES</span></a><div class="dropdown-menu"> 718 <div class="row"> 719 <div class="col-sm-12"> 720 <div class="row tt-col-list"><div class="col-sm-4"> 721 <a href="https://optique.co.za/collections/frames" class="tt-title-submenu"> 722 ALL FRAMES 723</a><ul class="tt-megamenu-submenu"><li> 724 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=women"><span>WOMEN</span></a></li><li> 725 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=men"><span>MEN</span></a></li></ul></div><div class="col-sm-4"> 726 <a href="https://optique.co.za/collections/frames" class="tt-title-submenu"> 727 SIZE 728</a><ul class="tt-megamenu-submenu"><li> 729 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=small"><span>SMALL</span></a></li><li> 730 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=medium"><span>MEDIUM</span></a></li><li> 731 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_size=large"><span>LARGE</span></a></li></ul></div><div class="col-sm-4"> 732 <a href="https://optique.co.za/collections/frames" class="tt-title-submenu"> 733 MATERIAL TYPE 734</a><ul class="tt-megamenu-submenu"><li> 735 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=acetate"><span>ACETATE</span></a></li><li> 736 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.frame_material=metal"><span>METAL</span></a></li></ul></div></div> 737 </div></div><div class="row"><div class="col-sm-6"> 738 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=men" class="tt-promo-02"><img class="lazyload" 739 data-src="//optique.co.za/cdn/shop/files/1_2c600bbd-4b7a-4e1d-8ecf-8132874e3bfa_560x.png?v=1748958909" 740 alt=""/><div class="tt-description tt-point-h-l"> 741 <div class="tt-description-wrapper"><div class="tt-title-small" style="color:#ffffff">
741NEW <span class="tt-base-color">COLLECTION</span></div><div class="tt-title-large" style="color:#ffffff">SHOP MEN</div></div> 742 </div> 743 </a> 744 </div><div class="col-sm-6"> 745 <a href="https://optique.co.za/collections/frames?filter.p.m.custom.gender=women" class="tt-promo-02"><img class="lazyload" 746 data-src="//optique.co.za/cdn/shop/files/2_b9bee080-74c8-4fb1-95ef-59aa8a07fc66_560x.png?v=1748958909" 747 alt=""/><div class="tt-description tt-point-h-l"> 748 <div class="tt-description-wrapper"><div class="tt-title-small" style="color:#ffffff">NEW <span class="tt-base-color">COLLECTION</span></div><div class="tt-title-large" style="color:#ffffff">SHOP WOMEN</div></div> 749 </div> 750 </a> 751 </div></div></div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" > 752 <a href="/pages/essilor"><span>LENSES</span></a><div class="dropdown-menu"> 753 <div class="row tt-col-list"> 754 <div class="col"> 755 <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/essilor"><span>our supplier | essilor</span></a></li><li><a href="/pages/anti-reflective-coating"><span>our coating | crizal easy®</span></a></li><li><a href="/pages/multifocal-lenses"><span>our multifocal | Optique DS</span></a></li><li><a href="/pages/self-tinting-lenses"><span>self-tinting lenses | transitions®</span></a></li><li><a href="/pages/blue-light-protection"><span>blue-light | crizal prevencia®</span></a></li><li><a href="/pages/accommodative-support-lenses"><span>digital lenses | eyeZen® </span></a></li></ul> 756 </div> 757 </div> 758</div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" > 759 <a href="/collections/contact-lenses"><span>CONTACT LENSES</span></a><div class="dropdown-menu"> 760 <div class="row tt-col-list"> 761 <div class="col"> 762 <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/cooper-vision"><span>our supplier | cooper vision</span></a></li><li><a href="/collections/contact-lenses"><span>online store</span></a></li></ul> 763 </div> 764 </div> 765</div></li><li class="dropdown tt-megamenu-col-01 submenuarrow" > 766 <a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa"><span>MORE</span></a><div class="dropdown-menu"> 767 <div class="row tt-col-list"> 768 <div class="col"> 769 <ul class="tt-megamenu-submenu tt-megamenu-preview"><li><a href="/pages/faq"><span>faq's</span></a></li><li><a href="/pages/our-why"><span>our why</span></a></li><li><a href="/pages/reviews-and-testimonials"><span>our reviews</span></a></li><li><a href="/pages/ambassadors"><span>famous fans</span></a></li><li><a href="/pages/book-a-r99-eye-test-online"><span>our branches</span></a></li><li><a href="/pages/optique-optometrists-vision-and-values"><span>vision & values</span></a></li><li><a href="/pages/join-our-team"><span>work @ Optique</span></a></li><li><a href="/pages/accountability-and-transparency"><span>accountability meter</span></a></li><li>
769<a href="/pages/other-services-we-offer-at-optique-optometrists"><span>other services we offer</span></a></li><li><a href="/pages/what-makes-us-different"><span>what makes us different</span></a></li><li><a href="/pages/the-story-of-the-most-affordable-eye-care-in-south-africa"><span>the story behind optique</span></a></li></ul> 770 </div> 771 </div> 772</div></li></ul> 773</nav></div> 774 </div> 775 </div> 776 777 <div class="tt-col-obj tt-obj-options obj-move-right"><div class="tt-parent-box tt-desctop-parent-headtype1"> 778 <div class="tt-search-opened-headtype1 headerformplaceholderstyles"> 779 <form action="/search" method="get" role="search"> 780 <button type="submit" class="tt-btn-search"> 781 <i class="icon-f-85"></i> 782 </button> 783 <input class="tt-search-input" 784 type="search" 785 name="q" 786 placeholder="search products..."> 787 <input type="hidden" name="type" value="product" /> 788 </form> 789 </div> 790</div> 791 792<!-- tt-search --> 793<div class="tt-desctop-parent-search tt-parent-box serchisopen"> 794 <div class="tt-search tt-dropdown-obj"> 795 <button class="tt-dropdown-toggle" 796 data-tooltip="search" 797 data-tposition="bottom" 798 > 799 <i class="icon-f-85"></i> 800 </button> 801 <div class="tt-dropdown-menu"> 802 <div class="container"> 803 <form action="/search" method="get" role="search"> 804 <div class="tt-col"> 805 <input type="hidden" name="type" value="product" /> 806 <input class="tt-search-input" 807 type="search" 808 name="q" 809 placeholder="search products..." 810 aria-label="search products..."> 811 <button type="submit" class="tt-btn-search"></button> 812 </div> 813 <div class="tt-col"> 814 <button class="tt-btn-close icon-f-84"></button> 815 </div> 816 <div class="tt-info-text">what are you looking for?</div> 817 </form> 818 </div> 819 </div> 820 </div> 821</div> 822<!-- /tt-search --><!-- tt-cart --> 823<div class="tt-desctop-parent-cart tt-parent-box"> 824 <div class="tt-cart tt-dropdown-obj"> 825 <button class="tt-dropdown-toggle" 826 data-tooltip="cart" 827 data-tposition="bottom" 828 > 829 830 831 832 <i class="icon-f-39"></i> 833 834 <span class="tt-text"> 835 836 </span> 837 <span class="tt-badge-cart hide">0</span> 838 839 840 </button> 841 842 <div class="tt-dropdown-menu"> 843 <div class="tt-mobile-add"> 844 <h6 class="tt-title">SHOPPING CART</h6> 845 <button class="tt-close">CLOSE</button> 846 </div> 847 <div class="tt-dropdown-inner"> 848 <div class="tt-cart-layout"> 849 <div class="tt-cart-content"> 850 851 <a href="/cart" class="tt-cart-empty" title="VIEW CART"> 852 <i class="icon-f-39"></i> 853 <p>No Products in the Cart</p> 854 </a> 855 856 <div class="tt-cart-box hide"> 857 <div class="tt-cart-list"></div> 858 <div class="flex-align-center header-cart-more-message-js" style="display: none;"> 859 <a href="/cart" class="btn-link-02" title="View cart">. . .</a> 860 </div> 861 <div class="tt-cart-total-row"> 862 <div class="tt-cart-total-title">TOTAL:</div> 863 <div class="tt-cart-total-price">R 0.00</div> 864 </div> 865 866 <div class="checkbox-group m-term-conditions-checkbox term-conditions-checkbox-js"> 867 <input type="checkbox" id="cart-term-conditions-checkbox" value="1"> 868 <label for="cart-term-conditions-checkbox"> 869 <span class="check"></span> 870 <span class="box"></span> 871 I agree with the terms and conditions 872 </label> 873 </div> 874 875 <div class="tt-cart-btn"> 876 877 <div class="tt-item"> 878 <a href="/cart" class="btn-link-02">VIEW CART</a> 879 </div> 880 </div> 881 </div> 882 883 </div> 884 </div> 885 </div><div class='item-html-js hide'> 886 <div class="tt-item"> 887 <a href="#" title="View Product"> 888 <div class="tt-item-img"> 889 img 890 </div> 891 <div class="tt-item-descriptions"> 892 <h2 class="tt-title">title</h2> 893 894 <ul class="tt-add-info"> 895 <li class="details">
895details</li> 896 </ul> 897 898 <div class="tt-quantity"><span class="qty">qty</span> X</div> <div class="tt-price">price</div> 899 </div> 900 </a> 901 <div class="tt-item-close"> 902 <a href="/cart/change?id=0&quantity=0" class="tt-btn-close svg-icon-delete header_delete_cartitem_js" title="Delete"> 903 <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" 904 viewBox="0 0 22 22" style="enable-background:new 0 0 22 22;" xml:space="preserve"> 905 <g> 906 <path d="M3.6,21.1c-0.1-0.1-0.2-0.3-0.2-0.4v-15H2.2C2,5.7,1.9,5.6,1.7,5.5C1.6,5.4,1.6,5.2,1.6,5.1c0-0.2,0.1-0.3,0.2-0.4 907 C1.9,4.5,2,4.4,2.2,4.4h5V1.9c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2h6.3c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4 908 v2.5h5c0.2,0,0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2h-1.3v15 909 c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2H4.1C3.9,21.3,3.7,21.2,3.6,21.1z M17.2,5.7H4.7v14.4h12.5V5.7z M8.3,9 910 c0.1,0.1,0.2,0.3,0.2,0.4v6.9c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2s-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4V9.4 911 c0-0.2,0.1-0.3,0.2-0.4c0.1-0.1,0.3-0.2,0.4-0.2S8.1,8.9,8.3,9z M8.4,4.4h5V2.6h-5V4.4z M11.4,9c0.1,0.1,0.2,0.3,0.2,0.4v6.9 912 c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2s-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4V9.4c0-0.2,0.1-0.3,0.2-0.4 913 c0.1-0.1,0.3-0.2,0.4-0.2S11.3,8.9,11.4,9z M13.6,9c0.1-0.1,0.3-0.2,0.4-0.2s0.3,0.1,0.4,0.2c0.1,0.1,0.2,0.3,0.2,0.4v6.9 914 c0,0.2-0.1,0.3-0.2,0.4c-0.1,0.1-0.3,0.2-0.4,0.2s-0.3-0.1-0.4-0.2c-0.1-0.1-0.2-0.3-0.2-0.4V9.4C13.4,9.3,13.5,9.1,13.6,9z"/> 915 </g> 916</svg> 917 </a> 918 </div> 919 </div> 920</div></div> 921 </div> 922</div> 923<!-- /tt-cart --><!-- tt-account --> 924<div class="tt-desctop-parent-account tt-parent-box"> 925 <div class="tt-account tt-dropdown-obj"> 926 <button class="tt-dropdown-toggle" 927 data-tooltip="my account" 928 data-tposition="bottom" 929 > 930 <i class="icon-f-94"></i> 931 932 </button> 933 <div class="tt-dropdown-menu"> 934 <div class="tt-mobile-add"> 935 <button class="tt-close">close</button> 936 </div> 937 <div class="tt-dropdown-inner"> 938 <ul><li><a href="https://optique.co.za/customer_authentication/redirect?locale=en®ion_country=ZA"><i class="icon-f-77"></i>sign In</a></li> 939 <li><a href="https://shopify.com/57147555972/account?locale=en®ion_country=ZA&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJvcHRpcXVlb3B0b21ldHJpc3RzLm15c2hvcGlmeS5jb20iLCJmbGFncyI6W10sImV4cCI6MTc5MTcxNzE1OCwibmJmIjoxNzkxMTEyMzU4fQ.sgUWfQoQq0s-2OPI0cGoWaaywh8_49pztJUndZnG_QE"><i class="icon-f-94"></i>register</a></li><li><a href="/cart"><i class="icon-f-39"></i>view cart</a></li> 940 941 </ul> 942 </div> 943 </div> 944 </div> 945</div> 946<!-- /tt-account --><!-- tt-langue and tt-currency --> 947<div class="tt-desctop-parent-multi tt-parent-box"> 948 <div class="tt-multi-obj tt-dropdown-obj"> 949 <button class="tt-dropdown-toggle" 950 data-tooltip="settings" 951 data-tposition="bottom" 952 ><i class="icon-f-79"></i></button> 953 <div class="tt-dropdown-menu"> 954 <div class="tt-mobile-add"> 955 <button class="tt-close">Close</button> 956 </div> 957 <div class="tt-dropdown-inner"></div> 958 </div> 959 </div> 960</div> 961<!-- /tt-langue and tt-currency --></div> 962 963 </div> 964 </div></div> 965 <!-- stuck nav --> 966 <div class="tt-stuck-nav notshowinmobile"> 967 <div class="container-fluid"> 968 <div class="tt-header-row "><div class="tt-stuck-parent-logo"> 969 <a href="/" class="tt-logo" itemprop="url"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006" 970 srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_175x.png?v=1662382006 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_c25193ff-565c-484c-b519-eb0e7c254719_350x.png?v=1662382006 2x" 971 alt="" 972 class="tt-retina" itemprop="logo"/></a> 973 </div><div class="tt-stuck-parent-menu"></div> 974 <div class="tt-stuck-parent-search tt-parent-box"></div><div class="tt-stuck-parent-cart tt-parent-box"></div><div class="tt-stuck-parent-account tt-parent-box"></div><div class="tt-stuck-parent-multi tt-parent-box"></div></div> 975 </div></div> 976</header> 977 978 979</div> 980<div class="tt-breadcrumb"> 981 <div class="container-fluid"> 982 <ul> 983 <li><a href="/">Home</a></li><li>News</li></ul> 984 </div> 985</div>
986 <div id="tt-pageContent" class="show_unavailable_variants"> 987 <div id="shopify-section-template--15407144960132__main" class="shopify-section"><div class="container-indent"> 988 <div class="container container-fluid-custom-mobile-padding"> 989 <h1 class="tt-title-subpages noborder">News</h1><div class="row"> 990 <div class="col-sm-12 col-md-8 col-lg-9"><div class="tt-listing-post"><div class="tt-post"><div class="tt-post-img"> 991 <a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect"><img src="//optique.co.za/cdn/shop/articles/Optique_Aug2025_239_1024x1024.jpg?v=1760952817" alt="Eye Test For Driverâs License - What To Expect"></a> 992 </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect">Eye Test For Driverâs License - What To Expect</a></h2> 993 <div class="tt-description">The Ultimate Guide to the Eye Test for a Driver's...</div><div class="tt-meta"><div class="tt-autor"> 994 by <span>Garry Meston</span> on October 20, 2025 995 </div></div><div class="tt-btn"> 996 <a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect" class="btn ttbtnmainstyle">READ MORE</a> 997 </div></div> 998</div><div class="tt-post"><div class="tt-post-img"> 999 <a href="/blogs/news/looking-for-an-eye-specialist"><img src="//optique.co.za/cdn/shop/articles/Optique_Aug2025_228_668bf14f-34de-4dad-bee6-0e392b32a398_1024x1024.jpg?v=1760952215" alt="eye specialist"></a> 1000 </div><div class="tt-post-content"><div class="tt-tag text-uppercase"><a href="/blogs/news/tagged/eye-specialist" title="Show articles tagged eye specialist">eye specialist</a></div><h2 class="tt-title"><a href="/blogs/news/looking-for-an-eye-specialist">Looking For An Eye Specialist?</a></h2> 1001 <div class="tt-description">Have you ever had one of those moments where you're...</div><div class="tt-meta"><div class="tt-autor"> 1002 by <span>Garry Meston</span> on October 20, 2025 1003 </div></div><div class="tt-btn"> 1004 <a href="/blogs/news/looking-for-an-eye-specialist" class="btn ttbtnmainstyle">READ MORE</a> 1005 </div></div> 1006</div><div class="tt-post"><div class="tt-post-img"> 1007 <a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear"><img src="//optique.co.za/cdn/shop/articles/2_99c8fbf9-6b7c-4575-8a4b-63561759ec71_1024x1024.png?v=1759386407" alt="Comprehensive Eyesight Test: Your Guide to Optimal Vision Health with Optique â Let's Get Clear!"></a> 1008 </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear">Comprehensive Eyesight Test: Your Guide to Optimal Vision Health with Optique â Let's Get Clear!</a></h2> 1009 <div class="tt-description">Ever found yourself squinting at the TV like it's a...</div><div class="tt-meta"><div class="tt-autor"> 1010 by <span>Garry Meston</span> on July 29, 2025 1011 </div></div><div class="tt-btn"> 1012 <a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear" class="btn ttbtnmainstyle">READ MORE</a> 1013 </div></div> 1014</div><div class="tt-post"><div class="tt-post-img"> 1015 <a href="/blogs/news/eye-doctors-a-fun-guide-to-your-eye-care-professionals"><img src="//optique.co.za/cdn/shop/articles/3_2f0e9a6f-5743-4270-b318-f33e832b2106_1024x1024.png?v=1759386387" alt="Eye Doctors: A Fun Guide to Your Eye Care Professionals"></a> 1016 </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/eye-doctors-a-fun-guide-to-your-eye-care-professionals">Eye Doctors: A Fun Guide to Your Eye Care Professionals</a></h2> 1017 <div class="tt-description">Ever had one of those mornings where everything looks like...</div><div class="tt-meta"><div class="tt-autor"> 1018 by <span>Garry Meston</span> on July 29, 2025 1019 </div></div><div class="tt-btn"> 1020 <a href="/blogs/news/eye-doctors-a-fun-guide-to-your-eye-care-professionals" class="btn ttbtnmainstyle">READ MORE</a> 1021 </div></div> 1022</div><div class="tt-post"><div class="tt-post-img"> 1023 <a href="/blogs/news/the-ultimate-guide-to-colour-blindness-tests-see-the-world-in-full-spectrum"><img src="//optique.co.za/cdn/shop/articles/1_458311e5-8238-42fe-9c5e-c2a9977f0481_1024x1024.png?v=1759386349" alt="The Ultimate Guide to Colour Blindness Tests: See the World in Full Spectrum"></a> 1024 </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/the-ultimate-guide-to-colour-blindness-tests-see-the-world-in-full-spectrum">The Ultimate Guide to Colour Blindness Tests: See the World in Full Spectrum</a></h2> 1025 <div class="tt-description">I've got 99 vision problems, but seeing red ain't one!...</div><div class="tt-meta"><div class="tt-autor"> 1026 by <span>Garry Meston</span> on June 23, 2025 1027 </div></div><div class="tt-btn"> 1028 <a href="/blogs/news/the-ultimate-guide-to-colour-blindness-tests-see-the-world-in-full-spectrum" class="btn ttbtnmainstyle">READ MORE</a> 1029 </div></div> 1030</div><div class="tt-post"><div class="tt-post-img"> 1031 <a href="/blogs/news/the-ultimate-guide-to-astigmatism-eye-tests-everything-you
1031-need-to-know"><img src="//optique.co.za/cdn/shop/articles/3_788b6d21-f05d-462f-8f3e-214164bcb0dd_1024x1024.png?v=1759386036" alt="The Ultimate Guide to Astigmatism Eye Tests: Everything You Need to Know"></a> 1032 </div><div class="tt-post-content"><h2 class="tt-title"><a href="/blogs/news/the-ultimate-guide-to-astigmatism-eye-tests-everything-you-need-to-know">The Ultimate Guide to Astigmatism Eye Tests: Everything You Need to Know</a></h2> 1033 <div class="tt-description">Okay, real talk, have you ever wondered why your vision...</div><div class="tt-meta"><div class="tt-autor"> 1034 by <span>Garry Meston</span> on June 20, 2025 1035 </div></div><div class="tt-btn"> 1036 <a href="/blogs/news/the-ultimate-guide-to-astigmatism-eye-tests-everything-you-need-to-know" class="btn ttbtnmainstyle">READ MORE</a> 1037 </div></div> 1038</div><div class="tt-pagination"> 1039 <ul><li class="active"><a href="#">1</a></li><li><a href="/blogs/news?page=2" title="">2</a></li><li><a href="/blogs/news?page=3" title="">3</a></li><li><a href="/blogs/news?page=4" title="">4</a></li></ul><a class="btn-pagination btn-next" href="/blogs/news?page=2"></a></div></div></div> 1040 <div class="col-sm-12 col-md-4 col-lg-3 rightColumn"><div class="tt-block-aside"> 1041 <h3 class="tt-aside-title">BLOGS</h3> 1042 <div class="tt-aside-content"><ul class="tt-list-row"> 1043 1044 </ul></div> 1045</div><div class="tt-block-aside"> 1046 <h3 class="tt-aside-title">ABOUT</h3> 1047 <div class="tt-aside-content"><div class="tt-aside-info"><p>Lorem ipsum dolor sit amet conse ctetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit.</p><a href="" class="btn-link btn-top">READ MORE</a></div></div> 1048</div><div class="tt-block-aside"> 1049 <h3 class="tt-aside-title">TAGS</h3> 1050 <div class="tt-aside-content"><ul class="tt-list-inline text-uppercase"><li><a href="/blogs/news/tagged/eye-specialist" title="Show articles tagged eye specialist">eye specialist</a></li></ul></div> 1051</div><div class="tt-block-aside"> 1052 <h3 class="tt-aside-title">RECENT POST</h3> 1053 <div class="tt-aside-content"><div class="tt-aside-post"><div class="item"><a href="/blogs/news/eye-test-for-driver-s-license-what-to-expect"> 1054 <div class="tt-title">Eye Test For Driverâs License - What To Expect</div> 1055 <div class="tt-description">The Ultimate Guide to the Eye Test for a Driver's License That feeling when you...</div> 1056 </a><div class="tt-info"> 1057 by <span>Garry Meston</span> on October 20, 2025 1058 </div></div><div class="item"><div class="tt-tag text-uppercase"><a href="/blogs/news/tagged/eye-specialist" title="Show articles tagged eye specialist">eye specialist</a></div><a href="/blogs/news/looking-for-an-eye-specialist"> 1059 <div class="tt-title">Looking For An Eye Specialist?</div> 1060 <div class="tt-description">Have you ever had one of those moments where you're trying to read a text...</div> 1061 </a><div class="tt-info"> 1062 by <span>Garry Meston</span> on October 20, 2025 1063 </div></div><div class="item"><a href="/blogs/news/comprehensive-eyesight-test-your-guide-to-optimal-vision-health-with-optique-lets-get-clear"> 1064 <div class="tt-title">Comprehensive Eyesight Test: Your Guide to Optimal Vision Health with Optique â Let's Get Clear!</div> 1065 <div class="tt-description">Ever found yourself squinting at the TV like it's a blurry abstract painting, or mistaking...</div> 1066 </a><div class="tt-info"> 1067 by <span>Garry Meston</span> on July 29, 2025 1068 </div></div></div></div> 1069</div></div> 1070 </div></div> 1071</div></div> 1072 </div><div id="shopify-section-footer-template" class="shopify-section"><footer class="for-footer-blocks tt-offset-small_base"><div class="tt-footer-custom tt-color-scheme-02"> 1073 <div class="container-fluid-custom-mobile-padding container-fluid-custom"> 1074 <div class="tt-row"> 1075 <div class="tt-col-left"> 1076 1077 <div class="tt-col-item"> 1078 <div class="tt-newsletter"> 1079 <div class="tt-mobile-collapse"> 1080 <h4 class="tt-collapse-title"> 1081 join our fan base 1082 </h4> 1083 <div class="tt-collapse-content"> 1084 <div class="form-default"><form action="456456456" method="post" name="mc-embedded-subscribe-form" target="_blank" class="form-inline form-default"> 1085 <div class="form-group"> 1086 <input type="email" name="EMAIL" class="form-control" placeholder="email address"> 1087 <button type="submit" class="btn">subscribe</button> 1088 </div> 1089 </form></div> 1090 </div> 1091 </div> 1092 </div> 1093 </div> 1094 </div><div class="tt-col-right"> 1095 <div class="tt-col-item"> 1096 <ul class="tt-social-icon"><li><a class="icon-g-64" target="_blank" href="https://www.facebook.com/optiqueoptometristsSA/"></a></li><li><a class="icon-g-66" target="_blank" href="mailto:[email protected]"></a></li><li><a class="icon-g-67" target="_blank" href="https://www.instagram.com/optique_optometrist/"></a></li><li><a class="icon-g-76" target="_blank" href="https://www.youtube.com/@optiqueoptometrists"></a></li><li><a target="_blank" href="https://wa.me/27644825425"><svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg"> 1097<path fill-rule="evenodd" clip-rule="evenodd" d="M255.936 0H256.064C397.216 0 512 114.848 512 256C512 397.152 397.216 512 256.064 512C204 512 155.712 496.512 115.232 469.696L16.832 501.152L48.7358 406.048C18.0479 363.904 0 312 0 256C0 114.816 114.784 0 255.936 0ZM354.784 397.632C374.336 393.408 398.848 378.944 405.024 361.504C411.2 344.032 411.2 329.152 409.408 325.984C407.961 323.47 404.539 321.823 399.431 319.364C398.102 318.723 396.657 318.028 395.104 317.248C387.584 313.504 351.008 295.424 344.096 293.024C337.312 290.464 330.848 291.36 325.728 298.592C324.753 299.957 323.78 301.324 322.813 302.685C316.638 311.371 310.681 319.748 305.728 325.088C301.216 329.888 293.856 330.496 287.68 327.936C287.007 327.655 286.235 327.344 285.371 326.994C275.592 323.045 253.902 314.285 227.648 290.912C205.504 271.2 190.464 246.656 186.112 239.296C181.839 231.913 185.525 227.583 188.931 223.582L189.12 223.36C191.316 220.643 193.447 218.38 195.589 216.106C197.13 214.47 198.676 212.829 200.256 211.008L200.939 210.222C204.295 206.363 206.293 204.067 208.544 199.264C211.104 194.304 209.28 189.184 207.456 185.408C206.201 182.762 198.441 163.937 191.784 147.785C188.94 140.884 186.297 134.47 184.448 130.016C179.488 118.144 175.712 117.696 168.192 117.376L167.485 117.34C165.11 117.22 162.496 117.088 159.616 117.088C149.824 117.088 139.616 119.968 133.44 126.272L132.766 126.958C124.865 134.994 107.264 152.894 107.264 188.576C107.264 224.329 132.633 258.929 137.325 265.328L137.664 265.792C137.946 266.163 138.479 266.934 139.253 268.055C148.836 281.933 195.514 349.531 265.12 378.368C323.936 402.752 341.408 400.48 354.784 397.632Z" fill="black"/> 1098</svg></a></li></ul> 1099 </div> 1100 </div></div> 1101 </div> 1102</div><div class="tt-footer-col tt-color-scheme-03"> 1103 <div class="container-fluid-custom-mobile-padding container-fluid-custom"> 1104 <div class="row"><div class="col-md-6 col-lg-3 col-xl-3"> 1105<div class="tt-mobile-collapse"> 1106 <h4 class="tt-collapse-title">QUICK LINKS</h4> 1107 <div class="tt-collapse-content"> 1108<ul class="tt-list"><li><a href="/pages/book-a-r99-eye-test-online">book an eye test</a></li><li><a href="/pages/pricing">our pricing</a></li><li><a href="/pages/payment-options-2">payment options</a></li><li><a href="/pages/ambassadors">famous fans</a></li><li><a href="/pages/reviews-and-testimonials">honest reviews</a></li><li><a href="/pages/delivery-returns">delivery, returns & refunds</a></li><li><a href="/pages/terms-and-conditions">terms & conditions</a></li><li><a href="/pages/privacy-policy">privacy policy & popia</a></li><li><a href="/policies/terms-of-service">Terms of Service</a></li><li><a href="/policies/refund-policy">Refund policy</a></li></ul> 1109 </div> 1110 </div></div> 1111<div class="col-md-6 col-lg-3 col-xl-3"> 1112<div class="tt-mobile-collapse"> 1113 <h4 class="tt-collapse-title">SHOP EYE CARE</h4> 1114 <div class="tt-collapse-content"> 1115<ul class="tt-list"><li><a href="/collections/all-products">all products</a></li><li><a href="/collections/women">women</a></li><li><a href="/collections/men">men</a></li><li><a href="/collections/contact-lenses">contact lenses</a></li><li><a href="/collections/frames">blue-light protection</a></li><li><a href="/collections/sunnies">sunglasses</a></li></ul> 1116 1117 1118 </div> 1119 </div></div> 1120<div class="col-md-6 col-lg-3 col-xl-3"> 1121<div class="tt-mobile-collapse"> 1122 <h4 class="tt-collapse-title">OUR VISION</h4> 1123 <div class="tt-collapse-content"> 1124 1125 we believe in simplifying exceptional eye care to drive our vision of more affordable and accessible eye care for all. 1126<p></p><p> 1127<a href="https://optique.co.za/pages/book-a-r99-eye-test-online">book now </a>at any of our 22 branches across South Africa.</p> 1128 1129 </div> 1130 </div></div> 1131<div class="col-md-6 col-lg-3 col-xl-3"> 1132<div class="tt-mobile-collapse"> 1133 <h4 class="tt-collapse-title">CONTACT US</h4> 1134 <div class="tt-collapse-content"> 1135 1136 <p><span>phone:</span> +27 64 482 5425</p> 1137 <p><span>hours:</span> monday-friday: 8h30-17h00, saturday: 8h30-13h00</p> 1138 <p><span>email:</span> <a href="mailto:[email protected]">[email protected]</a></p> 1139 1140 </div> 1141 </div></div> 1142</div> 1143 </div> 1144</div><div class="tt-footer-custom tt-color-scheme-04"> 1145 <div class="container-fluid-custom-mobile-padding container-fluid-custom"> 1146 <div class="tt-row"> 1147 1148 1149 1150 <div class="tt-col-left"><div class="tt-col-item tt-logo-col"> 1151 <a href="/" class="tt-logo tt-logo-alignment"><img src="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_125x.png?v=1662381977" srcset="//optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_125x.png?v=1662381977 1x, //optique.co.za/cdn/shop/files/Optique_Optometrists_Logo_250x.png?v=1662381977 2x" alt="" class="tt-retina"></a> 1152 </div><div class="tt-col-item"> 1153 <div class="tt-box-copyright">Copyright 2026 Optique Optometrists</div> 1154 </div></div><div class="tt-col-right"> 1155 <div class="tt-col-item"> 1156 <ul class="tt-payment-list"><li> 1157 1158 <a href="https://paystack.com"> 1159 1160 1161 1162 1163 <img class="lazyload" 1164 data-src="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Visa_x30.png?v=1664822832" 1165 data-srcset="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Visa_x30.png?v=1664822832 1x, //optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Visa_x60.png?v=1664822832 2x" 1166 alt="" 1167 style="height:30px;"> 1168 1169 </a> 1170 1171 </li><li> 1172 1173 <a href="https://paystack.com"> 1174 1175 1176 1177 1178 <img class="lazyload" 1179 data-src="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Mastercard_x30.jpg?v=1664822857" 1180 data-srcset="//optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Mastercard_x30.jpg?v=1664822857 1x, //optique.co.za/cdn/shop/files/Optique_Optometrist_Payment_Option_Mastercard_x60.jpg?v=1664822857 2x" 1181 alt="" 1182 style="height:30px;"> 1183 1184 </a> 1185 1186 </li><li> 1187 1188 <a href="https://paystack.com"> 1189 1190 1191 1192 1193 <img class="lazyload" 1194 data-src="//optique.co.za/cdn/shop/files/Paystack_Logo_x30.png?v=1788960878" 1195 data-srcset="//optique.co.za/cdn/shop/files/Paystack_Logo_x30.png?v=1788960878 1x, //optique.co.za/cdn/shop/files/Paystack_Logo_x60.png?v=1788960878 2x" 1196 alt="" 1197 style="height:30px;"> 1198 1199 </a> 1200 1201 </li><li> 1202 1203 <a href="https://www.stitch.me/"> 1204 1205 1206 1207 1208 <img class="lazyload" 1209 data-src="//optique.co.za/cdn/shop/files/stitch-logo_1_x30.svg?v=1788960701" 1210 data-srcset="//optique.co.za/cdn/shop/files/stitch-logo_1_x30.svg?v=1788960701 1x, //optique.co.za/cdn/shop/files/stitch-logo_1_x60.svg?v=1788960701 2x" 1211 alt="" 1212 style="height:30px;"> 1213 1214 </a> 1215 1216 </li><li> 1217 1218 <a href="https://payjustnow.com/"> 1219 1220 1221 1222 1223 <img class="lazyload" 1224 data-src="//optique.co.za/cdn/shop/files/payjustnow_x30.png?v=1759392312" 1225 data-srcset="//optique.co.za/cdn/shop/files/payjustnow_x30.png?v=1759392312 1x, //optique.co.za/cdn/shop/files/payjustnow_x60.png?v=1759392312 2x" 1226 alt="" 1227 style="height:30px;"> 1228 1229 </a> 1230 1231 </li></ul> 1232 </div> 1233</div> 1234 1235 1236 </div> 1237 </div> 1238</div></footer> 1239 1240 1241</div><a href="#" class="tt-back-to-top">BACK TO TOP</a> 1242<!-- modalAddToCart --> 1243<div class="modal fade" id="modalAddToCartError" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true"> 1244 <div class="modal-dialog modal-sm"> 1245 <div class="modal-content "> 1246 <div class="modal-header"> 1247 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button> 1248 </div> 1249 <div class="modal-body"> 1250 <div class="modal-add-cart"> 1251 <i class="icon-h-10"></i> 1252 <p class="error_message"></p> 1253 </div> 1254 </div> 1255 </div> 1256 </div> 1257</div> 1258 1259<div class="modal fade" id="modalAddToCartProduct" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true"> 1260 <div class="modal-dialog"> 1261 <div class="modal-content "> 1262 <div class="modal-header"> 1263 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button> 1264 </div> 1265 <div class="modal-body"> 1266 <div class="tt-modal-addtocart mobile"> 1267 <div class="tt-modal-messages"> 1268 <i class="icon-f-68"></i> Added to cart successfully! 1269 </div> 1270 <a href="#" class="btn-link btn-close-popup">CONTINUE SHOPPING</a> 1271 <a href="/cart" class="btn-link">VIEW CART</a> 1272 1273 <div> 1274 <div class="checkbox-group pm-term-conditions-checkbox term-conditions-checkbox-js"> 1275 <input type="checkbox" id="pmcart-term-conditions-checkbox" value="1">
1276 <label for="pmcart-term-conditions-checkbox"> 1277 <span class="check"></span> 1278 <span class="box"></span> 1279 I agree with the terms and conditions 1280 </label> 1281 </div> 1282 </div> 1283 1284 <a href="/checkout" class="btn-link disabled">PROCEED TO CHECKOUT</a> 1285 </div> 1286 <div class="tt-modal-addtocart desctope"> 1287 <div class="row"> 1288 <div class="col-12 col-lg-6"> 1289 <div class="tt-modal-messages"> 1290 <i class="icon-f-68"></i> Added to cart successfully! 1291 </div> 1292 <div class="tt-modal-product"> 1293 <div class="tt-img"></div> 1294 <div class="tt-title tt-title-js"></div> 1295 <div class="description"></div> 1296 <div class="tt-qty">QTY: <span></span></div> 1297 </div> 1298 <div class="tt-product-discount"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg"> 1299<path fill-rule="evenodd" clip-rule="evenodd" d="M0.943837 7.38877C-0.314613 8.64722 -0.314612 10.6876 0.943839 11.946L6.05398 17.0562C7.31243 18.3146 9.35278 18.3146 10.6112 17.0562L17.0562 10.6112C17.6605 10.0069 18 9.18726 18 8.33261V3.22246C18 1.44275 16.5573 0 14.7775 0H9.66739C8.81274 0 7.9931 0.339509 7.38877 0.943838L0.943837 7.38877ZM13.1663 6.44493C14.0562 6.44493 14.7775 5.72356 14.7775 4.8337C14.7775 3.94384 14.0562 3.22246 13.1663 3.22246C12.2764 3.22246 11.5551 3.94384 11.5551 4.8337C11.5551 5.72356 12.2764 6.44493 13.1663 6.44493Z" fill="#F8353E"/> 1300</svg><span class="tt-product-discount__text"></span> 1301 </div> 1302 <div class="tt-product-total"> 1303 <div class="tt-total total-product-js"> 1304 TOTAL: <span class="tt-price"></span> 1305 </div> 1306 </div> 1307 </div> 1308 <div class="col-12 col-lg-6"> 1309 <a href="/cart" class="tt-cart-total" title="VIEW CART"> 1310 There are <span class="modal-total-quantity"></span> items<br> in your cart 1311 <div class="tt-total"> 1312 TOTAL: <span class="tt-price full-total-js"></span> 1313 </div> 1314 </a> 1315 1316 <a href="#" class="btn btn-border btn-close-popup ttmodalbtn">CONTINUE SHOPPING</a> 1317 <a href="/cart" class="btn btn-border ttmodalbtn ttmodalbtn">VIEW CART</a> 1318 1319 <div class="checkbox-group pdm-term-conditions-checkbox term-conditions-checkbox-js"> 1320 <input type="checkbox" id="pcart-term-conditions-checkbox" value="1"> 1321 <label for="pcart-term-conditions-checkbox"> 1322 <span class="check"></span> 1323 <span class="box"></span> 1324 I agree with the terms and conditions 1325 </label> 1326 </div> 1327 1328 <a href="/checkout" class="btn disabled ttmodalbtn">PROCEED TO CHECKOUT</a> 1329 </div> 1330 </div> 1331 </div><div class="tt-modal-slider hide"> 1332 <hr> 1333 <div class="tt-title">With this product also buy:</div> 1334 <div class="tt-modal-slider-js header-menu-product arrow-location-03 row"> 1335 </div> 1336 </div></div> 1337 </div> 1338 </div> 1339</div><div id="custom-preloader"> 1340 <div class="custom-loader" style="display: none;"> 1341 <img width="32" height="32" alt="Page Loader" class="lazyload" data-src="//optique.co.za/cdn/shop/t/5/assets/ajax-loader.gif?v=83335857307597093571667511599"> 1342 </div> 1343</div>
1343<script> 1344 var theme = {}, 1345 shop_url = 'https://optique.co.za', 1346 money_format = 'R {{amount}}', 1347 color_with_border = 'White' || 'empty', 1348 colors_value = ',coat: #ff0000,yellow: #ffff00,black: #4d4d4d,blue: #2196f3,green: #8bc34a,purple: #800080,silver: #c0c0c0,white: #ffffff,brown: #a3794d,light-brown: #feb035,dark-turquoise: #23cddc,orange: #fea634,tan: #eacea7,violet: #ee82ee,pink: #ffc0cb,grey: #c0c0c0,red: #ff0000,light blue: #add8e6,beige: #fbdbb5,', 1349 texture_obj = function(){return JSON.parse('{}'); 1350 } 1351 texture_obj = texture_obj(); 1352 1353 var wokiee_app = { 1354 url: '', 1355 loader_text: 'just loading a bit', 1356 main_info: { 1357 customerid: '', 1358 iid: '', 1359 shop: 'optiqueoptometrists.myshopify.com', 1360 domain: 'optique.co.za', 1361 lic: '622b90da-51bb-4dcf-8823-54438ffb6acc', 1362 } 1363 }; 1364 1365 window.shopUrl = ''; 1366 1367 var set_day = 'Day', 1368 set_hour = 'Hrs', 1369 set_minute = 'Min', 1370 set_second = 'Sec'; 1371 1372 var addtocart_text = '<span class="icon icon-shopping_basket"></span> <span>add to cart</span>', 1373 unavailable_text = '<span>sold out</span>', 1374 addedhtml_text = '<span class="icon icon-shopping_basket"></span> added', 1375 errorhtml_text = '<span class="icon icon-shopping_basket"></span> LIMIT PRODUCTS', 1376 preorderhtml_text = '<span class="icon icon-f-47"></span> <span>PREORDER</span>', 1377 wait_text = '<span class="icon icon-shopping_basket"></span> WAIT', 1378 b_close = 'close', 1379 b_back = 'back', 1380 seeallresults = 'see all results'; 1381 1382 var small_image = '//optique.co.za/cdn/shop/t/5/assets/dummy.png?v=63149790037541194611667511605'; 1383 1384 1385 window.addEventListener('DOMContentLoaded', function() { 1386 var $buyinoneclick = $('.buyinoneclick'); 1387 if($buyinoneclick.length){ 1388 $buyinoneclick.first().bind('DOMNodeInserted', function() { 1389 setTimeout(function(){ 1390 var $shopifypaymentbutton = $('.buyinoneclick').find(".shopify-payment-button__button"); 1391 if($shopifypaymentbutton.length){ 1392 $buyinoneclick.hide(); 1393 setTimeout(function(){ 1394 $(".shopify-payment-button__button").attr('disabled', true); 1395 $buyinoneclick.fadeIn() 1396 }, 300); 1397 } 1398 }, 0); 1399 }); 1400 } 1401 1402 $('body').on('click', '.term-conditions-checkbox-js input', function(e){ 1403 var _ = $(this).closest('.term-conditions-checkbox-js').parent().parent(), 1404 a = _.find('a[href*="checkout"]'), 1405 b = _.find('button[name=checkout]'), 1406 b2 = _.find('.buyinoneclick button'), 1407 text = ''; 1408 if($(this).is(':checked')){ 1409 a.length && a.removeClass('disabled'); 1410 b.length && b.removeAttr('disabled'); 1411 b2.length && b2.removeAttr('disabled'); 1412 } 1413 else{ 1414 a.length && a.addClass('disabled'); 1415 b.length && b.attr('disabled', true); 1416 b2.length && b2.attr('disabled', true); 1417 } 1418 }); 1419 }); 1420 1421 </script>
1421<script src="//optique.co.za/cdn/shop/t/5/assets/vendor.min.js?v=23966221973793086621667511669" defer="defer"></script>
1421<script src="//optique.co.za/cdn/shop/t/5/assets/theme.js?v=83444853024566489161737693215" defer="defer"></script>
1421<!-- modal (ModalSubsribeGood) --> 1422<div class="modal fade" id="ModalSubsribeGood" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true"> 1423 <div class="modal-dialog modal-xs"> 1424 <div class="modal-content "> 1425 <div class="modal-header"> 1426 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button> 1427 </div> 1428 <div class="modal-body"> 1429 <div class="tt-modal-subsribe-good"> 1430 <i class="icon-f-68"></i> <span>you have successfully subscribed!</span> 1431 </div> 1432 </div> 1433 </div> 1434 </div> 1435</div>
1436<script> 1437 function checkSubscribe(){ 1438 if(location.search.indexOf('customer_posted=true') == -1) return false; 1439 $('.tt-modal-subsribe-good').find('span').html('you have successfully subscribed!'); 1440 $('#ModalSubsribeGood').modal('show'); 1441 setTimeout(function(){window.history.pushState("", "", location.pathname)}, 100); 1442 } 1443 function checkSended(){ 1444 if(location.search.indexOf('contact_posted=true') == -1) return false; 1445 $('.tt-modal-subsribe-good').find('span').html('thanks for contacting us. we'll get back to you as soon as possible.'); 1446 $('#ModalSubsribeGood').modal('show'); 1447 setTimeout(function(){window.history.pushState("", "", location.pathname)}, 100); 1448 } 1449 window.addEventListener('DOMContentLoaded', function() { 1450 checkSubscribe(); 1451 checkSended(); 1452 }); 1453</script>
1453<!-- Modal (ModalMessage) --> 1454<div class="modal fade" id="ModalMessage" tabindex="-1" role="dialog" aria-label="myModalLabel" aria-hidden="true" data-pause=1500> 1455 <div class="modal-dialog"> 1456 <div class="modal-content "> 1457 <div class="modal-header"> 1458 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><span class="icon icon-clear"></span></button> 1459 </div> 1460 <div class="modal-body"> 1461 <div class="tt-login-wishlist"> 1462 <p>please login to add product(s) to your wishlist</p> 1463 <div class="row-btn"> 1464 <a href="https://optique.co.za/customer_authentication/redirect?locale=en®ion_country=ZA" class="btn btn-small ttmodalbtn">SIGN IN</a> 1465 <a href="https://shopify.com/57147555972/account?locale=en®ion_country=ZA&buyer_flags=eyJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJvcHRpcXVlb3B0b21ldHJpc3RzLm15c2hvcGlmeS5jb20iLCJmbGFncyI6W10sImV4cCI6MTc5MTcxNzE1OCwibmJmIjoxNzkxMTEyMzU4fQ.sgUWfQoQq0s-2OPI0cGoWaaywh8_49pztJUndZnG_QE" class="btn btn-border btn-small ttmodalbtn">REGISTER</a> 1466 </div> 1467 </div> 1468 </div> 1469 </div> 1470 </div> 1471</div><div id="shopify-section-promo-fixed" class="shopify-section"> 1472 1473</div>
1473<script> 1474 window.addEventListener('DOMContentLoaded', function() { 1475 1476 1477 1478 jQuery('a[href^="http"]').attr('target', '_blank') 1479 1480 }); 1481 </script>
1481 1482 1483 1484 1485<!--Gem_Page_Footer_Script--> 1486 1487<!--End_Gem_Page_Footer_Script--> 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552<!-- Invisible link that opens overlay map on click on Elfsight hovering button --> 1553<style> 1554 .elfsight-map-open-helper { 1555 display: none; 1556 } 1557</style> 1558<!--<a class="elfsight-map-open-helper" href="javascript:closeby-open"></a>--> 1559 1560 1561<!-- Proto Chat/Bot Input
1562<script type="text/javascript"> 1563 window.ProtoSettings = { 1564 gwId: 'gw_h8aynRKNR8yw9QKlkPWBY5', 1565 env: '', 1566 onLoad: function() { Proto.show(); } 1567 }; 1568 1569 var d=document,s=d.createElement("script"); 1570 s.type="text/javascript",s.async=true,s.src="https://app.proto.cx/webchat/client.js"; 1571 var t=d.getElementsByTagName("script")[0]; 1572 t.parentNode.insertBefore(s,t); 1573 s.addEventListener("load", function() { 1574 var p = window.ProtoSettings; Proto.init(p, p.onLoad); 1575 }); 1576</script>
1576 --> 1577 1578<!-- Elfsight GetContacts Popup -->
1579<script src="https://static.elfsight.com/platform/platform.js" data-use-service-core defer></script>
1579 1580<div class="elfsight-app-31aa8a40-2406-49b3-833d-dbc0ce9576fc" data-elfsight-app-lazy></div> 1581 1582<!-- Elfsight WhatsApp Chat Button
1583<script src="https://apps.elfsight.com/p/platform.js" defer></script>
1583 1584<div class="elfsight-app-53eba1a9-7454-44b6-bb8b-a1630533bad5"></div> --> 1585 1586<div id="shopify-block-AM2ZzcGZLUGxZZnBBa__17745481618859153576" class="shopify-block shopify-app-block"><span 1587 data-store-domain="optiqueoptometrists.myshopify.com" 1588 data-app-url="https://storepickup-admin.herokuapp.com" 1589 id="genie-domain"> 1590</span> 1591 1592<div 1593 id="genie-feature-embed" 1594 data-app-url="https://storepickup-admin.herokuapp.com" 1595 data-page-type="blog" 1596 data-widget-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-store-pickup-app.js" 1597 data-widget-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-store-pickup-app.css" 1598 data-trusted-badges-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-trusted-badges.css" 1599 data-trusted-badges-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-trusted-badges.js" 1600 data-speed-optimizer-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-speed-optimizer.css" 1601 data-speed-optimizer-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-speed-optimizer.js" 1602 data-wishlist-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-wishlist.css" 1603 data-wishlist-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-wishlist.js" 1604 data-upsell-css="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-upsell.css" 1605 data-upsell-js="https://cdn.shopify.com/extensions/01a0907d-91a9-70dc-9147-e7d4235035d7/store-pickup-by-genie-apps-110/assets/genie-upsell.js" 1606 1607> 1608 <input 1609 type="hidden" 1610 id="genie-shopify-domain" 1611 name="shopify_domain" 1612 value="optiqueoptometrists.myshopify.com" 1613 autocomplete="off" 1614 /> 1615</div> 1616 1617
1618<script type="application/json" id="genie-upsell-config-json">null</script>
1618 1619
1620<script> 1621 (function () { 1622 // Shopify app preview + the installed embed can both print this block. 1623 // A second run would inject genie-store-pickup-app.js again and throw 1624 // "only one instance of babel-polyfill is allowed". 1625 if (window.__geniePickupEmbedBootstrapped) return; 1626 window.__geniePickupEmbedBootstrapped = true; 1627 1628 var root = document.getElementById('genie-feature-embed'); 1629 if (!root) return; 1630 1631 var PAGE_TYPE = root.getAttribute('data-page-type') || ''; 1632 var IS_CART_PAGE = PAGE_TYPE === 'cart'; 1633 1634 // ------------------------------------------------------------------ 1635 // Checkout lock helpers. 1636 // 1637 // The widget gates checkout behind the pickup/delivery flow, so checkout 1638 // must be locked from the moment we COMMIT to loading the widget until the 1639 // React app mounts and takes ownership (it manages the same 1640 // `genie-checkout-loading` class). Unlike before, this no longer runs on 1641 // every page at parse time â only once the widget load actually starts. 1642 // ------------------------------------------------------------------ 1643 var LOCK_CLASS = 'genie-checkout-loading'; 1644 var MOUNTED_SELECTOR = '[data-genie-store-pickup-mounted="1"]'; 1645 1646 function lockCheckout() { 1647 var btns = document.querySelectorAll('[name="checkout"]'); 1648 for (var i = 0; i < btns.length; i++) { 1649 if (!btns[i].classList.contains(LOCK_CLASS)) { 1650 btns[i].setAttribute('disabled', 'disabled'); 1651 btns[i].classList.add(LOCK_CLASS); 1652 } 1653 } 1654 } 1655 1656 function releaseCheckout() { 1657 var btns = document.querySelectorAll('.' + LOCK_CLASS); 1658 for (var i = 0; i < btns.length; i++) { 1659 btns[i].removeAttribute('disabled'); 1660 btns[i].classList.remove(LOCK_CLASS); 1661 } 1662 } 1663 1664 // Themes often render the cart/drawer checkout button after the lock ran, 1665 // so re-apply until the widget mounts and takes over. Failsafe: if the 1666 // widget never mounts (bundle failed, pickup disabled for this shop, etc.) 1667 // release the lock so checkout is NEVER permanently blocked. 1668 function startCheckoutLockLoop() { 1669 lockCheckout(); 1670 var ticks = 0; 1671 var relockInterval = setInterval(function () { 1672 if (document.querySelector(MOUNTED_SELECTOR)) { 1673 clearInterval(relockInterval); 1674 return; 1675 } 1676 lockCheckout(); 1677 if (++ticks >= 60) clearInterval(relockInterval); // ~9s of coverage at 150ms 1678 }, 150); 1679 setTimeout(function () { 1680 clearInterval(relockInterval); 1681 if (!document.querySelector(MOUNTED_SELECTOR)) { 1682 releaseCheckout(); 1683 } 1684 }, 15000); 1685 } 1686 1687 // ------------------------------------------------------------------ 1688 // Asset injection helpers 1689 // ------------------------------------------------------------------ 1690 function addCss(href) { 1691 if (!href) return; 1692 var l = document.createElement('link'); 1693 l.rel = 'stylesheet'; 1694 l.href = href; 1695 document.head.appendChild(l); 1696 } 1697 1698 function addScript(src, opts) { 1699 opts = opts || {}; 1700 if (!src) return; 1701 var s = document.createElement('script'); 1702 s.src = src; 1703 if (src.indexOf('genie-store-pickup-app.js') !== -1) { 1704 s.setAttribute('data-genie-widget-bundle', '1'); 1705 } 1706 if (opts.defer) { 1707 s.defer = true; 1708 } 1709 if (opts.onload) { 1710 s.onload = function () { 1711 try { 1712 opts.onload(); 1713 } catch (e) { 1714 if (typeof console !== 'undefined' && console.error) { 1715 console.error('[Genie feature]', e); 1716 } 1717 } 1718 }; 1719 } 1720 if (opts.onerror) { 1721 s.onerror = opts.onerror; 1722 } 1723 document.body.appendChild(s); 1724 } 1725 1726 // ------------------------------------------------------------------ 1727 // Lazy widget loader 1728 // ------------------------------------------------------------------ 1729 var widgetRequested = false; 1730 1731 function existingWidgetScript() { 1732 var scripts = document.getElementsByTagName('script'); 1733 for (var i = 0; i < scripts.length; i++) { 1734 var el = scripts[i]; 1735 if (el.getAttribute('data-genie-widget-bundle') === '1') return el; 1736 var src = el.getAttribute('src') || ''; 1737 if (src.indexOf('genie-store-pickup-app.js') !== -1) return el; 1738 } 1739 return null; 1740 } 1741 1742 function placeAfterBundleReady() { 1743 if (typeof window.placeGenieDiv === 'function') { 1744 window.placeGenieDiv(); 1745 window.setTimeout(window.placeGenieDiv, 200); 1746 window.setTimeout(window.placeGenieDiv, 800); 1747 } 1748 } 1749 1750 function loadWidget() { 1751 if (widgetRequested || window.__genieStorePickupWidgetRequested) return; 1752 widgetRequested = true; 1753 window.__genieStorePickupWidgetRequested = true; 1754 // Lock checkout the instant we commit to loading â before the bundle 1755 // downloads â so a shopper can't check out and bypass the pickup flow 1756 // during the load window. The widget re-enables the buttons once ready. 1757 startCheckoutLockLoop(); 1758 1759 // Already on the page (schema auto-inject, app preview, or a prior 1760 // loadWidget). Do not insert a second copy â babel-polyfill throws. 1761 var already = existingWidgetScript(); 1762 if (already) { 1763 if (typeof window.placeGenieDiv === 'function') { 1764 placeAfterBundleReady(); 1765 } else { 1766 already.addEventListener('load', placeAfterBundleReady); 1767 } 1768 return; 1769 } 1770 1771 addCss(root.getAttribute('data-widget-css')); 1772 addScript(root.getAttribute('data-widget-js'), { 1773 defer: true, 1774 onload: placeAfterBundleReady, 1775 }); 1776 } 1777 // The widget bundle's placement bootstrap re-checks placement on cart 1778 // interactions; expose the loader so late triggers can also start it. 1779 window.__genieLoadStorePickupWidget = loadWidget; 1780 1781 if (IS_CART_PAGE) { 1782 // Cart page: the widget is the point of this page â load immediately. 1783 loadWidget(); 1784 } else { 1785 // Home / product / collection (Lighthouse pages): never download the 1786 // bundle until the shopper actually opens the cart or adds to cart. 1787 // Production themes vary: Dawn uses <cart-drawer open>, others toggle 1788 // #CartDrawer.active / .is-open, or open a mini-cart after AJAX add. 1789 var TRIGGER_SELECTOR = 1790 "button[name='add'], [name='add'], [data-testid*='cart'], [href*='/cart'], " + 1791 ".cart-icon, .header__icon--cart, .header__icon--cart *, " +
1792 "[aria-controls*='cart' i], [aria-controls*='CartDrawer' i], " + 1793 "[data-cart-drawer], [data-drawer='cart'], [data-open-cart], [data-cart-toggle], " + 1794 "cart-drawer, cart-notification, [id*='cart-icon' i], #cart-icon-bubble, " + 1795 ".js-drawer-open-cart, .cart-link, .cart-count-bubble, " + 1796 "a[href$='/cart'], summary.header__icon--cart"; 1797 1798 var DRAWER_SELECTOR = 1799 "cart-drawer, cart-notification, #CartDrawer, [id*='CartDrawer' i], " + 1800 ".cart-drawer, [data-cart-drawer], .mini-cart, #mini-cart, #MiniCart, " + 1801 ".ajax-cart, .side-cart, .drawer--cart, .cart-sidebar, dialog#CartDrawer"; 1802 1803 var OPEN_CLASS_RE = 1804 /(^|\s)(active|is-open|is-active|is-visible|open|visible|drawer--open|cart-drawer--open|mini-cart--open)(\s|$)/i; 1805 1806 function classNameOf(el) { 1807 var cls = el && el.className; 1808 return cls ? (typeof cls === 'string' ? cls : String(cls)) : ''; 1809 } 1810 1811 function isCartDrawerOpen(el) { 1812 if (!el) return false; 1813 if (el.hasAttribute('open')) return true; 1814 if (el.open === true) return true; // <dialog> 1815 return OPEN_CLASS_RE.test(classNameOf(el)); 1816 } 1817 1818 function becameOpen(el, mutation) { 1819 if (!mutation) return isCartDrawerOpen(el); 1820 if (mutation.attributeName === 'open') { 1821 return el.hasAttribute('open') || el.open === true; 1822 } 1823 if (mutation.attributeName === 'class') { 1824 var was = OPEN_CLASS_RE.test(mutation.oldValue || ''); 1825 var now = OPEN_CLASS_RE.test(classNameOf(el)); 1826 return !was && now; 1827 } 1828 return false; 1829 } 1830 1831 document.addEventListener( 1832 'click', 1833 function (event) { 1834 if (widgetRequested) return; 1835 var t = event.target; 1836 if (!t) return; 1837 if (t.closest && t.closest(TRIGGER_SELECTOR)) { 1838 loadWidget(); 1839 return; 1840 } 1841 // Cart icon is often an SVG inside a button/summary that doesn't 1842 // match the selector list â walk up a few nodes for cart-ish ids. 1843 var node = t.nodeType === 1 ? t : t.parentElement; 1844 var hops = 0; 1845 while (node && hops < 6) { 1846 var id = (node.id || '').toLowerCase(); 1847 var aria = ((node.getAttribute && node.getAttribute('aria-label')) || '').toLowerCase(); 1848 if ( 1849 /(^|[-_])cart([-_]|$)/.test(id) || 1850 id === 'cart' || 1851 /\bcart\b/.test(aria) 1852 ) { 1853 loadWidget(); 1854 return; 1855 } 1856 node = node.parentElement; 1857 hops++; 1858 } 1859 }, 1860 { capture: true, passive: true } 1861 ); 1862 1863 document.addEventListener( 1864 'submit', 1865 function (event) { 1866 if (widgetRequested) return; 1867 var form = event.target; 1868 if (form && form.getAttribute && /\/cart\/add/.test(form.getAttribute('action') || '')) { 1869 loadWidget(); 1870 } 1871 }, 1872 true 1873 ); 1874 1875 // AJAX add-to-cart (Dawn/Horizon intercept the form and fetch /cart/add, 1876 // so the submit listener above never fires). 1877 if (window.fetch && !window.__genieCartAddFetchWrapped) { 1878 window.__genieCartAddFetchWrapped = true; 1879 var origFetch = window.fetch; 1880 window.fetch = function () { 1881 try { 1882 var input = arguments[0]; 1883 var url = typeof input === 'string' ? input : input && (input.url || input.href); 1884 if (!widgetRequested && url && /\/cart\/add(?:\.js)?(?:\?|$)/.test(String(url))) { 1885 loadWidget(); 1886 } 1887 } catch (e) {} 1888 return origFetch.apply(this, arguments); 1889 }; 1890 } 1891 1892 function watchDrawerEl(el) { 1893 if (!el || el.__genieDrawerWatched) return; 1894 el.__genieDrawerWatched = true; 1895 // Do not load from the drawer's initial class list. Themes often keep 1896 // utility classes like "active"/"visible" on a closed drawer, which 1897 // would download the widget on every homepage (Lighthouse + every shop). 1898 new MutationObserver(function (mutations) { 1899 for (var i = 0; i < mutations.length; i++) { 1900 var m = mutations[i]; 1901 var opened = 1902 becameOpen(el, m) || 1903 (m.attributeName === 'aria-expanded' && m.oldValue !== 'true' && el.getAttribute('aria-expanded') === 'true') || 1904 (m.attributeName === 'aria-hidden' && m.oldValue === 'true' && el.getAttribute('aria-hidden') === 'false') || 1905 (m.attributeName === 'inert' && m.oldValue !== null && !el.hasAttribute('inert')); 1906 if (!opened) continue; 1907 loadWidget(); 1908 if (typeof window.placeGenieDiv === 'function') { 1909 window.placeGenieDiv(); 1910 } 1911 return; 1912 } 1913 }).observe(el, { 1914 attributes: true, 1915 attributeOldValue: true, 1916 attributeFilter: ['open', 'class', 'aria-hidden', 'aria-expanded', 'inert'], 1917 }); 1918 } 1919 1920 function watchAllDrawers() { 1921 var nodes = document.querySelectorAll(DRAWER_SELECTOR); 1922 for (var i = 0; i < nodes.length; i++) watchDrawerEl(nodes[i]); 1923 } 1924 watchAllDrawers(); 1925 // Header/cart sections can render after this embed; pick them up once. 1926 if (document.readyState === 'loading') { 1927 document.addEventListener('DOMContentLoaded', watchAllDrawers); 1928 } 1929 window.addEventListener('load', watchAllDrawers); 1930 1931 // Theme custom events (never cart:updated â many themes fire that on 1932 // the initial cart.js fetch and that would load the bundle during Lighthouse). 1933 ['cart:open', 'ajaxCart:open', 'drawer:open', 'cartDrawer:open'].forEach(function (name) { 1934 document.addEventListener(name, function () { 1935 loadWidget(); 1936 }); 1937 }); 1938 } 1939 1940 // ------------------------------------------------------------------ 1941 // Extra feature loader (trusted badges / speed optimizer / wishlist / 1942 // upsell). Cached per session. Starts only after a shopper gesture so 1943 // Lighthouse home/product/collection runs never download these bundles. 1944 // ------------------------------------------------------------------ 1945 (function () { 1946 var input = document.getElementById('genie-shopify-domain'); 1947 if (!input || !input.value || !String(input.value).trim()) { 1948 return; 1949 } 1950 var domain = String(input.value).trim(); 1951 1952 var apiBase = (root.getAttribute('data-app-url') || '').replace(/\/$/, ''); 1953 if (!apiBase) { 1954 return; 1955 } 1956 1957 var FLAGS_CACHE_KEY = 'genie_feature_flags:' + domain; 1958 var FLAGS_CACHE_TTL = 10 * 60 * 1000; // 10 minutes 1959 1960 function readCachedFlags() { 1961 try { 1962 var raw = sessionStorage.getItem(FLAGS_CACHE_KEY); 1963 if (!raw) return null; 1964 var parsed = JSON.parse(raw); 1965 if (!parsed || typeof parsed.t !== 'number' || Date.now() - parsed.t > FLAGS_CACHE_TTL) { 1966 return null; 1967 } 1968 return parsed.flags || null; 1969 } catch (e) { 1970 return null; 1971 } 1972 } 1973 1974 function writeCachedFlags(flags) { 1975 try { 1976 sessionStorage.setItem(FLAGS_CACHE_KEY, JSON.stringify({ t: Date.now(), flags: flags })); 1977 } catch (e) {} 1978 } 1979 1980 function callInit(name) { 1981 var fn = window[name]; 1982 if (typeof fn === 'function') { 1983 fn(); 1984 } 1985 } 1986 1987 function applyFlags(flags) { 1988 if (!flags) return; 1989 if (flags.trusted_badges_enabled) { 1990 addCss(root.getAttribute('data-trusted-badges-css')); 1991 addScript(root.getAttribute('data-trusted-badges-js'), { 1992 onload: function () { 1993 callInit('GenieTrustedBadgesInit'); 1994 }, 1995 }); 1996 } 1997 if (flags.speed_optimizer_enabled) { 1998 addCss(root.getAttribute('data-speed-optimizer-css')); 1999 addScript(root.getAttribute('data-speed-optimizer-js'), { 2000 defer: true, 2001 onload: function () { 2002 callInit('GenieSpeedOptimizerInit'); 2003 }, 2004 }); 2005 } 2006 if (flags.wishlist_enabled) { 2007 addCss(root.getAttribute('data-wishlist-css')); 2008 addScript(root.getAttribute('data-wishlist-js'), { 2009 defer: true, 2010 onload: function () { 2011 callInit('GenieWishlistInit'); 2012 }, 2013 }); 2014 } 2015 if (flags.upsell_enabled) { 2016 var cfgEl = document.getElementById('genie-upsell-config-json'); 2017 try { 2018 window.GenieUpsellConfig = cfgEl ? JSON.parse(cfgEl.textContent || 'null') : null; 2019 } catch (e) { 2020 window.GenieUpsellConfig = null; 2021 } 2022 window.GenieUpsellPageType = PAGE_TYPE; 2023 if (root.getAttribute('data-upsell-product-id')) { 2024 window.GenieUpsellProduct = { 2025 id: root.getAttribute('data-upsell-product-id'), 2026 collections: root.getAttribute('data-upsell-collections') || '', 2027 }; 2028 } 2029 addCss(root.getAttribute('data-upsell-css')); 2030 addScript(root.getAttribute('data-upsell-js'), { 2031 defer: true, 2032 onload: function () { 2033 if (PAGE_TYPE === 'collection' || PAGE_TYPE === 'index') { 2034 window.GenieAddProductIds = true; 2035 } 2036 callInit('GenieUpsellInit'); 2037 }, 2038 }); 2039 } 2040 } 2041 2042 var flagsRequested = false;
2043 function fetchAndApplyFlags() { 2044 if (flagsRequested) return; 2045 flagsRequested = true; 2046 var cached = readCachedFlags(); 2047 if (cached) { 2048 applyFlags(cached); 2049 return; 2050 } 2051 var url = apiBase + '/api/v1/shop_extra_feature_flags?shopify_domain=' + encodeURIComponent(domain); 2052 fetch(url, { method: 'GET', credentials: 'omit', mode: 'cors' }) 2053 .then(function (r) { 2054 if (!r.ok) throw new Error('bad response'); 2055 return r.json(); 2056 }) 2057 .then(function (flags) { 2058 writeCachedFlags(flags); 2059 applyFlags(flags); 2060 }) 2061 .catch(function () {}); 2062 } 2063 2064 // pointer/key/touch only â Lighthouse may scroll the page for screenshots, 2065 // so do not use scroll as a trigger. 2066 ['pointerdown', 'keydown', 'touchstart'].forEach(function (ev) { 2067 window.addEventListener(ev, fetchAndApplyFlags, { capture: true, passive: true, once: true }); 2068 }); 2069 })(); 2070 })(); 2071</script>
2071 2072 2073 2074</div><div id="shopify-block-AYkpjcWFINkF3RWlJV__1513253815146976218" class="shopify-block shopify-app-block"> 2075</div>
2075<script src="https://cdn.shopify.com/storefront/standard-actions.js" type="module" data-source-attribution="shopify.standard_actions"></script>
2075 2076</body> 2077 2078</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.