Usage
nebula.predictiveCacheListeners()
Parameters
This function does not accept any parameters. Is this incorrect?
Additional Notes
If a service worker is being used (and Cache API is available), the resource will be fetched and added to the cache. Otherwise, it will attempt to prefetch with a resource hint instead.
It also does not run when offline.
Note: This only enables event listeners! To add to the cache, see nebulaAddToCache()
ornebulaPrefetch()
.
Source File
Located in /assets/js/modules/optimization.js on line 369.
No Hooks
This function does not have any filters or actions available. Request one?nebula.predictiveCacheListeners = async function(){ //If Save Data is supported and Save Data is requested do not bother with predictive listeners if ( navigator.connection?.saveData ){ return false; } //Any post listing page if ( jQuery('.first-post .entry-title a').length ){ nebula.prefetch(jQuery('.first-post .entry-title a').attr('href')); } //Internal link hovers let predictiveHoverTimeout; jQuery('a').on('mouseenter', async function(){ //await nebula.yield(); let $oThis = jQuery(this); let url = $oThis.attr('href'); if ( url && !predictiveHoverTimeout ){ predictiveHoverTimeout = window.setTimeout(function(){ predictiveHoverTimeout = null; //Reset the timer nebula.prefetch(url); //Attempt to prefetch }, 250); } }).on('mouseleave', function(){ if ( predictiveHoverTimeout ){ window.clearTimeout(predictiveHoverTimeout); predictiveHoverTimeout = null; } }); //Once idle, prefetch the top-level nav items and buttons //Disabled to reduce the broad background loading. The above hover prefetch is more focused. // if ( typeof window.requestIdleCallback === 'function' ){ //Waiting for Safari to support requestIdleCallback // //Prefetch certain elements on window idle // window.requestIdleCallback(function(){ // //Top-level primary nav links // jQuery('ul#menu-primary > li.menu-item > a').each(function(){ // nebula.prefetch(jQuery(this).attr('href'), false, jQuery(this)); // }); // // //First 5 buttons // jQuery('a.btn, a.wp-block-button__link').slice(0, 4).each(function(){ // nebula.prefetch(jQuery(this).attr('href'), false, jQuery(this)); // }); // }); // } };
Override
To override or disable this JavaScript function, simply redeclare it with the exact same function name. Remember: Some functionality is conditionally loaded via dynamic imports, so if your function is not overriding properly, try listening for a DOM event (described below).
For non-module import functions:
nebula.predictiveCacheListeners = function(){ //Write your own code here, leave it blank, or return false. }
For dynamically imported module function overrides:
jQuery(window).on('load', function(){ nebula.predictiveCacheListeners = function(){ //Write your own code here, leave it blank, or return false. } });
Custom Nebula DOM events do also exist, so you could also try the following if the Window Load listener does not work:
jQuery(document).on('nebula_module_loaded', function(module){ //Note that the module variable is also available to know which module specifically was imported if ( typeof nebula.predictiveCacheListeners === 'function' ){ nebula.predictiveCacheListeners = function(){ //Write your own code here, leave it blank, or return false. } } });