1/******/ (() => { // webpackBootstrap 2/******/ var __webpack_modules__ = ({ 3 4/***/ 737: 5/***/ (() => { 6 7/*! instant.page v5.1.0 - (C) 2019-2020 Alexandre Dieulot - https://instant.page/license */ 8 9let mouseoverTimer 10let lastTouchTimestamp 11const prefetches = new Set() 12const prefetchElement = document.createElement('link') 13const isSupported = prefetchElement.relList && prefetchElement.relList.supports && prefetchElement.relList.supports('prefetch') 14 && window.IntersectionObserver && 'isIntersecting' in IntersectionObserverEntry.prototype 15const allowQueryString = 'instantAllowQueryString' in document.body.dataset 16const allowExternalLinks = 'instantAllowExternalLinks' in document.body.dataset 17const useWhitelist = 'instantWhitelist' in document.body.dataset 18const mousedownShortcut = 'instantMousedownShortcut' in document.body.dataset 19const DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION = 1111 20 21let delayOnHover = 65 22let useMousedown = false 23let useMousedownOnly = false 24let useViewport = false 25 26if ('instantIntensity' in document.body.dataset) { 27 const intensity = document.body.dataset.instantIntensity 28 29 if (intensity.substr(0, 'mousedown'.length) == 'mousedown') { 30 useMousedown = true 31 if (intensity == 'mousedown-only') { 32 useMousedownOnly = true 33 } 34 } 35 else if (intensity.substr(0, 'viewport'.length) == 'viewport') { 36 if (!(navigator.connection && (navigator.connection.saveData || (navigator.connection.effectiveType && navigator.connection.effectiveType.includes('2g'))))) { 37 if (intensity == "viewport") { 38 /* Biggest iPhone resolution (which we want): 414 Ã 896 = 370944 39 * Small 7" tablet resolution (which we donât want): 600 Ã 1024 = 614400 40 * Note that the viewport (which we check here) is smaller than the resolution due to the UIâs chrome */ 41 if (document.documentElement.clientWidth * document.documentElement.clientHeight < 450000) { 42 useViewport = true 43 } 44 } 45 else if (intensity == "viewport-all") { 46 useViewport = true 47 } 48 } 49 } 50 else { 51 const milliseconds = parseInt(intensity) 52 if (!isNaN(milliseconds)) { 53 delayOnHover = milliseconds 54 } 55 } 56} 57 58if (isSupported) { 59 const eventListenersOptions = { 60 capture: true, 61 passive: true, 62 } 63 64 if (!useMousedownOnly) { 65 document.addEventListener('touchstart', touchstartListener, eventListenersOptions) 66 } 67 68 if (!useMousedown) { 69 document.addEventListener('mouseover', mouseoverListener, eventListenersOptions) 70 } 71 else if (!mousedownShortcut) { 72 document.addEventListener('mousedown', mousedownListener, eventListenersOptions) 73 } 74 75 if (mousedownShortcut) { 76 document.addEventListener('mousedown', mousedownShortcutListener, eventListenersOptions) 77 } 78 79 if (useViewport) { 80 let triggeringFunction 81 if (window.requestIdleCallback) { 82 triggeringFunction = (callback) => { 83 requestIdleCallback(callback, { 84 timeout: 1500, 85 }) 86 } 87 } 88 else { 89 triggeringFunction = (callback) => { 90 callback() 91 } 92 } 93 94 triggeringFunction(() => { 95 const intersectionObserver = new IntersectionObserver((entries) => { 96 entries.forEach((entry) => { 97 if (entry.isIntersecting) { 98 const linkElement = entry.target 99 intersectionObserver.unobserve(linkElement) 100 preload(linkElement.href) 101 } 102 }) 103 }) 104 105 document.querySelectorAll('a').forEach((linkElement) => { 106 if (isPreloadable(linkElement)) { 107 intersectionObserver.observe(linkElement) 108 } 109 }) 110 }) 111 } 112} 113 114function touchstartListener(event) { 115 /* Chrome on Android calls mouseover before touchcancel so `lastTouchTimestamp` 116 * must be assigned on touchstart to be measured on mouseover. */ 117 lastTouchTimestamp = performance.now() 118 119 const linkElement = event.target.closest('a') 120 121 if (!isPreloadable(linkElement)) { 122 return 123 } 124 125 preload(linkElement.href) 126} 127 128function mouseoverListener(event) { 129 if (performance.now() - lastTouchTimestamp < DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION) { 130 return 131 } 132 133 const linkElement = event.target.closest('a') 134 135 if (!isPreloadable(linkElement)) { 136 return 137 } 138 139 linkElement.addEventListener('mouseout', mouseoutListener, {passive: true}) 140 141 mouseoverTimer = setTimeout(() => { 142 preload(linkElement.href) 143 mouseoverTimer = undefined 144 }, delayOnHover) 145} 146 147function mousedownListener(event) { 148 const linkElement = event.target.closest('a') 149 150 if (!isPreloadable(linkElement)) { 151 return 152 } 153 154 preload(linkElement.href) 155} 156 157function mouseoutListener(event) { 158 if (event.relatedTarget && event.target.closest('a') == event.relatedTarget.closest('a')) { 159 return 160 } 161 162 if (mouseoverTimer) { 163 clearTimeout(mouseoverTimer) 164 mouseoverTimer = undefined 165 } 166} 167 168function mousedownShortcutListener(event) { 169 if (performance.now() - lastTouchTimestamp < DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION) { 170 return 171 } 172 173 const linkElement = event.target.closest('a') 174 175 if (event.which > 1 || event.metaKey || event.ctrlKey) { 176 return 177 } 178 179 if (!linkElement) { 180 return 181 } 182 183 linkElement.addEventListener('click', function (event) { 184 if (event.detail == 1337) { 185 return 186 } 187 188 event.preventDefault() 189 }, {capture: true, passive: false, once: true}) 190 191 const customEvent = new MouseEvent('click', {view: window, bubbles: true, cancelable: false, detail: 1337}) 192 linkElement.dispatchEvent(customEvent) 193} 194 195function isPreloadable(linkElement) { 196 if (!linkElement || !linkElement.href) { 197 return 198 } 199 200 if (useWhitelist && !('instant' in linkElement.dataset)) { 201 return 202 } 203 204 if (!allowExternalLinks && linkElement.origin != location.origin && !('instant' in linkElement.dataset)) { 205 return 206 } 207 208 if (!['http:', 'https:'].includes(linkElement.protocol)) { 209 return 210 } 211 212 if (linkElement.protocol == 'http:' && location.protocol == 'https:') { 213 return 214 } 215 216 if (!allowQueryString && linkElement.search && !('instant' in linkElement.dataset)) { 217 return 218 } 219 220 if (linkElement.hash && linkElement.pathname + linkElement.search == location.pathname + location.search) { 221 return 222 } 223 224 if ('noInstant' in linkElement.dataset) { 225 return 226 } 227 228 return true 229} 230 231function preload(url) { 232 if (prefetches.has(url)) { 233 return 234 } 235 236 const prefetcher = document.createElement('link') 237 prefetcher.rel = 'prefetch' 238 prefetcher.href = url 239 document.head.appendChild(prefetcher) 240 241 prefetches.add(url) 242} 243 244 245/***/ }) 246 247/******/ }); 248/************************************************************************/ 249/******/ // The module cache 250/******/ var __webpack_module_cache__ = {}; 251/******/ 252/******/ // The require function 253/******/ function __webpack_require__(moduleId) { 254/******/ // Check if module is in cache 255/******/ if(__webpack_module_cache__[moduleId]) { 256/******/ return __webpack_module_cache__[moduleId].exports; 257/******/ } 258/******/ // Create a new module (and put it into the cache) 259/******/ var module = __webpack_module_cache__[moduleId] = { 260/******/ // no module.id needed 261/******/ // no module.loaded needed 262/******/ exports: {} 263/******/ }; 264/******/ 265/******/ // Execute the module function 266/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); 267/******/ 268/******/ // Return the exports of the module 269/******/ return module.exports; 270/******/ } 271/******/ 272/************************************************************************/ 273/******/ /* webpack/runtime/compat get default export */ 274/******/ (() => { 275/******/ // getDefaultExport function for compatibility with non-harmony modules 276/******/ __webpack_require__.n = (module) => {
277/******/ var getter = module && module.__esModule ? 278/******/ () => (module['default']) : 279/******/ () => (module); 280/******/ __webpack_require__.d(getter, { a: getter }); 281/******/ return getter; 282/******/ }; 283/******/ })(); 284/******/ 285/******/ /* webpack/runtime/define property getters */ 286/******/ (() => { 287/******/ // define getter functions for harmony exports 288/******/ __webpack_require__.d = (exports, definition) => { 289/******/ for(var key in definition) { 290/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { 291/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); 292/******/ } 293/******/ } 294/******/ }; 295/******/ })(); 296/******/ 297/******/ /* webpack/runtime/hasOwnProperty shorthand */ 298/******/ (() => { 299/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) 300/******/ })(); 301/******/ 302/************************************************************************/ 303(() => { 304(function (n, v) { 305 // eslint-disable-next-line max-len 306 if (window.Shopify && window.Shopify.theme && navigator && navigator.sendBeacon && window.Shopify.designMode) { 307 if (sessionStorage.getItem('oots_beacon')) return; 308 309 navigator.sendBeacon('https://app.outofthesandbox.com/beacon', new URLSearchParams({ 310 shop_domain: window.Shopify.shop, 311 shop_id: window.Store.id, 312 theme_name: n, 313 theme_version: v, 314 theme_store_id: window.Shopify.theme.theme_store_id, 315 theme_id: window.Shopify.theme.id, 316 theme_role: window.Shopify.theme.role, 317 })); 318 319 sessionStorage.setItem('oots_beacon', ''); 320 } 321 }('superstore','5.1.0')) 322})(); 323 324(() => { 325"use strict"; 326/* harmony import */ var instant_page__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(737); 327/* harmony import */ var instant_page__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(instant_page__WEBPACK_IMPORTED_MODULE_0__); 328 329})(); 330 331/******/ })() 332; 333//# sourceMappingURL=instantPage.min.js.map?1689088724439
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.