Align search experience with settings
This commit is contained in:
@@ -49,6 +49,9 @@
|
||||
} else {
|
||||
url.searchParams.delete("aksrt_category");
|
||||
}
|
||||
if (url.searchParams.get("aksrt_search_type") && url.searchParams.get("aksrt_search_type") !== "post") {
|
||||
url.searchParams.delete("aksrt_category");
|
||||
}
|
||||
url.searchParams.delete("paged");
|
||||
window.location.href = url.toString();
|
||||
});
|
||||
|
||||
+66
-44
@@ -5,8 +5,6 @@
|
||||
"use strict";
|
||||
|
||||
function initSearchPanel() {
|
||||
var btn = document.getElementById("search-toggle");
|
||||
var panel = document.getElementById("nav-search-panel");
|
||||
var mobileOverlay = document.getElementById("tabbar-search-overlay");
|
||||
var mobileInput = document.getElementById("tabbar-search-input");
|
||||
var mobileClose = document.getElementById("tabbar-search-close");
|
||||
@@ -18,7 +16,8 @@
|
||||
var historyClear = document.getElementById("tabbar-search-history-clear");
|
||||
var suggestionsWrap = document.getElementById("tabbar-search-suggestions");
|
||||
var suggestionsSection = document.getElementById("tabbar-search-suggestions-section");
|
||||
if (!btn || !panel) return;
|
||||
var searchForms = Array.prototype.slice.call(document.querySelectorAll("[data-aksrt-search-form]"));
|
||||
if (!searchForms.length && !mobileForm) return;
|
||||
var HISTORY_KEY = "aksrt-mobile-search-history";
|
||||
var suggestTimer = null;
|
||||
var searchConfig = (window.aksrtData && aksrtData.search) || {};
|
||||
@@ -32,20 +31,66 @@
|
||||
suggestionsSection.hidden = true;
|
||||
}
|
||||
|
||||
function getDesktopSearchType() {
|
||||
if (!searchForms.length) return searchConfig.defaultType || "post";
|
||||
var input = searchForms[0].querySelector('input[name="aksrt_search_type"]');
|
||||
var value = input ? (input.value || "") : "";
|
||||
return value || searchConfig.defaultType || "post";
|
||||
}
|
||||
|
||||
function getDesktopCategory() {
|
||||
if (!searchForms.length) return "0";
|
||||
var input = searchForms[0].querySelector('input[name="aksrt_category"]');
|
||||
return input ? (input.value || "0") : "0";
|
||||
}
|
||||
|
||||
function syncSearchForms(type, category) {
|
||||
searchForms.forEach(function (form) {
|
||||
var typeInput = form.querySelector('input[name="aksrt_search_type"]');
|
||||
if (typeInput) {
|
||||
typeInput.value = type || searchConfig.defaultType || "post";
|
||||
}
|
||||
var categoryInput = form.querySelector('input[name="aksrt_category"]');
|
||||
if (categoryInput) {
|
||||
if ((type || searchConfig.defaultType || "post") === "post" && category && category !== "0") {
|
||||
categoryInput.value = category;
|
||||
} else {
|
||||
categoryInput.value = "";
|
||||
}
|
||||
}
|
||||
form.querySelectorAll("[data-search-type]").forEach(function (button) {
|
||||
button.classList.toggle("is-active", button.getAttribute("data-search-type") === (type || searchConfig.defaultType || "post"));
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function syncCategorySelectors(type, category) {
|
||||
document.querySelectorAll("[data-search-category-select]").forEach(function (select) {
|
||||
select.value = category && category !== "" ? category : "0";
|
||||
select.disabled = (type || searchConfig.defaultType || "post") !== "post";
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function getSearchType() {
|
||||
return mobileTypeInput ? (mobileTypeInput.value || "post") : "post";
|
||||
if (mobileTypeInput) {
|
||||
return mobileTypeInput.value || getDesktopSearchType();
|
||||
}
|
||||
return getDesktopSearchType();
|
||||
}
|
||||
|
||||
function setSearchType(type) {
|
||||
if (!mobileTypeInput) return;
|
||||
mobileTypeInput.value = type;
|
||||
var nextType = type || searchConfig.defaultType || getDesktopSearchType();
|
||||
if (mobileTypeInput) {
|
||||
mobileTypeInput.value = nextType;
|
||||
}
|
||||
mobileTypeButtons.forEach(function (button) {
|
||||
button.classList.toggle("is-active", button.getAttribute("data-search-type") === type);
|
||||
button.classList.toggle("is-active", button.getAttribute("data-search-type") === nextType);
|
||||
});
|
||||
syncSearchForms(nextType, getDesktopCategory());
|
||||
syncCategorySelectors(nextType, getDesktopCategory());
|
||||
requestSuggestions();
|
||||
}
|
||||
|
||||
function readHistory() {
|
||||
if (!historyEnabled) return [];
|
||||
if (aksrtData.isLoggedIn) return [];
|
||||
try {
|
||||
@@ -218,34 +263,10 @@
|
||||
document.body.classList.remove("tabbar-search-open");
|
||||
if (suggestionsSection) suggestionsSection.hidden = true;
|
||||
}
|
||||
btn.setAttribute("aria-expanded", open ? "true" : "false");
|
||||
return;
|
||||
}
|
||||
|
||||
panel.classList.toggle("is-open", open);
|
||||
btn.setAttribute("aria-expanded", open ? "true" : "false");
|
||||
if (open) {
|
||||
var input = panel.querySelector('input[type="search"]');
|
||||
if (input) input.focus();
|
||||
}
|
||||
}
|
||||
|
||||
btn.addEventListener("click", function (e) {
|
||||
e.stopPropagation();
|
||||
if (isMobileSearchMode()) {
|
||||
setOpen(!mobileOverlay || mobileOverlay.hasAttribute("hidden"));
|
||||
return;
|
||||
}
|
||||
setOpen(!panel.classList.contains("is-open"));
|
||||
});
|
||||
|
||||
document.addEventListener("click", function (e) {
|
||||
if (isMobileSearchMode()) return;
|
||||
if (!panel.classList.contains("is-open")) return;
|
||||
if (panel.contains(e.target) || btn.contains(e.target)) return;
|
||||
setOpen(false);
|
||||
});
|
||||
|
||||
if (mobileOverlay) {
|
||||
mobileOverlay.addEventListener("click", function (e) {
|
||||
if (e.target === mobileOverlay) setOpen(false);
|
||||
@@ -280,6 +301,14 @@
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll("[data-search-category-select]").forEach(function (select) {
|
||||
select.addEventListener("change", function () {
|
||||
var nextCategory = this.value || "0";
|
||||
syncSearchForms(getSearchType(), nextCategory);
|
||||
syncCategorySelectors(getSearchType(), nextCategory);
|
||||
});
|
||||
});
|
||||
|
||||
mobileTypeButtons.forEach(function (button) {
|
||||
button.addEventListener("click", function () {
|
||||
setSearchType(button.getAttribute("data-search-type") || "post");
|
||||
@@ -298,18 +327,20 @@
|
||||
});
|
||||
}
|
||||
|
||||
document.querySelectorAll("[data-aksrt-search-form]").forEach(function (form) {
|
||||
searchForms.forEach(function (form) {
|
||||
if (form === mobileForm) return;
|
||||
form.addEventListener("submit", function () {
|
||||
if (!historyEnabled) return;
|
||||
var input = form.querySelector('input[name="s"]');
|
||||
var typeInput = form.querySelector('input[name="aksrt_search_type"]');
|
||||
var keyword = input ? (input.value || "").trim() : "";
|
||||
var type = typeInput ? (typeInput.value || "post") : "post";
|
||||
var type = typeInput ? (typeInput.value || searchConfig.defaultType || "post") : (searchConfig.defaultType || "post");
|
||||
pushHistory(keyword, type);
|
||||
});
|
||||
});
|
||||
|
||||
syncSearchForms(getSearchType(), getDesktopCategory());
|
||||
syncCategorySelectors(getSearchType(), getDesktopCategory());
|
||||
setSearchType(getSearchType());
|
||||
if (historyEnabled && aksrtData.isLoggedIn) {
|
||||
requestHistorySync("get", null, function (items) {
|
||||
@@ -318,17 +349,8 @@
|
||||
}
|
||||
|
||||
document.addEventListener("keydown", function (e) {
|
||||
if ((e.metaKey || e.ctrlKey) && e.key.toLowerCase() === "k") {
|
||||
e.preventDefault();
|
||||
setOpen(true);
|
||||
}
|
||||
if (e.key === "Escape" && panel.classList.contains("is-open")) {
|
||||
setOpen(false);
|
||||
btn.focus();
|
||||
}
|
||||
if (e.key === "Escape" && isMobileSearchMode() && mobileOverlay && !mobileOverlay.hasAttribute("hidden")) {
|
||||
setOpen(false);
|
||||
btn.focus();
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user