1- /*! https://github.com/jquery/typesense-minibar 1.3.1 */
2- globalThis . tsminibar = function tsminibar ( form ) {
3- const { origin, collection } = form . dataset ;
4- const group = ! ! form . dataset . group ;
1+ /*! https://github.com/jquery/typesense-minibar 1.3.2 */
2+ globalThis . tsminibar = function tsminibar ( form , dataset = form . dataset ) {
53 const cache = new Map ( ) ;
64 const state = { query : '' , cursor : - 1 , open : false , hits : [ ] } ;
75 const searchParams = new URLSearchParams ( {
@@ -14,10 +12,10 @@ globalThis.tsminibar = function tsminibar (form) {
1412 sort_by : 'item_priority:desc' ,
1513 snippet_threshold : '8' ,
1614 highlight_affix_num_tokens : '12' ,
17- 'x-typesense-api-key' : form . dataset . key ,
18- ...Object . fromEntries ( new URLSearchParams ( form . dataset . searchParams ) )
15+ 'x-typesense-api-key' : dataset . key ,
16+ ...Object . fromEntries ( new URLSearchParams ( dataset . searchParams ) )
1917 } ) ;
20- const noResults = form . dataset . noResults || "No results for '{}'." ;
18+ const noResults = dataset . noResults || "No results for '{}'." ;
2119
2220 const input = form . querySelector ( 'input[type=search]' ) ;
2321 const listbox = document . createElement ( 'div' ) ;
@@ -31,7 +29,7 @@ globalThis.tsminibar = function tsminibar (form) {
3129 preconnect = document . createElement ( 'link' ) ;
3230 preconnect . rel = 'preconnect' ;
3331 preconnect . crossOrigin = 'anonymous' ; // match fetch cors,credentials:omit
34- preconnect . href = origin ;
32+ preconnect . href = dataset . origin ;
3533 document . head . append ( preconnect ) ;
3634 }
3735 if ( ! state . open && state . hits . length ) {
@@ -92,7 +90,7 @@ globalThis.tsminibar = function tsminibar (form) {
9290
9391 function connect ( ) {
9492 document . addEventListener ( 'click' , onDocClick ) ;
95- if ( form . dataset . slash !== 'false' ) {
93+ if ( dataset . slash !== 'false' ) {
9694 document . addEventListener ( 'keydown' , onDocSlash ) ;
9795 form . classList . add ( 'tsmb-form--slash' ) ;
9896 }
@@ -124,9 +122,10 @@ globalThis.tsminibar = function tsminibar (form) {
124122 }
125123 searchParams . set ( 'q' , query ) ;
126124 const resp = await fetch (
127- `${ origin } /collections/${ collection } /documents/search?` + searchParams ,
125+ `${ dataset . origin } /collections/${ dataset . collection } /documents/search?` + searchParams ,
128126 { mode : 'cors' , credentials : 'omit' , method : 'GET' }
129127 ) ;
128+ const group = ! ! dataset . group ;
130129 const data = await resp . json ( ) ;
131130 hits = data ?. grouped_hits ?. map ( ghit => {
132131 const hit = ghit . hits [ 0 ] ;
@@ -151,23 +150,22 @@ globalThis.tsminibar = function tsminibar (form) {
151150 function render ( ) {
152151 listbox . hidden = ! state . open ;
153152 form . classList . toggle ( 'tsmb-form--open' , state . open ) ;
154- listbox . innerHTML = ( state . hits . map ( ( hit , i ) => `<div role="option"${ i === state . cursor ? ' aria-selected="true"' : '' } >${ hit . lvl0 ? `<div class="tsmb-suggestion_group">${ hit . lvl0 } </div>` : '' } <a href="${ hit . url } " tabindex="-1"><div class="tsmb-suggestion_title">${ hit . title } </div><div class="tsmb-suggestion_content">${ hit . content } </div></a></div>` ) . join ( '' ) || `<div class="tsmb-empty">${ noResults . replace ( '{}' , escape ( state . query ) ) } </div>` ) + ( form . dataset . foot ? '<a href="https://typesense.org" class="tsmb-foot" title="Search by Typesense"></a>' : '' ) ;
153+ listbox . innerHTML = ( state . hits . map ( ( hit , i ) => `<div role="option"${ i === state . cursor ? ' aria-selected="true"' : '' } >${ hit . lvl0 ? `<div class="tsmb-suggestion_group">${ hit . lvl0 } </div>` : '' } <a href="${ hit . url } " tabindex="-1"><div class="tsmb-suggestion_title">${ hit . title } </div><div class="tsmb-suggestion_content">${ hit . content } </div></a></div>` ) . join ( '' ) || `<div class="tsmb-empty">${ noResults . replace ( '{}' , escape ( state . query ) ) } </div>` ) + ( dataset . foot ? '<a href="https://typesense.org" class="tsmb-foot" title="Search by Typesense"></a>' : '' ) ;
155154 }
156155
157156 function moveCursor ( offset ) {
158157 state . cursor += offset ;
159- // -1 refers to input field
160158 if ( state . cursor >= state . hits . length ) state . cursor = - 1 ;
161159 if ( state . cursor < - 1 ) state . cursor = state . hits . length - 1 ;
162160 render ( ) ;
163161 }
164162
165163 return { form, connect, disconnect } ;
166164} ;
167- document . querySelectorAll ( '.tsmb-form[data-origin]' ) . forEach ( tsminibar ) ;
168165window . customElements . define ( 'typesense-minibar' , class extends HTMLElement {
169166 connectedCallback ( ) {
170167 const form = this . querySelector ( 'form' ) ;
171- if ( form ) tsminibar ( form ) ;
168+ if ( form && this . dataset . origin ) tsminibar ( form , this . dataset ) ;
172169 }
173170} ) ;
171+ document . querySelectorAll ( '.tsmb-form[data-origin]' ) . forEach ( form => tsminibar ( form ) ) ;
0 commit comments