Merge pull request #2235 from jgckM/master

update web edit
This commit is contained in:
kunfei authored and GitHub committed 2022-09-03 23:15:11 +08:00
commit e854a7589e
13 files changed
+24 -1105

No files matched your search

@@ -0,0 +1 @@
@font-face{font-family:Cascadia;src:url(../fonts/Cascadia-Code-Regular-2.97c09831.ttf)}.editor{display:flex;align-items:stretch;height:100vh}.left{width:calc(50% - 55px);min-width:500px;display:inline-block}.main{width:100%;height:calc(100vh - 64px);overflow-y:auto}textarea{min-height:20px;flex:1;outline:none;border-radius:4px;border:1px solid #ccc;font-size:14px;font-family:Cascadia,Microsoft YaHei UI,Arial,serif;line-height:20px;padding:10px 10px 10px}.fixed[data-v-ab8a8a34]{position:fixed;top:100px;left:50%;transform:translateX(-50%)}.half-circle-spinner [data-v-ab8a8a34],.half-circle-spinner[data-v-ab8a8a34]{box-sizing:border-box}.half-circle-spinner[data-v-ab8a8a34]{width:60px;height:60px;border-radius:100%;position:relative}.half-circle-spinner .circle[data-v-ab8a8a34]{content:"";position:absolute;width:100%;height:100%;border-radius:100%;border:6px solid transparent}.half-circle-spinner .circle.circle-1[data-v-ab8a8a34]{border-top-color:#ff1d5e;-webkit-animation:half-circle-spinner-animation-ab8a8a34 1s infinite;animation:half-circle-spinner-animation-ab8a8a34 1s infinite}.half-circle-spinner .circle.circle-2[data-v-ab8a8a34]{border-bottom-color:#ff1d5e;-webkit-animation:half-circle-spinner-animation-ab8a8a34 1s infinite alternate;animation:half-circle-spinner-animation-ab8a8a34 1s infinite alternate}@-webkit-keyframes half-circle-spinner-animation-ab8a8a34{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes half-circle-spinner-animation-ab8a8a34{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.warm[data-v-27eae50d]{position:fixed;top:100px;left:50%;transform:translateX(-50%);color:#eee;background-color:#ff1d5e;padding:20px;border-radius:8px;font-size:18px}button[data-v-27eae50d]{float:right;width:70px;height:35px;outline:none;border:unset;border-radius:8px;font-size:14px;transition:background-color .3s ease}.success[data-v-bef92f74],button[data-v-27eae50d]:hover{color:#333;background-color:#7fffd4}.success[data-v-bef92f74]{z-index:3;position:fixed;top:100px;left:50%;transform:translateX(-50%);padding:10px;border-radius:8px}p[data-v-bef92f74]{margin:0}.menu{display:flex;flex-direction:column;justify-content:center}button[data-v-8302f478]{width:100px;height:50px;margin:5px;outline:none;padding:10px;font-size:16px;border-radius:4px;box-sizing:border-box;border:1px solid #333;background-color:transparent;transition:all .3s ease;overflow:hidden}button span[data-v-8302f478]{display:inline-block;transform:translateY(20px);opacity:0;font-size:12px;transition:all .3s ease}button[data-v-8302f478]:hover{color:#fff;background-color:gray}button:hover span[data-v-8302f478]{transform:translateY(0);opacity:1}textarea[data-v-4301c68c]{font-size:14px}input[data-v-f11ea0d0]{outline:none;height:25px;font-size:16px}textarea[data-v-f11ea0d0]{font-size:14px}.search[data-v-260cb454]{border:1px solid #ddd;border-radius:4px}input[data-v-260cb454]{text-align:center;font-size:16px;height:25px;outline:none}.tool[data-v-260cb454]{display:flex;justify-content:space-around;padding:4px 0}.tool button[data-v-260cb454]{border-radius:4px;padding:5px;outline:none;border:none;flex:1;margin:0 2px}.tool button[data-v-260cb454]:hover{background-color:#ddd}input[type=checkbox][data-v-260cb454]{transform:scale(2);margin:0 15px 0}.book_item[data-v-260cb454]{overflow:hidden;display:flex;align-items:center;margin-top:10px;padding:10px;cursor:pointer;background-color:#eee}.book_active[data-v-260cb454]{background-color:#32cd32}.book_index[data-v-260cb454]{width:auto;height:30px;text-align:center;line-height:30px;border-radius:8px;padding:0 10px;background-color:#ffb6c1}.book_info[data-v-260cb454]{display:flex;justify-content:space-between}.book_list[data-v-260cb454]{height:calc(100vh - 125px);overflow-y:auto}a[data-v-c4c82b2c]{display:block;height:25px;transition:margin-left .3s ease}a[data-v-c4c82b2c]:hover{color:red;margin-left:10px}code[data-v-c4c82b2c]{display:inline-block;font-size:16px;font-family:Cascadia Mono,JetBrains Mono,Microsoft YaHei UI,serif;background-color:#f3f4f4;border-radius:4px}.author[data-v-c4c82b2c]{position:fixed;right:20px;bottom:20px}.author a[data-v-c4c82b2c]{padding:5px 10px;border-radius:4px}.author a[data-v-c4c82b2c]:hover{box-shadow:0 0 3px 3px #ccc;background-color:#ddd}.out{min-width:620px}.out,.out .box{flex:1;display:flex;flex-flow:column}a{text-decoration:none;color:#333}body,ul{margin:0;padding:0}ul{width:100%;height:40px;display:flex}ul li{display:block;text-align:center;line-height:40px;width:16%;list-style:none;cursor:pointer}ul li:hover{color:red}.active{color:#fff!important;background-color:hsla(0,0%,50%,.459);border-bottom:unset!important}ul li[data-v-de4729c0]{border-bottom:2px solid #333}a[data-v-de4729c0]{font-size:18px;color:blue}span[data-v-3974490a]{display:flex;justify-content:space-around;width:70px;white-space:nowrap}span i[data-v-3974490a]{font-style:normal}.edit_input[data-v-3974490a]{display:flex;justify-content:space-between;align-items:center;margin:10px 5px}
@@ -0,0 +1 @@
@font-face{font-family:Cascadia;src:url(../fonts/Cascadia-Code-Regular-2.97c09831.ttf)}.editor{display:flex;align-items:stretch;height:100vh}.left{width:calc(50% - 55px);min-width:500px;display:inline-block}.main{width:100%;height:calc(100vh - 64px);overflow-y:auto}textarea{min-height:20px;flex:1;outline:none;border-radius:4px;border:1px solid #ccc;font-size:14px;font-family:Cascadia,Microsoft YaHei UI,Arial,serif;line-height:20px;padding:10px 10px 10px}.fixed[data-v-ab8a8a34]{position:fixed;top:100px;left:50%;transform:translateX(-50%)}.half-circle-spinner [data-v-ab8a8a34],.half-circle-spinner[data-v-ab8a8a34]{box-sizing:border-box}.half-circle-spinner[data-v-ab8a8a34]{width:60px;height:60px;border-radius:100%;position:relative}.half-circle-spinner .circle[data-v-ab8a8a34]{content:"";position:absolute;width:100%;height:100%;border-radius:100%;border:6px solid transparent}.half-circle-spinner .circle.circle-1[data-v-ab8a8a34]{border-top-color:#ff1d5e;-webkit-animation:half-circle-spinner-animation-ab8a8a34 1s infinite;animation:half-circle-spinner-animation-ab8a8a34 1s infinite}.half-circle-spinner .circle.circle-2[data-v-ab8a8a34]{border-bottom-color:#ff1d5e;-webkit-animation:half-circle-spinner-animation-ab8a8a34 1s infinite alternate;animation:half-circle-spinner-animation-ab8a8a34 1s infinite alternate}@-webkit-keyframes half-circle-spinner-animation-ab8a8a34{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes half-circle-spinner-animation-ab8a8a34{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.warm[data-v-27eae50d]{position:fixed;top:100px;left:50%;transform:translateX(-50%);color:#eee;background-color:#ff1d5e;padding:20px;border-radius:8px;font-size:18px}button[data-v-27eae50d]{float:right;width:70px;height:35px;outline:none;border:unset;border-radius:8px;font-size:14px;transition:background-color .3s ease}.success[data-v-bef92f74],button[data-v-27eae50d]:hover{color:#333;background-color:#7fffd4}.success[data-v-bef92f74]{z-index:3;position:fixed;top:100px;left:50%;transform:translateX(-50%);padding:10px;border-radius:8px}p[data-v-bef92f74]{margin:0}.menu{display:flex;flex-direction:column;justify-content:center}button[data-v-7d09e592]{width:100px;height:50px;margin:5px;outline:none;padding:10px;font-size:16px;border-radius:4px;box-sizing:border-box;border:1px solid #333;background-color:transparent;transition:all .3s ease;overflow:hidden}button span[data-v-7d09e592]{display:inline-block;transform:translateY(20px);opacity:0;font-size:12px;transition:all .3s ease}button[data-v-7d09e592]:hover{color:#fff;background-color:gray}button:hover span[data-v-7d09e592]{transform:translateY(0);opacity:1}textarea[data-v-4301c68c]{font-size:14px}input[data-v-f11ea0d0]{outline:none;height:25px;font-size:16px}textarea[data-v-f11ea0d0]{font-size:14px}.search[data-v-260cb454]{border:1px solid #ddd;border-radius:4px}input[data-v-260cb454]{text-align:center;font-size:16px;height:25px;outline:none}.tool[data-v-260cb454]{display:flex;justify-content:space-around;padding:4px 0}.tool button[data-v-260cb454]{border-radius:4px;padding:5px;outline:none;border:none;flex:1;margin:0 2px}.tool button[data-v-260cb454]:hover{background-color:#ddd}input[type=checkbox][data-v-260cb454]{transform:scale(2);margin:0 15px 0}.book_item[data-v-260cb454]{overflow:hidden;display:flex;align-items:center;margin-top:10px;padding:10px;cursor:pointer;background-color:#eee}.book_active[data-v-260cb454]{background-color:#32cd32}.book_index[data-v-260cb454]{width:auto;height:30px;text-align:center;line-height:30px;border-radius:8px;padding:0 10px;background-color:#ffb6c1}.book_info[data-v-260cb454]{display:flex;justify-content:space-between}.book_list[data-v-260cb454]{height:calc(100vh - 125px);overflow-y:auto}a[data-v-c4c82b2c]{display:block;height:25px;transition:margin-left .3s ease}a[data-v-c4c82b2c]:hover{color:red;margin-left:10px}code[data-v-c4c82b2c]{display:inline-block;font-size:16px;font-family:Cascadia Mono,JetBrains Mono,Microsoft YaHei UI,serif;background-color:#f3f4f4;border-radius:4px}.author[data-v-c4c82b2c]{position:fixed;right:20px;bottom:20px}.author a[data-v-c4c82b2c]{padding:5px 10px;border-radius:4px}.author a[data-v-c4c82b2c]:hover{box-shadow:0 0 3px 3px #ccc;background-color:#ddd}.out{min-width:620px}.out,.out .box{flex:1;display:flex;flex-flow:column}a{text-decoration:none;color:#333}body,ul{margin:0;padding:0}ul{width:100%;height:40px;display:flex}ul li{display:block;text-align:center;line-height:40px;width:16%;list-style:none;cursor:pointer}ul li:hover{color:red}.active{color:#fff!important;background-color:hsla(0,0%,50%,.459);border-bottom:unset!important}ul li[data-v-de4729c0]{border-bottom:2px solid #333}a[data-v-de4729c0]{font-size:18px;color:blue}span[data-v-3974490a]{display:flex;justify-content:space-around;width:70px;white-space:nowrap}span i[data-v-3974490a]{font-style:normal}.edit_input[data-v-3974490a]{display:flex;justify-content:space-between;align-items:center;margin:10px 5px}
Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

@@ -1,150 +0,0 @@
body {
margin: 0;
}
.editor {
display: flex;
align-items: stretch;
}
.setbox,
.menu,
.outbox {
flex: 1;
display: flex;
flex-flow: column;
max-height: 100vh;
overflow-y: auto;
}
.menu {
justify-content: center;
max-width: 90px;
margin: 0 5px;
}
.menu .button {
width: 90px;
height: 30px;
min-height: 30px;
margin: 5px 0px;
cursor: pointer;
}
@keyframes stroker {
0% {
stroke-dashoffset: 0;
}
100% {
stroke-dashoffset: -240;
}
}
.button rect {
width: 100%;
height: 100%;
fill: transparent;
stroke: #666;
stroke-width: 2px;
}
.button rect.busy {
stroke: #fd1850;
stroke-dasharray: 30 90;
animation: stroker 1s linear infinite;
}
.button text {
text-anchor: middle;
dominant-baseline: middle;
}
.setbox {
min-width: 40em;
}
.rules {
overflow: auto;
}
.tabbox {
flex: 1;
display: flex;
flex-flow: column;
}
.rules > * {
display: flex;
margin: 2px 0;
}
.rules textarea {
flex: 1;
margin-left: 5px;
}
.rules > *,
.rules > * > div,
.rules textarea {
min-height: 1em;
}
textarea {
word-break: break-all;
}
.tabtitle {
display: flex;
z-index: 1;
justify-content: flex-end;
}
.tabtitle > div {
cursor: pointer;
padding: 1px 10px 0 10px;
border-bottom: 3px solid transparent;
font-weight: bold;
}
.tabtitle > .this {
color: #4f9da6;
border-bottom-color: #4ebbe4;
}
.tabbody {
flex: 1;
display: flex;
margin-top: -1px;
border: 1px solid #a9a9a9;
height: 0;
}
.tabbody > * {
flex: 1;
flex-flow: column;
display: none;
}
.tabbody > .this {
display: flex;
}
.tabbody > * > .titlebar {
display: flex;
}
.tabbody > * > .titlebar > * {
flex: 1;
margin: 1px 1px 1px 1px;
}
.tabbody > * > .context {
flex: 1;
flex-flow: column;
border: 0;
padding: 5px;
overflow-y: auto;
}
.tabbody > * > .inputbox {
border: 0;
border-bottom: #a9a9a9 solid 1px;
height: 15px;
text-align: center;
}
.link > * {
display: flex;
margin: 5px;
border-bottom: 1px solid;
text-decoration: none;
}
#RuleList > label > * {
background: #eee;
padding-left: 3px;
margin: 2px 0;
cursor: pointer;
}
#RuleList input[type="radio"] {
display: none;
}
#RuleList input[type="radio"]:checked + * {
background: #15cda8;
}
.isError {
color: #ff0000;
}
+1 -439
View File
@@ -1,439 +1 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>阅读3.0源编辑器_V4.0</title>
<link rel="icon" href="../favicon.ico">
<link rel="stylesheet" type="text/css" href="index.css"/>
</head>
<body>
<div class="editor">
<div class="setbox">
<div>
<a href="../index.html">←主页</a>
<b>书源</b>
</div>
<div class="rules">
<div><b>基本</b></div>
<div>
<div>源域名 :</div>
<textarea rows="1" id="bookSourceUrl" class="base" title="bookSourceUrl"
placeholder="<必填>通常填写网站主页,例: https://www.qidian.com"></textarea>
</div>
<div>
<div>源类型 :</div>
<textarea rows="1" id="bookSourceType" class="base" title="bookSourceType"
placeholder="&lt;必填&gt;0:文本 1:音频 2:图片 3:文件(只提供下载的网站)"></textarea>
</div>
<div>
<div>源名称 :</div>
<textarea rows="1" id="bookSourceName" class="base" title="bookSourceName"
placeholder="&lt;必填&gt;会显示在源列表"></textarea>
</div>
<div>
<div>源分组 :</div>
<textarea rows="1" id="bookSourceGroup" class="base" title="bookSourceGroup"
placeholder="&lt;选填&gt;描述源的特征信息"></textarea>
</div>
<div>
<div>源注释 :</div>
<textarea rows="1" id="bookSourceComment" class="base" title="bookSourceComment"
placeholder="&lt;选填&gt;描述源作者和状态"></textarea>
</div>
<div>
<div>登录地址:</div>
<textarea rows="1" id="loginUrl" class="base" title="loginUrl"
placeholder="&lt;选填&gt;填写网站登录网址,仅在需要登录的源有用"></textarea>
</div>
<div>
<div>登录界面:</div>
<textarea rows="3" id="loginUi" class="base" title="loginUi"
placeholder="&lt;选填&gt;自定义登录界面"></textarea>
</div>
<div>
<div>登录检测:</div>
<textarea rows="3" id="loginCheckJs" class="base" title="loginCheckJs"
placeholder="&lt;选填&gt;登录检测js"></textarea>
</div>
<div>
<div>并发率 :</div>
<textarea rows="1" id="concurrentRate" class="base" title="concurrentRate"
placeholder="&lt;选填&gt;并发率"></textarea>
</div>
<div>
<div>请求头 :</div>
<textarea rows="3" id="header" class="base" title="header"
placeholder="&lt;选填&gt;客户端标识"></textarea>
</div>
<div>
<div>链接验证:</div>
<textarea rows="1" id="bookUrlPattern" class="base" title="bookUrlPattern"
placeholder="&lt;选填&gt;当详情页URL与源URL的域名不一致时有效,用于添加网址"></textarea>
</div>
<p></p>
<div><b>搜索</b></div>
<div>
<div>搜索地址:</div>
<textarea rows="1" id="searchUrl" class="base" title="searchUrl"
placeholder="[域名可省略]/search.php@kw={{key}}"></textarea>
</div>
<div>
<div>校验文字:</div>
<textarea rows="1" id="ruleSearch_checkKeyWord" class="ruleSearch"
title="checkKeyWord"
placeholder="校验关键字"></textarea>
</div>
<div>
<div>列表规则:</div>
<textarea rows="1" id="ruleSearch_bookList" class="ruleSearch" title="bookList"
placeholder="选择书籍节点 (规则结果为List&lt;Element&gt;)"></textarea>
</div>
<div>
<div>书名规则:</div>
<textarea rows="1" id="ruleSearch_name" class="ruleSearch" title="name"
placeholder="选择节点书名 (规则结果为String)"></textarea>
</div>
<div>
<div>作者规则:</div>
<textarea rows="1" id="ruleSearch_author" class="ruleSearch" title="author"
placeholder="选择节点作者 (规则结果为String)"></textarea>
</div>
<div>
<div>分类规则:</div>
<textarea rows="1" id="ruleSearch_kind" class="ruleSearch" title="kind"
placeholder="选择节点分类信息 (规则结果为String)"></textarea>
</div>
<div>
<div>字数规则:</div>
<textarea rows="1" id="ruleSearch_wordCount" class="ruleSearch" title="wordCount"
placeholder="选择节点字数信息 (规则结果为String)"></textarea>
</div>
<div>
<div>最新章节:</div>
<textarea rows="1" id="ruleSearch_lastChapter" class="ruleSearch"
title="lastChapter"
placeholder="选择节点最新章节 (规则结果为String)"></textarea>
</div>
<div>
<div>简介规则:</div>
<textarea rows="1" id="ruleSearch_intro" class="ruleSearch" title="intro"
placeholder="选择节点书籍简介 (规则结果为String)"></textarea>
</div>
<div>
<div>封面规则:</div>
<textarea rows="1" id="ruleSearch_coverUrl" class="ruleSearch" title="coverUrl"
placeholder="选择节点书籍封面 (规则结果为String类型的url)"></textarea>
</div>
<div>
<div>详情地址:</div>
<textarea rows="1" id="ruleSearch_bookUrl" class="ruleSearch" title="bookUrl"
placeholder="选择书籍详情页网址 (规则结果为String类型的url)"></textarea>
</div>
<p></p>
<div><b>发现</b></div>
<div>
<div>发现地址:</div>
<textarea rows="6" id="exploreUrl" class="base" title="exploreUrl"
placeholder="内容能显示在发现菜单&#10;每行一条发现分类(网址域名可省略),例:&#10;名称1::网址(Url)1&#10;名称2::网址(Url)2&#10;..."></textarea>
</div>
<div>
<div>列表规则:</div>
<textarea rows="1" id="ruleExplore_bookList" class="ruleExplore" title="bookList"
placeholder="选择书籍节点 (规则结果为List&lt;Element&gt;)"></textarea>
</div>
<div>
<div>书名规则:</div>
<textarea rows="1" id="ruleExplore_name" class="ruleExplore" title="name"
placeholder="选择节点书名 (规则结果为String)"></textarea>
</div>
<div>
<div>作者规则:</div>
<textarea rows="1" id="ruleExplore_author" class="ruleExplore" title="author"
placeholder="选择节点作者 (规则结果为String)"></textarea>
</div>
<div>
<div>分类规则:</div>
<textarea rows="1" id="ruleExplore_kind" class="ruleExplore" title="kind"
placeholder="选择节点分类信息 (规则结果为String)"></textarea>
</div>
<div>
<div>字数规则:</div>
<textarea rows="1" id="ruleExplore_wordCount" class="ruleExplore" title="wordCount"
placeholder="选择节点字数信息 (规则结果为String)"></textarea>
</div>
<div>
<div>最新章节:</div>
<textarea rows="1" id="ruleExplore_lastChapter" class="ruleExplore"
title="lastChapter"
placeholder="选择节点最新章节 (规则结果为String)"></textarea>
</div>
<div>
<div>简介规则:</div>
<textarea rows="1" id="ruleExplore_intro" class="ruleExplore" title="intro"
placeholder="选择节点书籍简介 (规则结果为String)"></textarea>
</div>
<div>
<div>封面规则:</div>
<textarea rows="1" id="ruleExplore_coverUrl" class="ruleExplore" title="coverUrl"
placeholder="选择节点书籍封面 (规则结果为String类型的url)"></textarea>
</div>
<div>
<div>详情地址:</div>
<textarea rows="1" id="ruleExplore_bookUrl" class="ruleExplore" title="bookUrl"
placeholder="选择书籍详情页网址 (规则结果为String类型的url)"></textarea>
</div>
<p></p>
<div><b>详情</b></div>
<div>
<div>预处理 :</div>
<textarea rows="3" id="ruleBookInfo_init" class="ruleBookInfo" title="init"
placeholder="用于加速详情信息检索,只支持AllInOne规则"></textarea>
</div>
<div>
<div>书名规则:</div>
<textarea rows="1" id="ruleBookInfo_name" class="ruleBookInfo" title="name"
placeholder="选择节点书名 (规则结果为String)"></textarea>
</div>
<div>
<div>作者规则:</div>
<textarea rows="1" id="ruleBookInfo_author" class="ruleBookInfo" title="author"
placeholder="选择节点作者 (规则结果为String)"></textarea>
</div>
<div>
<div>分类规则:</div>
<textarea rows="1" id="ruleBookInfo_kind" class="ruleBookInfo" title="kind"
placeholder="选择节点分类信息 (规则结果为String)"></textarea>
</div>
<div>
<div>字数规则:</div>
<textarea rows="1" id="ruleBookInfo_wordCount" class="ruleBookInfo"
title="wordCount"
placeholder="选择节点字数信息 (规则结果为String)"></textarea>
</div>
<div>
<div>最新章节:</div>
<textarea rows="1" id="ruleBookInfo_lastChapter" class="ruleBookInfo"
title="lastChapter"
placeholder="选择节点最新章节 (规则结果为String)"></textarea>
</div>
<div>
<div>简介规则:</div>
<textarea rows="1" id="ruleBookInfo_intro" class="ruleBookInfo" title="intro"
placeholder="选择节点书籍简介 (规则结果为String)"></textarea>
</div>
<div>
<div>封面规则:</div>
<textarea rows="1" id="ruleBookInfo_coverUrl" class="ruleBookInfo" title="coverUrl"
placeholder="选择节点书籍封面 (规则结果为String类型的url)"></textarea>
</div>
<div>
<div>目录地址:</div>
<textarea rows="1" id="ruleBookInfo_tocUrl" class="ruleBookInfo" title="tocUrl"
placeholder="选择书籍详情页网址 (规则结果为String类型的url, 与详情页相同时可省略)"></textarea>
</div>
<p></p>
<div><b>目录</b></div>
<div>
<div>列表规则:</div>
<textarea rows="3" id="ruleToc_chapterList" class="ruleToc" title="chapterList"
placeholder="选择目录列表的章节节点 (规则结果为List&lt;Element&gt;)"></textarea>
</div>
<div>
<div>章节名称:</div>
<textarea rows="1" id="ruleToc_chapterName" class="ruleToc" title="chapterName"
placeholder="选择章节名称 (规则结果为String)"></textarea>
</div>
<div>
<div>章节地址:</div>
<textarea rows="1" id="ruleToc_chapterUrl" class="ruleToc" title="chapterUrl"
placeholder="选择章节链接 (规则结果为String类型的Url)"></textarea>
</div>
<div>
<div>卷名标识:</div>
<textarea rows="1" id="ruleToc_isVolume" class="ruleToc" title="isVolume"
placeholder="章节名称是否是卷名 (规则结果为Bool)"></textarea>
</div>
<div>
<div>收费标识:</div>
<textarea rows="1" id="ruleToc_isVip" class="ruleToc" title="isVip"
placeholder="章节是否为VIP章节 (规则结果为Bool)"></textarea>
</div>
<div>
<div>购买标识:</div>
<textarea rows="1" id="ruleToc_isPay" class="ruleToc" title="isPay"
placeholder="章节是否为已购买 (规则结果为Bool)"></textarea>
</div>
<div>
<div>章节信息:</div>
<textarea rows="1" id="ruleToc_updateTime" class="ruleToc" title="updateTime"
placeholder="选择章节信息 (规则结果为String)"></textarea>
</div>
<div>
<div>翻页规则:</div>
<textarea rows="1" id="ruleToc_nextTocUrl" class="ruleToc" title="nextTocUrl"
placeholder="选择目录下一页链接 (规则结果为List&lt;String&gt;或String)"></textarea>
</div>
<p></p>
<div><b>正文</b></div>
<div>
<div>脚本注入:</div>
<textarea rows="3" id="ruleContent_webJs" class="ruleContent" title="webJs"
placeholder="注入javascript,用于模拟鼠标点击等,必须有返回值,一般为String类型"></textarea>
</div>
<div>
<div>正文规则:</div>
<textarea rows="1" id="ruleContent_content" class="ruleContent" title="content"
placeholder="选择正文内容 (规则结果为String)"></textarea>
</div>
<div>
<div>翻页规则:</div>
<textarea rows="1" id="ruleContent_nextContentUrl" class="ruleContent"
title="nextContentUrl"
placeholder="选择下一分页(不是下一章)链接 (规则结果为String类型的Url)"></textarea>
</div>
<div>
<div>资源正则:</div>
<textarea rows="1" id="ruleContent_sourceRegex" class="ruleContent"
title="sourceRegex"
placeholder="匹配资源的url特征,用于嗅探"></textarea>
</div>
<div>
<div>替换规则:</div>
<textarea rows="1" id="ruleContent_replaceRegex" class="ruleContent"
title="replaceRegex"
placeholder="多页内容合并后替换,用于正文净化"></textarea>
</div>
<div>
<div>图片样式:</div>
<textarea rows="1" id="ruleContent_imageStyle" class="ruleContent"
title="imageStyle"
placeholder="FULL:铺满 不填:默认样式"></textarea>
</div>
<div>
<div>购买操作:</div>
<textarea rows="1" id="ruleContent_payAction" class="ruleContent"
title="payAction"
placeholder="购买章节 返回链接或js"></textarea>
</div>
<p></p>
<div><b>其它规则</b></div>
<div>
<div>启用搜索:</div>
<textarea rows="1" id="enabled" class="base" title="enabled"
placeholder="启用: true 关闭: false (可选,默认true)"></textarea>
</div>
<div>
<div>启用发现:</div>
<textarea rows="1" id="enabledExplore" class="base" title="enabledExplore"
placeholder="启用: true 关闭: false (可选,默认true)"></textarea>
</div>
<div>
<div>搜索权重:</div>
<textarea rows="1" id="weight" class="base" title="weight"
placeholder="整数: 0~N (可选,默认0) | 数字越大越靠前"></textarea>
</div>
<div>
<div>排序编号:</div>
<textarea rows="1" id="customOrder" class="base" title="customOrder"
placeholder="整数: 0~N (可选,默认0) | 数字越小越靠前"></textarea>
</div>
<div style="display:none;">
<div>更新时间:</div>
<textarea rows="1" id="lastUpdateTime" class="base" title="lastUpdateTime"
placeholder="毫秒级时间戳 (自动生成) | 请勿手动填写"></textarea>
</div>
</div>
</div>
<div class="menu">
<svg class="button">
<text x="50%" y="55%">⇈推送源</text>
<rect id="push"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">⇊拉取源</text>
<rect id="pull"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">⋘编辑源</text>
<rect id="editor"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">⋙生成源</text>
<rect id="conver"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">✗清空表单</text>
<rect id="initial"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">↶撤销操作</text>
<rect id="undo"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">↷重做操作</text>
<rect id="redo"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">⇏调试源</text>
<rect id="debug"></rect>
</svg>
<svg class="button">
<text x="50%" y="55%">✓保存源</text>
<rect id="accept"></rect>
</svg>
</div>
<div class="outbox">
<div class="tabbox">
<div class="tabtitle">
<div name="编辑源" class="tab1 this">编辑源</div>
<div name="调试源" class="tab2">调试源</div>
<div name="源列表" class="tab3">源列表</div>
<div name="帮助信息" class="tab4">帮助信息</div>
</div>
<div class="tabbody">
<div class="tab1 this">
<textarea class="context" id="RuleJsonString"
placeholder="这里输出序列化的JSON数据,可直接导入'阅读'APP"></textarea>
</div>
<div class="tab2">
<input type="text" class="inputbox" id="DebugKey" placeholder="输入搜索关键字,默认搜「我的」">
<textarea class="context" id="DebugConsole" placeholder="这里用于输出调试信息"></textarea>
</div>
<div class="tab3">
<input type="text" class="inputbox" id="Filter"
placeholder="输入筛选关键词(源名称、源URL或源分组)后按回车筛选源">
<div class="titlebar">
<button id="Import">导入源文件</button>
<button id="Export">导出源文件</button>
<button id="Delete">删除选中源</button>
<button id="ClrAll">清空列表</button>
</div>
<div class="context" id="RuleList"></div>
</div>
<div class="tab4">
<div class="context link">
<a target="_blank" href="https://alanskycn.gitee.io/teachme">源制作教程</a>
<a target="_blank"
href="https://zhuanlan.zhihu.com/p/29436838">Xpath基础教程</a>
<a target="_blank"
href="https://zhuanlan.zhihu.com/p/32187820">Xpath高级教程</a>
<a target="_blank" href="https://www.w3cschool.cn/regex_rmjc">正则表达式教程</a>
<a target="_blank" href="https://regexr.com">正则表达式在线验证工具</a>
<div>^$()[]{}.?+*| 这些是Java正则特殊符号,匹配需转义
<br>(?s) 前缀表示跨行解析
<br>(?m) 前缀表示逐行匹配
<br>(?i) 前缀表示忽略大小写
</div>
<a target="_blank" href="https://www.beta.browxy.com">代码在线运行工具</a>
</div>
</div>
</div>
</div>
</div>
</div>
<script type="text/javascript" src="index.js"></script>
</body>
</html>
<!doctype html><html lang=""><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="./favicon.ico"><title>legado_web_editor</title><script defer="defer" src="./js/chunk-vendors.86212f98.js"></script><script defer="defer" src="./js/app.836bd8bb.js"></script><link href="./css/app.37e72839.css" rel="stylesheet"></head><body><noscript><strong>We're sorry but legado_web_editor doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id="app"></div></body></html>
-516
View File
@@ -1,516 +0,0 @@
// 简化js原生选择器
function $(selector) { return document.querySelector(selector); }
function $$(selector) { return document.querySelectorAll(selector); }
// 读写Hash值(val未赋值时为读取)
function hashParam(key, val) {
let hashstr = decodeURIComponent(window.location.hash);
let regKey = new RegExp(`${key}=([^&]*)`);
let getVal = regKey.test(hashstr) ? hashstr.match(regKey)[1] : null;
if (val == undefined) return getVal;
if (hashstr == '' || hashstr == '#') {
window.location.hash = `#${key}=${val}`;
}
else {
if (getVal) window.location.hash = hashstr.replace(getVal, val);
else {
window.location.hash = hashstr.indexOf(key) > -1 ? hashstr.replace(regKey, `${key}=${val}`) : `${hashstr}&${key}=${val}`;
}
}
}
// 创建源规则容器对象
function Container() {
let ruleJson = {};
let searchJson = {};
let exploreJson = {};
let bookInfoJson = {};
let tocJson = {};
let contentJson = {};
// 基本以及其他
$$('.rules .base').forEach(item => ruleJson[item.title] = '');
ruleJson.lastUpdateTime = 0;
ruleJson.customOrder = 0;
ruleJson.weight = 0;
ruleJson.enabled = true;
ruleJson.enabledExplore = true;
// 搜索规则
$$('.rules .ruleSearch').forEach(item => searchJson[item.title] = '');
ruleJson.ruleSearch = searchJson;
// 发现规则
$$('.rules .ruleExplore').forEach(item => exploreJson[item.title] = '');
ruleJson.ruleExplore = exploreJson;
// 详情页规则
$$('.rules .ruleBookInfo').forEach(item => bookInfoJson[item.title] = '');
ruleJson.ruleBookInfo = bookInfoJson;
// 目录规则
$$('.rules .ruleToc').forEach(item => tocJson[item.title] = '');
ruleJson.ruleToc = tocJson;
// 正文规则
$$('.rules .ruleContent').forEach(item => contentJson[item.title] = '');
ruleJson.ruleContent = contentJson;
return ruleJson;
}
// 选项卡Tab切换事件处理
function showTab(tabName) {
$$('.tabtitle>*').forEach(node => { node.className = node.className.replace(' this', ''); });
$$('.tabbody>*').forEach(node => { node.className = node.className.replace(' this', ''); });
$(`.tabbody>.${$(`.tabtitle>*[name=${tabName}]`).className}`).className += ' this';
$(`.tabtitle>*[name=${tabName}]`).className += ' this';
hashParam('tab', tabName);
}
// 源列表列表标签构造函数
function newRule(rule) {
return `<label for="${rule.bookSourceUrl}"><input type="radio" name="rule" id="${rule.bookSourceUrl}"><div>${rule.bookSourceName}<br>${rule.bookSourceUrl}</div></label>`;
}
// 缓存规则列表
var RuleSources = [];
if (localStorage.getItem('BookSources')) {
RuleSources = JSON.parse(localStorage.getItem('BookSources'));
RuleSources.forEach(item => $('#RuleList').innerHTML += newRule(item));
}
// 页面加载完成事件
window.onload = () => {
$$('.tabtitle>*').forEach(item => {
item.addEventListener('click', () => {
showTab(item.innerHTML);
});
});
if (hashParam('tab')) showTab(hashParam('tab'));
}
// 获取数据
function HttpGet(url) {
return fetch(hashParam('domain') ? hashParam('domain') + url : url)
.then(res => res.json()).catch(err => console.error('Error:', err));
}
// 提交数据
function HttpPost(url, data) {
return fetch(hashParam('domain') ? hashParam('domain') + url : url, {
body: JSON.stringify(data),
method: 'POST',
mode: "cors",
headers: new Headers({
'Content-Type': 'application/json;charset=utf-8'
})
}).then(res => res.json()).catch(err => console.error('Error:', err));
}
// 将源表单转化为源对象
function rule2json() {
let RuleJSON = Container();
// 转换base
Object.keys(RuleJSON).forEach(key => {
if (!key.startsWith("rule")) {
RuleJSON[key] = $('#' + key).value;
}
});
// 转换搜索规则
let searchJson = {};
Object.keys(RuleJSON.ruleSearch).forEach(key => {
if ($('#' + 'ruleSearch_' + key).value)
searchJson[key] = $('#' + 'ruleSearch_' + key).value;
});
RuleJSON.ruleSearch = searchJson;
// 转换发现规则
let exploreJson = {};
Object.keys(RuleJSON.ruleExplore).forEach(key => {
if ($('#' + 'ruleExplore_' + key).value)
exploreJson[key] = $('#' + 'ruleExplore_' + key).value;
});
RuleJSON.ruleExplore = exploreJson;
// 转换详情页规则
let bookInfoJson = {};
Object.keys(RuleJSON.ruleBookInfo).forEach(key => {
if ($('#' + 'ruleBookInfo_' + key).value)
bookInfoJson[key] = $('#' + 'ruleBookInfo_' + key).value;
});
RuleJSON.ruleBookInfo = bookInfoJson;
// 转换目录规则
let tocJson = {};
Object.keys(RuleJSON.ruleToc).forEach(key => {
if ($('#' + 'ruleToc_' + key).value)
tocJson[key] = $('#' + 'ruleToc_' + key).value;
});
RuleJSON.ruleToc = tocJson;
// 转换正文规则
let contentJson = {};
Object.keys(RuleJSON.ruleContent).forEach(key => {
if ($('#' + 'ruleContent_' + key).value)
contentJson[key] = $('#' + 'ruleContent_' + key).value;
});
RuleJSON.ruleContent = contentJson;
RuleJSON.lastUpdateTime = new Date().getTime();
RuleJSON.customOrder = RuleJSON.customOrder == '' ? 0 : parseInt(RuleJSON.customOrder);
RuleJSON.weight = RuleJSON.weight == '' ? 0 : parseInt(RuleJSON.weight);
RuleJSON.bookSourceType == RuleJSON.bookSourceType == '' ? 0 : parseInt(RuleJSON.bookSourceType);
RuleJSON.enabled = RuleJSON.enabled == '' || String(RuleJSON.enabled).toLocaleLowerCase().replace(/^\s*|\s*$/g, '') == 'true';
RuleJSON.enabledExplore = RuleJSON.enabledExplore == '' || String(RuleJSON.enabledExplore).toLocaleLowerCase().replace(/^\s*|\s*$/g, '') == 'true';
return RuleJSON;
}
// 将源对象填充到源表单
function json2rule(RuleEditor) {
let RuleJSON = Container();
// 转换base
Object.keys(RuleJSON).forEach(key => {
if (!key.startsWith("rule")) {
let val = RuleEditor[key];
if (typeof val == "number") {
$("#" + key).value = val ? String(val) : '0';
}
else if (typeof val == "boolean") {
$("#" + key).value = val ? String(val) : 'false';
}
else {
$("#" + key).value = val ? String(val) : '';
}
}
});
// 转换搜索规则
if (RuleEditor.ruleSearch) {
let searchJson = RuleEditor.ruleSearch;
Object.keys(RuleJSON.ruleSearch).forEach(key => {
$('#' + 'ruleSearch_' + key).value = searchJson[key] ? searchJson[key] : '';
});
}
// 转换发现规则
if (RuleEditor.ruleExplore) {
let exploreJson = RuleEditor.ruleExplore;
Object.keys(RuleJSON.ruleExplore).forEach(key => {
$('#' + 'ruleExplore_' + key).value = exploreJson[key] ? exploreJson[key] : '';
});
}
// 转换详情页规则
if (RuleEditor.ruleBookInfo) {
let bookInfoJson = RuleEditor.ruleBookInfo;
Object.keys(RuleJSON.ruleBookInfo).forEach(key => {
$('#' + 'ruleBookInfo_' + key).value = bookInfoJson[key] ? bookInfoJson[key] : '';
});
}
// 转换目录规则
if (RuleEditor.ruleToc) {
let tocJson = RuleEditor.ruleToc;
Object.keys(RuleJSON.ruleToc).forEach(key => {
$('#' + 'ruleToc_' + key).value = tocJson[key] ? tocJson[key] : '';
});
}
// 转换正文规则
if (RuleEditor.ruleContent) {
let contentJson = RuleEditor.ruleContent;
Object.keys(RuleJSON.ruleContent).forEach(key => {
$('#' + 'ruleContent_' + key).value = contentJson[key] ? contentJson[key] : '';
});
}
}
// 记录操作过程
var course = { "old": [], "now": {}, "new": [] };
if (localStorage.getItem('bookSourceCourse')) {
course = JSON.parse(localStorage.getItem('bookSourceCourse'));
json2rule(course.now);
}
else {
course.now = rule2json();
window.localStorage.setItem('bookSourceCourse', JSON.stringify(course));
}
function todo() {
course.old.push(Object.assign({}, course.now));
course.now = rule2json();
course.new = [];
if (course.old.length > 50) course.old.shift(); // 限制历史记录堆栈大小
localStorage.setItem('bookSourceCourse', JSON.stringify(course));
}
function undo() {
course = JSON.parse(localStorage.getItem('bookSourceCourse'));
if (course.old.length > 0) {
course.new.push(course.now);
course.now = course.old.pop();
localStorage.setItem('bookSourceCourse', JSON.stringify(course));
json2rule(course.now);
}
}
function redo() {
course = JSON.parse(localStorage.getItem('bookSourceCourse'));
if (course.new.length > 0) {
course.old.push(course.now);
course.now = course.new.pop();
localStorage.setItem('bookSourceCourse', JSON.stringify(course));
json2rule(course.now);
}
}
function setRule(editRule) {
let checkRule = RuleSources.find(x => x.bookSourceUrl == editRule.bookSourceUrl);
if ($(`input[id="${editRule.bookSourceUrl}"]`)) {
Object.keys(checkRule).forEach(key => { checkRule[key] = editRule[key]; });
$(`input[id="${editRule.bookSourceUrl}"]+*`).innerHTML = `${editRule.bookSourceName}<br>${editRule.bookSourceUrl}`;
} else {
RuleSources.push(editRule);
$('#RuleList').innerHTML += newRule(editRule);
}
}
$$('input').forEach((item) => { item.addEventListener('change', () => { todo() }) });
$$('textarea').forEach((item) => { item.addEventListener('change', () => { todo() }) });
// 处理按钮点击事件
$('.menu').addEventListener('click', e => {
let thisNode = e.target;
thisNode = thisNode.parentNode.nodeName == 'svg' ? thisNode.parentNode.querySelector('rect') :
thisNode.nodeName == 'svg' ? thisNode.querySelector('rect') : null;
if (!thisNode) return;
if (thisNode.getAttribute('class') == 'busy') return;
thisNode.setAttribute('class', 'busy');
switch (thisNode.id) {
case 'push':
$$('#RuleList>label>div').forEach(item => { item.className = ''; });
(async () => {
await HttpPost(`/saveBookSources`, RuleSources).then(json => {
if (json.isSuccess) {
let okData = json.data;
if (Array.isArray(okData)) {
let failMsg = ``;
if (RuleSources.length > okData.length) {
RuleSources.forEach(item => {
if (okData.find(x => x.bookSourceUrl == item.bookSourceUrl)) { }
else { $(`#RuleList #${item.bookSourceUrl}+*`).className += 'isError'; }
});
failMsg = '\n推送失败的源将用红色字体标注!';
}
alert(`批量推送源到「阅读3.0APP」\n共计: ${RuleSources.length} 条\n成功: ${okData.length} 条\n失败: ${RuleSources.length - okData.length} 条${failMsg}`);
}
else {
alert(`批量推送源到「阅读3.0APP」成功!\n共计: ${RuleSources.length} 条`);
}
}
else {
alert(`批量推送源失败!\nErrorMsg: ${json.errorMsg}`);
}
}).catch(err => { alert(`批量推送源失败,无法连接到「阅读3.0APP」!\n${err}`); });
thisNode.setAttribute('class', '');
})();
return;
case 'pull':
showTab('源列表');
(async () => {
await HttpGet(`/getBookSources`).then(json => {
if (json.isSuccess) {
$('#RuleList').innerHTML = ''
localStorage.setItem('BookSources', JSON.stringify(RuleSources = json.data));
RuleSources.forEach(item => {
$('#RuleList').innerHTML += newRule(item);
});
alert(`成功拉取 ${RuleSources.length} 条源`);
}
else {
alert(`批量拉取源失败!\nErrorMsg: ${json.errorMsg}`);
}
}).catch(err => { alert(`批量拉取源失败,无法连接到「阅读3.0APP」!\n${err}`); });
thisNode.setAttribute('class', '');
})();
return;
case 'editor':
if ($('#RuleJsonString').value == '') break;
try {
json2rule(JSON.parse($('#RuleJsonString').value));
todo();
} catch (error) {
console.log(error);
alert(error);
}
break;
case 'conver':
showTab('编辑源');
$('#RuleJsonString').value = JSON.stringify(rule2json(), null, 4);
break;
case 'initial':
$$('.rules textarea').forEach(item => { item.value = '' });
todo();
break;
case 'undo':
undo()
break;
case 'redo':
redo()
break;
case 'debug':
showTab('调试源');
let wsOrigin = (hashParam('domain') || location.origin).replace(/^.*?:/, 'ws:').replace(/\d+$/, (port) => (parseInt(port) + 1));
let DebugInfos = $('#DebugConsole');
function DebugPrint(msg) { DebugInfos.value += `\n${msg}`; DebugInfos.scrollTop = DebugInfos.scrollHeight; }
let saveRule = [rule2json()];
HttpPost(`/saveBookSources`, saveRule).then(sResult => {
if (sResult.isSuccess) {
let sKey = DebugKey.value ? DebugKey.value : '我的';
$('#DebugConsole').value = `源《${saveRule[0].bookSourceName}》保存成功!使用搜索关键字“${sKey}”开始调试...`;
let ws = new WebSocket(`${wsOrigin}/bookSourceDebug`);
ws.onopen = () => {
ws.send(`{"tag":"${saveRule[0].bookSourceUrl}", "key":"${sKey}"}`);
};
ws.onmessage = (msg) => {
console.log('[调试]', msg);
DebugPrint(msg.data);
};
ws.onerror = (err) => {
throw `${err.data}`;
}
ws.onclose = () => {
thisNode.setAttribute('class', '');
DebugPrint(`\n调试服务已关闭!`);
}
} else throw `${sResult.errorMsg}`;
}).catch(err => {
DebugPrint(`调试过程意外中止,以下是详细错误信息:\n${err}`);
thisNode.setAttribute('class', '');
});
return;
case 'accept':
(async () => {
let saveRule = [rule2json()];
await HttpPost(`/saveBookSource`, saveRule[0]).then(json => {
alert(json.isSuccess ? `源《${saveRule[0].bookSourceName}》已成功保存到「阅读3.0APP」` : `源《${saveRule[0].bookSourceName}》保存失败!\nErrorMsg: ${json.errorMsg}`);
setRule(saveRule[0]);
}).catch(err => { alert(`保存源失败,无法连接到「阅读3.0APP」!\n${err}`); });
thisNode.setAttribute('class', '');
})();
return;
default:
}
setTimeout(() => { thisNode.setAttribute('class', ''); }, 500);
});
$('#DebugKey').addEventListener('keydown', e => {
if (e.keyCode == 13) {
let clickEvent = document.createEvent('MouseEvents');
clickEvent.initEvent("click", true, false);
$('#debug').dispatchEvent(clickEvent);
}
});
$('#Filter').addEventListener('keydown', e => {
if (e.keyCode == 13) {
let cashList = [];
$('#RuleList').innerHTML = "";
let sKey = Filter.value ? Filter.value : '';
if (sKey == '') {
cashList = RuleSources;
} else {
let patt = new RegExp(sKey);
RuleSources.forEach(source => {
if (patt.test(source.bookSourceUrl) || patt.test(source.bookSourceName) || patt.test(source.bookSourceGroup)) {
cashList.push(source);
}
})
}
cashList.forEach(source => {
$('#RuleList').innerHTML += newRule(source);
})
}
});
// 列表规则更改事件
$('#RuleList').addEventListener('click', e => {
let editRule = null;
if (e.target && e.target.getAttribute('name') == 'rule') {
editRule = rule2json();
json2rule(RuleSources.find(x => x.bookSourceUrl == e.target.id));
} else return;
if (editRule.bookSourceUrl == '') return;
if (editRule.bookSourceName == '') editRule.bookSourceName = editRule.bookSourceUrl.replace(/.*?\/\/|\/.*/g, '');
setRule(editRule);
localStorage.setItem('BookSources', JSON.stringify(RuleSources));
});
// 处理列表按钮事件
$('.tab3>.titlebar').addEventListener('click', e => {
let thisNode = e.target;
if (thisNode.nodeName != 'BUTTON') return;
switch (thisNode.id) {
case 'Import':
let fileImport = document.createElement('input');
fileImport.type = 'file';
fileImport.accept = '.json';
fileImport.addEventListener('change', () => {
let file = fileImport.files[0];
let reader = new FileReader();
reader.onloadend = function (evt) {
if (evt.target.readyState == FileReader.DONE) {
let fileText = evt.target.result;
try {
let fileJson = JSON.parse(fileText);
let newSources = [];
newSources.push(...fileJson);
if (window.confirm(`如何处理导入的源?\n"确定": 覆盖当前列表(不会删除APP源)\n"取消": 插入列表尾部(自动忽略重复源)`)) {
localStorage.setItem('BookSources', JSON.stringify(RuleSources = newSources));
$('#RuleList').innerHTML = ''
RuleSources.forEach(item => {
$('#RuleList').innerHTML += newRule(item);
});
}
else {
newSources = newSources.filter(item => !JSON.stringify(RuleSources).includes(item.bookSourceUrl));
RuleSources.push(...newSources);
localStorage.setItem('BookSources', JSON.stringify(RuleSources));
newSources.forEach(item => {
$('#RuleList').innerHTML += newRule(item);
});
}
alert(`成功导入 ${newSources.length} 条源`);
}
catch (err) {
alert(`导入源文件失败!\n${err}`);
}
}
};
reader.readAsText(file);
}, false);
fileImport.click();
break;
case 'Export':
let fileExport = document.createElement('a');
fileExport.download = `Rules${Date().replace(/.*?\s(\d+)\s(\d+)\s(\d+:\d+:\d+).*/, '$2$1$3').replace(/:/g, '')}.json`;
let myBlob = new Blob([JSON.stringify(RuleSources, null, 4)], { type: "application/json" });
fileExport.href = window.URL.createObjectURL(myBlob);
fileExport.click();
break;
case 'Delete':
let selectRule = $('#RuleList input:checked');
if (!selectRule) {
alert(`没有源被选中!`);
return;
}
if (confirm(`确定要删除选定源吗?\n(同时删除APP内源)`)) {
let selectRuleUrl = selectRule.id;
let deleteSources = RuleSources.filter(item => item.bookSourceUrl == selectRuleUrl); // 提取待删除的源
let laveSources = RuleSources.filter(item => !(item.bookSourceUrl == selectRuleUrl)); // 提取待留下的源
HttpPost(`/deleteBookSources`, deleteSources).then(json => {
if (json.isSuccess) {
let selectNode = document.getElementById(selectRuleUrl).parentNode;
selectNode.parentNode.removeChild(selectNode);
localStorage.setItem('BookSources', JSON.stringify(RuleSources = laveSources));
if ($('#bookSourceUrl').value == selectRuleUrl) {
$$('.rules textarea').forEach(item => { item.value = '' });
todo();
}
console.log(deleteSources);
console.log(`以上源已删除!`)
}
}).catch(err => { alert(`删除源失败,无法连接到「阅读3.0APP」!\n${err}`); });
}
break;
case 'ClrAll':
if (confirm(`确定要清空当前源列表吗?\n(不会删除APP内源)`)) {
localStorage.setItem('BookSources', JSON.stringify(RuleSources = []));
$('#RuleList').innerHTML = ''
}
break;
default:
}
});
@@ -0,0 +1,2 @@
(function(){"use strict";var t={800:function(t,e,o){var n=o(963),r=o(252);const a={class:"editor"};function i(t,e,o,n,i,l){const c=(0,r.up)("router-view");return(0,r.wg)(),(0,r.iD)("div",a,[(0,r.Wm)(c)])}var l={setup(){}},c=o(744);const s=(0,c.Z)(l,[["render",i]]);var u=s,d=o(201),h=o(577);const p=t=>((0,r.dD)("data-v-de4729c0"),t=t(),(0,r.Cn)(),t),g={class:"left"},m=p((()=>(0,r._)("div",null,[(0,r._)("a",{href:"/"},"←主页"),(0,r._)("b",null,"书源")],-1))),b=["onClick"],v=["onClick"],k=["onClick"],w=["onClick"],S=["onClick"],C=["onClick"],_=["onClick"];function f(t,e,o,n,a,i){const l=(0,r.up)("router-link"),c=(0,r.up)("router-view"),s=(0,r.up)("edit-menu"),u=(0,r.up)("edit-out");return(0,r.wg)(),(0,r.iD)(r.HY,null,[(0,r._)("div",g,[(0,r._)("div",null,[m,(0,r._)("ul",null,[(0,r.Wm)(l,{to:{name:"base"},custom:""},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 基础 ",10,b)])),_:1}),(0,r.Wm)(l,{to:{name:"search"},custom:""},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 搜索 ",10,v)])),_:1}),(0,r.Wm)(l,{to:{name:"find"},custom:""},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 发现 ",10,k)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"detail"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 详情 ",10,w)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"directory"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 目录 ",10,S)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"content"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 正文 ",10,C)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"other"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 其他 ",10,_)])),_:1})])]),(0,r.Wm)(c,null,{default:(0,r.w5)((({Component:t})=>[((0,r.wg)(),(0,r.j4)(r.Ob,null,[((0,r.wg)(),(0,r.j4)((0,r.LL)(t)))],1024))])),_:1})]),(0,r.Wm)(s),(0,r.Wm)(u)],64)}var y=o(262);const I=t=>((0,r.dD)("data-v-8302f478"),t=t(),(0,r.Cn)(),t),D={class:"menu"},U=(0,r.Uk)("⇈推送源 "),x=I((()=>(0,r._)("span",null,"Ctrl+P",-1))),T=[U,x],B=(0,r.Uk)("⇊拉取源 "),K=I((()=>(0,r._)("span",null,"Shift+P",-1))),A=[B,K],j=(0,r.Uk)("⋙生成源"),E=I((()=>(0,r._)("span",null,"Ctrl+E",-1))),H=[j,E],N=(0,r.Uk)(" ✗清空表单"),O=I((()=>(0,r._)("span",null,"Shift+C",-1))),L=[N,O],P=(0,r.Uk)("↶撤销操作"),J=I((()=>(0,r._)("span",null,"Ctrl+Z",-1))),Z=[P,J],q=(0,r.Uk)("↷重做操作"),W=I((()=>(0,r._)("span",null,"Shift+R",-1))),M=[q,W],$=(0,r.Uk)(" ⇏调试源 "),R=I((()=>(0,r._)("span",null,"Ctrl+Enter",-1))),Y=[$,R],z=(0,r.Uk)(" ✓保存源"),V=I((()=>(0,r._)("span",null,"Ctrl+S",-1))),F=[z,V];function G(t,e,o,n,a,i){const l=(0,r.up)("edit-loading"),c=(0,r.up)("edit-warn"),s=(0,r.up)("edit-success");return(0,r.wg)(),(0,r.iD)("div",D,[(0,r._)("div",null,[n.isShow?((0,r.wg)(),(0,r.j4)(l,{key:0})):(0,r.kq)("",!0),(0,r.Wm)(c,{text:n.warnText,"is-show":n.warnShow,onChangeShow:n.changeShow},null,8,["text","is-show","onChangeShow"]),n.successShow?((0,r.wg)(),(0,r.j4)(s,{key:1,isShow:n.successShow,onChangeShow:n.changeSuccessShow,text:n.successText},null,8,["isShow","onChangeShow","text"])):(0,r.kq)("",!0)]),(0,r._)("button",{onClick:e[0]||(e[0]=(...t)=>n.push&&n.push(...t)),title:"Ctrl+P"},T),(0,r._)("button",{onClick:e[1]||(e[1]=(...t)=>n.pull&&n.pull(...t)),title:"Shift+P"},A),(0,r._)("button",{onClick:e[2]||(e[2]=(...t)=>n.conver&&n.conver(...t)),title:"Ctrl+E"},H),(0,r._)("button",{onClick:e[3]||(e[3]=(...t)=>n.clearEdit&&n.clearEdit(...t)),title:"Shift+C"},L),(0,r._)("button",{onClick:e[4]||(e[4]=(...t)=>n.undo&&n.undo(...t)),title:"Ctrl+Z"},Z),(0,r._)("button",{onClick:e[5]||(e[5]=(...t)=>n.redo&&n.redo(...t)),title:"Shift+R"},M),(0,r._)("button",{onClick:e[6]||(e[6]=(...t)=>n.debug&&n.debug(...t)),title:"Ctrl+Enter"},Y),(0,r._)("button",{onClick:e[7]||(e[7]=(...t)=>n.saveSource&&n.saveSource(...t)),title:"Ctrl+S"},F)])}function Q(t,e){let o;switch(o=null===localStorage.getItem("url")?"http://"+location.host+"/"+t:"http://"+localStorage.getItem("url")+"/"+t,console.log(o),t){case"getBookSources":return tt(o);case"saveBookSources":return X(o,e);case"deleteBookSources":return X(o,e)}}function X(t,e){return fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then((t=>t.json()))}function tt(t){return fetch(t).then((t=>t.json()))}var et=o(907),ot=JSON.parse('{"bookSourceUrl":"","bookSourceType":"","bookSourceName":"","bookSourceGroup":"","bookSourceComment":"","loginUrl":"","loginUi":"","loginCheckJs":"","concurrentRate":"","header":"","bookUrlPattern":"","searchUrl":"","exploreUrl":"","enabled":true,"enabledExplore":true,"weight":null,"customOrder":null,"lastUpdLine truncated
//# sourceMappingURL=app.2c3e42a8.js.map
@@ -0,0 +1 @@
{"version":3,"file":"js/app.2c3e42a8.js","mappings":"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 truncated
@@ -0,0 +1,2 @@
(function(){"use strict";var t={27:function(t,e,o){var n=o(963),r=o(252);const a={class:"editor"};function i(t,e,o,n,i,l){const c=(0,r.up)("router-view");return(0,r.wg)(),(0,r.iD)("div",a,[(0,r.Wm)(c)])}var l={setup(){}},c=o(744);const s=(0,c.Z)(l,[["render",i]]);var u=s,d=o(201),h=o(577);const p=t=>((0,r.dD)("data-v-de4729c0"),t=t(),(0,r.Cn)(),t),g={class:"left"},m=p((()=>(0,r._)("div",null,[(0,r._)("a",{href:"/"},"←主页"),(0,r._)("b",null,"书源")],-1))),b=["onClick"],v=["onClick"],k=["onClick"],w=["onClick"],S=["onClick"],C=["onClick"],_=["onClick"];function f(t,e,o,n,a,i){const l=(0,r.up)("router-link"),c=(0,r.up)("router-view"),s=(0,r.up)("edit-menu"),u=(0,r.up)("edit-out");return(0,r.wg)(),(0,r.iD)(r.HY,null,[(0,r._)("div",g,[(0,r._)("div",null,[m,(0,r._)("ul",null,[(0,r.Wm)(l,{to:{name:"base"},custom:""},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 基础 ",10,b)])),_:1}),(0,r.Wm)(l,{to:{name:"search"},custom:""},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 搜索 ",10,v)])),_:1}),(0,r.Wm)(l,{to:{name:"find"},custom:""},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 发现 ",10,k)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"detail"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 详情 ",10,w)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"directory"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 目录 ",10,S)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"content"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 正文 ",10,C)])),_:1}),(0,r.Wm)(l,{custom:"",to:{name:"other"}},{default:(0,r.w5)((({navigate:t,isActive:e})=>[(0,r._)("li",{onClick:t,class:(0,h.C_)({active:e?"active":""})}," 其他 ",10,_)])),_:1})])]),(0,r.Wm)(c,null,{default:(0,r.w5)((({Component:t})=>[((0,r.wg)(),(0,r.j4)(r.Ob,null,[((0,r.wg)(),(0,r.j4)((0,r.LL)(t)))],1024))])),_:1})]),(0,r.Wm)(s),(0,r.Wm)(u)],64)}var y=o(262);const I=t=>((0,r.dD)("data-v-7d09e592"),t=t(),(0,r.Cn)(),t),D={class:"menu"},U=(0,r.Uk)("⇈推送源 "),x=I((()=>(0,r._)("span",null,"Ctrl+P",-1))),T=[U,x],B=(0,r.Uk)("⇊拉取源 "),K=I((()=>(0,r._)("span",null,"Shift+P",-1))),A=[B,K],j=(0,r.Uk)("⋙生成源"),E=I((()=>(0,r._)("span",null,"Ctrl+E",-1))),H=[j,E],N=(0,r.Uk)(" ✗清空表单"),O=I((()=>(0,r._)("span",null,"Shift+C",-1))),L=[N,O],P=(0,r.Uk)("↶撤销操作"),J=I((()=>(0,r._)("span",null,"Ctrl+Z",-1))),Z=[P,J],q=(0,r.Uk)("↷重做操作"),W=I((()=>(0,r._)("span",null,"Shift+R",-1))),M=[q,W],$=(0,r.Uk)(" ⇏调试源 "),R=I((()=>(0,r._)("span",null,"Ctrl+Enter",-1))),Y=[$,R],z=(0,r.Uk)(" ✓保存源"),V=I((()=>(0,r._)("span",null,"Ctrl+S",-1))),F=[z,V];function G(t,e,o,n,a,i){const l=(0,r.up)("edit-loading"),c=(0,r.up)("edit-warn"),s=(0,r.up)("edit-success");return(0,r.wg)(),(0,r.iD)("div",D,[(0,r._)("div",null,[n.isShow?((0,r.wg)(),(0,r.j4)(l,{key:0})):(0,r.kq)("",!0),(0,r.Wm)(c,{text:n.warnText,"is-show":n.warnShow,onChangeShow:n.changeShow},null,8,["text","is-show","onChangeShow"]),n.successShow?((0,r.wg)(),(0,r.j4)(s,{key:1,isShow:n.successShow,onChangeShow:n.changeSuccessShow,text:n.successText},null,8,["isShow","onChangeShow","text"])):(0,r.kq)("",!0)]),(0,r._)("button",{onClick:e[0]||(e[0]=(...t)=>n.push&&n.push(...t)),title:"Ctrl+P"},T),(0,r._)("button",{onClick:e[1]||(e[1]=(...t)=>n.pull&&n.pull(...t)),title:"Shift+P"},A),(0,r._)("button",{onClick:e[2]||(e[2]=(...t)=>n.conver&&n.conver(...t)),title:"Ctrl+E"},H),(0,r._)("button",{onClick:e[3]||(e[3]=(...t)=>n.clearEdit&&n.clearEdit(...t)),title:"Shift+C"},L),(0,r._)("button",{onClick:e[4]||(e[4]=(...t)=>n.undo&&n.undo(...t)),title:"Ctrl+Z"},Z),(0,r._)("button",{onClick:e[5]||(e[5]=(...t)=>n.redo&&n.redo(...t)),title:"Shift+R"},M),(0,r._)("button",{onClick:e[6]||(e[6]=(...t)=>n.debug&&n.debug(...t)),title:"Ctrl+Enter"},Y),(0,r._)("button",{onClick:e[7]||(e[7]=(...t)=>n.saveSource&&n.saveSource(...t)),title:"Ctrl+S"},F)])}function Q(t,e){let o;switch(o=null===localStorage.getItem("url")?"http://"+location.host+"/"+t:"http://"+localStorage.getItem("url")+"/"+t,console.log(o),t){case"getBookSources":return tt(o);case"saveBookSources":return X(o,e);case"deleteBookSources":return X(o,e)}}function X(t,e){return fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}).then((t=>t.json()))}function tt(t){return fetch(t).then((t=>t.json()))}var et=o(907),ot=JSON.parse('{"bookSourceUrl":"","bookSourceType":"","bookSourceName":"","bookSourceGroup":"","bookSourceComment":"","loginUrl":"","loginUi":"","loginCheckJs":"","concurrentRate":"","header":"","bookUrlPattern":"","searchUrl":"","exploreUrl":"","enabled":true,"enabledExplore":true,"weight":null,"customOrder":null,"lastUpdaLine truncated
//# sourceMappingURL=app.836bd8bb.js.map
@@ -0,0 +1 @@
{"version":3,"file":"js/app.836bd8bb.js","mappings":"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 truncated
@@ -0,0 +1,14 @@
"use strict";(self["webpackChunklegado_web_editor"]=self["webpackChunklegado_web_editor"]||[]).push([[998],{262:function(e,t,n){n.d(t,{BK:function(){return De},Bj:function(){return s},Fl:function(){return He},IU:function(){return Re},Jd:function(){return x},PG:function(){return Ce},SU:function(){return Ne},Um:function(){return we},WL:function(){return Ve},X$:function(){return O},X3:function(){return Oe},XI:function(){return Le},Xl:function(){return Ae},dq:function(){return Fe},iH:function(){return Me},j:function(){return S},lk:function(){return C},qj:function(){return be},qq:function(){return _},yT:function(){return Ee}});var r=n(577);let o;class s{constructor(e=!1){this.active=!0,this.effects=[],this.cleanups=[],!e&&o&&(this.parent=o,this.index=(o.scopes||(o.scopes=[])).push(this)-1)}run(e){if(this.active){const t=o;try{return o=this,e()}finally{o=t}}else 0}on(){o=this}off(){o=this.parent}stop(e){if(this.active){let t,n;for(t=0,n=this.effects.length;t<n;t++)this.effects[t].stop();for(t=0,n=this.cleanups.length;t<n;t++)this.cleanups[t]();if(this.scopes)for(t=0,n=this.scopes.length;t<n;t++)this.scopes[t].stop(!0);if(this.parent&&!e){const e=this.parent.scopes.pop();e&&e!==this&&(this.parent.scopes[this.index]=e,e.index=this.index)}this.active=!1}}}function i(e,t=o){t&&t.active&&t.effects.push(e)}const c=e=>{const t=new Set(e);return t.w=0,t.n=0,t},l=e=>(e.w&h)>0,u=e=>(e.n&h)>0,a=({deps:e})=>{if(e.length)for(let t=0;t<e.length;t++)e[t].w|=h},f=e=>{const{deps:t}=e;if(t.length){let n=0;for(let r=0;r<t.length;r++){const o=t[r];l(o)&&!u(o)?o.delete(e):t[n++]=o,o.w&=~h,o.n&=~h}t.length=n}},p=new WeakMap;let d=0,h=1;const m=30;let g;const v=Symbol(""),y=Symbol("");class _{constructor(e,t=null,n){this.fn=e,this.scheduler=t,this.active=!0,this.deps=[],this.parent=void 0,i(this,n)}run(){if(!this.active)return this.fn();let e=g,t=w;while(e){if(e===this)return;e=e.parent}try{return this.parent=g,g=this,w=!0,h=1<<++d,d<=m?a(this):b(this),this.fn()}finally{d<=m&&f(this),h=1<<--d,g=this.parent,w=t,this.parent=void 0,this.deferStop&&this.stop()}}stop(){g===this?this.deferStop=!0:this.active&&(b(this),this.onStop&&this.onStop(),this.active=!1)}}function b(e){const{deps:t}=e;if(t.length){for(let n=0;n<t.length;n++)t[n].delete(e);t.length=0}}let w=!0;const k=[];function x(){k.push(w),w=!1}function C(){const e=k.pop();w=void 0===e||e}function S(e,t,n){if(w&&g){let t=p.get(e);t||p.set(e,t=new Map);let r=t.get(n);r||t.set(n,r=c());const o=void 0;E(r,o)}}function E(e,t){let n=!1;d<=m?u(e)||(e.n|=h,n=!l(e)):n=!e.has(g),n&&(e.add(g),g.deps.push(e))}function O(e,t,n,o,s,i){const l=p.get(e);if(!l)return;let u=[];if("clear"===t)u=[...l.values()];else if("length"===n&&(0,r.kJ)(e))l.forEach(((e,t)=>{("length"===t||t>=o)&&u.push(e)}));else switch(void 0!==n&&u.push(l.get(n)),t){case"add":(0,r.kJ)(e)?(0,r.S0)(n)&&u.push(l.get("length")):(u.push(l.get(v)),(0,r._N)(e)&&u.push(l.get(y)));break;case"delete":(0,r.kJ)(e)||(u.push(l.get(v)),(0,r._N)(e)&&u.push(l.get(y)));break;case"set":(0,r._N)(e)&&u.push(l.get(v));break}if(1===u.length)u[0]&&R(u[0]);else{const e=[];for(const t of u)t&&e.push(...t);R(c(e))}}function R(e,t){const n=(0,r.kJ)(e)?e:[...e];for(const r of n)r.computed&&A(r,t);for(const r of n)r.computed||A(r,t)}function A(e,t){(e!==g||e.allowRecurse)&&(e.scheduler?e.scheduler():e.run())}const j=(0,r.fY)("__proto__,__v_isRef,__isVue"),I=new Set(Object.getOwnPropertyNames(Symbol).filter((e=>"arguments"!==e&&"caller"!==e)).map((e=>Symbol[e])).filter(r.yk)),T=$(),P=$(!1,!0),F=$(!0),M=L();function L(){const e={};return["includes","indexOf","lastIndexOf"].forEach((t=>{e[t]=function(...e){const n=Re(this);for(let t=0,o=this.length;t<o;t++)S(n,"get",t+"");const r=n[t](...e);return-1===r||!1===r?n[t](...e.map(Re)):r}})),["push","pop","shift","unshift","splice"].forEach((t=>{e[t]=function(...e){x();const n=Re(this)[t].apply(this,e);return C(),n}})),e}function $(e=!1,t=!1){return function(n,o,s){if("__v_isReactive"===o)return!e;if("__v_isReadonly"===o)return e;if("__v_isShallow"===o)return t;if("__v_raw"===o&&s===(e?t?ve:ge:t?me:he).get(n))return n;const i=(0,r.kJ)(n);if(!e&&i&&(0,r.RI)(M,o))return Reflect.get(M,o,s);const c=Reflect.get(n,o,s);return((0,r.yk)(o)?I.has(o):j(o))?c:(e||S(n,"get",o),t?c:Fe(c)?i&&(0,r.S0)(o)?c:c.value:(0,r.Kn)(c)?e?ke(c):be(c):c)}}const U=J(),N=J(!0);function J(e=!1){return function(t,n,o,s){let i=t[n];if(Se(i)&&Fe(i)&&!Fe(o))return!1;if(!e&&!Se(o)&&(Ee(o)||(o=Re(o),i=Re(i)),!(0,r.kJ)(t)&&Fe(i)&&!Fe(o)))return i.value=o,!0;const c=(0,r.kJ)(t)&&(0,r.S0)(n)?Number(n)<t.length:(0,r.RI)(t,n),l=Reflect.set(t,n,o,s);return t===Re(s)&&(c?(0,r.aU)(o,i)&&O(t,"set",n,o,i):O(t,"add",n,o)),l}}function V(e,t){const n=(0,r.RI)(e,t),o=e[t],s=Reflect.deleteProperty(e,t);return s&&n&&O(e,"delete",t,void 0,o),s}function D(e,t){const n=Reflect.has(e,t);return(0,r.yk)(t)&&I.has(t)||S(e,"has",t),n}function G(e){return S(e,"iterate",(0,r.kJ)(e)?"length":v),Reflect.ownKeys(e)}const B={get:T,set:U,deleteProperty:V,has:D,ownKeys:G},q={get:FLine truncated
/*!
* vuex v4.0.2
* (c) 2021 Evan You
* @license MIT
*/
var g="store";function v(e,t){Object.keys(e).forEach((function(n){return t(e[n],n)}))}function y(e){return null!==e&&"object"===typeof e}function _(e){return e&&"function"===typeof e.then}function b(e,t){return function(){return e(t)}}function w(e,t,n){return t.indexOf(e)<0&&(n&&n.prepend?t.unshift(e):t.push(e)),function(){var n=t.indexOf(e);n>-1&&t.splice(n,1)}}function k(e,t){e._actions=Object.create(null),e._mutations=Object.create(null),e._wrappedGetters=Object.create(null),e._modulesNamespaceMap=Object.create(null);var n=e.state;C(e,n,[],e._modules.root,!0),x(e,n,t)}function x(e,t,n){var r=e._state;e.getters={},e._makeLocalGettersCache=Object.create(null);var s=e._wrappedGetters,i={};v(s,(function(t,n){i[n]=b(t,e),Object.defineProperty(e.getters,n,{get:function(){return i[n]()},enumerable:!0})})),e._state=(0,o.qj)({data:t}),e.strict&&j(e),r&&n&&e._withCommit((function(){r.data=null}))}function C(e,t,n,r,o){var s=!n.length,i=e._modules.getNamespace(n);if(r.namespaced&&(e._modulesNamespaceMap[i],e._modulesNamespaceMap[i]=r),!s&&!o){var c=I(t,n.slice(0,-1)),l=n[n.length-1];e._withCommit((function(){c[l]=r.state}))}var u=r.context=S(e,i,n);r.forEachMutation((function(t,n){var r=i+n;O(e,r,t,u)})),r.forEachAction((function(t,n){var r=t.root?n:i+n,o=t.handler||t;R(e,r,o,u)})),r.forEachGetter((function(t,n){var r=i+n;A(e,r,t,u)})),r.forEachChild((function(r,s){C(e,t,n.concat(s),r,o)}))}function S(e,t,n){var r=""===t,o={dispatch:r?e.dispatch:function(n,r,o){var s=T(n,r,o),i=s.payload,c=s.options,l=s.type;return c&&c.root||(l=t+l),e.dispatch(l,i)},commit:r?e.commit:function(n,r,o){var s=T(n,r,o),i=s.payload,c=s.options,l=s.type;c&&c.root||(l=t+l),e.commit(l,i,c)}};return Object.defineProperties(o,{getters:{get:r?function(){return e.getters}:function(){return E(e,t)}},state:{get:function(){return I(e.state,n)}}}),o}function E(e,t){if(!e._makeLocalGettersCache[t]){var n={},r=t.length;Object.keys(e.getters).forEach((function(o){if(o.slice(0,r)===t){var s=o.slice(r);Object.defineProperty(n,s,{get:function(){return e.getters[o]},enumerable:!0})}})),e._makeLocalGettersCache[t]=n}return e._makeLocalGettersCache[t]}function O(e,t,n,r){var o=e._mutations[t]||(e._mutations[t]=[]);o.push((function(t){n.call(e,r.state,t)}))}function R(e,t,n,r){var o=e._actions[t]||(e._actions[t]=[]);o.push((function(t){var o=n.call(e,{dispatch:r.dispatch,commit:r.commit,getters:r.getters,state:r.state,rootGetters:e.getters,rootState:e.state},t);return _(o)||(o=Promise.resolve(o)),e._devtoolHook?o.catch((function(t){throw e._devtoolHook.emit("vuex:error",t),t})):o}))}function A(e,t,n,r){e._wrappedGetters[t]||(e._wrappedGetters[t]=function(e){return n(r.state,r.getters,e.state,e.getters)})}function j(e){(0,r.YP)((function(){return e._state.data}),(function(){0}),{deep:!0,flush:"sync"})}function I(e,t){return t.reduce((function(e,t){return e[t]}),e)}function T(e,t,n){return y(e)&&e.type&&(n=t,t=e,e=e.type),{type:e,payload:t,options:n}}var P="vuex bindings",F="vuex:mutations",M="vuex:actions",L="vuex",$=0;function U(e,t){m({id:"org.vuejs.vuex",app:e,label:"Vuex",homepage:"https://next.vuex.vuejs.org/",logo:"https://vuejs.org/images/icons/favicon-96x96.png",packageName:"vuex",componentStateTypes:[P]},(function(n){n.addTimelineLayer({id:F,label:"Vuex Mutations",color:N}),n.addTimelineLayer({id:M,label:"Vuex Actions",color:N}),n.addInspector({id:L,label:"Vuex",icon:"storage",treeFilterPlaceholder:"Filter stores..."}),n.on.getInspectorTree((function(n){if(n.app===e&&n.inspectorId===L)if(n.filter){var r=[];q(r,t._modules.root,n.filter,""),n.rootNodes=r}else n.rootNodes=[B(t._modules.root,"")]})),n.on.getInspectorState((function(n){if(n.app===e&&n.inspectorId===L){var r=n.nodeId;E(t,r),n.state=H(K(t._modules,r),"root"===r?t.getters:t._makeLocalGettersCache,r)}})),n.on.editInspectorState((function(n){if(n.app===e&&n.inspectorId===L){var r=n.nodeId,o=n.path;"root"!==r&&(o=r.split("/").filter(Boolean).concat(o)),t._withCommit((function(){n.set(t._state.data,o,n.state.value)}))}})),t.subscribe((function(e,t){var r={};e.payload&&(r.payload=e.payload),r.state=t,n.notifyComponentUpdate(),n.sendInspectorTree(L),n.sendInspectorState(L),n.addTimelineEvent({layerId:F,event:{time:Date.now(),title:e.type,data:r}})})),t.subscribeAction({before:function(e,t){var r={};e.payload&&(r.payload=e.payload),e._id=$++,e._time=Date.now(),r.state=t,n.addTimelineEvent({layerId:M,event:{time:e._time,title:e.type,groupId:e._id,subtitle:"start",data:r}})},after:function(e,t){var r={},o=Date.now()-e._time;r.duration={_custom:{type:"duration",display:o+"ms",tooltip:"Action duration",value:o}},e.payload&&(r.payload=e.payload),r.state=t,n.addTimelineEvent({layerId:M,event:{time:Date.now(),title:e.type,groupId:e._id,subtitle:"end",data:r}})}})}))}var N=8702998,J=6710886,V=16777215,D={label:"namespaced",textColor:V,backgroundColor:J};function G(e){return e&&"root"!==e?e.split("/").slice(-2,-1)[0]:"Root"}function B(e,t){return{id:t||"root",label:G(t),tags:e.namespaced?[D]:[],children:OLine truncated
/*!
* vue-router v4.1.4
* (c) 2022 Eduardo San Martin Morote
* @license MIT
*/
const s="undefined"!==typeof window;function i(e){return e.__esModule||"Module"===e[Symbol.toStringTag]}const c=Object.assign;function l(e,t){const n={};for(const r in t){const o=t[r];n[r]=a(o)?o.map(e):e(o)}return n}const u=()=>{},a=Array.isArray;const f=/\/$/,p=e=>e.replace(f,"");function d(e,t,n="/"){let r,o={},s="",i="";const c=t.indexOf("#");let l=t.indexOf("?");return c<l&&c>=0&&(l=-1),l>-1&&(r=t.slice(0,l),s=t.slice(l+1,c>-1?c:t.length),o=e(s)),c>-1&&(r=r||t.slice(0,c),i=t.slice(c,t.length)),r=w(null!=r?r:t,n),{fullPath:r+(s&&"?")+s+i,path:r,query:o,hash:i}}function h(e,t){const n=t.query?e(t.query):"";return t.path+(n&&"?")+n+(t.hash||"")}function m(e,t){return t&&e.toLowerCase().startsWith(t.toLowerCase())?e.slice(t.length)||"/":e}function g(e,t,n){const r=t.matched.length-1,o=n.matched.length-1;return r>-1&&r===o&&v(t.matched[r],n.matched[o])&&y(t.params,n.params)&&e(t.query)===e(n.query)&&t.hash===n.hash}function v(e,t){return(e.aliasOf||e)===(t.aliasOf||t)}function y(e,t){if(Object.keys(e).length!==Object.keys(t).length)return!1;for(const n in e)if(!_(e[n],t[n]))return!1;return!0}function _(e,t){return a(e)?b(e,t):a(t)?b(t,e):e===t}function b(e,t){return a(t)?e.length===t.length&&e.every(((e,n)=>e===t[n])):1===e.length&&e[0]===t}function w(e,t){if(e.startsWith("/"))return e;if(!e)return t;const n=t.split("/"),r=e.split("/");let o,s,i=n.length-1;for(o=0;o<r.length;o++)if(s=r[o],"."!==s){if(".."!==s)break;i>1&&i--}return n.slice(0,i).join("/")+"/"+r.slice(o-(o===r.length?1:0)).join("/")}var k,x;(function(e){e["pop"]="pop",e["push"]="push"})(k||(k={})),function(e){e["back"]="back",e["forward"]="forward",e["unknown"]=""}(x||(x={}));function C(e){if(!e)if(s){const t=document.querySelector("base");e=t&&t.getAttribute("href")||"/",e=e.replace(/^\w+:\/\/[^\/]+/,"")}else e="/";return"/"!==e[0]&&"#"!==e[0]&&(e="/"+e),p(e)}const S=/^[^#]+#/;function E(e,t){return e.replace(S,"#")+t}function O(e,t){const n=document.documentElement.getBoundingClientRect(),r=e.getBoundingClientRect();return{behavior:t.behavior,left:r.left-n.left-(t.left||0),top:r.top-n.top-(t.top||0)}}const R=()=>({left:window.pageXOffset,top:window.pageYOffset});function A(e){let t;if("el"in e){const n=e.el,r="string"===typeof n&&n.startsWith("#");0;const o="string"===typeof n?r?document.getElementById(n.slice(1)):document.querySelector(n):n;if(!o)return;t=O(o,e)}else t=e;"scrollBehavior"in document.documentElement.style?window.scrollTo(t):window.scrollTo(null!=t.left?t.left:window.pageXOffset,null!=t.top?t.top:window.pageYOffset)}function j(e,t){const n=history.state?history.state.position-t:-1;return n+e}const I=new Map;function T(e,t){I.set(e,t)}function P(e){const t=I.get(e);return I.delete(e),t}let F=()=>location.protocol+"//"+location.host;function M(e,t){const{pathname:n,search:r,hash:o}=t,s=e.indexOf("#");if(s>-1){let t=o.includes(e.slice(s))?e.slice(s).length:1,n=o.slice(t);return"/"!==n[0]&&(n="/"+n),m(n,"")}const i=m(n,e);return i+r+o}function L(e,t,n,r){let o=[],s=[],i=null;const l=({state:s})=>{const c=M(e,location),l=n.value,u=t.value;let a=0;if(s){if(n.value=c,t.value=s,i&&i===l)return void(i=null);a=u?s.position-u.position:0}else r(c);o.forEach((e=>{e(n.value,l,{delta:a,type:k.pop,direction:a?a>0?x.forward:x.back:x.unknown})}))};function u(){i=n.value}function a(e){o.push(e);const t=()=>{const t=o.indexOf(e);t>-1&&o.splice(t,1)};return s.push(t),t}function f(){const{history:e}=window;e.state&&e.replaceState(c({},e.state,{scroll:R()}),"")}function p(){for(const e of s)e();s=[],window.removeEventListener("popstate",l),window.removeEventListener("beforeunload",f)}return window.addEventListener("popstate",l),window.addEventListener("beforeunload",f),{pauseListeners:u,listen:a,destroy:p}}function $(e,t,n,r=!1,o=!1){return{back:e,current:t,forward:n,replaced:r,position:window.history.length,scroll:o?R():null}}function U(e){const{history:t,location:n}=window,r={value:M(e,n)},o={value:t.state};function s(r,s,i){const c=e.indexOf("#"),l=c>-1?(n.host&&document.querySelector("base")?e:e.slice(c))+r:F()+e+r;try{t[i?"replaceState":"pushState"](s,"",l),o.value=s}catch(u){console.error(u),n[i?"replace":"assign"](l)}}function i(e,n){const i=c({},t.state,$(o.value.back,e,o.value.forward,!0),n,{position:o.value.position});s(e,i,!0),r.value=e}function l(e,n){const i=c({},o.value,t.state,{forward:e,scroll:R()});s(i.current,i,!0);const l=c({},$(r.value,e,null),{position:i.position+1},n);s(e,l,!1),r.value=e}return o.value||s(r.value,{back:null,current:r.value,forward:null,position:t.length-1,replaced:!0,scroll:null},!0),{location:r,state:o,push:l,replace:i}}function N(e){e=C(e);const t=U(e),n=L(e,t.state,t.location,t.replace);function r(e,t=!0){t||n.pauseListeners(),history.go(e)}const o=c({location:"",base:e,go:r,createHref:E.bind(null,e)},t,n);return Object.defineProperty(o,"location",{enumerable:!0,get:()=>t.location.value}),Object.defineProperty(o,"state",{enumerable:!0,get:()=>t.state.value}),o}function J(e){return e=location.host?e||locatioLine truncated
//# sourceMappingURL=chunk-vendors.86212f98.js.map
@@ -0,0 +1 @@
{"version":3,"file":"js/chunk-vendors.86212f98.js","mappings":"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 truncated