Usage
This function runs automatically, so it is not called manually. Is this incorrect?
Source File
Located in /assets/js/modules/optimization.js on line 474.
No Hooks
This function does not have any filters or actions available. Request one?nebula.lazyLoadAssets = async function(){ nebula.site.resources.lazy.promises = {}; //Detect if Bootstrap JS is needed and load it //A wildcard attribute name selector would be super useful here, but does not exist. Something like [data-bs-*] would be perfect... //That being said, the Offcanvas component will be used on 95% of Nebula sites, so this will likely load on every page regardless. if ( typeof bootstrap === 'undefined' ){ //If Bootstrap JS has not already been initialized if ( jQuery('.offcanvas, .accordion, .alert, .carousel, .collapse, .dropdown-menu, .modal, .nav-tabs, .nav-pills, [data-bs-toggle]').length ){ nebula.loadJS(nebula.site.resources.scripts['nebula_bootstrap']).then(function(){ //Load Bootstrap JS nebula.initBootstrapFunctions(); //Initialize Nebula Bootstrap helper functionality now that Bootstrap JS has finished loading here }); } } else { nebula.initBootstrapFunctions(); //Initialize Nebula Bootstrap helper functionality immediately since Bootstrap JS has already been loaded somewhere else } //Lazy load elements as they scroll into viewport try { //Observe the entries that are identified and added later (below) let lazyObserver = new IntersectionObserver(function(entries){ entries.forEach(async function(entry){ //await nebula.yield(); if ( entry.intersectionRatio > 0 ){ nebula.loadElement(jQuery(entry.target)); lazyObserver.unobserve(entry.target); //Stop observing the element } }); }, { rootMargin: '50%', //Extend the area of the observer (100% = Double the Viewport). Try to prevent visible loading of elements by triggering the load much earlier than actually needed. threshold: 0.1 }); //Create the entries and add them to the observer jQuery('.nebula-lazy-position, .lazy-load, .nebula-lazy').each(function(){ lazyObserver.observe(jQuery(this)[0]); //Observe the element }); //When scroll reaches the bottom, ensure everything has loaded at this point //Only when IntersectionObserver exists because otherwise everything is immediately loaded anyway let lazyLoadScrollBottom = function(){ if( nebula.dom.window.scrollTop()+nebula.dom.window.height() > nebula.dom.document.height()-500 ){ //When the scroll position reaches 500px above the bottom nebula.loadEverything(); window.removeEventListener('scroll', lazyLoadScrollBottom); //Stop listening for this scroll event } }; window.addEventListener('scroll', lazyLoadScrollBottom); //Scroll is passive by default } catch(error){ nebula.loadEverything(); //If any error, load everything immediately nebula.help('Lazy Load Observer: ' + error + '. All assets have been loaded immediately.', '/functions/lazyloadassets/', true); } //Load all lazy elements at once if requested nebula.dom.window.on('nebula_load', function(){ if ( typeof window.requestIdleCallback === 'function' ){ //If requestIdleCallback exists, use it. Remove this check when Safari supports it window.requestIdleCallback(function(){ nebula.loadEverything(); }); } else { //Otherwise, just run immediately nebula.loadEverything(); } }); //Lazy load CSS assets //Listen for requestIdleCallback here when Safari supports it jQuery.each(nebula.site.resources.lazy.styles, function(handle, condition){ if ( condition === 'all' || jQuery(condition).length ){ if ( nebula.site.resources.styles[handle.replaceAll('-', '_')] ){ //If that handle exists in the registered styles nebula.loadCSS(nebula.site.resources.styles[handle.replaceAll('-', '_')]); } } }); //Lazy load JS assets //Listen for requestIdleCallback here when Safari supports it jQuery.each(nebula.site.resources.lazy.scripts, function(handle, condition){ if ( condition === 'all' || jQuery(condition).length ){ if ( nebula.site.resources.scripts[handle.replaceAll('-', '_')] ){ //If that handle exists in the registered scripts nebula.loadJS(nebula.site.resources.scripts[handle.replaceAll('-', '_')], handle); //Load it (with a Promise) } } }); //Load the Google Maps API if 'googlemap' class exists if ( jQuery('.googlemap').length ){ if ( typeof google == 'undefined' || typeof google.maps == 'undefined' ){ //If the API has not already been called nebula.loadJS('https://www.google.com/jsapi?key=' + nebula.site.options.nebula_google_browser_api_key, 'google-maps').then(function(){ //May not need key here, but just to be safe. google.load('maps', '3', { other_params: 'libraries=places&key=' + nebula.site.options.nebula_google_browser_api_key, callback: function(){ nebula.dom.document.trigger('nebula_google_maps_api_loaded'); } }); }); } else { nebula.dom.document.trigger('nebula_google_maps_api_loaded'); //Already loaded } } if ( jQuery('pre.nebula-code, pre.nebula-code').length ){ nebula.loadCSS(nebula.site.resources.styles.nebula_pre); nebula.pre(); } };
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.lazyLoadAssets = function(){ //Write your own code here, leave it blank, or return false. }
For dynamically imported module function overrides:
jQuery(window).on('load', function(){ nebula.lazyLoadAssets = 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.lazyLoadAssets === 'function' ){ nebula.lazyLoadAssets = function(){ //Write your own code here, leave it blank, or return false. } } });