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 v2.0.1 - (C) 2019 Alexandre Dieulot - https://instant.page/license */ 102 103let urlToPreload 104let mouseoverTimer 105let lastTouchTimestamp 106 107const prefetcher = document.createElement('link') 108const isSupported = prefetcher.relList && prefetcher.relList.supports && prefetcher.relList.supports('prefetch') 109const isDataSaverEnabled = navigator.connection && navigator.connection.saveData 110const allowQueryString = 'instantAllowQueryString' in document.body.dataset 111const allowExternalLinks = 'instantAllowExternalLinks' in document.body.dataset 112const useWhitelist = 'instantWhitelist' in document.body.dataset 113 114let delayOnHover = 65 115let useMousedown = false 116let useMousedownOnly = false 117if ('instantIntensity' in document.body.dataset) { 118 if (document.body.dataset.instantIntensity.substr(0, 'mousedown'.length) == 'mousedown') { 119 useMousedown = true 120 if (document.body.dataset.instantIntensity == 'mousedown-only') { 121 useMousedownOnly = true 122 } 123 } 124 else { 125 const milliseconds = parseInt(document.body.dataset.instantIntensity) 126 if (!isNaN(milliseconds)) { 127 delayOnHover = milliseconds 128 } 129 } 130} 131 132if (isSupported && !isDataSaverEnabled) { 133 prefetcher.rel = 'prefetch' 134 document.head.appendChild(prefetcher) 135 136 const eventListenersOptions = { 137 capture: true, 138 passive: true, 139 } 140 141 if (!useMousedownOnly) { 142 document.addEventListener('touchstart', touchstartListener, eventListenersOptions) 143 } 144 145 if (!useMousedown) { 146 document.addEventListener('mouseover', mouseoverListener, eventListenersOptions) 147 } 148 else { 149 document.addEventListener('mousedown', mousedownListener, eventListenersOptions) 150 } 151} 152 153function touchstartListener(event) { 154 /* Chrome on Android calls mouseover before touchcancel so `lastTouchTimestamp` 155 * must be assigned on touchstart to be measured on mouseover. */ 156 lastTouchTimestamp = performance.now() 157 158 const linkElement = event.target.closest('a') 159 160 if (!isPreloadable(linkElement)) { 161 return 162 } 163 164 linkElement.addEventListener('touchcancel', touchendAndTouchcancelListener, {passive: true}) 165 linkElement.addEventListener('touchend', touchendAndTouchcancelListener, {passive: true}) 166 167 urlToPreload = linkElement.href 168 preload(linkElement.href) 169} 170 171function touchendAndTouchcancelListener() { 172 urlToPreload = undefined 173 stopPreloading() 174} 175 176function mouseoverListener(event) { 177 if (performance.now() - lastTouchTimestamp < 1100) { 178 return 179 } 180 181 const linkElement = event.target.closest('a') 182 183 if (!isPreloadable(linkElement)) { 184 return 185 } 186 187 linkElement.addEventListener('mouseout', mouseoutListener, {passive: true}) 188 189 urlToPreload = linkElement.href 190 191 mouseoverTimer = setTimeout(() => { 192 preload(linkElement.href) 193 mouseoverTimer = undefined 194 }, delayOnHover) 195} 196 197function mousedownListener(event) { 198 const linkElement = event.target.closest('a') 199 200 if (!isPreloadable(linkElement)) { 201 return 202 } 203 204 linkElement.addEventListener('mouseout', mouseoutListener, {passive: true}) 205 206 urlToPreload = linkElement.href 207 208 preload(linkElement.href) 209} 210 211function mouseoutListener(event) { 212 if (event.relatedTarget && event.target.closest('a') == event.relatedTarget.closest('a')) { 213 return 214 } 215 216 if (mouseoverTimer) { 217 clearTimeout(mouseoverTimer) 218 mouseoverTimer = undefined 219 } 220 221 urlToPreload = undefined 222 223 stopPreloading() 224} 225 226function isPreloadable(linkElement) { 227 if (!linkElement || !linkElement.href) { 228 return 229 } 230 231 if (urlToPreload == linkElement.href) { 232 return 233 } 234 235 if (useWhitelist && !('instant' in linkElement.dataset)) { 236 return 237 } 238 239 if (!allowExternalLinks && linkElement.origin != location.origin && !('instant' in linkElement.dataset)) { 240 return 241 } 242 243 if (!['http:', 'https:'].includes(linkElement.protocol)) { 244 return 245 } 246 247 if (linkElement.protocol == 'http:' && location.protocol == 'https:') { 248 return 249 } 250 251 if (!allowQueryString && linkElement.search && !('instant' in linkElement.dataset)) { 252 return 253 } 254 255 if (linkElement.hash && linkElement.pathname + linkElement.search == location.pathname + location.search) { 256 return 257 } 258 259 if ('noInstant' in linkElement.dataset) { 260 return 261 } 262 263 return true 264} 265 266function preload(url) { 267 prefetcher.href = url 268} 269 270function stopPreloading() { 271 prefetcher.removeAttribute('href') 272} 273 274 275/***/ }) 276/******/ ]); 277//# sourceMappingURL=instantPage.min.js.map?1590779955329
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.