PluginProbe
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor / 2.0.7
Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor v2.0.7
2.0.13 2.0.12 2.0.11 2.0.10 2.0.9 trunk 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8
blockenberg / blocks / search-bar / frontend.js

frontend.js in Blockenberg — 600+ Advanced Gutenberg Blocks & AI Agent for WordPress Block Editor 2.0.7, at blocks/search-bar/frontend.js

53 lines 2.2 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
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