Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/CaiJimmy/hugo-theme-stack.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/assets/ts
diff options
context:
space:
mode:
authorJimmy Cai <jimmehcai@gmail.com>2020-10-04 16:53:27 +0300
committerJimmy Cai <jimmehcai@gmail.com>2020-10-04 16:53:27 +0300
commit84a15e1604c96b07d74ce3ce34ffece88189b619 (patch)
tree12700ff442489b7c6171d31d2e7aa2bbf16512e7 /assets/ts
parent8aeb562bb33aa040ba9318aa1b3aefb58045abad (diff)
feat(search): return results at typing
Diffstat (limited to 'assets/ts')
-rw-r--r--assets/ts/search.tsx22
1 files changed, 16 insertions, 6 deletions
diff --git a/assets/ts/search.tsx b/assets/ts/search.tsx
index 272e5e2..46da04f 100644
--- a/assets/ts/search.tsx
+++ b/assets/ts/search.tsx
@@ -63,7 +63,8 @@ const tagsToReplace = {
'&': '&amp;',
'<': '&lt;',
'>': '&gt;',
- '"': '&quot;'
+ '"': '&quot;',
+ '…': '&hellip;'
};
function replaceTag(tag) {
@@ -84,7 +85,7 @@ async function getData() {
return data;
}
-function updateQueryString(keywords: string) {
+function updateQueryString(keywords: string, replaceState = false) {
const pageURL = new URL(window.location.toString());
if (keywords === '') {
@@ -94,7 +95,12 @@ function updateQueryString(keywords: string) {
pageURL.searchParams.set('keyword', keywords);
}
- window.history.pushState('', '', pageURL.toString());
+ if (replaceState) {
+ window.history.replaceState('', '', pageURL.toString());
+ }
+ else {
+ window.history.pushState('', '', pageURL.toString());
+ }
}
function bindQueryStringChange() {
@@ -118,11 +124,12 @@ function handleQueryString() {
function bindSearchForm() {
let lastSearch = '';
- searchForm.addEventListener('submit', async (e) => {
+
+ const eventHandler = (e) => {
e.preventDefault();
const keywords = searchInput.value;
- updateQueryString(keywords);
+ updateQueryString(keywords, true);
if (keywords === '') {
return clear();
@@ -132,7 +139,10 @@ function bindSearchForm() {
lastSearch = keywords;
doSearch(keywords.split(' '));
- })
+ }
+
+ searchInput.addEventListener('input', eventHandler);
+ searchInput.addEventListener('compositionend', eventHandler);
}
function clear() {