diff --git a/assets/search/js/form.ts b/assets/search/js/form.ts index 4cda068cce1..77626b41ddb 100644 --- a/assets/search/js/form.ts +++ b/assets/search/js/form.ts @@ -35,10 +35,13 @@ export default class Form { render() { return `
-
- ${params.icons['search']} - ${params.icons['spinner']} - +
+
+ ${params.icons['search']} + ${params.icons['spinner']} + + +
@@ -200,6 +203,31 @@ export default class Form { this.submit() }) }) + + this.ele.addEventListener('reset', (e) => { + const lang = document.documentElement.getAttribute('lang') ?? '' + this.language?.querySelectorAll('.search-dropdown-item').forEach((ele) => { + if (ele.getAttribute('data-value') !== lang) { + ele.classList.remove('active') + } else { + this.language.classList.add('active') + this.language.setAttribute('data-value', lang) + this.language.querySelector('.search-dropdown-label').innerHTML = ele.innerHTML + ele.classList.add('active') + } + }) + for (let name of ['years', 'taxonomies']) { + this.ele.querySelectorAll(`.search-${name}.active`).forEach((ele) => { + ele.querySelectorAll('.search-dropdown-item.active').forEach((item) => { + item.classList.remove('active') + }) + ele.classList.remove('active') + }) + } + setTimeout(() => { + this.submit() + }, 1) + }) this.spinner.show() engine.init().then(() => { @@ -245,6 +273,14 @@ export default class Form { } } + private showResetBtn() { + this.ele.querySelector('button[type="reset"]')?.classList.remove('disabled') + } + + private hideResetBtn() { + this.ele.querySelector('button[type="reset"]')?.classList.add('disabled') + } + private submit() { const query = this.getQuery() this.updatePage(query) @@ -255,11 +291,13 @@ export default class Form { const taxonomies = this.getTaxonomies() if (query === '' && Object.values(taxonomies).filter((item) => item.length > 0).length == 0) { + this.hideResetBtn() this.renderer.clean() this.renderer.renderHistories() return } + this.showResetBtn() this.spinner.show() engine.search(query, sorting, lang, years, taxonomies).then(({ results, time }) => { this.renderer.render(query, results, time) diff --git a/assets/search/scss/form/index.scss b/assets/search/scss/form/index.scss index cb7e184dcc5..64a6aff9c53 100644 --- a/assets/search/scss/form/index.scss +++ b/assets/search/scss/form/index.scss @@ -4,6 +4,10 @@ margin-bottom: 0.5rem; } +.search-input-group-wrapper { + display: flex; +} + .search-input-group { display: flex; flex: 1; @@ -11,7 +15,8 @@ } .search-input-icon, -.search-spinner { +.search-spinner, +.search-reset-button { background: inherit; border: none; color: var(--search-primary); @@ -22,13 +27,17 @@ justify-content: center; align-items: center; padding: 0 0.5rem; - left: 0; &.disabled { display: none; } } +.search-input-icon, +.search-spinner { + left: 0; +} + .search-spinner { svg { background: var(--search-bg); @@ -49,15 +58,20 @@ } } +.search-reset-button { + border: 0; + background: transparent; + right: 0; +} + .search-input { border-radius: 0.25rem; border: 1px solid var(--search-primary); - padding: 0.75rem 0.5rem 0.75rem 2.25rem; + padding: 0.75rem 1.5rem 0.75rem 2.25rem; flex: 1; &::-webkit-search-cancel-button { - cursor: pointer; - padding: 0.125rem; + display: none; } } diff --git a/layouts/partials/search/assets/js-resource.html b/layouts/partials/search/assets/js-resource.html index ceb5f3a1287..24998aaede6 100644 --- a/layouts/partials/search/assets/js-resource.html +++ b/layouts/partials/search/assets/js-resource.html @@ -65,6 +65,7 @@ "expand" (partial "icons/icon" (dict "vendor" "bootstrap" "name" "chevron-expand" "size" "1em")) "year" (partial "icons/icon" (dict "vendor" "bootstrap" "name" "calendar-check" "size" "1em")) "taxonomies" (partial "icons/icon" (dict "vendor" "bootstrap" "name" "tags" "size" "1em")) + "reset" (partial "icons/icon" (dict "vendor" "bootstrap" "name" "x" "size" "1.5em")) }} {{/* Include the following icons when necessary. */}} {{- if default true .Site.Params.search.index_all_pages }}