import{o as a,c as w,r as Ue,a as se,b as ie,d as E,e as g,w as p,f as b,u as i,l as z,g as _,F as O,E as Ve,h as he,p as Ne,i as Te,j as Ie,k as B,m as ge,s as Y,n as G,t as X,q as _e,v as me,x as le,y as $e,z as J,A as K,B as Se,C as Le,D as Re,G as ce,V as Oe,H as Je,I as Z,J as Pe,K as ye,L as De,M as $,N as Ae,O as je,P as A,Q as fe,R as be,S as H,T as Ke,U as Me,W as He,X as Fe,Y as qe,Z as ze,_ as We,$ as Ge,a0 as Qe,a1 as Xe}from"./vendor-cfc7c64d.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))s(r);new MutationObserver(r=>{for(const n of r)if(n.type==="childList")for(const l of n.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&s(l)}).observe(document,{childList:!0,subtree:!0});function o(r){const n={};return r.integrity&&(n.integrity=r.integrity),r.referrerPolicy&&(n.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?n.credentials="include":r.crossOrigin==="anonymous"?n.credentials="omit":n.credentials="same-origin",n}function s(r){if(r.ep)return;r.ep=!0;const n=o(r);fetch(r.href,n)}})();const Ye="modulepreload",Ze=function(e,t){return new URL(e,t).href},ue={},ne=function(t,o,s){if(!o||o.length===0)return t();const r=document.getElementsByTagName("link");return Promise.all(o.map(n=>{if(n=Ze(n,s),n in ue)return;ue[n]=!0;const l=n.endsWith(".css"),k=l?'[rel="stylesheet"]':"";if(!!s)for(let C=r.length-1;C>=0;C--){const v=r[C];if(v.href===n&&(!l||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${n}"]${k}`))return;const S=document.createElement("link");if(S.rel=l?"stylesheet":Ye,l||(S.as="script",S.crossOrigin=""),S.href=n,document.head.appendChild(S),l)return new Promise((C,v)=>{S.addEventListener("load",C),S.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${n}`)))})})).then(()=>t()).catch(n=>{const l=new Event("vite:preloadError",{cancelable:!0});if(l.payload=n,window.dispatchEvent(l),!l.defaultPrevented)throw n})},P=(e,t)=>{const o=e.__vccOpts||e;for(const[s,r]of t)o[s]=r;return o},et={};function tt(e,t){const o=Ue("router-view");return a(),w(o)}const ot=P(et,[["render",tt]]),ke=[{path:"/",name:"shelf",component:()=>ne(()=>import("./BookShelf-c00a3d81.js"),["./BookShelf-c00a3d81.js","./vendor-cfc7c64d.js","./vendor-b73e16d8.css","./loading-ed807e01.js","./loading-c009631e.css","./BookShelf-a1d07211.css"],import.meta.url)},{path:"/chapter",name:"chapter",component:()=>ne(()=>import("./BookChapter-eef9836a.js"),["./BookChapter-eef9836a.js","./vendor-cfc7c64d.js","./vendor-b73e16d8.css","./loading-ed807e01.js","./loading-c009631e.css","./BookChapter-1c8277a9.css"],import.meta.url)}];se({history:ie(),routes:ke});const L=e=>(Ne("data-v-aee57c78"),e=e(),Te(),e),nt=L(()=>_("br",null,null,-1)),rt=L(()=>_("br",null,null,-1)),st=L(()=>_("br",null,null,-1)),it=L(()=>_("br",null,null,-1)),lt=L(()=>_("br",null,null,-1)),at={style:{"margin-top":"20px"}},ct=L(()=>_("code",null,"^$()[]{}.?+*|",-1)),ut=L(()=>_("br",null,null,-1)),dt=L(()=>_("code",null,"(?s)",-1)),pt=L(()=>_("br",null,null,-1)),ht=L(()=>_("code",null,"(?m)",-1)),gt=L(()=>_("br",null,null,-1)),_t=L(()=>_("code",null,"(?i)",-1)),mt=L(()=>_("br",null,null,-1)),St={__name:"SourceHelp",setup(e){return(t,o)=>{const s=Ve,r=he;return a(),E(O,null,[g(s,{icon:i(z),href:"https://alanskycn.gitee.io/teachme/",target:"_blank"},{default:p(()=>[b("书源制作教程")]),_:1},8,["icon"]),nt,g(s,{icon:i(z),href:"https://zhuanlan.zhihu.com/p/29436838",target:"_blank"},{default:p(()=>[b("xpath基础教程")]),_:1},8,["icon"]),rt,g(s,{icon:i(z),href:"https://zhuanlan.zhihu.com/p/32187820",target:"_blank"},{default:p(()=>[b("xpath高级教程")]),_:1},8,["icon"]),st,g(s,{icon:i(z),href:"https://www.w3cschool.cn/regex_rmjc",target:"_blank"},{default:p(()=>[b("正则表达式教程")]),_:1},8,["icon"]),it,g(s,{icon:i(z),href:"https://regexr-cn.com/",target:"_blank"},{default:p(()=>[b("正则表达式在线验证工具")]),_:1},8,["icon"]),lt,_("div",at,[_("span",null,[g(r,null,{default:p(()=>[ct,b(" 这些是Java正则特殊符号,匹配需转义")]),_:1})]),ut,_("span",null,[g(r,null,{default:p(()=>[dt,b(" 前缀表示跨行解析")]),_:1})]),pt,_("span",null,[g(r,null,{default:p(()=>[ht,b(" 前缀表示逐行匹配")]),_:1})]),gt,_("span",null,[g(r,null,{default:p(()=>[_t,b(" 前缀表示忽略大小写")]),_:1})]),mt])],64)}}},yt=P(St,[["__scopeId","data-v-aee57c78"]]),ft=1e3,U=Ie.create({baseURL:location.origin,timeout:120*ft}),{hostname:ve,port:we}=new URL(location.origin),bt=/source/i.test(location.href),kt=e=>{throw bt&&B({message:"后端错误,检查网络或者阅读app",type:"error"}),e};U.interceptors.response.use(e=>e,kt);const vt=()=>U.get("/getReadConfig"),wt=e=>U.post("/saveReadConfig",e),Ct=e=>U.post("/saveBookProgress",e),xt=e=>{e&&navigator.sendBeacon(`${location.origin}/saveBookProgress`,JSON.stringify(e))},Bt=()=>U.get("/getBookshelf"),Et=e=>U.get("/getChapterList?url="+encodeURIComponent(e)),Ut=(e,t)=>U.get("/getBookContent?url="+encodeURIComponent(e)+"&index="+t),Vt=(e,t,o)=>{const s=`ws://${ve}:${Number(we)+1}/searchBook`,r=new WebSocket(s);r.onopen=()=>{r.send(`{"key":"${e}"}`)},r.onmessage=({data:n})=>t(n),r.onclose=()=>{o()}},Nt=e=>U.post("/saveBook",e),Tt=e=>U.post("/deleteBook",e),Q=/bookSource/i.test(location.href),It=()=>Q?U.get("getBookSources"):U.get("getRssSources"),$t=e=>Q?U.post("saveBookSource",e):U.post("saveRssSource",e),Lt=e=>Q?U.post("saveBookSources",e):U.post("saveRssSources",e),Rt=e=>Q?U.post("deleteBookSources",e):U.post("deleteRssSources",e),Ot=(e,t,o,s)=>{const r=`ws://${ve}:${Number(we)+1}/${Q?"bookSource":"rssSource"}Debug`,n=new WebSocket(r);n.onopen=()=>{n.send(JSON.stringify({tag:e,key:t}))},n.onmessage=({data:l})=>o(l),n.onclose=()=>{B({message:"调试已关闭!",type:"info"}),s()}},j={getReadConfig:vt,saveReadConfig:wt,saveBookProgress:Ct,saveBookProgressWithBeacon:xt,getBookShelf:Bt,getChapterList:Et,getBookContent:Ut,search:Vt,saveBook:Nt,deleteBook:Tt,getSources:It,saveSources:Lt,saveSource:$t,deleteSource:Rt,debug:Ot},W=e=>e==null||e.length===0||/^\s+$/.test(e),ae=e=>"bookSourceName"in e,Jt=e=>ae(e)?!W(e.bookSourceName)&&!W(e.bookSourceUrl)&&!W(e.bookSourceType):!W(e.sourceName)&&!W(e.sourceName),ee=e=>ae(e)?e.bookSourceUrl:e.sourceUrl,Pt=(e,t)=>{var o,s,r,n,l,k,m,S;return ae(e)?(((o=e.bookSourceName)==null?void 0:o.includes(t))||((s=e.bookSourceUrl)==null?void 0:s.includes(t))||((r=e.bookSourceGroup)==null?void 0:r.includes(t))||((n=e.bookSourceComment)==null?void 0:n.includes(t)))??!1:(((l=e.sourceName)==null?void 0:l.includes(t))||((k=e.sourceUrl)==null?void 0:k.includes(t))||((m=e.sourceGroup)==null?void 0:m.includes(t))||((S=e.sourceComment)==null?void 0:S.includes(t)))??!1},re=e=>{const t=new Map;return e.forEach(o=>t.set(ee(o),o)),t},Dt={ruleSearch:{},ruleBookInfo:{},ruleToc:{},ruleContent:{},ruleReview:{},ruleExplore:{}},At={},F=/bookSource/i.test(location.href),de=F?Dt:At,M=ge("source",{state:()=>({bookSources:[],rssSources:[],savedSources:[],currentSource:de,currentTab:localStorage.getItem("tabName")||"editTab",editTabSource:{},isDebuging:!1}),getters:{sources:e=>F?e.bookSources:e.rssSources,sourcesMap:e=>re(e.sources),savedSourcesMap:e=>re(e.savedSources),currentSourceUrl:e=>F?e.currentSource.bookSourceUrl:e.currentSource.sourceUrl,searchKey:e=>F?e.currentSource.ruleSearch.checkKeyWord||"我的":null},actions:{startDebug(){this.currentTab="editDebug",this.isDebuging=!0},debugFinish(){this.isDebuging=!1},saveSources(e){F?this.bookSources=e:this.rssSources=e},setPushReturnSources(e){this.savedSources=e},deleteSources(e){let t=F?this.bookSources:this.rssSources;e.forEach(o=>{let s=t.indexOf(o);s>-1&&t.splice(s,1)})},saveCurrentSource(){let e=this.currentSource,t=this.sourcesMap;t.set(ee(e),JSON.parse(JSON.stringify(e))),this.saveSources(Array.from(t.values()))},changeCurrentSource(e){this.currentSource=JSON.parse(JSON.stringify(e))},changeTabName(e){this.currentTab=e,localStorage.setItem("tabName",e)},changeEditTabSource(e){this.editTabSource=JSON.parse(JSON.stringify(e))},editHistory(e){let t;if(localStorage.getItem("history"))t=JSON.parse(localStorage.getItem("history")),t.new.push(e),t.new.length>50&&t.new.shift(),t.old.length>50&&t.old.shift(),localStorage.setItem("history",JSON.stringify(t));else{const o={new:[e],old:[]};localStorage.setItem("history",JSON.stringify(o))}},editHistoryUndo(){if(localStorage.getItem("history")){let e=JSON.parse(localStorage.getItem("history"));e.old.push(this.currentSource),e.new.length&&(this.currentSource=e.new.pop()),localStorage.setItem("history",JSON.stringify(e))}},clearAllHistory(){localStorage.setItem("history",JSON.stringify({new:[],old:[]}))},clearEdit(){this.editTabSource={},this.currentSource=de},clearAllSource(){this.bookSources=[],this.rssSources=[],this.savedSources=[]}}});const jt={__name:"SourceItem",props:["source"],setup(e){const t=e,o=M(),{savedSourcesMap:s,currentSourceUrl:r}=Y(o),n=G(()=>ee(t.source)),l=m=>{o.changeCurrentSource(m)},k=G(()=>{const m=s.value;return m.size==0?!1:!m.has(n.value)});return(m,S)=>{const C=le,v=$e;return a(),w(v,{size:"large",border:"",label:i(n),class:me({error:i(k),edit:i(n)==i(r)})},{default:p(()=>[b(X(e.source.bookSourceName||e.source.sourceName)+" ",1),g(C,{text:"",icon:i(_e),onClick:S[0]||(S[0]=x=>l(e.source))},null,8,["icon"])]),_:1},8,["label","class"])}}},Kt=P(jt,[["__scopeId","data-v-830cee5a"]]);const Mt={class:"tool"},Ht={__name:"SourceList",setup(e){const t=M(),o=J([]),s=J(""),{sources:r,sourcesMap:n}=Y(t),l=G(()=>{const c=s.value;return c===""?r.value:r.value.filter(y=>Pt(y,c))}),k=G(()=>{const c=o.value;if(c.length==0)return[];const y=s.value==""?n.value:re(l.value);return c.reduce((V,f)=>{const N=y.get(f);return N&&V.push(N),V},[])}),m=()=>{const c=k.value;j.deleteSource(c).then(({data:y})=>{if(!y.isSuccess)return B.error(y.errorMsg);t.deleteSources(c);const V=Je(o.value);c.forEach(f=>{const N=V.indexOf(ee(f));N>-1&&V.splice(N,1)}),o.value=V})},S=()=>{t.clearAllSource(),o.value=[]},C=()=>{const c=document.createElement("input");c.type="file",c.accept=".json,.txt",c.addEventListener("change",y=>{const V=y.target.files[0];var f=new FileReader;f.readAsText(V),f.onload=()=>{try{const N=JSON.parse(f.result);t.saveSources(N)}catch{B({message:"上传的源格式错误",type:"error"})}}}),c.click()},v=/bookSource/.test(window.location.href),x=()=>{const c=document.createElement("a");let y=o.value.length===0?l.value:k.value,V=v?"BookSource":"RssSource";c.download=`${V}_${Date().replace(/.*?\s(\d+)\s(\d+)\s(\d+:\d+:\d+).*/,"$2$1$3").replace(/:/g,"")}.json`;let f=new Blob([JSON.stringify(y,null,4)],{type:"application/json"});c.href=window.URL.createObjectURL(f),c.click()};return(c,y)=>{const V=Z,f=le,N=Pe;return a(),E(O,null,[g(V,{modelValue:i(s),"onUpdate:modelValue":y[0]||(y[0]=T=>K(s)?s.value=T:null),class:"search","prefix-icon":i(Se),placeholder:"筛选源"},null,8,["modelValue","prefix-icon"]),_("div",Mt,[g(f,{onClick:C,icon:i(Le)},{default:p(()=>[b("打开")]),_:1},8,["icon"]),g(f,{disabled:i(l).length===0,onClick:x,icon:i(Re)},{default:p(()=>[b(" 导出")]),_:1},8,["disabled","icon"]),g(f,{type:"danger",icon:i(ce),onClick:m,disabled:i(k).length===0},{default:p(()=>[b("删除")]),_:1},8,["icon","disabled"]),g(f,{type:"danger",icon:i(ce),onClick:S,disabled:i(r).length===0},{default:p(()=>[b("清空")]),_:1},8,["icon","disabled"])]),g(N,{id:"source-list",modelValue:i(o),"onUpdate:modelValue":y[1]||(y[1]=T=>K(o)?o.value=T:null)},{default:p(()=>[g(i(Oe),{style:{height:"100%","overflow-y":"auto","overflow-x":"hidden"},"data-key":T=>T.bookSourceUrl||T.sourceUrl,"data-sources":i(l),"data-component":Kt,"estimate-size":45},null,8,["data-key","data-sources"])]),_:1},8,["modelValue"])],64)}}},Ft=P(Ht,[["__scopeId","data-v-cd1572ca"]]);const qt={__name:"SourceDebug",setup(e){const t=M(),o=J(""),s=J("");ye(()=>t.isDebuging,()=>{t.isDebuging&&n()});const r=k=>{let m=document.querySelector("#debug-text");m.scrollTop=m.scrollHeight,o.value+=k+` `},n=async()=>{o.value="",await j.saveSource(t.currentSource),j.debug(t.currentSourceUrl,s.value||t.searchKey,r,t.debugFinish)},l=G(()=>/bookSource/.test(window.location.href));return(k,m)=>{const S=Z;return a(),E(O,null,[i(l)?(a(),w(S,{key:0,id:"debug-key",modelValue:i(s),"onUpdate:modelValue":m[0]||(m[0]=C=>K(s)?s.value=C:null),placeholder:"搜索书名、作者","prefix-icon":i(Se),style:{"padding-bottom":"4px"},onKeydown:De(n,["enter"])},null,8,["modelValue","prefix-icon"])):$("",!0),g(S,{id:"debug-text",modelValue:i(o),"onUpdate:modelValue":m[1]||(m[1]=C=>K(o)?o.value=C:null),type:"textarea",readonly:"",rows:"29",placeholder:"这里用于输出调试信息"},null,8,["modelValue"])],64)}}},zt=P(qt,[["__scopeId","data-v-f7a4e94b"]]),yo=ge("book",{state:()=>({connectStatus:"正在连接后端服务器……",connectType:"",newConnect:!0,searchBooks:[],shelf:[],catalog:[],readingBook:{index:0,chapterPos:0},popCataVisible:!1,contentLoading:!0,showContent:!1,config:{theme:0,font:0,fontSize:18,readWidth:800,infiniteLoading:!1,customFontName:"",jumpDuration:1e3,spacing:{paragraph:1,line:.8,letter:0}},miniInterface:!1,readSettingsVisible:!1}),getters:{bookProgress:e=>{var l;if(e.catalog.length==0)return;const{index:t,chapterPos:o,bookName:s,bookAuthor:r}=e.readingBook;let n=(l=e.catalog[t])==null?void 0:l.title;if(n)return{name:s,author:r,durChapterIndex:t,durChapterPos:o,durChapterTime:new Date().getTime(),durChapterTitle:n}}},actions:{setConnectStatus(e){this.connectStatus=e},setConnectType(e){this.connectType=e},setNewConnect(e){this.newConnect=e},addBooks(e){this.shelf=e},setCatalog(e){this.catalog=e},setPopCataVisible(e){this.popCataVisible=e},setContentLoading(e){this.contentLoading=e},setReadingBook(e){this.readingBook=e},setConfig(e){Object.assign(this.config,e)},setReadSettingsVisible(e){this.readSettingsVisible=e},setShowContent(e){this.showContent=e},setMiniInterface(e){this.miniInterface=e},async setSearchBooks(e){e.forEach(t=>{this.shelf.find(s=>s.bookUrl==t.bookUrl)===void 0&&this.searchBooks.push(t)})},clearSearchBooks(){this.searchBooks=[]},async saveBookProgress(){return this.bookProgress?j.saveBookProgress(this.bookProgress):Promise.resolve()}}}),Wt=Ae();const Gt={__name:"SourceJson",setup(e){const t=M(),o=J(""),s=async r=>{try{t.changeEditTabSource(JSON.parse(r))}catch{B({message:"粘贴的源格式错误",type:"error"})}};return je(async()=>{let r=t.editTabSource;Object.keys(r).length>0?o.value=JSON.stringify(r,null,4):o.value=""}),(r,n)=>{const l=Z;return a(),w(l,{id:"source-json",modelValue:i(o),"onUpdate:modelValue":n[0]||(n[0]=k=>K(o)?o.value=k:null),type:"textarea",placeholder:"这里输出序列化的JSON数据,可直接导入'阅读'APP",rows:"30",onChange:s,style:{"margin-bottom":"4px"}},null,8,["modelValue"])}}},Qt=P(Gt,[["__scopeId","data-v-7e91a802"]]);const Xt={__name:"SourceTabTools",setup(e){const t=M(),{currentTab:o}=Y(t),s=J([["editTab","编辑源"],["editDebug","调试源"],["editList","源列表"],["editHelp","帮助信息"]]);return(r,n)=>{const l=Qt,k=zt,m=Ft,S=yt,C=fe,v=be;return a(),w(v,{modelValue:i(o),"onUpdate:modelValue":n[0]||(n[0]=x=>K(o)?o.value=x:null)},{default:p(()=>[(a(!0),E(O,null,A(i(s),(x,c)=>(a(),w(C,{key:x[0],name:x[0],label:x[1]},{default:p(()=>[c==0?(a(),w(l,{key:0})):$("",!0),c==1?(a(),w(k,{key:1})):$("",!0),c==2?(a(),w(m,{key:2})):$("",!0),c==3?(a(),w(S,{key:3})):$("",!0)]),_:2},1032,["name","label"]))),128))]),_:1},8,["modelValue"])}}},Yt=P(Xt,[["__scopeId","data-v-dcce2457"]]);const Zt={class:"menu flex-column-center"},eo={class:"hotkeys-header flex-space-between"},to=["id"],oo={key:0},no={class:"hotkeys-settings flex-column-center"},ro={class:"title"},so={class:"hotkeys-item__content"},io={key:0},lo={key:0},ao={__name:"ToolBar",setup(e){const t=M(),o=()=>{const d=B({message:"加载中……",showClose:!0,duration:0});j.getSources().then(({data:h})=>{h.isSuccess?(t.changeTabName("editList"),t.saveSources(h.data),B({message:`成功拉取${h.data.length}条源`,type:"success"})):B({message:h.errorMsg??"后端错误",type:"error"})}).finally(()=>d.close())},s=()=>{let d=t.sources;if(t.changeTabName("editList"),d.length===0)return B({message:"空空如也",type:"info"});B({message:"正在推送中",type:"info"}),j.saveSources(d).then(({data:h})=>{if(h.isSuccess){let u=h.data;if(Array.isArray(u)){let D="";d.length>u.length&&(D=` 推送失败的源将用红色字体标注!`,t.setPushReturnSources(u)),B({message:`批量推送源到「阅读3.0APP」 共计: ${d.length} 条 成功: ${u.length} 条 失败: ${d.length-u.length} 条${D}`,type:"success"})}}else B({message:`批量推送源失败! ErrorMsg: ${h.errorMsg}`,type:"error"})})},r=()=>{t.changeTabName("editTab"),t.changeEditTabSource(t.currentSource)},n=()=>{t.changeCurrentSource(t.editTabSource)},l=()=>{t.editHistoryUndo()},k=()=>{t.clearEdit(),B({message:"已清除",type:"success"})},m=()=>{t.clearEdit(),t.clearAllHistory(),B({message:"已清除所有历史记录",type:"success"})},S=()=>{let d=/bookSource/.test(location.href),h=t.currentSource;Jt(h)?j.saveSource(h).then(({data:u})=>{u.isSuccess?(B({message:`源《${d?h.bookSourceName:h.sourceName}》已成功保存到「阅读3.0APP」`,type:"success"}),t.saveCurrentSource()):B({message:`源《${d?h.bookSourceName:h.sourceName}》保存失败! ErrorMsg: ${u.errorMsg}`,type:"error"})}):B({message:"请检查<必填>项是否全部填写",type:"error"})},C=()=>{t.startDebug()},v=J(Array.of({name:"⇈推送源",hotKeys:[],action:s},{name:"⇊拉取源",hotKeys:[],action:o},{name:"⋙生成源",hotKeys:[],action:r},{name:"⋘编辑源",hotKeys:[],action:n},{name:"✗清空表单",hotKeys:[],action:k},{name:"↶撤销操作",hotKeys:[],action:l},{name:"↷重做操作",hotKeys:[],action:m},{name:"⇏调试源",hotKeys:[],action:C},{name:"✓保存源",hotKeys:[],action:S})),x=J(!0),c=J(!1),y=J(-1),V=()=>{c.value||(x.value=!1),c.value=!1};ye(x,d=>{if(!d){H.unbind("*"),q(),T();return}q(),H.unbind(),H("*",h=>{h.preventDefault();let u=H.getPressedKeyString();u.length==1&&u[0]=="esc"||c.value&&y.value>-1&&(v.value[y.value].hotKeys=u)})},{immediate:!0});const f=d=>{c.value=!0,B({message:"按ESC键或者点击空白处结束录入",type:"info"}),v.value[d].hotKeys=[],y.value=d},N=()=>{const d=[];v.value.forEach(({hotKeys:h})=>{d.push(h)}),R(d),x.value=!1},T=()=>{H.filter=()=>!0,v.value.forEach(({hotKeys:d,action:h})=>{d.length!=0&&H(d.join("+"),u=>{u.preventDefault(),h.call(null)})})},R=d=>{localStorage.setItem("legado_web_hotkeys",JSON.stringify(d))};function q(){try{const d=JSON.parse(localStorage.getItem("legado_web_hotkeys"));return!Array.isArray(d)||d.length==0?!1:(v.value.forEach((h,u)=>h.hotKeys=d[u]),!0)}catch{B({message:"快捷键配置错误",type:"error"}),localStorage.removeItem("legado_web_hotkeys")}return!1}return Ke(()=>{q()&&(x.value=!1)}),(d,h)=>{const u=le,D=he,Be=He;return a(),E(O,null,[_("div",Zt,[(a(!0),E(O,null,A(i(v),I=>(a(),w(u,{size:"large",key:I.name,onClick:I.action},{default:p(()=>[b(X(I.name),1)]),_:2},1032,["onClick"]))),128)),g(u,{size:"large",onClick:h[0]||(h[0]=()=>x.value=!0)},{default:p(()=>[b("快捷键")]),_:1})]),g(Be,{modelValue:i(x),"onUpdate:modelValue":h[1]||(h[1]=I=>K(x)?x.value=I:null),"show-close":!1,"before-close":V},{header:p(({titleClass:I,titleId:te})=>[_("div",eo,[_("div",{id:te,class:me(I)},[b(" 快捷键设置 "),i(c)?(a(),E("span",oo,[g(D,null,{default:p(()=>[b(" / 录入中 ")]),_:1})])):$("",!0)],10,to),g(u,{disabled:i(c),onClick:N,icon:i(Me)},{default:p(()=>[b("保存")]),_:1},8,["disabled","icon"])])]),default:p(()=>[_("div",no,[(a(!0),E(O,null,A(i(v),(I,te)=>(a(),E("div",{key:I.name,class:"hotkeys-item flex-space-between"},[_("span",ro,[g(D,null,{default:p(()=>[b(X(I.name),1)]),_:2},1024)]),_("div",so,[(a(!0),E(O,null,A(I.hotKeys,(oe,Ee)=>(a(),E("div",{key:oe},[_("kbd",null,X(oe),1),Ee+1[b("+")]),_:1})])):$("",!0)]))),128)),I.hotKeys.length==0?(a(),E("span",lo,"未设置")):$("",!0)]),g(u,{disabled:i(c),text:"",icon:i(_e),onClick:oe=>f(te)},{default:p(()=>[b("编辑")]),_:2},1032,["disabled","icon","onClick"])]))),128))])]),_:1},8,["modelValue"])],64)}}},co=P(ao,[["__scopeId","data-v-9fd45dad"]]);const uo={__name:"SourceTabForm",props:["config"],setup(e){const t=M(),{currentSource:o}=Y(t);return(s,r)=>{const n=Z,l=Fe,k=qe,m=ze,S=We,C=Ge,v=Qe,x=fe,c=be;return a(),w(c,{id:"source-edit"},{default:p(()=>[(a(!0),E(O,null,A(Object.values(e.config),({name:y,children:V})=>(a(),w(x,{label:y,key:y},{default:p(()=>[g(v,{"label-position":"right","label-width":"auto"},{default:p(()=>[(a(!0),E(O,null,A(V,({type:f,title:N,namespace:T,id:R,array:q,hint:d,required:h})=>(a(),w(C,{label:N,key:N,required:h},{default:p(()=>[f=="String"&&typeof T>"u"?(a(),w(n,{key:0,type:"textarea",modelValue:i(o)[R],"onUpdate:modelValue":u=>i(o)[R]=u,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):$("",!0),f=="String"&&typeof T<"u"?(a(),w(n,{key:1,type:"textarea",modelValue:i(o)[T][R],"onUpdate:modelValue":u=>i(o)[T][R]=u,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):$("",!0),f=="Boolean"?(a(),w(l,{key:2,modelValue:i(o)[R],"onUpdate:modelValue":u=>i(o)[R]=u},null,8,["modelValue","onUpdate:modelValue"])):$("",!0),f=="Number"?(a(),w(k,{key:3,modelValue:i(o)[R],"onUpdate:modelValue":u=>i(o)[R]=u,min:0},null,8,["modelValue","onUpdate:modelValue"])):$("",!0),f=="Array"?(a(),w(S,{key:4,modelValue:i(o)[R],"onUpdate:modelValue":u=>i(o)[R]=u},{default:p(()=>[(a(!0),E(O,null,A(q,(u,D)=>(a(),w(m,{value:D,key:u,label:u},null,8,["value","label"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])):$("",!0)]),_:2},1032,["label","required"]))),128))]),_:2},1024)]),_:2},1032,["label"]))),128))]),_:1})}}},po=P(uo,[["__scopeId","data-v-bced2b97"]]),ho={base:{name:"基础",children:[{title:"源类型",id:"bookSourceType",type:"Array",array:["文本","音频","图片","文件"],required:!0},{title:"源域名",id:"bookSourceUrl",type:"String",hint:"通常填写网站主页,例: https://www.qidian.com",required:!0},{title:"源名称",id:"bookSourceName",type:"String",hint:"会显示在源列表",required:!0},{title:"源分组",id:"bookSourceGroup",type:"String",hint:"描述源的特征信息"},{title:"源注释",id:"bookSourceComment",type:"String",hint:"描述源作者和状态"},{title:"登录地址",id:"loginUrl",type:"String",hint:"填写网站登录网址,仅在需要登录的源有用"},{title:"登录界面",id:"loginUi",type:"String",hint:"自定义登录界面"},{title:"登录检测",id:"loginCheckJs",type:"String",hint:"登录检测js"},{title:"封面解密",id:"coverDecodeJs",type:"String",hint:"封面解密js"},{title:"链接验证",id:"bookUrlPattern",type:"String",hint:"书籍URL正则,当详情页URL与源URL的域名不一致时有效,用于添加网址"},{title:"请求头",id:"header",type:"String",hint:"客户端标识"},{title:"变量说明",id:"variableComment",type:"String",hint:"书源变量说明"},{title:"并发率",id:"concurrentRate",type:"String",hint:"并发率,如1000(访问间隔1000ms)或者1/1000(1000ms内访问1次)"},{title:"js库",id:"jsLib",type:"String",hint:"js库, 可填写js或者key-value object获取在线js文件"}]},search:{name:"搜索",children:[{title:"搜索地址",id:"searchUrl",type:"String",hint:"[域名可省略]/search.php@kw={{key}}"},{title:"校验文字",namespace:"ruleSearch",id:"checkKeyWord",type:"String",hint:"校验关键字,强烈建议填写"},{title:"列表规则",namespace:"ruleSearch",id:"bookList",type:"String",hint:"选择书籍节点 (规则结果为List)"},{title:"书名规则",namespace:"ruleSearch",id:"name",type:"String",hint:"选择节点书名 (规则结果为String)"},{title:"作者规则",namespace:"ruleSearch",id:"author",type:"String",hint:"选择节点作者 (规则结果为String)"},{title:"分类规则",namespace:"ruleSearch",id:"kind",type:"String",hint:"选择节点分类信息 (规则结果为String)"},{title:"字数规则",namespace:"ruleSearch",id:"wordCount",type:"String",hint:"选择节点字数信息 (规则结果为String)"},{title:"最新章节",namespace:"ruleSearch",id:"lastChapter",type:"String",hint:"选择节点最新章节 (规则结果为String)"},{title:"简介规则",namespace:"ruleSearch",id:"intro",type:"String",hint:"选择节点书籍简介 (规则结果为String)"},{title:"封面规则",namespace:"ruleSearch",id:"coverUrl",type:"String",hint:"选择节点书籍封面 (规则结果为String类型的url)"},{title:"详情地址",namespace:"ruleSearch",id:"bookUrl",type:"String",hint:"选择书籍详情页网址 (规则结果为String类型的url)"}]},find:{name:"发现",children:[{title:"发现地址",id:"exploreUrl",type:"String",hint:"单个发现格式::或者{url:,title:,style:...};前者用换行符或者&&连接,后者放在数组内;可用js动态生成"},{title:"列表规则",namespace:"ruleExplore",id:"bookList",type:"String",hint:"选择书籍节点 (规则结果为List)"},{title:"书名规则",namespace:"ruleExplore",id:"name",type:"String",hint:"选择节点书名 (规则结果为String)"},{title:"作者规则",namespace:"ruleExplore",id:"author",type:"String",hint:"选择节点作者 (规则结果为String)"},{title:"分类规则",namespace:"ruleExplore",id:"kind",type:"String",hint:"选择节点分类信息 (规则结果为String)"},{title:"字数规则",namespace:"ruleExplore",id:"wordCount",type:"String",hint:"选择节点字数信息 (规则结果为String)"},{title:"最新章节",namespace:"ruleExplore",id:"lastChapter",type:"String",hint:"选择节点最新章节 (规则结果为String)"},{title:"简介规则",namespace:"ruleExplore",id:"intro",type:"String",hint:"选择节点书籍简介 (规则结果为String)"},{title:"封面规则",namespace:"ruleExplore",id:"coverUrl",type:"String",hint:"选择节点书籍封面 (规则结果为String类型的url)"},{title:"详情地址",namespace:"ruleExplore",id:"bookUrl",type:"String",hint:"选择书籍详情页网址 (规则结果为String类型的url)"}]},detail:{name:"详情",children:[{title:"预处理",namespace:"ruleBookInfo",id:"init",type:"String",hint:"用于加速详情信息检索,只支持AllInOne规则"},{title:"书名规则",namespace:"ruleBookInfo",id:"name",type:"String",hint:"选择节点书名 (规则结果为String)"},{title:"作者规则",namespace:"ruleBookInfo",id:"author",type:"String",hint:"选择节点作者 (规则结果为String)"},{title:"分类规则",namespace:"ruleBookInfo",id:"kind",type:"String",hint:"选择节点分类信息 (规则结果为String)"},{title:"字数规则",namespace:"ruleBookInfo",id:"wordCount",type:"String",hint:"选择节点字数信息 (规则结果为String)"},{title:"最新章节",namespace:"ruleBookInfo",id:"lastChapter",type:"String",hint:"选择节点最新章节 (规则结果为String)"},{title:"简介规则",namespace:"ruleBookInfo",id:"intro",type:"String",hint:"选择节点书籍简介 (规则结果为String)"},{title:"封面规则",namespace:"ruleBookInfo",id:"coverUrl",type:"String",hint:"选择节点书籍封面 (规则结果为String类型的url)"},{title:"目录地址",namespace:"ruleBookInfo",id:"tocUrl",type:"String",hint:"选择书籍详情页网址 (规则结果为String类型的url, 与详情页相同时可省略)"},{title:"修改书籍",namespace:"ruleBookInfo",id:"canReName",type:"String",hint:"允许修改书名作者(规则结果为String类型, 默认不允许)"},{title:"下载URL",namespace:"ruleBookInfo",id:"downloadUrls",type:"String",hint:"文件类书源下载地址 (规则结果为String类型的url, 多个链接返回数组)"}]},directory:{name:"目录",children:[{title:"更新前JS",namespace:"ruleToc",id:"preUpdateJs",type:"String",hint:"更新目录前调用JS 动态更新目录链接"},{title:"列表规则",namespace:"ruleToc",id:"chapterList",type:"String",hint:"选择目录列表的章节节点 (规则结果为List)"},{title:"章节名称",namespace:"ruleToc",id:"chapterName",type:"String",hint:"选择章节名称 (规则结果为String)"},{title:"章节地址",namespace:"ruleToc",id:"chapterUrl",type:"String",hint:"选择章节链接 (规则结果为String类型的Url)"},{title:"标题处理",namespace:"ruleToc",id:"formatJs",type:"String",hint:"遍历去重后的章节列表的回调,提供index(章节序号从1开始)、title(章节标题)变量,额外提供gInt(初始值0),返回值作为新的标题"},{title:"卷名标识",namespace:"ruleToc",id:"isVolume",type:"String",hint:"章节名称是否是卷名 (规则结果为Bool)"},{title:"章节信息",namespace:"ruleToc",id:"updateTime",type:"String",hint:"选择章节信息(如更新时间) (规则结果为String)"},{title:"收费标识",namespace:"ruleToc",id:"isVip",type:"String",hint:"章节是否为VIP章节 (规则结果为Bool)"},{title:"购买标识",namespace:"ruleToc",id:"isPay",type:"String",hint:"章节是否为已购买 (规则结果为Bool)"},{title:"翻页规则",namespace:"ruleToc",id:"nextTocUrl",type:"String",hint:"选择目录下一页链接 (规则结果为List或String)"}]},content:{name:"正文",children:[{title:"正文规则",namespace:"ruleContent",id:"content",type:"String",hint:"选择正文内容 (规则结果为String)"},{title:"标题规则",namespace:"ruleContent",id:"title",type:"String",hint:"获取结果将会覆盖章节标题 (规则结果为String)"},{title:"翻页规则",namespace:"ruleContent",id:"nextContentUrl",type:"String",hint:"选择下一分页(不是下一章)链接 (规则结果为String类型的Url)"},{title:"脚本注入",namespace:"ruleContent",id:"webJs",type:"String",hint:"注入javascript,用于模拟鼠标点击等,必须有返回值,一般为String类型"},{title:"资源正则",namespace:"ruleContent",id:"sourceRegex",type:"String",hint:"匹配资源的url特征,用于嗅探"},{title:"替换规则",namespace:"ruleContent",id:"replaceRegex",type:"String",hint:"多页内容合并后替换,用于正文净化"},{title:"图片样式",namespace:"ruleContent",id:"imageStyle",type:"String",hint:"FULL:铺满 不填:默认样式"},{title:"图片解密",namespace:"ruleContent",id:"imageDecode",type:"String",hint:"填写JavaScript 返回解密图片的bytes "},{title:"购买操作",namespace:"ruleContent",id:"payAction",type:"String",hint:"填写JavaScript 返回购买链接或者调用购买接口"}]},other:{name:"其他",children:[{title:"启用搜索",id:"enabled",type:"Boolean"},{title:"启用发现",id:"enabledExplore",type:"Boolean"},{title:"CookieJar",id:"enabledCookieJar",type:"Boolean"},{title:"搜索权重",id:"weight",type:"Number"},{title:"排序编号",id:"customOrder",type:"Number"}]}},go={base:{name:"基础",children:[{title:"源域名",id:"sourceUrl",type:"String",hint:"通常填写网站主页,例: https://www.qidian.com",required:!0},{title:"图标",id:"sourceIcon",type:"String",hint:"填写图片网络链接"},{title:"源名称",id:"sourceName",type:"String",hint:"会显示在源列表",required:!0},{title:"源分组",id:"sourceGroup",type:"String",hint:"描述源的特征信息"},{title:"源注释",id:"sourceComment",type:"String",hint:"描述源作者和状态"},{title:"分类地址",id:"sortUrl",type:"String",hint:`名称1::链接1 名称2::链接2`},{title:"登录地址",id:"loginUrl",type:"String",hint:"填写网站登录网址,仅在需要登录的源有用"},{title:"登录界面",id:"loginUi",type:"String",hint:"自定义登录界面"},{title:"登录检测",id:"loginCheckJs",type:"String",hint:"登录检测js"},{title:"封面解密",id:"coverDecodeJs",type:"String",hint:"封面解密js"},{title:"请求头",id:"header",type:"String",hint:"客户端标识"},{title:"变量说明",id:"variableComment",type:"String",hint:"源变量说明"},{title:"并发率",id:"concurrentRate",type:"String",hint:"并发率"}]},list:{name:"列表",children:[{title:"列表规则",id:"ruleArticles",type:"String",hint:"规则结果为List"},{title:"翻页规则",id:"ruleNextPage",type:"String",hint:"下一页链接 规则结果为List或String"},{title:"标题规则",id:"ruleTitle",type:"String",hint:"文章标题 规则结果为String"},{title:"时间规则",id:"rulePubDate",type:"String",hint:"文章发布时间 规则结果为String"},{title:"描述规则",id:"ruleDescription",type:"String",hint:"文章简要描述 规则结果为String"},{title:"图片规则",id:"ruleImage",type:"String",hint:"文章图片链接 规则结果为String"},{title:"链接规则",id:"ruleLink",type:"String",hint:"文章链接 规则结果为String"}]},webView:{name:"WebView",children:[{title:"内容规则",id:"ruleContent",type:"String",hint:"文章正文"},{title:"样式规则",id:"style",type:"String",hint:"文章正文样式 填写css"},{title:"注入规则",id:"injectJs",type:"String",hint:"注入网页的JavaScript"},{title:"黑名单",id:"contentBlacklist",type:"String",hint:"webView链接加载黑名单,英文逗号隔开"},{title:"白名单",id:"contentWhitelist",type:"String",hint:"webView链接加载白名单,英文逗号隔开"},{title:"链接拦截",id:"shouldOverrideUrlLoading",type:"String",hint:"填写js,变量url为当前资源链接,返回true拦截"}]},other:{name:"其他",children:[{title:"列表样式",id:"articleStyle",type:"Array",array:["默认","大图","双列"]},{title:"加载地址",id:"loadWithBaseUrl",type:"Boolean"},{title:"启用JS",id:"enableJs",type:"Boolean"},{title:"启用",id:"enabled",type:"Boolean"},{title:"Cookie",id:"enabledCookieJar",type:"Boolean"},{title:"单URL",id:"singleUrl",type:"Boolean"},{title:"排序编号",id:"customOrder",type:"Number"}]}};const _o={class:"editor"},mo={__name:"SourceEditor",setup(e){let t;return/bookSource/i.test(location.href)?(t=ho,document.title="书源管理"):(t=go,document.title="订阅源管理"),(o,s)=>{const r=po,n=co,l=Yt;return a(),E("div",_o,[g(r,{class:"left",config:i(t)},null,8,["config"]),g(n),g(l,{class:"right"})])}}},pe=P(mo,[["__scopeId","data-v-5fe2b79d"]]),Ce=[{path:"/bookSource",name:"book-home",component:pe},{path:"/rssSource",name:"rss-home",component:pe}];se({history:ie(),routes:Ce});const xe=se({history:ie(),routes:ke.concat(Ce)});xe.afterEach(e=>{e.name=="shelf"&&(document.title="书架")});Xe(ot).use(Wt).use(xe).mount("#app");ne(()=>import("./config-87704387.js"),["./config-87704387.js","./vendor-cfc7c64d.js","./vendor-b73e16d8.css","./config-811f2a0b.css"],import.meta.url);export{j as A,P as _,yo as u};