first commit
This commit is contained in:
@@ -0,0 +1,236 @@
|
||||
/*! instant.page v5.1.0 - (C) 2019-2020 Alexandre Dieulot - https://instant.page/license */
|
||||
|
||||
let mouseoverTimer
|
||||
let lastTouchTimestamp
|
||||
const prefetches = new Set()
|
||||
const prefetchElement = document.createElement('link')
|
||||
const isSupported = prefetchElement.relList && prefetchElement.relList.supports && prefetchElement.relList.supports('prefetch')
|
||||
&& window.IntersectionObserver && 'isIntersecting' in IntersectionObserverEntry.prototype
|
||||
const allowQueryString = 'instantAllowQueryString' in document.body.dataset
|
||||
const allowExternalLinks = 'instantAllowExternalLinks' in document.body.dataset
|
||||
const useWhitelist = 'instantWhitelist' in document.body.dataset
|
||||
const mousedownShortcut = 'instantMousedownShortcut' in document.body.dataset
|
||||
const DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION = 1111
|
||||
|
||||
let delayOnHover = 65
|
||||
let useMousedown = false
|
||||
let useMousedownOnly = false
|
||||
let useViewport = false
|
||||
|
||||
if ('instantIntensity' in document.body.dataset) {
|
||||
const intensity = document.body.dataset.instantIntensity
|
||||
|
||||
if (intensity.substr(0, 'mousedown'.length) == 'mousedown') {
|
||||
useMousedown = true
|
||||
if (intensity == 'mousedown-only') {
|
||||
useMousedownOnly = true
|
||||
}
|
||||
}
|
||||
else if (intensity.substr(0, 'viewport'.length) == 'viewport') {
|
||||
if (!(navigator.connection && (navigator.connection.saveData || (navigator.connection.effectiveType && navigator.connection.effectiveType.includes('2g'))))) {
|
||||
if (intensity == "viewport") {
|
||||
/* Biggest iPhone resolution (which we want): 414 × 896 = 370944
|
||||
* Small 7" tablet resolution (which we don’t want): 600 × 1024 = 614400
|
||||
* Note that the viewport (which we check here) is smaller than the resolution due to the UI’s chrome */
|
||||
if (document.documentElement.clientWidth * document.documentElement.clientHeight < 450000) {
|
||||
useViewport = true
|
||||
}
|
||||
}
|
||||
else if (intensity == "viewport-all") {
|
||||
useViewport = true
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
const milliseconds = parseInt(intensity)
|
||||
if (!isNaN(milliseconds)) {
|
||||
delayOnHover = milliseconds
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isSupported) {
|
||||
const eventListenersOptions = {
|
||||
capture: true,
|
||||
passive: true,
|
||||
}
|
||||
|
||||
if (!useMousedownOnly) {
|
||||
document.addEventListener('touchstart', touchstartListener, eventListenersOptions)
|
||||
}
|
||||
|
||||
if (!useMousedown) {
|
||||
document.addEventListener('mouseover', mouseoverListener, eventListenersOptions)
|
||||
}
|
||||
else if (!mousedownShortcut) {
|
||||
document.addEventListener('mousedown', mousedownListener, eventListenersOptions)
|
||||
}
|
||||
|
||||
if (mousedownShortcut) {
|
||||
document.addEventListener('mousedown', mousedownShortcutListener, eventListenersOptions)
|
||||
}
|
||||
|
||||
if (useViewport) {
|
||||
let triggeringFunction
|
||||
if (window.requestIdleCallback) {
|
||||
triggeringFunction = (callback) => {
|
||||
requestIdleCallback(callback, {
|
||||
timeout: 1500,
|
||||
})
|
||||
}
|
||||
}
|
||||
else {
|
||||
triggeringFunction = (callback) => {
|
||||
callback()
|
||||
}
|
||||
}
|
||||
|
||||
triggeringFunction(() => {
|
||||
const intersectionObserver = new IntersectionObserver((entries) => {
|
||||
entries.forEach((entry) => {
|
||||
if (entry.isIntersecting) {
|
||||
const linkElement = entry.target
|
||||
intersectionObserver.unobserve(linkElement)
|
||||
preload(linkElement.href)
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
document.querySelectorAll('a').forEach((linkElement) => {
|
||||
if (isPreloadable(linkElement)) {
|
||||
intersectionObserver.observe(linkElement)
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function touchstartListener(event) {
|
||||
/* Chrome on Android calls mouseover before touchcancel so `lastTouchTimestamp`
|
||||
* must be assigned on touchstart to be measured on mouseover. */
|
||||
lastTouchTimestamp = performance.now()
|
||||
|
||||
const linkElement = event.target.closest('a')
|
||||
|
||||
if (!isPreloadable(linkElement)) {
|
||||
return
|
||||
}
|
||||
|
||||
preload(linkElement.href)
|
||||
}
|
||||
|
||||
function mouseoverListener(event) {
|
||||
if (performance.now() - lastTouchTimestamp < DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION) {
|
||||
return
|
||||
}
|
||||
|
||||
const linkElement = event.target.closest('a')
|
||||
|
||||
if (!isPreloadable(linkElement)) {
|
||||
return
|
||||
}
|
||||
|
||||
linkElement.addEventListener('mouseout', mouseoutListener, {passive: true})
|
||||
|
||||
mouseoverTimer = setTimeout(() => {
|
||||
preload(linkElement.href)
|
||||
mouseoverTimer = undefined
|
||||
}, delayOnHover)
|
||||
}
|
||||
|
||||
function mousedownListener(event) {
|
||||
const linkElement = event.target.closest('a')
|
||||
|
||||
if (!isPreloadable(linkElement)) {
|
||||
return
|
||||
}
|
||||
|
||||
preload(linkElement.href)
|
||||
}
|
||||
|
||||
function mouseoutListener(event) {
|
||||
if (event.relatedTarget && event.target.closest('a') == event.relatedTarget.closest('a')) {
|
||||
return
|
||||
}
|
||||
|
||||
if (mouseoverTimer) {
|
||||
clearTimeout(mouseoverTimer)
|
||||
mouseoverTimer = undefined
|
||||
}
|
||||
}
|
||||
|
||||
function mousedownShortcutListener(event) {
|
||||
if (performance.now() - lastTouchTimestamp < DELAY_TO_NOT_BE_CONSIDERED_A_TOUCH_INITIATED_ACTION) {
|
||||
return
|
||||
}
|
||||
|
||||
const linkElement = event.target.closest('a')
|
||||
|
||||
if (event.which > 1 || event.metaKey || event.ctrlKey) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!linkElement) {
|
||||
return
|
||||
}
|
||||
|
||||
linkElement.addEventListener('click', function (event) {
|
||||
if (event.detail == 1337) {
|
||||
return
|
||||
}
|
||||
|
||||
event.preventDefault()
|
||||
}, {capture: true, passive: false, once: true})
|
||||
|
||||
const customEvent = new MouseEvent('click', {view: window, bubbles: true, cancelable: false, detail: 1337})
|
||||
linkElement.dispatchEvent(customEvent)
|
||||
}
|
||||
|
||||
function isPreloadable(linkElement) {
|
||||
if (!linkElement || !linkElement.href) {
|
||||
return
|
||||
}
|
||||
|
||||
if (useWhitelist && !('instant' in linkElement.dataset)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!allowExternalLinks && linkElement.origin != location.origin && !('instant' in linkElement.dataset)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (!['http:', 'https:'].includes(linkElement.protocol)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (linkElement.protocol == 'http:' && location.protocol == 'https:') {
|
||||
return
|
||||
}
|
||||
|
||||
if (!allowQueryString && linkElement.search && !('instant' in linkElement.dataset)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (linkElement.hash && linkElement.pathname + linkElement.search == location.pathname + location.search) {
|
||||
return
|
||||
}
|
||||
|
||||
if ('noInstant' in linkElement.dataset) {
|
||||
return
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
function preload(url) {
|
||||
if (prefetches.has(url)) {
|
||||
return
|
||||
}
|
||||
|
||||
const prefetcher = document.createElement('link')
|
||||
prefetcher.rel = 'prefetch'
|
||||
prefetcher.href = url
|
||||
document.head.appendChild(prefetcher)
|
||||
|
||||
prefetches.add(url)
|
||||
}
|
||||
2
wp-content/plugins/pro-elements/assets/lib/instant-page/instant-page.min.js
vendored
Normal file
2
wp-content/plugins/pro-elements/assets/lib/instant-page/instant-page.min.js
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
/*! instant.page v5.1.0 - (C) 2019-2020 Alexandre Dieulot - https://instant.page/license */
|
||||
let t,e;const n=new Set,o=document.createElement("link"),i=o.relList&&o.relList.supports&&o.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype,s="instantAllowQueryString"in document.body.dataset,a="instantAllowExternalLinks"in document.body.dataset,r="instantWhitelist"in document.body.dataset,c="instantMousedownShortcut"in document.body.dataset,d=1111;let l=65,u=!1,f=!1,m=!1;if("instantIntensity"in document.body.dataset){const t=document.body.dataset.instantIntensity;if("mousedown"==t.substr(0,"mousedown".length))u=!0,"mousedown-only"==t&&(f=!0);else if("viewport"==t.substr(0,"viewport".length))navigator.connection&&(navigator.connection.saveData||navigator.connection.effectiveType&&navigator.connection.effectiveType.includes("2g"))||("viewport"==t?document.documentElement.clientWidth*document.documentElement.clientHeight<45e4&&(m=!0):"viewport-all"==t&&(m=!0));else{const e=parseInt(t);isNaN(e)||(l=e)}}if(i){const n={capture:!0,passive:!0};if(f||document.addEventListener("touchstart",function(t){e=performance.now();const n=t.target.closest("a");if(!h(n))return;v(n.href)},n),u?c||document.addEventListener("mousedown",function(t){const e=t.target.closest("a");if(!h(e))return;v(e.href)},n):document.addEventListener("mouseover",function(n){if(performance.now()-e<d)return;const o=n.target.closest("a");if(!h(o))return;o.addEventListener("mouseout",p,{passive:!0}),t=setTimeout(()=>{v(o.href),t=void 0},l)},n),c&&document.addEventListener("mousedown",function(t){if(performance.now()-e<d)return;const n=t.target.closest("a");if(t.which>1||t.metaKey||t.ctrlKey)return;if(!n)return;n.addEventListener("click",function(t){1337!=t.detail&&t.preventDefault()},{capture:!0,passive:!1,once:!0});const o=new MouseEvent("click",{view:window,bubbles:!0,cancelable:!1,detail:1337});n.dispatchEvent(o)},n),m){let t;(t=window.requestIdleCallback?t=>{requestIdleCallback(t,{timeout:1500})}:t=>{t()})(()=>{const t=new IntersectionObserver(e=>{e.forEach(e=>{if(e.isIntersecting){const n=e.target;t.unobserve(n),v(n.href)}})});document.querySelectorAll("a").forEach(e=>{h(e)&&t.observe(e)})})}}function p(e){e.relatedTarget&&e.target.closest("a")==e.relatedTarget.closest("a")||t&&(clearTimeout(t),t=void 0)}function h(t){if(t&&t.href&&(!r||"instant"in t.dataset)&&(a||t.origin==location.origin||"instant"in t.dataset)&&["http:","https:"].includes(t.protocol)&&("http:"!=t.protocol||"https:"!=location.protocol)&&(s||!t.search||"instant"in t.dataset)&&!(t.hash&&t.pathname+t.search==location.pathname+location.search||"noInstant"in t.dataset))return!0}function v(t){if(n.has(t))return;const e=document.createElement("link");e.rel="prefetch",e.href=t,document.head.appendChild(e),n.add(t)}
|
||||
Reference in New Issue
Block a user