2024-08-28 20:29:34 +02:00
// Copyright (c) 2024 Julian Müller (ChaoticByte)
2024-08-28 19:49:23 +02:00
( ( ) => {
let searchBox = document . getElementById ( "search-box" ) ;
let searchResults = document . getElementById ( "search-results" ) ;
let toc = document . getElementById ( "toc" ) ;
/ * *
* @ param { string } results
* /
2025-07-11 23:20:27 +02:00
function showSearchResults ( results ) {
searchResults . innerHTML = "" ;
2024-08-28 19:49:23 +02:00
if ( results . length > 0 ) {
2025-07-11 23:20:27 +02:00
results . forEach ( r => {
2024-08-28 19:49:23 +02:00
let resultElem = document . createElement ( "div" ) ;
let resultAnchor = document . createElement ( "a" ) ;
2025-07-11 23:20:27 +02:00
resultAnchor . href = r [ 0 ] ; // we should be at /, so this is right
resultAnchor . innerText = r [ 1 ] ;
2024-08-28 19:49:23 +02:00
resultElem . appendChild ( resultAnchor ) ;
searchResults . appendChild ( resultElem ) ;
2025-07-11 23:20:27 +02:00
} ) ;
2024-08-28 19:49:23 +02:00
}
2025-07-11 23:20:27 +02:00
toc . classList . add ( "hidden" ) ;
searchResults . classList . remove ( "hidden" ) ;
}
function hideSearchResults ( ) {
toc . classList . remove ( "hidden" ) ;
searchResults . classList . add ( "hidden" ) ;
2024-08-28 19:49:23 +02:00
}
async function handleSearchInput ( ) {
// get search query
const query = searchBox . value ;
if ( query == "" ) {
2025-07-11 23:20:27 +02:00
hideSearchResults ( ) ;
2024-08-28 19:49:23 +02:00
return
}
// make request
const response = await fetch ( "/search/" + query ) ;
if ( ! response . ok ) {
2024-08-28 19:56:10 +02:00
throw new Error ( ` Search API returned status code ${ response . status } ` ) ;
2024-08-28 19:49:23 +02:00
}
2025-07-11 23:20:27 +02:00
let results _raw = await response . text ( ) ;
let results = [ ] ;
if ( results _raw . length > 0 ) {
results _raw . split ( '\n' ) . forEach ( r => {
results . push ( r . split ( "|" , 2 ) ) ;
} ) ;
}
showSearchResults ( results ) ;
2024-08-28 19:49:23 +02:00
}
searchBox . addEventListener ( "input" , handleSearchInput ) ;
} ) ( ) ;