/** * Layout-2 navbar search — zibll remote-box + live suggestions. * Loads aksrt_menu_search panel (history/hot/posts), then suggests on input. */ (function () { "use strict"; var HISTORY_KEY = "aksrt-mobile-search-history"; function ajaxUrl() { return (window.aksrtData && aksrtData.ajaxUrl) || ""; } function nonce() { return (window.aksrtData && aksrtData.nonce) || ""; } function readLocalHistory() { try { var raw = localStorage.getItem(HISTORY_KEY); var list = raw ? JSON.parse(raw) : []; if (!Array.isArray(list)) return []; return list .map(function (it) { if (typeof it === "string") return it; return it && it.keyword ? String(it.keyword) : ""; }) .filter(Boolean) .slice(0, 10); } catch (e) { return []; } } function writeLocalHistory(keywords) { try { var items = (keywords || []).slice(0, 10).map(function (k) { return { keyword: k, type: "post" }; }); localStorage.setItem(HISTORY_KEY, JSON.stringify(items)); } catch (e) {} } function loadRemote(box) { if (!box || box.getAttribute("data-loaded") === "1") return; var url = box.getAttribute("remote-box") || box.getAttribute("data-url"); if (!url) return; box.setAttribute("data-loaded", "1"); var sep = url.indexOf("?") >= 0 ? "&" : "?"; if (nonce()) { url = url + sep + "nonce=" + encodeURIComponent(nonce()); } fetch(url, { credentials: "same-origin" }) .then(function (r) { return r.text(); }) .then(function (html) { if (!html || html === "0") { box.innerHTML = ""; return; } box.outerHTML = html; var form = document.querySelector('form[data-aksrt-search-form="inline"]'); if (form) enhancePanel(form); }) .catch(function () { box.removeAttribute("data-loaded"); }); } function enhancePanel(form) { var group = form.querySelector(".form-group"); var panel = form.querySelector(".navbar-inline-search-panel"); var input = form.querySelector(".search-input"); if (!group || !input) return; // Merge guest local history into panel list. var histList = form.querySelector(".aksrt-menu-search-history__list"); if (histList && !(window.aksrtData && aksrtData.isLoggedIn)) { var local = readLocalHistory(); if (local.length) { histList.innerHTML = local .map(function (kw) { return ( '' + kw + " " ); }) .join(""); } } var clearBtn = form.querySelector("[data-aksrt-clear-menu-history]"); if (clearBtn && !clearBtn._bound) { clearBtn._bound = 1; clearBtn.addEventListener("click", function (e) { e.preventDefault(); writeLocalHistory([]); if (histList) { histList.innerHTML = '暂无历史'; } }); } var suggestMount = form.querySelector("[data-aksrt-menu-suggest]"); var timer = null; var searchConfig = (window.aksrtData && aksrtData.search) || {}; function typeValue() { var t = form.querySelector('input[name="aksrt_search_type"]'); return (t && t.value) || searchConfig.defaultType || "post"; } function requestSuggest(q) { if (!suggestMount || !ajaxUrl() || q.length < 2) { if (suggestMount) { suggestMount.hidden = true; suggestMount.innerHTML = ""; } return; } var xhr = new XMLHttpRequest(); xhr.open("POST", ajaxUrl(), true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); xhr.onload = function () { if (xhr.status < 200 || xhr.status >= 300) return; try { var json = JSON.parse(xhr.responseText); var items = (json.success && json.data && json.data.items) || []; if (!items.length) { suggestMount.hidden = true; suggestMount.innerHTML = ""; return; } var html = '