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