| 1 |
( function () { |
| 2 |
document.querySelectorAll( '.bksb-form' ).forEach( function ( form ) { |
| 3 |
var input = form.querySelector( '.bksb-input' ); |
| 4 |
var results = form.querySelector( '.bksb-results' ); |
| 5 |
if ( !input || !results || input.dataset.live !== '1' ) return; |
| 6 |
|
| 7 |
var timer; |
| 8 |
var cache = {}; |
| 9 |
|
| 10 |
function doSearch( q ) { |
| 11 |
if ( cache[ q ] ) { render( cache[ q ] ); return; } |
| 12 |
fetch( '/wp-json/wp/v2/search?search=' + encodeURIComponent( q ) + '&per_page=6&_embed' ) |
| 13 |
.then( function (r) { return r.json(); } ) |
| 14 |
.then( function ( data ) { |
| 15 |
cache[ q ] = data; |
| 16 |
render( data ); |
| 17 |
} ) |
| 18 |
.catch( function () {} ); |
| 19 |
} |
| 20 |
|
| 21 |
function render( items ) { |
| 22 |
results.innerHTML = ''; |
| 23 |
if ( !items || items.length === 0 ) { |
| 24 |
results.innerHTML = '<div class="bksb-results-empty">No results found.</div>'; |
| 25 |
results.classList.add( 'bksb-open' ); |
| 26 |
return; |
| 27 |
} |
| 28 |
items.forEach( function ( item ) { |
| 29 |
var a = document.createElement( 'a' ); |
| 30 |
a.className = 'bksb-result-item'; |
| 31 |
a.href = item.url || item.link || '#'; |
| 32 |
var thumb = item._embedded && item._embedded['wp:featuredmedia'] && item._embedded['wp:featuredmedia'][0]; |
| 33 |
a.innerHTML = ( thumb ? '<img src="' + (thumb.media_details && thumb.media_details.sizes && thumb.media_details.sizes.thumbnail ? thumb.media_details.sizes.thumbnail.source_url : thumb.source_url) + '" alt="" />' : '' ) + |
| 34 |
'<div><div class="bksb-result-title">' + ( item.title && item.title.rendered ? item.title.rendered : item.title ) + '</div>' + |
| 35 |
'<div class="bksb-result-type">' + ( item.subtype || item.type || '' ) + '</div></div>'; |
| 36 |
results.appendChild( a ); |
| 37 |
} ); |
| 38 |
results.classList.add( 'bksb-open' ); |
| 39 |
} |
| 40 |
|
| 41 |
input.addEventListener( 'input', function () { |
| 42 |
clearTimeout( timer ); |
| 43 |
var q = input.value.trim(); |
| 44 |
if ( q.length < 2 ) { results.classList.remove( 'bksb-open' ); return; } |
| 45 |
timer = setTimeout( function () { doSearch( q ); }, 300 ); |
| 46 |
} ); |
| 47 |
|
| 48 |
document.addEventListener( 'click', function ( e ) { |
| 49 |
if ( !form.contains( e.target ) ) results.classList.remove( 'bksb-open' ); |
| 50 |
} ); |
| 51 |
} ); |
| 52 |
} )(); |
| 53 |
|