UNPKG

basb-cli

Version:
3 lines (2 loc) 3.81 kB
import{e as t,i as s,p as e,t as i}from"../index.min.js";import n from"../libs/flexsearch/flexsearch.bundle.module.min.js";import{l as r,a}from"./echarts.min.js";import{t as o}from"./throttle.min.js";import"../libs/resolve-pathname/index.js";class h extends HTMLElement{constructor(){super()}}customElements.define("fullscreen-mask",h);class l extends HTMLElement{constructor(){super();const s=new h;s.addEventListener("click",(()=>this.toggle(!1)));const e=t("div","",{class:"container"});this.classList.add("fullscreen"),this.mask=s,this.container=e,this.appendChild(s),this.appendChild(e)}appendToContainer(t){this.container.appendChild(t)}toggle(t){this.mask.classList.toggle("show",t),this.container.classList.toggle("show",t),this.toggleCallback(t)}toggleCallback(t){}}function c(t){const s=new n.Index({preset:"memory",optimize:!0,encode:i});if(void 0!==t)for(const[e,i]of Object.entries(t))s.import(e,i);return s}customElements.define("fullscreen-view",l);class d{pageList=[];maximum=0;current=0;#t(t,s){const{index:e,idMap:i}=this.pageList[t];return e.search(s).map((t=>i[t]))}async#s(t){const s=await fetch(`./.index/search-index_${t}.json`),e=await s.json(),{idMap:i,maxId:n,...r}=e;this.maximum=n,this.pageList.push({idMap:i,index:c(r)})}get hasMorePage(){return this.current<this.maximum}async search(t){const s=this.current;return void 0===this.pageList[s]&&await this.#s(s),this.#t(s,t)}async searchNext(t){return this.current+=1,await this.search(t)}}customElements.define("search-box",class extends l{pageController=new d;resultCount=0;constructor(){super(),s("./dist/chunks/searchBox.min.css"),this.input=t("input","",{type:"text",placeholder:r("搜索","Search")}),this.searchBtn=t("button",t("img","",{src:"./dist/imgs/search.svg"}),{class:"icon-btn search-btn",title:r("搜索图标","Search Icon")});const e=t("div",[this.input,this.searchBtn],{class:"input-group"}),i=t("p",r("无结果","No search result"),{class:"no-result"});this.loadMoreBtn=t("button",r("加载更多","Load More"),{class:"icon-btn loadmore-btn"}),this.resultList=t("ul",""),this.resultContainer=t("div",[this.resultList,i,this.loadMoreBtn],{class:"result-container"}),this.appendToContainer(e),this.appendToContainer(this.resultContainer),this.#e(),this.toggleCallback(!1)}toggleCallback(t){const s=[this.input,this.searchBtn,this.loadMoreBtn,...this.resultList.children],e=t?0:-1;for(const t of s)t.tabIndex=e}clear(){this.resultCount=0,this.pageController.current=0,this.resultList.innerHTML="",this.resultContainer.classList.remove("show")}#i(s){const e=document.createDocumentFragment();this.resultCount+=s.length,s.map((s=>t("li",t("span",s,{class:"underline-target"}),{class:"underline-through",tabindex:0}))).forEach((t=>e.appendChild(t))),this.resultList.appendChild(e),this.resultContainer.classList.add("show"),this.loadMoreBtn.disabled=!1,this.loadMoreBtn.classList.toggle("show",this.pageController.hasMorePage),this.resultCount<10&&this.pageController.hasMorePage&&setTimeout((()=>this.#n()),100)}#n(){const t=this.input.value;this.loadMoreBtn.disabled=!0,this.pageController.searchNext(t).then(this.#i.bind(this))}#e(){a.on("searchbox-show",(()=>{this.toggle(!0),this.container.addEventListener("transitionend",(()=>this.input.focus()),{once:!0})})),this.resultList.addEventListener("click",(t=>{const s=t.target;if(s===this.resultList)return;const i="static/"+s.textContent;e.jumpTo(i),this.toggle(!1)})),this.input.addEventListener("input",this.clear.bind(this));const t=o((()=>{this.clear();const t=this.input.value;this.pageController.search(t).then(this.#i.bind(this))}),500);this.searchBtn.addEventListener("click",t),this.input.addEventListener("keydown",(s=>{"Enter"===s.key&&t()})),this.loadMoreBtn.addEventListener("click",this.#n.bind(this))}}); //# sourceMappingURL=searchBox.min.js.map