Usage
This function runs automatically, so it is not called manually. Is this incorrect?
Source File
Located in /assets/js/modules/search.js on line 396.
No Hooks
This function does not have any filters or actions available. Request one?
JavaScript
nebula.searchTermHighlighter = async function(){
window.requestAnimationFrame(async function(){
let searchTerm = nebula.get('s');
if ( searchTerm ){
let termPattern = new RegExp('(?![^<]+>)(' + nebula.preg_quote(searchTerm.replaceAll(/(\+|%22|%20)/g, ' ')) + ')', 'ig'); // Find the search term within the text
//Loop using for...of so that it can yield asynchronously without having a race condition when using jQuery.each()
for ( const element of jQuery('article .entry-title a, article .entry-summary') ){
await nebula.yield();
jQuery(element).html(function(i, html){
return html.replace(termPattern, '<mark class="searchresultword">$1</mark>'); //Wrap each found search term
});
}
nebula.emphasizeSearchTerms();
}
});
};
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).
JavaScript
For non-module import functions:
nebula.searchTermHighlighter = function(){
//Write your own code here, leave it blank, or return false.
}
For dynamically imported module function overrides:
jQuery(window).on('load', function(){
nebula.searchTermHighlighter = 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.searchTermHighlighter === 'function' ){
nebula.searchTermHighlighter = function(){
//Write your own code here, leave it blank, or return false.
}
}
});