Spaces:
Runtime error
Runtime error
//! A module that handles the view for the search page in the `websurfx` frontend. | |
use maud::{html, Markup, PreEscaped}; | |
use crate::{ | |
models::aggregation_models::SearchResults, | |
templates::partials::{footer::footer, header::header, search_bar::search_bar}, | |
}; | |
/// A function that handles the html code for the search page view in the search engine frontend. | |
/// | |
/// # Arguments | |
/// | |
/// * `colorscheme` - It takes the colorscheme name as an argument. | |
/// * `theme` - It takes the theme name as an argument. | |
/// * `query` - It takes the current search query provided by the user as an argument. | |
/// * `search_results` - It takes the aggregated search results as an argument. | |
/// | |
/// # Returns | |
/// | |
/// It returns the compiled html markup code as a result. | |
pub fn search( | |
colorscheme: &str, | |
theme: &str, | |
query: &str, | |
search_results: &SearchResults, | |
) -> Markup { | |
html!( | |
(header(colorscheme, theme)) | |
main class="results"{ | |
(search_bar(&search_results.engine_errors_info, search_results.safe_search_level, query)) | |
.results_aggregated{ | |
@if !search_results.results.is_empty() { | |
@for result in search_results.results.iter(){ | |
.result { | |
h1{a href=(result.url){(PreEscaped(&result.title))}} | |
small{(result.url)} | |
p{(PreEscaped(&result.description))} | |
.upstream_engines{ | |
@for name in result.clone().engine{ | |
span{(name)} | |
} | |
} | |
} | |
} | |
} | |
@else if search_results.disallowed{ | |
.result_disallowed{ | |
.description{ | |
p{ | |
"Your search - "{span class="user_query"{(query)}}" - | |
has been disallowed." | |
} | |
p class="description_paragraph"{"Dear user,"} | |
p class="description_paragraph"{ | |
"The query - "{span class="user_query"{(query)}}" - has | |
been blacklisted via server configuration and hence disallowed by the | |
server. Henceforth no results could be displayed for your query." | |
} | |
} | |
img src="./images/barricade.png" alt="Image of a Barricade"; | |
} | |
} | |
@else if search_results.filtered { | |
.result_filtered{ | |
.description{ | |
p{ | |
"Your search - "{span class="user_query"{(query)}}" - | |
has been filtered." | |
} | |
p class="description_paragraph"{"Dear user,"} | |
p class="description_paragraph"{ | |
"All the search results contain results that has been configured to be | |
filtered out via server configuration and henceforth has been | |
completely filtered out." | |
} | |
} | |
img src="./images/filter.png" alt="Image of a paper inside a funnel"; | |
} | |
} | |
@else if search_results.no_engines_selected { | |
.result_engine_not_selected{ | |
.description{ | |
p{ | |
"No results could be fetched for your search '{span class="user_query"{(query)}}'." | |
} | |
p class="description_paragraph"{"Dear user,"} | |
p class="description_paragraph"{ | |
"No results could be retrieved from the upstream search engines as no | |
upstream search engines were selected from the settings page." | |
} | |
} | |
img src="./images/no_selection.png" alt="Image of a white cross inside a red circle"; | |
} | |
} | |
@else { | |
.result_not_found { | |
p{"Your search - "{(query)}" - did not match any documents."} | |
p class="suggestions"{"Suggestions:"} | |
ul{ | |
li{"Make sure that all words are spelled correctly."} | |
li{"Try different keywords."} | |
li{"Try more general keywords."} | |
} | |
img src="./images/no_results.gif" alt="Man fishing gif"; | |
} | |
} | |
} | |
.page_navigation { | |
button type="button" onclick="navigate_backward()"{ | |
(PreEscaped("←")) "previous" | |
} | |
button type="button" onclick="navigate_forward()"{"next" (PreEscaped("→"))} | |
} | |
} | |
script src="static/index.js"{} | |
script src="static/search_area_options.js"{} | |
script src="static/pagination.js"{} | |
script src="static/error_box.js"{} | |
(footer()) | |
) | |
} | |