mirror of https://github.com/ekimekim/wubloader
Search site
parent
27ea40e737
commit
fe2390d0a2
@ -0,0 +1,35 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Buscribe -- Search</title>
|
||||||
|
<link rel="stylesheet" href="style.css">
|
||||||
|
<script type="application/javascript" src="script.js"></script>
|
||||||
|
</head>
|
||||||
|
<body onload="onSiteLoad()">
|
||||||
|
|
||||||
|
<div id="search_tools">
|
||||||
|
<form>
|
||||||
|
<label for="search_text">Search</label> <input id="search_text" oninput="doSearch()" placeholder="Supports quotes, 'or' and -.">
|
||||||
|
<hr>
|
||||||
|
<label for="start_time">Start time</label> <input id="start_time" type="datetime-local">
|
||||||
|
<label for="end_time">End time</label> <input id="end_time" type="datetime-local">
|
||||||
|
<button id="search_button" onclick="doSearch()" type="button">Search</button>
|
||||||
|
<hr>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="results">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="help_box">
|
||||||
|
<hr>
|
||||||
|
<p>Start time and end time specify the time range.</p>
|
||||||
|
<p>Text search supports quotes ("word1 and word2") to search phrases with those words in order. The word "or" works
|
||||||
|
as an <em>or</em> operator. Dash "-" works as a <em>not</em> operator.</p>
|
||||||
|
<hr>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -0,0 +1,56 @@
|
|||||||
|
function onSiteLoad(e) {
|
||||||
|
|
||||||
|
document.getElementById("search_tools").addEventListener("keydown",
|
||||||
|
function (event) {
|
||||||
|
if (event.key === 'Enter') doSearch()
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function query(text, start_time, end_time) {
|
||||||
|
let query_string = ""
|
||||||
|
|
||||||
|
if (start_time !== "") {
|
||||||
|
query_string += `start_time=${start_time}`;
|
||||||
|
}
|
||||||
|
if (end_time !== "") {
|
||||||
|
query_string += `&end_time=${end_time}`;
|
||||||
|
}
|
||||||
|
if (text !== "") {
|
||||||
|
query_string += `&query=${text}`
|
||||||
|
}
|
||||||
|
|
||||||
|
fetch(`http://localhost:8005/buscribe/json?${query_string}`)
|
||||||
|
.then(response => response.json())
|
||||||
|
// .then(response => console.log(response.error()))
|
||||||
|
.then(fillResults)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function doSearch() {
|
||||||
|
query(
|
||||||
|
document.getElementById("search_text").value,
|
||||||
|
document.getElementById("start_time").value,
|
||||||
|
document.getElementById("end_time").value
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
function fillResults(results) {
|
||||||
|
const results_element = document.getElementById("results")
|
||||||
|
results_element.innerHTML = ""
|
||||||
|
|
||||||
|
for (const line of results) {
|
||||||
|
const line_div = document.createElement("div");
|
||||||
|
|
||||||
|
line_div.classList.add("line");
|
||||||
|
|
||||||
|
line_div.innerHTML = `
|
||||||
|
<div class="line_time">
|
||||||
|
<div class="line_start_bus_time">${line.start_bus_time}</div>
|
||||||
|
<div class="line_start_time">${line.start_time}</div>
|
||||||
|
</div>
|
||||||
|
<div class="line_text">${line.text}</div>
|
||||||
|
`;
|
||||||
|
|
||||||
|
results_element.append(line_div)
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,79 @@
|
|||||||
|
body {
|
||||||
|
color: aliceblue;
|
||||||
|
background: dimgray;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: inline-block;
|
||||||
|
font-family: sans-serif;
|
||||||
|
width: 5em;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=datetime-local] {
|
||||||
|
width: 13em;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
padding: 0.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#search_text {
|
||||||
|
width: 50em;
|
||||||
|
}
|
||||||
|
|
||||||
|
#help_box {
|
||||||
|
display: none;
|
||||||
|
position: fixed;
|
||||||
|
top: 1em;
|
||||||
|
right: 1em;
|
||||||
|
width: 20em;
|
||||||
|
float: right;
|
||||||
|
background: #fff;
|
||||||
|
padding: 1em;
|
||||||
|
color: #000;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
|
||||||
|
margin-bottom: 0.5em;
|
||||||
|
padding: 0.1em;
|
||||||
|
max-width: 50em;
|
||||||
|
|
||||||
|
.line_time {
|
||||||
|
|
||||||
|
text-align: right;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
|
||||||
|
flex-shrink: 0;
|
||||||
|
|
||||||
|
//padding-top: 0.15em;
|
||||||
|
|
||||||
|
.line_start_time {
|
||||||
|
color: lightgray;
|
||||||
|
font-family: monospace;
|
||||||
|
font-size: smaller;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line_start_bus_time {
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: small;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
margin-bottom: 0.2em;
|
||||||
|
height: 1.36em; // try to align the baselines
|
||||||
|
justify-content: flex-end;
|
||||||
|
align-content: flex-end;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.line_text {
|
||||||
|
display: flex;
|
||||||
|
margin-left: 0.5em;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue