(function(){"use strict";var e={7530:function(e,t,r){var o=r(9963),n=r(6252);const i={class:"editor"};function l(e,t,r,o,l,a){const c=(0,n.up)("router-view");return(0,n.wg)(),(0,n.iD)("div",i,[(0,n.Wm)(c)])}var a={setup(){}},c=r(3744);const s=(0,c.Z)(a,[["render",l]]);var u=s,d=r(2201),p=r(3577);const g={class:"left"},h=["onClick"];function S(e,t,r,o,i,l){const a=(0,n.up)("edit-input-list"),c=(0,n.up)("edit-menu"),s=(0,n.up)("edit-out");return(0,n.wg)(),(0,n.iD)(n.HY,null,[(0,n._)("div",g,[(0,n._)("div",null,[(0,n._)("ul",null,[((0,n.wg)(!0),(0,n.iD)(n.HY,null,(0,n.Ko)(Object.entries(e.config),(([t,r])=>((0,n.wg)(),(0,n.iD)("li",{onClick:e=>o.changeSelectTabKey(t),key:t,class:(0,p.C_)(t===e.selectTabKey?"active":"")},(0,p.zw)(r.name),11,h)))),128))])]),(0,n.Wm)(a,{data:o.currentTabData},null,8,["data"])]),(0,n.Wm)(c),(0,n.Wm)(s)],64)}var w=r(2262);r(7658);const y=e=>((0,n.dD)("data-v-c2bd491a"),e=e(),(0,n.Cn)(),e),m={class:"menu"},v=y((()=>(0,n._)("span",null,"Ctrl+P",-1))),b=y((()=>(0,n._)("span",null,"Ctrl+E",-1))),f=y((()=>(0,n._)("span",null,"Ctrl+Z",-1))),_=y((()=>(0,n._)("span",null,"Ctrl+Enter",-1))),k=y((()=>(0,n._)("span",null,"Ctrl+S",-1)));function C(e,t,r,o,i,l){const a=(0,n.up)("edit-loading"),c=(0,n.up)("edit-warn"),s=(0,n.up)("edit-success");return(0,n.wg)(),(0,n.iD)("div",m,[(0,n._)("div",null,[o.showLoading?((0,n.wg)(),(0,n.j4)(a,{key:0})):(0,n.kq)("",!0),(0,n.Wm)(c,{text:o.warnText,"is-show":o.warnShow,onChangeShow:o.changeShow},null,8,["text","is-show","onChangeShow"]),o.successShow?((0,n.wg)(),(0,n.j4)(s,{key:1,isShow:o.successShow,onChangeShow:o.changeSuccessShow,text:o.successText},null,8,["isShow","onChangeShow","text"])):(0,n.kq)("",!0)]),(0,n._)("button",{onClick:t[0]||(t[0]=(...e)=>o.push&&o.push(...e)),title:"Ctrl+P"},[(0,n.Uk)("⇈推送源 "),v]),(0,n._)("button",{onClick:t[1]||(t[1]=(...e)=>o.pull&&o.pull(...e))},"⇊拉取源"),(0,n._)("button",{onClick:t[2]||(t[2]=(...e)=>o.conver2Tab&&o.conver2Tab(...e)),title:"Ctrl+E"},[(0,n.Uk)(" ⋙生成源"),b]),(0,n._)("button",{onClick:t[3]||(t[3]=(...e)=>o.conver2Source&&o.conver2Source(...e))},"⋘编辑源"),(0,n._)("button",{onClick:t[4]||(t[4]=(...e)=>o.clearEdit&&o.clearEdit(...e))},"✗清空表单"),(0,n._)("button",{onClick:t[5]||(t[5]=(...e)=>o.undo&&o.undo(...e)),title:"Ctrl+Z"},[(0,n.Uk)("↶撤销操作"),f]),(0,n._)("button",{onClick:t[6]||(t[6]=(...e)=>o.redo&&o.redo(...e))},"↷重做操作"),(0,n._)("button",{onClick:t[7]||(t[7]=(...e)=>o.debug&&o.debug(...e)),title:"Ctrl+Enter"},[(0,n.Uk)(" ⇏调试源 "),_]),(0,n._)("button",{onClick:t[8]||(t[8]=(...e)=>o.saveSource&&o.saveSource(...e)),title:"Ctrl+S"},[(0,n.Uk)(" ✓保存源"),k])])}function U(e,t){return fetch(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}).then((e=>e.json()))}function x(e){return fetch(e).then((e=>e.json()))}function T(e,t=!0){let r=/bookSource/.test(location.href),o=`http://${localStorage.getItem("url")||location.host}/`,n=r?"BookSource":"RssSource";return`${o}${e}${n}${t?"s":""}`}function D(){return x(T("get"))}function N(e){return U(T("save"),e)}function I(e){return U(T("save",!1),e)}function B(e){return U(T("delete"),e)}var E=r(3907),L=(0,E.MT)({state:{url:localStorage.getItem("url")||"",bookSources:[],rssSources:[],currentSource:{},currentTab:localStorage.getItem("tabName")||"editTab",editTabSource:{},deBugMsg:"",searchKey:""},getters:{sources(e){return/bookSource/.test(location.href)?e.bookSources:e.rssSources}},mutations:{changeSearchKey(e,t){e.searchKey=t},saveSources(e,t){/bookSource/.test(location.href)?e.bookSources=t:e.rssSources=t},deleteSources(e,t){let r=/bookSource/.test(location.href)?e.bookSources:e.rssSources;t.forEach((e=>{let t=r.indexOf(e);t>-1&&r.splice(t,1)}))},saveCurrentSource(e){let t,r,o=e.currentSource;/bookSource/.test(location.href)?(t=e.bookSources,r="bookSourceUrl"):(t=e.rssSources,r="sourceUrl");let n=t.findIndex((e=>e[r]===o[r]));o=JSON.parse(JSON.stringify(o)),n>-1?t.splice(n,1,o):t.push(o)},changeCurrentSource(e,t){const r=JSON.stringify(t);e.currentSource=JSON.parse(r)},changeCurrentSourceValue(e,t){let r=t.value,o={true:!0,false:!1};if("Boolean"===t.type&&(r=o[r]),"Number"===t.type&&(r=Number(r)),t.key.includes("_")){let o=t.key.split("_")[0],n=t.key.split("_")[1],i={};i[n]=r,e.currentSource[o]=Object.assign(e.currentSource[o]||{},i)}else e.currentSource[t.key]=r;e.currentSource.lastUpdateTime=(new Date).getTime(),/bookSource/.test(location.href)&&(e.currentSource["ruleToc"]=e.currentSource["ruleToc"]||{})},changeTabName(e,t){e.currentTab=t,localStorage.setItem("tabName",t),console.log(t)},changeEditTabSource(e,t){const r=JSON.stringify(t);e.editTabSource=JSON.parse(r)},editHistory(e,t){let r;if(localStorage.getItem("history"))r=JSON.parse(localStorage.getItem("history")),r.new.push(t),r.new.length>50&&r.new.shift(),r.old.length>50&&r.old.shift(),localStorage.setItem("history",JSON.stringify(r));else{const e={new:[t],old:[]};localStorage.setItem("history",JSON.stringify(e))}},editHistoryUndo(e){if(localStorage.getItem("history")){let t=JSON.parse(localStorage.getItem("history"));t.old.push(e.currentSource),t.new.length&&(e.currentSource=t.new.pop()),localStorage.setItem("history",JSON.stringify(t))}},clearAllHistory(){localStorage.setItem("history",JSON.stringify({new:[],old:[]}))},clearEdit(e){e.editTabSource={},e.currentSource={}},appendDeBugMsg(e,t){let r=document.querySelector("#debug_text");r.scrollTop=r.scrollHeight,e.deBugMsg+=t+"\n"},clearDeBugMsg(e){e.deBugMsg=""},clearAllSource(e){e.bookSources=[],e.rssSources=[]}},actions:{},modules:{}});const A=e=>((0,n.dD)("data-v-ab8a8a34"),e=e(),(0,n.Cn)(),e),O={class:"fixed"},R=A((()=>(0,n._)("div",{class:"half-circle-spinner"},[(0,n._)("div",{class:"circle circle-1"}),(0,n._)("div",{class:"circle circle-2"})],-1))),K=[R];function j(e,t,r,o,i,l){return(0,n.wg)(),(0,n.iD)("div",O,K)}var H={name:"editLoading"};const J=(0,c.Z)(H,[["render",j],["__scopeId","data-v-ab8a8a34"]]);var $=J;const P={key:0,class:"warm"};function z(e,t,r,o,i,l){return r.isShow?((0,n.wg)(),(0,n.iD)("div",P,[(0,n._)("p",null,(0,p.zw)(r.text),1),(0,n._)("div",null,[(0,n._)("button",{onClick:t[0]||(t[0]=(...e)=>o.changeShow&&o.changeShow(...e))},"关闭")])])):(0,n.kq)("",!0)}var M={name:"editWarm",props:{isShow:{default:!1,type:Boolean},text:{type:String,default:""}},setup(e,{emit:t}){const r=()=>{t("changeShow",!e.isShow)};return{changeShow:r}}};const q=(0,c.Z)(M,[["render",z],["__scopeId","data-v-de5a7c30"]]);var V=q;const F={class:"success"};function Z(e,t,r,o,i,l){return(0,n.wg)(),(0,n.iD)("div",F,[(0,n._)("p",null,(0,p.zw)(r.text),1)])}var W={props:{text:{type:String,default:""},isShow:{type:Boolean,default:!1}},emits:["changeShow"],setup(e,{emit:t}){return setTimeout((()=>{t("changeShow",!e.isShow)}),3e3),{}}};const G=(0,c.Z)(W,[["render",Z],["__scopeId","data-v-bef92f74"]]);var Y=G,Q={components:{editLoading:$,editWarn:V,editSuccess:Y},setup(){const e=(0,w.iH)(!1),t=(0,w.iH)(!1),r=(0,w.iH)(""),o=(0,w.iH)(!1),i=(0,w.iH)(""),l=e=>{t.value=e},a=e=>{console.log(e),o.value=e},c=()=>{e.value=!0,D().then((n=>{e.value=!1,n.isSuccess?(L.commit("changeTabName","editList"),L.commit("saveSources",n.data),r.value=`成功拉取${n.data.length}条源`,o.value=!0):(i.value=n.errorMsg,t.value=!0)})).catch((r=>{console.log(r),e.value=!1,i.value=" 请求发生了错误,请检查你的后端地址,填写是否正确,或者 阅读APP\n确认开启web服务",t.value=!0}))},s=()=>{r.value="正在推送中",o.value=!0,e.value=!0;let n=L.getters.sources;N(n).then((l=>{if(l.isSuccess){let e=l.data;if(Array.isArray(e)){let t="";n.length>e.length&&(n.forEach((t=>{e.find((e=>e.bookSourceUrl===t.bookSourceUrl))||console.log(t.bookSourceUrl)})),t="\n推送失败的源将用红色字体标注!"),r.value=`批量推送源到「阅读3.0APP」\n共计: ${n.length} 条\n成功: ${e.length} 条\n失败: ${n.length-e.length} 条${t}`,o.value=!0}else r.value=`批量推送源到「阅读3.0APP」成功!\n共计: ${n.length} 条`,o.value=!0}else i.value=`批量推送源失败!\nErrorMsg: ${l.errorMsg}`,t.value=!0;e.value=!1})).catch((r=>{console.log(r),e.value=!1,t.value=!0,i.value="请求发生了错误,请检查你的后端地址,填写是否正确,或者 阅读APP\n确认开启web服务"}))},u=()=>{L.commit("changeEditTabSource",L.state.currentSource),L.commit("changeTabName","editTab")},d=()=>{L.commit("changeCurrentSource",L.state.editTabSource)},p=()=>{L.commit("editHistoryUndo")},g=()=>{L.commit("clearEdit"),console.log("已清除"),r.value="已清除",o.value=!0},h=()=>{L.commit("clearEdit"),L.commit("clearAllHistory"),r.value="已清除所有历史记录",o.value=!0},S=()=>{let e=/bookSource/.test(location.href),n=L.state.currentSource;e&&""!==n.bookSourceUrl&&""!==n.bookSourceType&&""!==n.bookSourceName||!e&&""!==n.sourceUrl&&""!==n.sourceName?I(n).then((l=>{l.isSuccess?(r.value=`源《${e?n.bookSourceName:n.sourceName}》已成功保存到「阅读3.0APP」`,o.value=!0,L.commit("saveCurrentSource")):(i.value=`源《${e?n.bookSourceName:n.sourceName}》保存失败!\nErrorMsg: ${l.errorMsg}`,t.value=!0)})):(i.value="请检查<必填>项是否全部填写",t.value=!0)},y=()=>{e.value=!0,L.commit("clearDeBugMsg"),L.commit("changeTabName","editDebug");let t=/bookSource/.test(location.href),n=L.state.currentSource;I(n).then((i=>{console.log(i);let l="ws://"+(localStorage.getItem("url")||location.host).replace(/\d+$/,(e=>parseInt(e)+1))+"/"+(t?"bookSourceDebug":"rssSourceDebug");console.log(l);const a=new WebSocket(l);let c="",s=t?n.bookSourceUrl:n.sourceUrl;t&&(c=n.ruleSearch.checkKeyWord?n.ruleSearch.checkKeyWord:L.state.searchKey?L.state.searchKey:"我的"),a.onopen=()=>{a.send(`{"tag":"${s}", "key":"${c}"}`)},a.onmessage=e=>{L.commit("appendDeBugMsg",e.data)},a.onclose=()=>{e.value=!1,r.value="调试已关闭!",o.value=!0,L.commit("appendDeBugMsg","调试已关闭!")}}))};return(0,n.bv)((()=>{document.onkeydown=e=>{(e.ctrlKey||e.metaKey)&&"Enter"===e.key&&y(),(e.ctrlKey||e.metaKey)&&"s"===e.key&&(S(),e.preventDefault()),e.ctrlKey&&"e"===e.key&&(u(),e.preventDefault()),e.ctrlKey&&"p"===e.key&&(s(),e.preventDefault())}})),{debug:y,push:s,pull:c,clearEdit:g,showLoading:e,changeShow:l,warnShow:t,successText:r,changeSuccessShow:a,successShow:o,undo:p,redo:h,conver2Tab:u,conver2Source:d,warnText:i,saveSource:S}}};const X=(0,c.Z)(Q,[["render",C],["__scopeId","data-v-c2bd491a"]]);var ee=X;const te={class:"out"};function re(e,t,r,o,i,l){return(0,n.wg)(),(0,n.iD)("div",te,[(0,n._)("ul",null,[(0,n._)("li",{class:(0,p.C_)("editTab"===e.current_tab?"active":""),onClick:t[0]||(t[0]=e=>o.handleSetActive("editTab"))}," 编辑源 ",2),(0,n._)("li",{class:(0,p.C_)("editDebug"===e.current_tab?"active":""),onClick:t[1]||(t[1]=e=>o.handleSetActive("editDebug"))}," 调试源 ",2),(0,n._)("li",{class:(0,p.C_)("editList"===e.current_tab?"active":""),onClick:t[2]||(t[2]=e=>o.handleSetActive("editList"))}," 源列表 ",2),(0,n._)("li",{class:(0,p.C_)("editHelp"===e.current_tab?"active":""),onClick:t[3]||(t[3]=e=>o.handleSetActive("editHelp"))}," 帮助信息 ",2)]),((0,n.wg)(),(0,n.j4)(n.Ob,null,[((0,n.wg)(),(0,n.j4)((0,n.LL)(e.current_tab)))],1024))])}function oe(e,t,r,i,l,a){return(0,n.wy)(((0,n.wg)(),(0,n.iD)("textarea",{placeholder:"这里输出序列化的JSON数据,可直接导入'阅读'APP","onUpdate:modelValue":t[0]||(t[0]=t=>e.source=t),onInput:t[1]||(t[1]=(...e)=>i.updateEditSource&&i.updateEditSource(...e))},null,544)),[[o.nr,e.source]])}var ne={name:"editTab",setup(){const e=(0,w.qj)({source:""}),t=()=>{L.commit("changeEditTabSource",JSON.parse(e.source))};return(0,n.m0)((()=>{let t=L.state.editTabSource;Object.keys(t).length>0?(t.lastUpdateTime=(new Date).getTime(),e.source=JSON.stringify(t,null,4)):e.source=""})),{...(0,w.BK)(e),updateEditSource:t}}};const ie=(0,c.Z)(ne,[["render",oe],["__scopeId","data-v-554d8227"]]);var le=ie;function ae(e,t,r,i,l,a){return(0,n.wg)(),(0,n.iD)(n.HY,null,[i.isBookSource?(0,n.wy)(((0,n.wg)(),(0,n.iD)("input",{key:0,type:"text",style:{"text-align":"center",border:"1px solid #dddddd","border-radius":"4px"},placeholder:"输入搜索关键字,默认搜「我的」","onUpdate:modelValue":t[0]||(t[0]=t=>e.searchKey=t),onInput:t[1]||(t[1]=t=>i.changeSearch(e.searchKey)),onKeydown:t[2]||(t[2]=(0,o.D2)(((...e)=>i.startSearch&&i.startSearch(...e)),["enter"])),title:"输入关键词 enter(回车键)快捷搜索"},null,544)),[[o.nr,e.searchKey]]):(0,n.kq)("",!0),(0,n.wy)((0,n._)("textarea",{placeholder:"这里用于输出调试信息","onUpdate:modelValue":t[3]||(t[3]=t=>e.printDebug=t),ref:"textareaDom",id:"debug_text"},null,512),[[o.nr,e.printDebug]])],64)}var ce={name:"editDebug",setup(){const e=(0,w.iH)(""),t=(0,w.qj)({printDebug:L.state.deBugMsg,searchKey:""}),r=e=>{L.commit("changeSearchKey",e)};(0,n.m0)((()=>{t.printDebug=L.state.deBugMsg}));const o=()=>{document.querySelectorAll(".menu>button")[7].click()},i=(0,n.Fl)((()=>/bookSource/.test(window.location.href)));return{...(0,w.BK)(t),textareaDom:e,changeSearch:r,startSearch:o,isBookSource:i}}};const se=(0,c.Z)(ce,[["render",ae],["__scopeId","data-v-6969c1de"]]);var ue=se;const de={style:{display:"flex","flex-flow":"column"}},pe={class:"tool"},ge={class:"source_list"},he=["value"],Se={class:"book_index"},we=["onClick"],ye={class:"book_info"},me={key:0};function ve(e,t,r,i,l,a){return(0,n.wg)(),(0,n.iD)("div",de,[(0,n.wy)((0,n._)("input",{class:"search",type:"text",placeholder:"输入筛选关键词(源名称、源URL或源分组)输入自动筛选源","onUpdate:modelValue":t[0]||(t[0]=t=>e.searchKey=t),onFocus:t[1]||(t[1]=t=>e.delArr=[])},null,544),[[o.nr,e.searchKey]]),(0,n._)("div",null,[(0,n._)("div",pe,[(0,n._)("button",{onClick:t[2]||(t[2]=(...e)=>i.upFile&&i.upFile(...e))},"导入书源文件"),(0,n._)("button",{onClick:t[3]||(t[3]=(...e)=>i.outExport&&i.outExport(...e))},"导出书源文件"),(0,n._)("button",{onClick:t[4]||(t[4]=(...e)=>i.deleteActiveSource&&i.deleteActiveSource(...e))},"删除选中源"),(0,n._)("button",{onClick:t[5]||(t[5]=(...e)=>i.clearAllSources&&i.clearAllSources(...e))},"清空列表")]),(0,n._)("div",ge,[((0,n.wg)(!0),(0,n.iD)(n.HY,null,(0,n.Ko)(i.filtedSources,((r,l)=>((0,n.wg)(),(0,n.iD)("div",{key:r.bookSourceUrl||r.sourceUrl,class:(0,p.C_)(["book_item",l===i.currentActive?"book_active":""])},[(0,n.wy)((0,n._)("input",{type:"checkbox",value:l,"onUpdate:modelValue":t[6]||(t[6]=t=>e.delArr=t)},null,8,he),[[o.e8,e.delArr]]),(0,n._)("div",Se,(0,p.zw)(l+1),1),(0,n._)("div",{style:{"margin-left":"10px",flex:"1"},onClick:e=>i.handleItemClick(l)},[(0,n._)("div",ye,[(0,n._)("span",null,(0,p.zw)(r.bookSourceName||r.sourceName),1),i.isBookSource?((0,n.wg)(),(0,n.iD)("span",me,"最后修改:"+(0,p.zw)(i.formatTime(r.lastUpdateTime)),1)):(0,n.kq)("",!0),(0,n._)("span",null,"分组:"+(0,p.zw)(r.bookSourceGroup||r.sourceGroup||"无分组"),1)]),(0,n._)("div",null,(0,p.zw)(r.bookSourceUrl||r.sourceUrl),1)],8,we)],2)))),128))])])])}var be={name:"editList",setup(){let e=(0,w.qj)({searchKey:"",delArr:[],sources:[]});const t=(0,n.Fl)((()=>c(e.sources,e.searchKey))),r=(0,n.Fl)((()=>/bookSource/.test(window.location.href)));(0,n.m0)((()=>{e.sources=L.getters.sources}));let o=(0,w.iH)(null);const i=e=>{o.value=e,L.commit("clearEdit"),L.commit("changeCurrentSource",t.value[e])},l=()=>{L.commit("clearAllSource")},a=e=>{if(!e)return null;const t=new Date(e),r=t.getFullYear();let o=t.getMonth()+1;o=o<10?"0"+o:o;let n=t.getDate();n=n<10?"0"+n:n;let i=t.getHours();i=i<10?"0"+i:i;let l=t.getMinutes();l=l<10?"0"+l:l;let a=t.getSeconds();return a=a<10?"0"+a:a,r+"-"+o+"-"+n+" "+i+":"+l+":"+a},c=(t,o)=>""===o?e.sources:r.value?t.filter((e=>e.bookSourceName.toUpperCase().includes(o.toUpperCase())||(e.bookSourceGroup||"").toUpperCase().includes(o.toUpperCase())||e.bookSourceUrl.toUpperCase().includes(o.toUpperCase()))):t.filter((e=>e.sourceName.toUpperCase().includes(o.toUpperCase())||(e.sourceGroup||"").toUpperCase().includes(o.toUpperCase())||e.sourceUrl.toUpperCase().includes(o.toUpperCase()))),s=()=>{if(0===e.delArr.length)return console.log("没有选中的书源"),!1;const r=[];e.delArr.forEach((e=>{r.push(t.value[e])})),B(r).then((t=>{t.isSuccess?(console.log("删除成功"),L.commit("deleteSources",r),e.delArr=[]):console.log("错误",t)}))},u=()=>{const e=document.createElement("input");e.type="file",e.accept=".json",e.addEventListener("change",(e=>{const t=e.target.files[0];var r=new FileReader;r.readAsText(t),r.onload=()=>{const e=JSON.parse(r.result);L.commit("saveSources",e)}})),e.click()},d=()=>{const e=document.createElement("a");let t=L.getters.sources,o=r.value?"BookSource":"RssSource";e.download=`${o}_${Date().replace(/.*?\s(\d+)\s(\d+)\s(\d+:\d+:\d+).*/,"$2$1$3").replace(/:/g,"")}.json`;let n=new Blob([JSON.stringify(t,null,4)],{type:"application/json"});e.href=window.URL.createObjectURL(n),e.click()};return{currentActive:o,isBookSource:r,filtedSources:t,deleteActiveSource:s,handleItemClick:i,...(0,w.BK)(e),formatTime:a,clearAllSources:l,upFile:u,outExport:d}}};const fe=(0,c.Z)(be,[["render",ve],["__scopeId","data-v-5c2b9492"]]);var _e=fe;const ke=(0,n.uE)('书源制作教程xpath基础教程xpath高级教程正则表达式教程正则表达式在线验证工具
^$()[]{}.?+*|
这些是Java正则特殊符号,匹配需转义(?s)
前缀表示跨行解析(?m)
前缀表示逐行匹配(?i)
前缀表示忽略大小写