Improved search feature

This commit is contained in:
aglkm
2024-05-24 22:33:26 +03:00
parent 7b360d8a10
commit cc1888343c
4 changed files with 65 additions and 25 deletions

View File

@@ -140,28 +140,30 @@ async fn kernel(excess: &str) -> Template {
// Handling search request.
#[post("/search", data="<input>")]
fn search(input: &str) -> Either<Template, Redirect> {
//Check input length
if input.len() > "search=".len() {
// Trim 'search=' from the request data
let input = &input[7..].to_lowercase();
// Using Option<&str> to match '/search' query without input params.
// https://github.com/rwf2/Rocket/issues/608
#[get("/search?<input>")]
fn search(input: Option<&str>) -> Either<Template, Redirect> {
// Unwrap Option and forward to Search page if no parameters
let input = match input {
Some(value) => value,
None => return Either::Left(Template::render("search", context! { route: "search", })),
};
// Check for valid chars
if input.chars().all(|x| (x >= 'a' && x <= 'f') || (x >= '0' && x <= '9')) == true {
// Check for valid chars
if input.chars().all(|x| (x >= 'a' && x <= 'f') || (x >= '0' && x <= '9')) == true {
// Block number
if input.chars().all(char::is_numeric) == true {
return Either::Right(Redirect::to(uri!(block_details_by_height(input))));
// Block number
if input.chars().all(char::is_numeric) == true {
return Either::Right(Redirect::to(uri!(block_details_by_height(input))));
// Block hash
} else if input.len() == 64 {
return Either::Right(Redirect::to(uri!(block_header_by_hash(input))));
// Block hash
} else if input.len() == 64 {
return Either::Right(Redirect::to(uri!(block_header_by_hash(input))));
// Kernel
} else if input.len() == 66 {
return Either::Right(Redirect::to(uri!(kernel(input))));
}
// Kernel
} else if input.len() == 66 {
return Either::Right(Redirect::to(uri!(kernel(input))));
}
}
@@ -255,9 +257,9 @@ fn sync_status(dashboard: &State<Arc<Mutex<Dashboard>>>) -> String {
if data.sync == "no_sync" {
"Synced".to_string()
} else {
format!("Syncing ({})
format!("Syncing
<div class='spinner-grow spinner-grow-sm' role='status'>
<span class='visually-hidden'>Syncing...</span></div>", data.sync)
<span class='visually-hidden'>Syncing...</span></div>")
}
}

View File

@@ -61,8 +61,8 @@
<div class="row">
<div class="col-12">
<form class="input-group my-3" role="search" action="/search" method="POST" autocomplete="off">
<input class="form-control ms-0 me-2" type="search" placeholder="Explore Grin Network" aria-label="Search" name="search" required>
<form class="input-group my-3" role="search" action="/search" method="GET" autocomplete="off">
<input class="form-control ms-0 me-2" type="search" placeholder="Explore Grin Network" aria-label="Search" name="input" required>
<button class="btn btn-outline-secondary btn-search" type="submit">
<i class="bi bi-search"></i>
</button>
@@ -211,8 +211,11 @@
</div>
<div class="row mb-2">
<div class="col d-flex justify-content-center">
<a class="text-decoration-none" href="https://github.com/aglkm/grin-explorer">
<span style="color:grey">v.0.1.4 <i class="bi bi-github"></i></span>
<a class="text-decoration-none me-2" href="https://github.com/aglkm/grin-explorer">
<span style="color:grey"><i class="bi bi-github me-1"></i>v.0.1.4</span>
</a>
<a class="text-decoration-none" href="/search">
<span style="color:grey"><i class="bi bi-search me-1"></i>search</span>
</a>
</div>
</div>

View File

@@ -7,7 +7,10 @@
<div class="card">
<div class="card-body">
<h4>No results found.</h4><br>
Explorer supports requests by block number, block hash or kernel.<br>
<div class="value-text mb-2">Supported search inputs:</div>
<div class="value-text"><i class="bi bi-dot"></i> block number</div>
<div class="value-text"><i class="bi bi-dot"></i> block hash</div>
<div class="value-text"><i class="bi bi-dot"></i> kernel</div>
</div>
</div>

View File

@@ -0,0 +1,32 @@
{% extends "base" %}
{% block content %}
<code>
<div class="card">
<div class="card-body mx-2 mt-2 mb-3">
<div class="d-flex justify-content-start mb-1">
<i class="bi bi-box me-2"></i>
<div class="value-text text-end" hx-get="/rpc/block/latest" hx-trigger="load, every 10s"></div>
</div>
<form class="input-group" role="search" action="/search" method="GET" autocomplete="off">
<input class="form-control text-center ms-0 me-2" type="search" placeholder="Explore Grin Network" aria-label="Search" name="input" required>
<button class="btn btn-outline-secondary btn-search" type="submit">
<i class="bi bi-search"></i>
</button>
</form>
<br><br>
<div class="value-text mb-2">Supported search inputs:</div>
<div class="value-text"><i class="bi bi-dot"></i> block number</div>
<div class="value-text"><i class="bi bi-dot"></i> block hash</div>
<div class="value-text"><i class="bi bi-dot"></i> kernel</div>
</div>
</div>
<br>
</code>
{% endblock %}