diff --git a/app/build.gradle b/app/build.gradle index 22f568494cd6..96ec5fe7b214 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -214,7 +214,7 @@ dependencies { //网络 implementation('com.squareup.okhttp3:okhttp:4.11.0') appImplementation(fileTree(dir: 'cronetlib', include: ['*.jar', '*.aar'])) - appImplementation 'com.google.protobuf:protobuf-javalite:3.23.0' + appImplementation 'com.google.protobuf:protobuf-javalite:3.23.1' //Glide def glideVersion = "4.15.1" diff --git a/app/src/app/java/io/legado/app/help/AppIntentType.kt b/app/src/app/java/io/legado/app/help/AppIntentType.kt deleted file mode 100644 index 2d20cda36d30..000000000000 --- a/app/src/app/java/io/legado/app/help/AppIntentType.kt +++ /dev/null @@ -1,17 +0,0 @@ -package io.legado.app.help - -import androidx.annotation.Keep -import io.legado.app.utils.IntentType - -@Keep -@Suppress("unused") -object AppIntentType : IntentType.TypeInterface { - - override fun from(path: String?): String? { - return when (path?.substringAfterLast(".")?.lowercase()) { - "apk" -> "application/vnd.android.package-archive" - else -> null - } - } - -} \ No newline at end of file diff --git a/app/src/app/java/io/legado/app/lib/cronet/CronetInterceptor.kt b/app/src/app/java/io/legado/app/lib/cronet/CronetInterceptor.kt index 0bf16a0825a0..30148933e8e8 100644 --- a/app/src/app/java/io/legado/app/lib/cronet/CronetInterceptor.kt +++ b/app/src/app/java/io/legado/app/lib/cronet/CronetInterceptor.kt @@ -4,7 +4,6 @@ import android.os.Build import androidx.annotation.Keep import io.legado.app.utils.printOnDebug import okhttp3.* -import okhttp3.internal.http.receiveHeaders import java.io.IOException @Keep diff --git a/app/src/main/assets/updateLog.md b/app/src/main/assets/updateLog.md index bbf329ddecb6..b3ed7dddad0d 100644 --- a/app/src/main/assets/updateLog.md +++ b/app/src/main/assets/updateLog.md @@ -12,10 +12,33 @@ * 正文出现缺字漏字、内容缺失、排版错乱等情况,有可能是净化规则或简繁转换出现问题。 * 漫画源看书显示乱码,**阅读与其他软件的源并不通用**,请导入阅读的支持的漫画源! +**2023/05/19** + +* 目录格式化js添加一个公用变量gInt, int类型默认值0 + +> 示例1 + +``` +"第" + index + "章" + title +``` + +> 示例2 + +``` +gInt++ +"第" + gInt + "章" + title +``` + +* 优化修复bug +* 其中一些更新由 Xwite, Horis 提供 + **2023/05/16** * 添加格式化目录规则,只能写js,不用@js:标志,提供变量index和title,index从1开始 * 正文添加标题规则,结果更新到目录,有些网站只能在正文获取正确的标题 +* 优化web端 +* 其它一些优化 +* 其中一些更新由 Xwite, Horis 提供 **2023/05/13** diff --git a/app/src/main/assets/web/vue/assets/BookChapter-7a6fac07.js b/app/src/main/assets/web/vue/assets/BookChapter-2573d786.js similarity index 99% rename from app/src/main/assets/web/vue/assets/BookChapter-7a6fac07.js rename to app/src/main/assets/web/vue/assets/BookChapter-2573d786.js index b281ddc8efb4..afaeb85ee9cd 100644 --- a/app/src/main/assets/web/vue/assets/BookChapter-7a6fac07.js +++ b/app/src/main/assets/web/vue/assets/BookChapter-2573d786.js @@ -1 +1 @@ -import{a2 as Ne,n as r,z as w,T as ke,a5 as Ve,o as p,d as f,g as e,t as H,F as te,P as ae,u as o,a6 as q,a7 as Re,a8 as He,v as _,e as J,w as W,a9 as We,A as ue,aa as Je,f as j,M as Ae,ab as Te,x as qe,ac as Me,p as be,i as Be,s as Fe,ad as Ge,V as Ze,K as Ye,a4 as Xe,O as De,k as O,c as je}from"./vendor-b9134af1.js";import{i as $e,g as _e,u as et}from"./loading-366381f9.js";import{_ as ie,u as Se,A as de}from"./index-cb5c0eaf.js";const tt=(s,a,d,u)=>(s/=u/2,s<1?d/2*s*s+a:(s--,-d/2*(s*(s-2)-1)+a)),ot=()=>{let s,a,d,u,n,U,m,E,h,y,i,I,A;function k(){let v=s.scrollTop||s.scrollY||s.pageYOffset;return v=typeof v>"u"?0:v,v}function c(v){const B=v.getBoundingClientRect().top,G=s.getBoundingClientRect?s.getBoundingClientRect().top:0;return B-G+d}function b(v){s.scrollTo?s.scrollTo(0,v):s.scrollTop=v}function L(v){y||(y=v),i=v-y,I=U(i,d,E,h),b(I),i({"864924b2":u.spacing.letter,f7593496:u.spacing.line,aae0f766:u.spacing.paragraph}));const n=A=>{const k=/]*src="([^"]*(?:"[^>]+\})?)"[^>]*>/,c=A.match(k)[1];return $e(c)?_e(c):c},U=A=>{A.target.src=_e(A.target.src)},m=A=>{const k=/]*src="[^"]*(?:"[^>]+\})?"[^>]*>/g,c=" ";return A.replaceAll(k,c).length},E=r(()=>{let A=-1;return Array.from(u.contents,k=>(A+=m(k)+1,A))}),h=w(),y=w();a({scrollToReadedLength:A=>{if(A===0)return;let k=E.value.findIndex(c=>c>=A);k!==-1&&Re(()=>{$(y.value[k],{duration:0})})}});let I=null;return ke(()=>{I=new IntersectionObserver(A=>{for(let{target:k,isIntersecting:c}of A)c&&d("readedLengthChange",u.chapterIndex,parseInt(k.dataset.chapterpos))},{rootMargin:`0px 0px -${window.innerHeight-24}px 0px`}),I.observe(h.value),y.value.forEach(A=>{I.observe(A)})}),Ve(()=>{I==null||I.disconnect(),I=null}),(A,k)=>(p(),f(te,null,[e("div",{class:"title","data-chapterpos":"0",ref_key:"titleRef",ref:h},H(s.title),513),(p(!0),f(te,null,ae(s.contents,(c,b)=>(p(),f("div",{key:b,ref_for:!0,ref_key:"paragraphRef",ref:y,"data-chapterpos":o(E)[b]},[/^\s*]*src[^>]+>$/.test(c)?(p(),f("img",{key:0,class:"full",src:n(c),onErrorOnce:U,loading:"lazy"},null,40,st)):(p(),f("p",{key:1,style:q({fontFamily:s.fontFamily,fontSize:s.fontSize}),innerHTML:c},null,12,at))],8,nt))),128))],64))}},ct=ie(it,[["__scopeId","data-v-976ea6dd"]]);const lt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXr5djn4dTp49bt59rT6LKxAAACnElEQVQozw3NUUwScRzA8d8R6MF8YMIx8uk47hDSJbj14IPzOGc7jPLvwTGg5uAYDbe2tt56cLtznvEnS6yDqCcEaWi91DvrbLJZz7b1aFtz1aO+2OZWvn+/+4CHeB6BMYaqBLfjPNRY6RFT2JJYby+uAk4WUTrtlmJ4hgPYb2q1XGDQjaK8pgJHvqNaAX+KyuIkDXpgQinb46nOulnn4b5laUHTxLfseeArAoNOeJlOIjdoal0n1FA7tKFv5roK+YaHOqP3P0XyKHPHY+MhTRe5uCZnKhtJKw2eSrSoBDPLtpZuNcFNJcFyiCMxOaaHIfXz1e8HQbWLySrBQ4x0x1qlhnHlnz2HQEC6TNb0gTHXa7IKhcaHqkE015hk9whA0YeWiLIXf7Fa2CZo3DjqjB4tTuF8jIcbfcEx5z/w4sXpQhXW+ju0cqh7icTFmRMaG+v6CIvTjcSpHcH8JEsF3EPh3fRthYdVLLgI2fWXm85/pGFE4l046s70L+yKCcirGFR+jbpy3kMmiCGHrSezVONsn1RBixncyk2PcVWk7DlgxHo8iZwDyq5uAUD854dZhdIFYzKoQig2haUKi1lVufz2RZUZPZ41n/hrOQB6h0Hhg8I367FNoEHgeM/KY7szSeQwD8q2WE3HM35ZLl0K1MJiOtHIkBclRQUwZnyOWcNsRQQgVLj1PSqkjF9DsoOSaSg3iinKzvfmgsNFFfpP/2T3GLGvL4fHEfwIX1sVvXcPqLztehWGcfn9nI2U9nTfCgJPe/jFPLZwgVEzimBgAm0VIyK2tt1cE/AzQdLK+SxLSQ4aDCZnnId94OG2S1XwvnTbNk/ZnhyRCQT+sZM6z9g6LXL1BOBe+zJySiFkHAINCtnQokbCJ/apCv0foqPiZVfhpywAAAAASUVORK5CYII=",rt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAACVBMVEX28ef48+n69esoK7jYAAAB4UlEQVQozw2OsW4bQQxEhwLXkDrysGdEqRRgVShfQQq8wOr2jD0jSpXCLvwXbtKfADlFqgSwC/9ljqweZgYzQFnb/QGepYhA9jzmTc1WaSEtQpbFgjWATI00ZZtIckXx8q2Oe5yEByBy+RHOTcM+VVTadULsvxvRC/q8WTwgcWGD+Mnaqa0oy2gw2pKFzK+PzEsus5hP9AHojKslVynLlioVTBEN8cjDNnZoR1uMGTiZAAN47HxMtEkGUE9b8HWzkqNX5Lpk0yVziAJOs46rK1pG/xNuXLjz95fSDoJE5IqG23MAYPtWoeWPvfVtIV/Ng9oH3W0gGMPIOqd4MK4QZ55dV61gOb8Zxp7I9qayaGxp6Q91cmC0ZRdBwEQVHWzSAanlZwVWc9yljeTCeaHjBVvlPSLeyeBUT2rPdJegQI103jVS3uYkyIx1il6mslMDedZuOkwzolsagvPuQAfp7cYg7k9V1NOxfq64PNSvMdwONV4VYEmqlbpZy5OAakRKkjPnL4CBv5/OZRgoWHBmNbxB0LgB1I4vXFj93UoF2/0TPEsWwV9EhbIiTPqYoTHYoMn3enTDjmrFeDTIzaL1bUC/PBIMuF+vSSYSaxoVt90EO3Gu1zrMuMRGUk7Ffv3L+A931Gsb/yBoIgAAAABJRU5ErkJggg==",At="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEX6+fP8+/X+/ff///kbczPAAAACeElEQVQozxXHQUgUUQAG4P8936yzs6VvZNZmN9QxVxiF9OLBoOjtOC6rQq6ygXjI2fCQBdXBg4egtzFGdqkoI+zgBFbqkm3hQSxhFYLotOcubeKhOnVYoqQy+m4f5g5TvpX0xHLbLY9j8SMhJp+Jk4LfAUS2kVRIjILmnwGBTX42PhCVlDJQkIiy2nWAvaJ1h+oFIpJ0hMSYVbyyrgDWshcMpMyL1brPDQKWmduO+KTJ6XeXAMK9Yc3FpD7atyNwg6kt5XgFpLPhjUTFSYVn2abDiugGShwD8JTVRJVo/2ecuKtRb/qc4BK+9TboFfokog4T2Fn6Oqdnsjk90NMS76Rji6E0NmwkPBAZ4Xbkw8KoDAkAbEhkc78e9omxxgxg6qa5HvMv+UZbCV0qmHnSHKl5TxeA2XTCGWekR581mwC5crBH81PznASqB9va3TbkYAjJPLfg5uBfXaJgIgIBv9eessRIhxe7PA7kj6uUMeMaQ/OEQOYRaaHlqH2Gxwsl6E/pwVY5FH7uCypBZPKvDQyVziYBrAkMURe2MOOOxG/eQpp5PF+bFzUV5HtPj9GeiVSNZDELleifYTp9NAjsoiXg4cW+4ZORkdSMB/B74aAdjhsVakhgkugsbmqcDSLEoWp8zRjrux3tli6Q5uM3E+maT99Wy0RiP7tboiuRZle2c6CYeL2kcUc1KvPtQKucogMadKVTQOJYCeyCYlhQQ/Q7Etfd/vBygy9iqy+LyHeF46saCYvW6ingsbA9RBWtdi8GgUXW+oQx9/wP6bAAX1TWeV+CbShZDlQ9xT6SoSxZmKRAkmXb60kzEzkRF+Ccb94BGspGJoN/UzmyR4wjXHAAAAAASUVORK5CYII=",dt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAATlBMVEXdzaHh0KPgz6LdzKDezqLczJ7ezZ/fz6Dcy5zi0aXdzZ3fz6Tfz57h0KDg0aLcyZrg0KXi0qPfzZ3j06bh0qbdyJbfzJrhz5/cxpLZwo0vDconAAAFn0lEQVRIxxyPW5LjMAwDAT5FybLl2JnM3P+i6+wXWVC1GoQGaD0h4XM3Q5o4T0HgABHBi6pZ4CDXXcUOFd6VhqC3Kch4EI8w9oMXwvU6m5LOOvcxKMOhuu8i5+5cMjcgb0t4F2uvOoeI3/MlT4IqsbtM9UG2AGSXUOsxzPevnXzK1CSHytZLvx7VdQmUcJsJCxJh2nmHW12Qod1qPjt8pih47uQ9aGpoNWF+yElCt60oH7vdIU/MnlRPSBLC/VwqxcKR8PFqnADN9ih5ufqnTlG9KwCofvs7kKYqOPHTNMQ93j9qNImFw9vjHPZ0F1m8hUUVB/Q/TrRYDMXr9++APMFARAt6sPh6wVAXzxUGhZsFUwCNfPZ8/72TAHebAhvuOuT3gO1Vn5d9Jd5sBRkg0p2seL9B7ulkjFJFIt9HPpLzdSzzMP3UcodAfMqC6pBuET2heHK1itZf1GZ1bi0BwOSxiCS8f/JBHMPMM4XCu3Mt1uz9lJbDJRqsKDZuikzkvskQEz6hanfDfO494azY5JpqPqOF1RhxD9XYEdaNxiqWqakKgmPfmrsta8KAiwF4HBxGVUJAgeSqQaiRRZJ7D2jedhw5t1CIAKxag0CBA60BpoBE6DcUi8O5AuM4pLfN0kHLmeu2B4e6HofqbgxsTWUw3PAODqa1oDtyzgXBlusi1KFdclMPE8O3jvLJ8RNi5/RxDQVzVmXA233XQ4KummunfxvLOZo+iH37964YjP06995CTdu9hsvErqJNzmf4wTrZ5DL7+qW9EoLnadrx67b8dUtrJnBXaT1N1uvPaYRKpWkq52xNsMN7vv4Sdryt/f4MhQoMCKnvVxikai1CQ6ZsnwJDc8+3Y/z8HcfvYQNq66pnAu1Hwa+3KNSwbNu8h3nDPqTl9fl7tx8fBhFfdS0o0F3JUKEZtZG9b/LZEM95lzaR30OnWPzroMxyZYdBIMoMnpN0J+m7/40+/P4soFSUjgzE7yY5zrMJuoZv0CmpVguYx1pprfb5HOviRVhHUVi/352shxCYrYBZxGtVaxiAz/MsaGSIsB7R1t4zJXH//n7RTTQQwxqcGEqEvklFHUgiO2GvJV+jAIPR+N29usWDoiSOVrN3XuqT1egQJAAU9EwslVJC8u0rGcy+WPqktJhjfMpatIG6CDAb0v5H34MGKqiVRue7GGLZ9Otxtt4JIrAhxBDwDuqI9JavcO0A7GlqFt219tH/bln9jBXzaKWAEqJV0CBxs5TwM8EvUPHaa8S86vN303MVWOsl3goDBHPWSoQ9c0kQmCKljfsKNH1+ofEOHW8a9a7glZGS8fPieL/SRSs0LAhI4FDTnXs1QYtubv2+IXPZpHB4bhivRexBkYKsSrYXNjvMUbVXpVJ+N6haV72c1k2zrnv5IYBMJBYTSZx0KTkoM3vY93rU/qs7zHplc/3d2ACadhFWByrn9LUk2IWb5JywvawTQc3F0iz+lgsBmInAIemBJtft2plKIlAFOgcroigrG2XlDsAzywQECNyaI8yr2ogoh7D4qJOYmZBzQgoZAM1PAcB8sDrr1uE5CDMR+nWSSVUGUCHAs8Vd21HOE0FzNj37pX0sLp9p3K8k++xxpkmzDxK64rmTSJnDUuIgTeslui6lg92jonZXI4jqNiUuzN4IagcKMjCniMGCODoo8T4tGDprn2hRww+NrnYiCwokd9iiWrkmbRfXYGLAoZrjO1lVQKExjUy5fIkgJURmz2uGFdASwwlWx5gDVTMK7hP6ISRVsFbYNmqtZL9MQtio285PaekyzDhZmtdexCYB0SZcTmBdhvdbmAEonk8hwcHQuZN1kVqrhyKoHHsnQhQAjF7SG533Da2S4LGjx1LoZqp7XeKQLDUBmYmydG0NQHpMeR5lRIRQc1PQ2ASMQflF4YBDMt0/GFlEHeRwCcEAAAAASUVORK5CYII=",ut="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAALVBMVEXx58b168ny6Mjz6sn06sf27Mvw5sTz6cbw5cLy58T37svv47/168v37s7t4Ltrv0//AAAEjUlEQVQ4yw2Ty2sTURxGf3dmOqmPxb0zmaStCnfmZpL6gpmbxIpUSMZGrSJkxsZiVZimNVaqMklrUnWTRq2KIDFWWx+IFrIRFxXEB4KIgqu6EBdu7M6FIPg32PW3+DhwDmBaYrK56KP4HGIsvg/uvOV0wK+qgBMlO9BujuH4DSJlOseqV5a/BEF97gt0ChyIPqBhXI9BtqtIB8vJB/LdCQ3OVjaLNX0g7+OmoI4e7nkemAqX6o8vg0yyQAyQS7IfgvFbI+6QyI3R4KELxw7kwM2ooQfyQigYnwY5MZbMlHI1DvnQVCoVcrt+R+bO7vPDif3ybNajwqAAe443dpfDsPt379VMWZzGRuqM79mQF+DUz9nt74bQ8J/O80MtVR51U02JKKmTCvTzLVf+vuxP/aHnPo9+2bW+zVsJ0Y630/CrfzX+b+UL+7O68Rczv+7lrMh5etfKXvhc2rk6KforxuoO2xB2tcxKfeXHt18rHOiHI/0RRjW/YGRDkHiwo3nzqL60o58C/bgRuaj7vk+QOwOhpnFNdjuWpKMCGP8Yapu9Ty5FTHKQLGSEFikjd9ADwP9ciaNNjc5qMH6w50AF/LKOsOYqsOG9GjKgc7ZXolqntm6fysJ6Ma6ll2CiqmOgE6O7x1wXExklbeqMYcwsmJmOoigt8SBg2WfilDSsAZJcBxDcrqtBXzFQJqZNHfscyIhoZlygAtyYAceah+elrFbI+46gEHDGiW878Kj7JpWyfhg6iyRMymV1MKBSeVpfgLHIohyTojI6sRyK1VpcqzVZeEBLOnA9unhGKUXPJDYtV9Dxuz4iA5xSkSWhCJdAiJR9PHlvfvbntbrR14FDqUNRAYDJmSnv3oKxuz5+7fiblgVJyYLTbgUM05P7LESkoXvyWNfb0aUU6FZizgQIa25VqKQZqFrk6v6BsqqIHlQmkQ9KrBhkC20/DrFsAFEEYLjM+lj2wYHXCwnNvZQR42XJ2iVK+UBXnI+OBE6oXpUUHiQ1yg0MhA03iwGbnOdQYc1CMiPIPQrCQJFH4L4BMFktAtKd9PN5gnU2Gra4KuK+V+mjtBRpAGIqDVe4wnSnajiFGO5d7smvhVQEMEYwqshrENIEaY7YeblJYtsb3QhAHWZCEKK67swwPMKw0If1Ta+6DgHmlgPzcUTSbi3rrv1Y64/BYEMPQ5SDHUOR022B4QRF6xLUPAaPX/V4IDI5N2BMwx4LqO1uO4j6uW7NvM7lATqGAxY/ZHVgoGZbu7SvkNR75x6qGSB23FdouENVwN7sCbewTdsXGrrnQ5ZZKOCOFtMTIzxlPu6eYmtL+nMFmoK7OeXajn86r9sqWbfmvHC4IagE5qfCPGZvLSq5F55hHIxJFa4/vRxHBlz0og4TojU1l/MOHJX17lybdF0mQhFO44JYUNt3UA473IXw/iPfDWtKG5oFSXIF5iU/VnyDSjxxeDk3jAXRyVyGTNB9FxH9qcFDNJpVbt2y9LytUXkK7Py6+z1RezHQqnoY8XcLimmd8dCnBhQCuaGpJCq3SoIlmYvLz8UkWhJw7T8k+Db/DYEKwgAAAABJRU5ErkJggg==",gt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEX48dr48Nf58tv379X17NJtIBxUAAACFUlEQVQ4y1XRUZakMAgF0Af2AiDWApDZgHZqAV1nZv9rGh7Rj7Y8McUFEg1wvcMESMNVD/neU8Xcaz7nYYkYlYO6Ti82PBI4BvIEg1aj3wKwRvIMgZsUy5LdhCawPFh1sZs4SrlyN9fQKpv8s5dgZ2eLyqqJiu+WkCmUEybXkm3INS01WAiv0PapJ0CZc0SJQUzcWnZYbOOY20iFD8Bk+/j2A3wNxH7GdShFYS5ff237kXh9I9zSkQmIAhOsOSVfJ6DIXTMDaPnzkRJ92S1BQQmXl5LdirgRLLDdcYqcGPwe3QN4xCBiGNbrqq9wpW1XCecChwaQdVOsRDpPCpeoolPdxeXp3WNB9PHVzWBHlygy4NJCCrFHREv6bDt0VGwJZASkpONmm1UseGeFKAQexgaAkrfYWl3AGxWOLL2AIMBNbCXpktmS3k3vHeYjGCPBa43wJTurO3ZFVpQSJdAZGLoHTyk1upkjxMEaIxum3iIARcCa5kSkFAW5fi1mUlL9eyOsaanFmOMruwvEdE3ZYzsRSzo5ewRLXyVPPEvknt8ij4DvCg2O7xOgBCUprEzV4z1WekSpUgI8DT2mrnSOXKRfQavwuKA1F+tFnMKdJSUpMA7wQAifWRkMgjUKKZE4lBl6MCM4B1pq1P4uIjDE6Pq6rL0FnW1nIFmta5vrSvq/Ch4tpqG/ZNyyWa5jZPktq81eYv8Bt5s4iFITOp4AAAAASUVORK5CYII=",pt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXN383Q4tDP4c/R5NEInCCXAAACVElEQVQozw3Hv2sTYRwH4M/79pJ7bZL2bXqtERJ97zjUpbZDhg6pfC8qibi8hLR0EaJ0EFxaCSWDxjfpj1zrYBcRBKE6SAfBJWsx9i8IQfdQxDlKtA6t2OnhQfN3lbG7ytYRywF8rVoPCNO0X2sQOKDpAnSDK2VwkHgmh5yLGT8qASt+2KofnNt2Xg1gf1UF8AoM6052cRMNaloLZb7RKQGrKKji2OefsZF+VqIvos5ZLVIZCX61JcwUdk56wASVkgQvzPfvmT2twTSwyYaC/Pl/UhAHorFhBgZtL6XdAZRp1tkPwC1NLa9CWs5prLhI85NBQsLdXvjDymG3/EbYfQhVNYqc3TtktQhWLY3ko0QsdMbSEp+64v0NfxyqLbIGdh6M2xHHlLBGqKTyQo4E/nebBgBfe1GpdeywYXc8CT7D3cKXuMXkBy4xN6o5OuKamYp3DVI6uccO9lxgd2CAlJgI2BGgaAgIJV/TYwKqu3WFccjbMuA+bVkWgS2bfnlRbD1Eb1sDyWMmjKYIBgGAWbqKRicfvzBkBIz3V5AKnguWdglQEysQsSuVzOg6ALy1pitA5ykGCsc857BRYcgCSZyFOdvoOigSGoPc5Ta73mgxshIcQE5sHMHd9D7yqITw7JO+GHVMxjhzYLcKPSEgmz3fU+BRy3iYNtiXLaBssCW8KguReqkQOTb3MStV0Ugt4U1eIs1RZWRII6Ww8xeNNItyGGQI4ZMlpg/3lQtkl2JFnBp1imRyFe0kK2Id3PCslMgiQNMS77gvFeDhG3cSkYvheeg/e7ClIh5oh+IAAAAASUVORK5CYII=",ht="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXh7eHl8eXj7+Pn8+eTbH1KAAACPElEQVQozxWPQWrbQABF/0xn3JFKQRTZOIuUsbCCbOgdRoYEOauxkYPcTRyTlPQWIxEltrsRwQ6hK9nEQek6F+gNTE/Q3qLLusv34cN7SH3mFicdYW4gNIhJWXPBRVXzjcFD0IqeU4o4PRbAIVjyico0vJpIifqPfL80QN9DAQY5ucRHE/hpHxBldXe9GilaHKcKMlj6pho2zXgkNdBl0oJ8kiF1DSiJF1ZHBJkQr0Dbux/5I42Zp4cFahJDFGeW6/QjBwmFY/Q7vZ2SnoOdW2parv/Cnm81+m0xrEfiVXQ3W4nOXIqVYi3l6AAQBwMFkViVBANMto4enXHPNTkHBB0oVj4r5vHzCWayrgBvxtygDlDB2CNDjd80ZInY69aKVYZcfJ8DW+fWuc+syEODALx+ojqoafHsthTI+ZW27PGpIeo/cR6YKcbqIuIFhHmBrzAovzIOOJk1ucvcDzrMRYGVBH2yvcAOf0KiKwfRovBI3tm/kW1eemtfNWwIIXE2mJNhvoszfmMBfRCv0OPwd2321uDW3nx2q/BDxFVeoN1g7a6Im8yRnoawa8kbdXnU0cHeTMxKfZGlJgvLb3sKsxgglQnDdAfvj9LUnqWRDo0GiUmPwyU7TAsD7wHeIW3Nfy1qVGKoE9NgJCdYCAexNRob9yCn4DAQmXtQuUtera6bEmTTXhZy6h856xi4mnEl6BI9mfISkLbtJyZIMJIAUd5ZOBEu88KRAk71yxfItj/hpIB0Errv4gO1os4/UICf+o3kkqwAAAAASUVORK5CYII=",ft="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEX0/PTx+fH2/vbz+/P4//htSO9OAAAC5UlEQVQ4yyWT0QGjMAxDZTsDWKQDmJQBYrgBUsr+M517x0+LRWw9CyA+pC1YzndrMgHaNXVKQ+di13Of1qbur48nWhuRjj8i6ON8e7pNm7zyag/DBTfS9Z4Hup1fUuXMKY4HEE8QOHCByXkIkl7lDT239RtL9quO4JItmmhOAHXg45QuYKrQFLyGJcRvaTw6kQqZy6mkR6JAPFH/XqsQjEDRmUOA+MNLHGyMUT7AHApoAhjgjIJmCxy6XHdf648AWCdGe57IUDazCeTImQOY4/z+eVYVX2IjOw9RydeAeJwl79iGi4HpgQgHEchWraUZLtayu8scq0lHHHUKMY3Ml8hB7CS1jOckDLG9ccgNeX3124phOcjL9fPnWJhTXpLHeG9DRmHnTxHEaHakS2J51lwAJcUraNbuU7q4gMTDQj3Eripc/x+qFM5VEKAB1roQfAkX5/PxqnS2QpOrxfK1Zft0/omV5T+xCSBUAIbEIwUQgvAfxFE1O8dnk233+1UZiqJ1mAbsue6Yt8tF+yOrxC/YrUhzC4qPlE3EbR5hGKhhHdlrg7J9WunV7L7BcYQwAeE59u2tnN1c6gfVYrQiLSZ9OxZdWDXQq0+r0Pbarh3UqGCwauVvbiXuDsNxCtLDdW9rTF8oQYN4EoXXdfmwNguQP26n/tRjDeo+F2W7PjWtfSr6Bn/z+cXOLp4NnMV4RytvSW4B68m+XN9XfZTFGhO/S+cHTuTqZDC21ccA0N7QsePALaDQC3D1f94U9CWo+aq6BjB3v0rxIimBM12296M3aKPHjXLQE9KQKH4By8RHraJ3AgVto2r4xdFqlaPaiAHLl1ZF4P2pI6cYc+K8UZdcmxy7lqGc1IoPxLmIFuIeEZ6j2sQT88muEg1zwrEDTIX5U/ZmcsqfgVlBumiBLF4sAyhf9BFlXOPKLZ4H0iFb3VoHrGhtHTldKrOvP2/reu2zfV8CXMPqzRdlgd0a5eI7WwB/AYcgavcqxXWEAAAAAElFTkSuQmCC",mt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXM2t7O3ODQ3uLR4OTDp25yAAACdUlEQVQozw3P70sTcQDH8c/3/M7NG+j35mnHwjwh4hRy/QFK3zvPNbeIG1koPZmxfj2IDAwihL53zj0JYisfmEHcZJZOiBUG60lZiI8T/ANusuftgQ+kCPIPeMP7hS5mUrV9c1g6MQCAEZ8tDLHwofImAGRlX+SZK3Vu9rRRPuO4PK6/9nA4GIATsxlODS+rdCMhkAZivpYV0LWoQHSLSA4NfUg+6mY+7BKL2++F9LvnrBDYm6JO9i/YO3i/HJTGQ4pdIV82TbEDFG6vGYCd4wZchgK5J2CrKTLE+Tx0v+YGlIbdWJFcQl4ptBN8fUJQN1MCJLcZLYwUVVo+famGGty8EXJF5ofOEDzcodT3/Fb0I5sHmc1ZG7CcSl8COgxlXx09jT05OafjCZLIHJhGIaU6wDZHsuMQ41wbdjmQXbhKnMq1zlXSYrjCnyZblqexA7fC8RxS74tq2P3OxSQwTuJSApH8OZLzBBp1pOe0i3rdyDUA47GySZ31YmC4EQYSXvFSvieORGBxXF9aeVtUWKGS9WMC4Z9Y2uXnJ2nCUXVMbPOYqNYNmGWWQ7Evr+BWC+a0JAMTImcq/S4Z5INdQMeuOqDIMa9beilxfA60iC6sP1INcPDpmHBW8drZHNmqwyddJtVje9q8WGUgWAOzmbU4FCQBFi8B2Wk6pickBnYhJMenmJGuRmtt2IoKq9NuFGbNFR99sHnvrnLsLysKANDIsxbp6RNMAsoDSKuRpMwZbAAzI68QatIjmZ0aImyM3O8/4e2MNlOHZomFsa/fLDsysliHS+nlYLQJMnynxrH8QO4PaAV2Li8B/+52UgeGIVNFYf8B1XG/kFSmLcUAAAAASUVORK5CYII=",vt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXh7vLf7PDj8PTm8/ecW+lZAAACZElEQVQozw2RsU8TUQCHfz3fw7MS87jeI7DdmSMpDEoHE+P0HqGkvRR8vb5XC4NpN2RQZqcK9xJkwtriekcggerC4OZADDiT+A+goxv/gfwB3zd8H/T6vYF/pTZkCSmDNd3CBEtmZJP4N+CvvhecDvmntKsvwB17rpbIRTLOEoYkj9KZzRUuJsuBQFwgptyJ3Y7EL4V+ud5LO1UnMeQSSObqisiISZkbQBlliP3qWSk3GPQXjxv6VF2BTDO4ySx1zhuJXbA2wBNJF4t5vH9keg6wu5NvUpLtXrZ3OHC9ZsgVcZdOl38PM1y/L6m8GRiErj4AqezUjHGatGGIgs5NJDHh8Ua1IuB4035haVT6SaYWMoQ0eJ3rB/Gpnr3fB49YAy1Wa21YKqAHOmAveVw6CCMGMZh5bGtVI7jnZaiQNbta1Z+285oSoKoRbta1KZ/1bBdKH/RIxv2pRVpkoCmvpr097RWoo0CpMlTWllIenSjECU8mV43mHx2fIRfH/pncrJm3+58BWdbSqCS07/yiQnvHiCG4ZPGRFeAtfreoOubyctzHvLNHhjNvIhukxQzjU5O6QdOEzUp1Ef4d98Pxz+IPYX0bcpnT52dbedfz8y7C4R89RV+MjJkuCCx7mWDt4eyK/62lQB55xXGJK7p8u6bgRv4hVHylelYGGFs64W94tng8sAIVqSRJBpqRA9rFvAysS+9ak8s7557pz5HR4qhCRmWgplpTRJ+bhYfSAMO8/YBucWPuSdmFFtOnuWqvV2NbF6CJnbhNDzEZ/T0XSDrUydzkZCG1z/oIEyUFYxW/KPXNfwopuHDcO04UAAAAAElFTkSuQmCC",Ct="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXm9PXq+Pno9vfs+vttWKBGAAACPElEQVQozw3RQWrbQACF4TfCMjPqZgIj4RRaxsZKE0PuMBZ2cLKaCI9RDAXFmJJknUWWI1O1UlamOMHJSjGkuFn3AD2Cr9CepDrAg+/xIxK4QwIqHHQkUhQ/WuphInVIFBojl8QXc012Tgq4RTtVHWVLZVFh1tEoI91uiN4joCqde8Ukn/zGM1B2W4ari2PtTwyw55Ld+Wways54qhGPyS6FzbIT3lIY8WwWdCq56Yolx6KmSKzoqrsCB5heAp4TGNQWJ1Pc6XlE5jQD5OlIX9I47A9uiUQcPQxcury/ToyxWJG/za6ki88crxKPocKS59Sl3EtBG7C89fCGflpfqoSzCeC4crioJA7F0V5+8MaSIk4qSCdwzpogmbqzEirVpGiS2dOVJvUuuqFEmhHao06KEpq+8lvHI14NJk3Qrmi9vBuRLwAz0qZB4hsDXQFXgtnlpDX3C6ug9BquSw/CYtwAzuTz5vuQNdr/YibhR68378ehZH30FSpjh71LpQkrsj+Q062h5WwZ5wlRoD6uQJy1DqvSYuCUapMBqT5YA4ZFw4KlWapxoUGlKWrx0eDQvmigu4WMYt97ruru98fYL8/0lG6CTOFcFWBhFK5gKw19h2JN808nh7xhkU6sWKLXdtkqBL6h+lULK5k19wFB/FldnGYf3LDeuf6IC2/MzJOSOP0qPxLqzaGIqtBcFIItrstkazONOkrc1D1czjuwEGESB4JJnjgSMN7PXAu7fZQpl1C236C+9mM4Af8P98Ch4R2TRl8AAAAASUVORK5CYII=",yt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXPz8/R0dHT09PU1NToNyAhAAACdElEQVQozw3NP0xTQQDH8d9d7sFrG+QeKVgQ4aoFCwFkYERyLY//0UB8GNGg1WAC0RBGJrzW4mCXQmpgvCYOwEAYiulSpYtza2KiW7s5FgNJFSV2/CzfL7RwpoJ20iadmgA8owOyaxmusKE44scBeb4vIv00dqYgmf6jzWcr7W6INbDQeZbQL9ytXeYgtFfzmW1Fek5msxJlwhyt6qDDxOLQzpVPompYrMPnEnhvLm7M5BxY5nowAj3zkydAkpC0FIG6g7AK+Ub25ybyNWVYwtpseP2rfrQwiGRpfqrnMuPeuvr2dA0p2YsHF2XghkrXKtZ8tLBjR7S2qIaYbKmyLd/QP+EogLjqqwNw5Lq1pDlMLkM5+gNoSvdq+Pxmz9/61EFq6GYM6GqaGvlN95zy3gsmEWI8K3k8OP9OmRLEPO6DP3Wv3g42COinJTZ33dcIvs4ESp6opMTjDs6mcYTEbFeUifuxh989yZrIx4lkpuixxz0nHLCekKbE17suKhYkMGhoYhTZtVBvg4bfq/1L1Im0AGMVpBFwumM0zwyuKiCMi5dqR4Flx47AGyF2xTbxqUdTwCH94BT3DozpLV5WuAL/N8rGtHKjotBOOuOtCJ9E21uqsyBoLOzaXbHPrK5PQBP+fBfeidvJAeMIAmzVt5IkJJ9DBWaZDAepYUhlQqHt0h72SJ3j8TZHom64f516xx9T5evgMPgwG82jZdJaJIDyWp6LAjOCclVyzNA3iTKzIULlBQEPaTXlPHok5gISclmyaWZlqY2aTHdRHpJOwTdDEQ3ZfKtbpclcNhyVClagmY+fIfyKukntPqBgnx5QvZHk/D/MK8JMClrSigAAAABJRU5ErkJggg==",It="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXe3t7a2trc3Nzg4OCXP9lCAAACoklEQVQozwXBzU/TYBwA4N+QEr4CNbSFwcFuowSqMRvEAwShHWAYNsu7dS0dLnGUSWT4kZB4lGzE4VtcwgIDJqcOWLJxcv4BOoQZuCPxSNSD4WSWLJGL8XmAIiyo2RgJ4A1pxQQlOxRAszLTdnPu2oQGb05RC5slJld7ZAIfo4O44Bn1ud59F0BcjnYOa17Jhwc6EdiKettncsXjT1f8KUBZUW41pK0Jc1Az4dEV3rkkPBtDSZ83Blyt0kSf2PRjzIykoBwINisPbPPtljdVE9iAXRfUPkXLVIgYrCccp5g687NdZbcJ+xa5VE/HhTtT23IKsN5jj/pcUd0dTZNAqCVw72n4gOwnTOC0vvHfaauT8d9zAoRRfPpISZRVyUiw8ELzOG1b2DZpFzkSrHLhq52twDEdyZHwvp2j4uv/bjvOf23/AcEtTuJbY5Cp4YcAer1IGkUzOo2rn8LQOKjFJw3NTw24nprQXY5aF4wxcqcSdbFQ00H4xFl8Drx4X4CikvAM1tuR8bKIBCBoLnKN10KJG4zKAsc7c9WEB9gnCi6BhVjqoco6t20ILAJuVctvaEZK732cRHDRmGfuihOam0o2CHByUZ/epCcVlRs2wmCnMqsd6aSim3ibBJtm1LGyXW3Bb7tJCPlFtUG+SvPdeEUAB60lNdo+VQbLcwRNVtT68FsLcr1+NotgNihlpExS1V2SFgNbeC8bEhgm8sM17wSi6Us2gxVWJU/5GKBpandvfyYbU1yHCLpCgWGbbPXn40rehEsUXKIJr9DMKgICfjc4bl1YfvUhE/YIECGRqjCxSM9hrybAIkND5OeWfFZsXkxB+qDzb7pUQ3EfQ3Ml6EChEt3D+iS01VqC7EQ/Z/DuPQcz4yChoFQJce2Qr+NNAv0HxofmpXGqgHkAAAAASUVORK5CYII=",kt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEXm5ubo6Ojp6enr6+vt7e1FnZagAAACrklEQVQ4yx1SixUbMQgT3AKAFwDcAfzpBN1/qMrJS5w7bCQhC6IGSUGYQJd6Ox9ZPXi1AGJBavhUTT0JjYPGAab9WcDYIxsmlnxkayX8mhxCmKHA75az5cfRbWybEExiu08xDSgGym0mwuf3j4SvHeQxDJJzh2zp4iOlrD8iOb4SXyC1wiOLRTcnrje+nGamFeXVKWkmzbFIPChkmJ6Fg7mBpV8n+JGOVCd4jv1thThkjeQGNeafpeV3rsEWLfyWc8tC9jOv6FQ8rRzHOOVB+jCYEUAJpDvh8xHNFm/Tm5p5lw94Pp3NhtKEfQsGvnXhowdZE73hPwxKvjDd4i4PCdd0fe3W5fO8ktAsUAacLgstpUw60JCiPLg2XpkgiqPIYYXJd9ksGIT3q+LlevypzItvO+s0F1dBzVr2QDMUkYmuyGcrIS44mVJ7JVKwQXjYuBYp0Uetecbswzsikzu3gUR8bJC/C8Gd/NAzI/xdUGOYQQHDZ8X2d5XuzGRUiXAi9si5CRgoiToRZPtzLJkd0FUHRHZwJf0BHT1sE7gcnh0jmKKlSSF4/GBirGk5+K9NKlGDCfc9JtPhg78JdabH0YQRKNZnJ8tFnPfXHJb4xum1TTCeEmyEdbyEJLjznMLHuFD2Y9NEkSleIBs7SiCbblhgctVi9ch++kDYnn1C9DA5TvdPsToXM55wI6k+8eKT1blwPTqWb5CFJ+7dTBmab+KHy+xwNtItXhZNSpHD2fxnynrxG3ZBKRe8KBpXk11AnadlccEhr9w1nBBvBylNkv7A8eqpGBCDqhitmWQXBjjdS6idr/QjXWLDeMzMbVDoJuM8zN7WenMZWXgZ2vX3F01J3jHZbwk1LRP+DWEvDJtOUoh/AIaBUz5VpWyhuyx4QtgL/NmgC6kM/JvNe+R/C/5aL7BKIbYAAAAASUVORK5CYII=",bt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAElBMVEUQERMODxESFBYWGBkaHB0eICLm6ozJAAACkUlEQVQ4yyWTUdLbMAiEASfvoOkBkBy/O5keIE0v8E/uf5h+68qZWALELgu2MG9PP9qyvCzTVhrrsPGOCjvTfXQZvtp/W3Gy6LCITqs4q/DZ+KYl76zKzHVYpY2wNY27nqN1sbLGcrLH3/ENH4oWlGctsDu8AO+HzTLlsYdh8MzP1m6YDMz0ACfcimvakBj+mwO/+5Uta5teOD379sxK1fUxmUhv8MU3jUT5gs26PMephFznkLcpQZ6/dPL9C/GWHcCxDN6oZhD5xBm5qoYBPA+PFE/H1tXDWcWl8TW7rS+4dUzAVy0BIrvC4/HcqW2TkG1HO8q9dC23INAg7NA4AFRFkDTM2lfELPyFzi1VddcpX2z0KjHBUDmdLNJ6dDps4ytrX+FPsZwE31wSL+6OWfHOAJ3+Y0Rk/MiKfmWNPg7oVP/U3Ck9FoCkC2gBpALOiqbMNTkOe8P4FWkTD2Y9Q3+5VmV0uLUJBl68U5uAK2Kl6QDXvLxbwweOL2sixW78uU8p0ysfc7cWrF1j6B1sPJ4WgclYSnJN1bzozrhEcFHmRzBkbJWqqdG+EYJXRFmT5jnLXPUNF6WBdoFbTxYsmDXVLU/WA7MExNc93sJS5hIXDeLxzMScHzdhKvEkibr6cQXYPrmtmTA7JcInISrTzRDvShTdka0uVGrsJAAR6tSn1sKziZtfKVjAxPrJsYgZO0bye+vKTZ/DgoAoLGNO6jYHimZYTL/3pLJHawquJukjBpfz8WOGVSVIWx9ywUfS5iENutidRM4NzkAmxgUSQ68xgNOU+ZLalr4TS2V+D2xqukZig+Z9DilR7Nouzwp1cp/3E5q6Rdlf08obKvAM4qZ6pMr+w3PmQALSSBfjyZn5DwrNRVbywBQiAAAAAElFTkSuQmCC",Bt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEUWGBkYGhsdHyAfISI1t/v6AAAB5ElEQVQozxXQsYoTURSA4f/EeycZsDgDdySDjihk38Hy3GWi2J2BCaziQhaiaB+tt9AFu1kwvYUPsIXNPoB9BAUfwAfwEUzKv/v4odGrroyp9/rUaC6rZ5skv5F8qPsfYYP+yKUMymmAEEeW55oUR4o8jr05KNzJ07yvB7w0KKfLwcQUSjfmMU0PJfPHFoEVU+ohNrcKMEzMQ23FDnVSI2dqtYWI7KlLu6vE4UnyvKc3SJuL7lBbeEEl42ItpGLjzIT8PRJCmkRjVpVpsbJFVN0687okJNZiHAr5Z7MV0BnGIDc+THM1zlbieBc1Fq+tH5BH+OpnbWkj40hSqC8Lw2TvFuF0SUFJCk2IytXbjeqcRAt6NHpnrUkUU4KRzZs8RCK8N/Akn2W04LwxMU/V7XK0bDyN2RxfDyx7I4h5vjZby72V8UnOWumZL3qtYc+8DTE0siSBMXGhywx2dMYPnQHbxdFZ7deiNGxCCtD/QWnbwDoGhRYPDzUdUA3krjpnkvdAgDN4ddLkEQSov9qjd42HaDjI34gEqS9TUueAk+sc4qg5ws407KQYKs8G1jv4xBlqBVk6cb4dISZIwVi1Jzu4+HLk6lyfUxkXvwy+1Q+4WVdHIhwfybZ6CWVhxMEhShOgsP/HOW0MvZJeFwAAAABJRU5ErkJggg==",St="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEUWGBkYGhsdHyAfISI1t/v6AAAB5ElEQVQozxXQsYoTURSA4f/EeycZsDgDdySDjihk38Hy3GWi2J2BCaziQhaiaB+tt9AFu1kwvYUPsIXNPoB9BAUfwAfwEUzKv/v4odGrroyp9/rUaC6rZ5skv5F8qPsfYYP+yKUMymmAEEeW55oUR4o8jr05KNzJ07yvB7w0KKfLwcQUSjfmMU0PJfPHFoEVU+ohNrcKMEzMQ23FDnVSI2dqtYWI7KlLu6vE4UnyvKc3SJuL7lBbeEEl42ItpGLjzIT8PRJCmkRjVpVpsbJFVN0687okJNZiHAr5Z7MV0BnGIDc+THM1zlbieBc1Fq+tH5BH+OpnbWkj40hSqC8Lw2TvFuF0SUFJCk2IytXbjeqcRAt6NHpnrUkUU4KRzZs8RCK8N/Akn2W04LwxMU/V7XK0bDyN2RxfDyx7I4h5vjZby72V8UnOWumZL3qtYc+8DTE0siSBMXGhywx2dMYPnQHbxdFZ7deiNGxCCtD/QWnbwDoGhRYPDzUdUA3krjpnkvdAgDN4ddLkEQSov9qjd42HaDjI34gEqS9TUueAk+sc4qg5ws407KQYKs8G1jv4xBlqBVk6cb4dISZIwVi1Jzu4+HLk6lyfUxkXvwy+1Q+4WVdHIhwfybZ6CWVhxMEhShOgsP/HOW0MvZJeFwAAAABJRU5ErkJggg==";var ee={themes:[{body:"#ede7da url("+lt+") repeat",content:"#ede7da url("+rt+") repeat",popup:"#ede7da url("+At+") repeat"},{body:"#ede7da url("+dt+") repeat",content:"#ede7da url("+ut+") repeat",popup:"#ede7da url("+gt+") repeat"},{body:"#ede7da url("+pt+") repeat",content:"#ede7da url("+ht+") repeat",popup:"#ede7da url("+ft+") repeat"},{body:"#ede7da url("+mt+") repeat",content:"#ede7da url("+vt+") repeat",popup:"#ede7da url("+Ct+") repeat"},{body:"#ebcece repeat",content:"#f5e4e4 repeat",popup:"#faeceb repeat"},{body:"#ede7da url("+yt+") repeat",content:"#ede7da url("+It+") repeat",popup:"#ede7da url("+kt+") repeat"},{body:"#ede7da url("+bt+") repeat",content:"#ede7da url("+Bt+") repeat",popup:"#ede7da url("+St+") repeat"}],fonts:["Microsoft YaHei, PingFangSC-Regular, HelveticaNeue-Light, Helvetica Neue Light, sans-serif","PingFangSC-Regular, -apple-system, Simsun","Kaiti"]};const l=s=>(be("data-v-e93e95b1"),s=s(),Be(),s),wt=l(()=>e("div",{class:"settings-title"},"设置",-1)),Et={class:"setting-list"},xt={class:"theme-list"},Ut=l(()=>e("i",null,"阅读主题",-1)),Qt=["onClick"],Dt={key:0,class:"iconfont"},_t={key:1,class:"moon-icon"},Vt={class:"font-list"},Rt=l(()=>e("i",null,"正文字体",-1)),Mt=["onClick"],Ft={class:"font-list"},Pt=l(()=>e("i",null,"自定字体",-1)),Lt=l(()=>e("p",null," 请确认输入的字体名称完整无误,并且该字体已经安装在您的设备上。 ",-1)),Kt=l(()=>e("p",null,"确定保存吗?",-1)),Ot={style:{"text-align":"right",margin:"0"}},zt=l(()=>e("span",{type:"text",class:"font-item"},"保存",-1)),Nt={class:"font-size"},Ht=l(()=>e("i",null,"字体大小",-1)),Wt={class:"resize"},Jt=l(()=>e("em",{class:"iconfont"},"",-1)),Tt=[Jt],qt=l(()=>e("b",null,null,-1)),Gt={class:"lang"},Zt=l(()=>e("b",null,null,-1)),Yt=l(()=>e("em",{class:"iconfont"},"",-1)),Xt=[Yt],jt={class:"letter-spacing"},$t=l(()=>e("i",null,"字距",-1)),eo={class:"resize"},to=l(()=>e("em",{class:"iconfont"},"",-1)),oo=[to],no=l(()=>e("b",null,null,-1)),so={class:"lang"},ao=l(()=>e("b",null,null,-1)),io=l(()=>e("em",{class:"iconfont"},"",-1)),co=[io],lo={class:"line-spacing"},ro=l(()=>e("i",null,"行距",-1)),Ao={class:"resize"},uo=l(()=>e("em",{class:"iconfont"},"",-1)),go=[uo],po=l(()=>e("b",null,null,-1)),ho={class:"lang"},fo=l(()=>e("b",null,null,-1)),mo=l(()=>e("em",{class:"iconfont"},"",-1)),vo=[mo],Co={class:"paragraph-spacing"},yo=l(()=>e("i",null,"段距",-1)),Io={class:"resize"},ko={class:"resize"},bo=l(()=>e("em",{class:"iconfont"},"",-1)),Bo=[bo],So=l(()=>e("b",null,null,-1)),wo={class:"lang"},Eo=l(()=>e("b",null,null,-1)),xo=l(()=>e("em",{class:"iconfont"},"",-1)),Uo=[xo],Qo={key:0,class:"read-width"},Do=l(()=>e("i",null,"页面宽度",-1)),_o={class:"resize"},Vo=l(()=>e("em",{class:"iconfont"},"",-1)),Ro=[Vo],Mo=l(()=>e("b",null,null,-1)),Fo={class:"lang"},Po=l(()=>e("b",null,null,-1)),Lo=l(()=>e("em",{class:"iconfont"},"",-1)),Ko=[Lo],Oo={class:"infinite-loading"},zo=l(()=>e("i",null,"无限加载",-1)),No={__name:"ReadSettings",setup(s){const a=Se(),d=w(0),u=w(a.config.theme==6),n=w(""),U=He([{background:"rgba(250, 245, 235, 0.8)"},{background:"rgba(245, 234, 204, 0.8)"},{background:"rgba(230, 242, 230, 0.8)"},{background:"rgba(228, 241, 245, 0.8)"},{background:"rgba(245, 228, 228, 0.8)"},{background:"rgba(224, 224, 224, 0.8)"},{background:"rgba(0, 0, 0, 0.5)"}]),m=w({display:"inline",color:"rgba(255,255,255,0.2)"}),E=w(["雅黑","宋体","楷书"]),h=w(a.config.customFontName),y=w(!1);ke(()=>{var Q=a.config;d.value=Q.theme,d.value==6?n.value="":n.value=""});const i=r(()=>a.config),I=r(()=>({background:ee.themes[i.value.theme].popup})),A=r(()=>a.config.theme),k=r(()=>a.config.font),c=Q=>{Q==6?(u.value=!0,n.value="",m.value.color="#ed4259"):(u.value=!1,n.value="",m.value.color="rgba(255,255,255,0.2)"),i.value.theme=Q,x(i.value)},b=Q=>{i.value.font=Q,x(i.value)},L=()=>{i.value.font=-1,i.value.customFontName=h.value,x(i.value)},F=r(()=>a.config.fontSize),oe=()=>{i.value.fontSize<48&&(i.value.fontSize+=2),x(i.value)},v=()=>{i.value.fontSize>12&&(i.value.fontSize-=2),x(i.value)},B=r(()=>a.config.spacing),G=()=>{a.config.spacing.letter-=.01,x(i.value)},ge=()=>{a.config.spacing.letter+=.01,x(i.value)},ce=()=>{a.config.spacing.line-=.1,x(i.value)},pe=()=>{a.config.spacing.line+=.1,x(i.value)},he=()=>{a.config.spacing.paragraph-=.1,x(i.value)},Z=()=>{a.config.spacing.paragraph+=.1,x(i.value)},fe=r(()=>a.config.readWidth),me=()=>{i.value.readWidth+160+2*68>window.innerWidth||(i.value.readWidth+=160,x(i.value))},le=()=>{i.value.readWidth>640&&(i.value.readWidth-=160),x(i.value)},Y=r(()=>a.config.infiniteLoading),ne=Q=>{i.value.infiniteLoading=Q,x(i.value)},x=Q=>{a.setConfig(Q),localStorage.setItem("config",JSON.stringify(Q)),re(Q)},re=Q=>{de.saveReadConfig(Q)};return(Q,V)=>{const ve=Te,se=qe,T=Me;return p(),f("div",{class:_(["settings-wrapper",{night:o(u),day:!o(u)}]),style:q(o(I))},[wt,e("div",Et,[e("ul",null,[e("li",xt,[Ut,(p(!0),f(te,null,ae(o(U),(S,R)=>(p(),f("span",{class:_(["theme-item",{selected:o(A)==R}]),key:R,style:q(S),ref_for:!0,ref:"themes",onClick:Ce=>c(R)},[R<6?(p(),f("em",Dt,"")):(p(),f("em",_t,H(o(n)),1))],14,Qt))),128))]),e("li",Vt,[Rt,(p(!0),f(te,null,ae(o(E),(S,R)=>(p(),f("span",{class:_(["font-item",{selected:o(k)==R}]),key:R,onClick:Ce=>b(R)},H(S),11,Mt))),128))]),e("li",Ft,[Pt,J(ve,{effect:"dark",content:"自定义的字体名称",placement:"top"},{default:W(()=>[We(e("input",{type:"text",class:"font-item font-item-input","onUpdate:modelValue":V[0]||(V[0]=S=>ue(h)?h.value=S:null),placeholder:"请输入自定义的字体名称"},null,512),[[Je,o(h)]])]),_:1}),J(T,{placement:"top",width:"180",trigger:"click",visible:o(y),"onUpdate:visible":V[3]||(V[3]=S=>ue(y)?y.value=S:null)},{reference:W(()=>[zt]),default:W(()=>[Lt,Kt,e("div",Ot,[J(se,{size:"small",plain:"",onClick:V[1]||(V[1]=S=>y.value=!1)},{default:W(()=>[j("取消")]),_:1}),J(se,{type:"primary",size:"small",onClick:V[2]||(V[2]=S=>{L(),y.value=!1})},{default:W(()=>[j("确定")]),_:1})])]),_:1},8,["visible"])]),e("li",Nt,[Ht,e("div",Wt,[e("span",{class:"less",onClick:v},Tt),qt,j(),e("span",Gt,H(o(F)),1),Zt,e("span",{class:"more",onClick:oe},Xt)])]),e("li",jt,[$t,e("div",eo,[e("span",{class:"less",onClick:G},oo),no,j(),e("span",so,H(o(B).letter.toFixed(2)),1),ao,e("span",{class:"more",onClick:ge},co)])]),e("li",lo,[ro,e("div",Ao,[e("span",{class:"less",onClick:ce},go),po,j(),e("span",ho,H(o(B).line.toFixed(1)),1),fo,e("span",{class:"more",onClick:pe},vo)])]),e("li",Co,[yo,e("div",Io,[e("div",ko,[e("span",{class:"less",onClick:he},Bo),So,e("span",wo,H(o(B).paragraph.toFixed(1)),1),Eo,e("span",{class:"more",onClick:Z},Uo)])])]),o(a).miniInterface?Ae("",!0):(p(),f("li",Qo,[Do,e("div",_o,[e("span",{class:"less",onClick:le},Ro),Mo,j(),e("span",Fo,H(o(fe)),1),Po,e("span",{class:"more",onClick:me},Ko)])])),e("li",Oo,[zo,(p(),f("span",{class:_(["infinite-loading-item",{selected:o(Y)==!1}]),key:0,onClick:V[4]||(V[4]=S=>ne(!1))},"关闭",2)),(p(),f("span",{class:_(["infinite-loading-item",{selected:o(Y)==!0}]),key:1,onClick:V[5]||(V[5]=S=>ne(!0))},"开启",2))])])])],6)}}},Ho=ie(No,[["__scopeId","data-v-e93e95b1"]]);const Wo={class:"wrapper"},Jo=["onClick"],To={__name:"CatalogItem",props:["index","source","gotoChapter","currentChapterIndex"],setup(s){const a=s,d=n=>n==a.currentChapterIndex,u=r(()=>{var n;return((n=a.source)==null?void 0:n.catas)??[a.source]});return(n,U)=>(p(),f("div",Wo,[(p(!0),f(te,null,ae(o(u),m=>(p(),f("div",{class:_(["cata-text",{selected:d(m.index)}]),key:m.url,onClick:E=>s.gotoChapter(m)},H(m.title),11,Jo))),128))]))}},qo=ie(To,[["__scopeId","data-v-51153469"]]);const Go=s=>(be("data-v-a6bd2896"),s=s(),Be(),s),Zo=Go(()=>e("div",{class:"title"},"目录",-1)),Yo={__name:"PopCatalog",emits:["getContent"],setup(s,{emit:a}){const d=Se(),u=r(()=>E.value==6),{catalog:n,popCataVisible:U,miniInterface:m}=Fe(d),E=r(()=>d.config.theme),h=r(()=>({background:ee.themes[E.value].popup})),y=r({get:()=>d.readingBook.index,set:c=>d.readingBook.index=c}),i=r(()=>{let c=n.value;if(m.value)return c;let b=Math.ceil(c.length/2),L=new Array(b),F=0;for(;F{const b=n.value.indexOf(c);y.value=b,d.setPopCataVisible(!1),d.setContentLoading(!0),a("getContent",b)},A=w(),k=r(()=>{let c=y.value;return m.value?c:Math.floor(c/2)});return Ge(()=>{U.value&&A.value.scrollToIndex(k.value)}),(c,b)=>(p(),f("div",{class:_({"cata-wrapper":!0,visible:o(U)}),style:q(o(h))},[Zo,J(o(Ze),{style:{height:"300px",overflow:"auto"},class:_({night:o(u),day:!o(u)}),ref_key:"virtualListRef",ref:A,"data-key":"index","wrap-class":"data-wrapper","item-class":"cata","data-sources":o(i),"data-component":qo,"estimate-size":40,"extra-props":{gotoChapter:I,currentChapterIndex:o(y)}},null,8,["class","data-sources","extra-props"])],6))}},Xo=ie(Yo,[["__scopeId","data-v-a6bd2896"]]);const M=s=>(be("data-v-4804761f"),s=s(),Be(),s),jo={class:"tools"},$o=M(()=>e("div",{class:"iconfont"},"",-1)),en=M(()=>e("div",{class:"icon-text"},"目录",-1)),tn=[$o,en],on=M(()=>e("div",{class:"iconfont"},"",-1)),nn=M(()=>e("div",{class:"icon-text"},"设置",-1)),sn=[on,nn],an=M(()=>e("div",{class:"iconfont"},"",-1)),cn=M(()=>e("div",{class:"icon-text"},"书架",-1)),ln=[an,cn],rn=M(()=>e("div",{class:"iconfont"},"",-1)),An=M(()=>e("div",{class:"icon-text"},"顶部",-1)),dn=[rn,An],un=M(()=>e("div",{class:"iconfont"},"",-1)),gn=M(()=>e("div",{class:"icon-text"},"底部",-1)),pn=[un,gn],hn={class:"tools"},fn=M(()=>e("div",{class:"iconfont"},"",-1)),mn={key:0},vn={key:0},Cn=M(()=>e("div",{class:"iconfont"},"",-1)),yn=M(()=>e("div",{class:"chapter-bar"},null,-1)),In={class:"content"},kn=["chapterIndex"],bn={__name:"BookChapter",setup(s){const a=w(),{isLoading:d,loadingWrapper:u}=et(a,"正在获取信息"),n=Se();try{const t=JSON.parse(localStorage.getItem("config"));t!=null&&n.setConfig(t)}catch{localStorage.removeItem("config")}const{catalog:U,popCataVisible:m,readSettingsVisible:E,miniInterface:h,showContent:y,config:i,readingBook:I,bookProgress:A}=Fe(n),k=r({get:()=>I.value.chapterPos,set:t=>I.value.chapterPos=t}),c=r({get:()=>I.value.index,set:t=>I.value.index=t}),b=r(()=>i.value.theme),L=r(()=>i.value.infiniteLoading),F=r(()=>n.config.font>=0?ee.fonts[n.config.font]:n.config.customFontName),oe=r(()=>n.config.fontSize+"px"),v=r(()=>ee.themes[b.value].body),B=r(()=>ee.themes[b.value].content),G=r(()=>ee.themes[b.value].popup),ge=r(()=>h.value?window.innerWidth+"px":n.config.readWidth-130+"px"),ce=r(()=>h.value?window.innerWidth-33:n.config.readWidth-33),pe=r(()=>({background:v.value})),he=r(()=>({background:B.value,width:ge.value})),Z=w(!1),fe=r(()=>({background:G.value,marginLeft:h.value?0:-(n.config.readWidth/2+68)+"px",display:h.value&&!Z.value?"none":"block"})),me=r(()=>({background:G.value,marginRight:h.value?0:-(n.config.readWidth/2+52)+"px",display:h.value&&!Z.value?"none":"block"})),le=r(()=>b.value==6),Y=()=>{n.setMiniInterface(window.innerWidth<776);const t=n.config.readWidth;ne(t)},ne=t=>{n.miniInterface||t+2*68>window.innerWidth&&(n.config.readWidth-=160)};Ye(()=>n.config.readWidth,t=>ne(t));const x=w(),re=w(),Q=()=>{$(x.value)},V=()=>{$(re.value)},ve=Xe(),se=()=>{ve.push("/")},T=w([]),S=w(!0),R=(t,C=!0,z=0)=>{C&&(n.setShowContent(!1),$(x.value,{duration:0}),we(t,z),T.value=[]);let D=sessionStorage.getItem("bookUrl"),{title:N,index:K}=U.value[t];u(de.getBookContent(D,K).then(g=>{if(g.data.isSuccess){let ze=g.data.data.split(/\n+/);T.value.push({index:t,content:ze,title:N}),C&&Pe(z)}else{O({message:g.data.errorMsg,type:"error"});let X=[g.data.errorMsg];T.value.push({index:t,content:X,title:N})}if(n.setContentLoading(!0),S.value=!1,n.setShowContent(!0),!g.data.isSuccess)throw g.data},g=>{O({message:"获取章节内容失败",type:"error"});let X=["获取章节内容失败!"];throw T.value.push({index:t,content:X,title:N}),n.setShowContent(!0),g}))},Ce=w(),ye=w(),Pe=t=>{Re(()=>{ye.value.length===1&&ye.value[0].scrollToReadedLength(t)})},Le=(t,C)=>{we(t,C)};De(()=>{var t;document.title=((t=U.value[c.value])==null?void 0:t.title)||document.title});const we=(t,C)=>{let z=sessionStorage.getItem("bookUrl");var D=JSON.parse(localStorage.getItem(z));D.index=t,D.chapterPos=C,localStorage.setItem(z,JSON.stringify(D)),D=JSON.parse(localStorage.getItem("readingRecent")),D.chapterIndex=t,D.chapterPos=C,localStorage.setItem("readingRecent",JSON.stringify(D)),c.value=t,k.value=C,sessionStorage.setItem("chapterIndex",t),sessionStorage.setItem("chapterPos",String(C))},Ee=()=>{document.visibilityState=="hidden"&&de.saveBookProgressWithBeacon(A.value)},xe=()=>{n.setContentLoading(!0);let t=c.value+1;typeof U.value[t]<"u"?(O({message:"下一章",type:"info"}),R(t)):O({message:"本章是最后一章",type:"error"})},Ue=()=>{n.setContentLoading(!0);let t=c.value-1;typeof U.value[t]<"u"?(O({message:"上一章",type:"info"}),R(t)):O({message:"本章是第一章",type:"error"})};let P;const Ie=w();De(()=>{L.value?P==null||P.observe(Ie.value):P==null||P.disconnect()});const Ke=()=>{let t=T.value.slice(-1)[0].index;U.value.length-1>t&&R(t+1,!1)},Oe=t=>{if(!d.value)for(let{isIntersecting:C}of t){if(!C)return;Ke()}},Qe=t=>{switch(t.key){case"ArrowLeft":t.stopPropagation(),t.preventDefault(),Ue();break;case"ArrowRight":t.stopPropagation(),t.preventDefault(),xe();break;case"ArrowUp":t.stopPropagation(),t.preventDefault(),document.documentElement.scrollTop===0?O({message:"已到达页面顶部",type:"warn"}):$(0-document.documentElement.clientHeight+100);break;case"ArrowDown":t.stopPropagation(),t.preventDefault(),document.documentElement.clientHeight+document.documentElement.scrollTop===document.documentElement.scrollHeight?O({message:"已到达页面底部",type:"warn"}):$(document.documentElement.clientHeight-100);break}};return ke(()=>{let t=sessionStorage.getItem("bookUrl"),C=sessionStorage.getItem("bookName"),z=sessionStorage.getItem("bookAuthor"),D=Number(sessionStorage.getItem("chapterIndex")||0),N=Number(sessionStorage.getItem("chapterPos")||0);var K=JSON.parse(localStorage.getItem(t));(K==null||D!=K.index||N!=K.chapterPos)&&(K={bookName:C,bookAuthor:z,bookUrl:t,index:D,chapterPos:N},localStorage.setItem(t,JSON.stringify(K))),Y(),window.addEventListener("resize",Y),u(de.getChapterList(t).then(g=>{if(!g.data.isSuccess){O({message:g.data.errorMsg,type:"error"}),setTimeout(se,500);return}let X=g.data.data;n.setCatalog(X),n.setReadingBook(K),R(D,!0,N),window.addEventListener("keyup",Qe),document.addEventListener("visibilitychange",Ee),P=new IntersectionObserver(Oe,{rootMargin:"-100% 0% 20% 0%"}),L.value&&P.observe(Ie.value),document.title=null,document.title=C+" | "+U.value[D].title},g=>{throw O({message:"获取书籍目录失败",type:"error"}),g}))}),Ve(()=>{window.removeEventListener("keyup",Qe),window.removeEventListener("resize",Y),document.removeEventListener("visibilitychange",Ee),E.value=!1,m.value=!1,P==null||P.disconnect()}),(t,C)=>{const z=Xo,D=Me,N=Ho,K=ct;return p(),f("div",{class:_(["chapter-wrapper",{night:o(le),day:!o(le)}]),style:q(o(pe)),onClick:C[2]||(C[2]=g=>Z.value=!o(Z))},[e("div",{class:"tool-bar",style:q(o(fe))},[e("div",jo,[J(D,{placement:"right",width:o(ce),trigger:"click","show-arrow":!1,visible:o(m),"onUpdate:visible":C[0]||(C[0]=g=>ue(m)?m.value=g:null),"popper-class":"pop-cata"},{reference:W(()=>[e("div",{class:_(["tool-icon",{"no-point":o(S)}])},tn,2)]),default:W(()=>[J(z,{onGetContent:R,class:"popup"})]),_:1},8,["width","visible"]),J(D,{placement:"right",width:o(ce),trigger:"click","show-arrow":!1,visible:o(E),"onUpdate:visible":C[1]||(C[1]=g=>ue(E)?E.value=g:null),"popper-class":"pop-setting"},{reference:W(()=>[e("div",{class:_(["tool-icon",{"no-point":o(S)}])},sn,2)]),default:W(()=>[J(N,{class:"popup"})]),_:1},8,["width","visible"]),e("div",{class:"tool-icon",onClick:se},ln),e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:Q},dn,2),e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:V},pn,2)])],4),e("div",{class:"read-bar",style:q(o(me))},[e("div",hn,[e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:Ue},[fn,o(h)?(p(),f("span",mn,"上一章")):Ae("",!0)],2),e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:xe},[o(h)?(p(),f("span",vn,"下一章")):Ae("",!0),Cn],2)])],4),yn,e("div",{class:"chapter",ref_key:"content",ref:a,style:q(o(he))},[e("div",In,[e("div",{class:"top-bar",ref_key:"top",ref:x},null,512),(p(!0),f(te,null,ae(o(T),g=>(p(),f("div",{key:g.index,chapterIndex:g.index,ref_for:!0,ref_key:"chapter",ref:Ce},[o(y)?(p(),je(K,{key:0,ref_for:!0,ref_key:"chapterRef",ref:ye,chapterIndex:g.index,contents:g.content,title:g.title,spacing:o(n).config.spacing,fontSize:o(oe),fontFamily:o(F),onReadedLengthChange:Le},null,8,["chapterIndex","contents","title","spacing","fontSize","fontFamily"])):Ae("",!0)],8,kn))),128)),e("div",{class:"loading",ref_key:"loading",ref:Ie},null,512),e("div",{class:"bottom-bar",ref_key:"bottom",ref:re},null,512)])],4)],6)}}},En=ie(bn,[["__scopeId","data-v-4804761f"]]);export{En as default}; +import{a2 as Ne,n as r,z as w,T as ke,a5 as Ve,o as p,d as f,g as e,t as H,F as te,P as ae,u as o,a6 as q,a7 as Re,a8 as He,v as _,e as J,w as W,a9 as We,A as ue,aa as Je,f as j,M as Ae,ab as Te,x as qe,ac as Me,p as be,i as Be,s as Fe,ad as Ge,V as Ze,K as Ye,a4 as Xe,O as De,k as O,c as je}from"./vendor-b9134af1.js";import{i as $e,g as _e,u as et}from"./loading-c2df5ede.js";import{_ as ie,u as Se,A as de}from"./index-6de4941c.js";const tt=(s,a,d,u)=>(s/=u/2,s<1?d/2*s*s+a:(s--,-d/2*(s*(s-2)-1)+a)),ot=()=>{let s,a,d,u,n,U,m,E,h,y,i,I,A;function k(){let v=s.scrollTop||s.scrollY||s.pageYOffset;return v=typeof v>"u"?0:v,v}function c(v){const B=v.getBoundingClientRect().top,G=s.getBoundingClientRect?s.getBoundingClientRect().top:0;return B-G+d}function b(v){s.scrollTo?s.scrollTo(0,v):s.scrollTop=v}function L(v){y||(y=v),i=v-y,I=U(i,d,E,h),b(I),i({"864924b2":u.spacing.letter,f7593496:u.spacing.line,aae0f766:u.spacing.paragraph}));const n=A=>{const k=/]*src="([^"]*(?:"[^>]+\})?)"[^>]*>/,c=A.match(k)[1];return $e(c)?_e(c):c},U=A=>{A.target.src=_e(A.target.src)},m=A=>{const k=/]*src="[^"]*(?:"[^>]+\})?"[^>]*>/g,c=" ";return A.replaceAll(k,c).length},E=r(()=>{let A=-1;return Array.from(u.contents,k=>(A+=m(k)+1,A))}),h=w(),y=w();a({scrollToReadedLength:A=>{if(A===0)return;let k=E.value.findIndex(c=>c>=A);k!==-1&&Re(()=>{$(y.value[k],{duration:0})})}});let I=null;return ke(()=>{I=new IntersectionObserver(A=>{for(let{target:k,isIntersecting:c}of A)c&&d("readedLengthChange",u.chapterIndex,parseInt(k.dataset.chapterpos))},{rootMargin:`0px 0px -${window.innerHeight-24}px 0px`}),I.observe(h.value),y.value.forEach(A=>{I.observe(A)})}),Ve(()=>{I==null||I.disconnect(),I=null}),(A,k)=>(p(),f(te,null,[e("div",{class:"title","data-chapterpos":"0",ref_key:"titleRef",ref:h},H(s.title),513),(p(!0),f(te,null,ae(s.contents,(c,b)=>(p(),f("div",{key:b,ref_for:!0,ref_key:"paragraphRef",ref:y,"data-chapterpos":o(E)[b]},[/^\s*]*src[^>]+>$/.test(c)?(p(),f("img",{key:0,class:"full",src:n(c),onErrorOnce:U,loading:"lazy"},null,40,st)):(p(),f("p",{key:1,style:q({fontFamily:s.fontFamily,fontSize:s.fontSize}),innerHTML:c},null,12,at))],8,nt))),128))],64))}},ct=ie(it,[["__scopeId","data-v-976ea6dd"]]);const lt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXr5djn4dTp49bt59rT6LKxAAACnElEQVQozw3NUUwScRzA8d8R6MF8YMIx8uk47hDSJbj14IPzOGc7jPLvwTGg5uAYDbe2tt56cLtznvEnS6yDqCcEaWi91DvrbLJZz7b1aFtz1aO+2OZWvn+/+4CHeB6BMYaqBLfjPNRY6RFT2JJYby+uAk4WUTrtlmJ4hgPYb2q1XGDQjaK8pgJHvqNaAX+KyuIkDXpgQinb46nOulnn4b5laUHTxLfseeArAoNOeJlOIjdoal0n1FA7tKFv5roK+YaHOqP3P0XyKHPHY+MhTRe5uCZnKhtJKw2eSrSoBDPLtpZuNcFNJcFyiCMxOaaHIfXz1e8HQbWLySrBQ4x0x1qlhnHlnz2HQEC6TNb0gTHXa7IKhcaHqkE015hk9whA0YeWiLIXf7Fa2CZo3DjqjB4tTuF8jIcbfcEx5z/w4sXpQhXW+ju0cqh7icTFmRMaG+v6CIvTjcSpHcH8JEsF3EPh3fRthYdVLLgI2fWXm85/pGFE4l046s70L+yKCcirGFR+jbpy3kMmiCGHrSezVONsn1RBixncyk2PcVWk7DlgxHo8iZwDyq5uAUD854dZhdIFYzKoQig2haUKi1lVufz2RZUZPZ41n/hrOQB6h0Hhg8I367FNoEHgeM/KY7szSeQwD8q2WE3HM35ZLl0K1MJiOtHIkBclRQUwZnyOWcNsRQQgVLj1PSqkjF9DsoOSaSg3iinKzvfmgsNFFfpP/2T3GLGvL4fHEfwIX1sVvXcPqLztehWGcfn9nI2U9nTfCgJPe/jFPLZwgVEzimBgAm0VIyK2tt1cE/AzQdLK+SxLSQ4aDCZnnId94OG2S1XwvnTbNk/ZnhyRCQT+sZM6z9g6LXL1BOBe+zJySiFkHAINCtnQokbCJ/apCv0foqPiZVfhpywAAAAASUVORK5CYII=",rt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAACVBMVEX28ef48+n69esoK7jYAAAB4UlEQVQozw2OsW4bQQxEhwLXkDrysGdEqRRgVShfQQq8wOr2jD0jSpXCLvwXbtKfADlFqgSwC/9ljqweZgYzQFnb/QGepYhA9jzmTc1WaSEtQpbFgjWATI00ZZtIckXx8q2Oe5yEByBy+RHOTcM+VVTadULsvxvRC/q8WTwgcWGD+Mnaqa0oy2gw2pKFzK+PzEsus5hP9AHojKslVynLlioVTBEN8cjDNnZoR1uMGTiZAAN47HxMtEkGUE9b8HWzkqNX5Lpk0yVziAJOs46rK1pG/xNuXLjz95fSDoJE5IqG23MAYPtWoeWPvfVtIV/Ng9oH3W0gGMPIOqd4MK4QZ55dV61gOb8Zxp7I9qayaGxp6Q91cmC0ZRdBwEQVHWzSAanlZwVWc9yljeTCeaHjBVvlPSLeyeBUT2rPdJegQI103jVS3uYkyIx1il6mslMDedZuOkwzolsagvPuQAfp7cYg7k9V1NOxfq64PNSvMdwONV4VYEmqlbpZy5OAakRKkjPnL4CBv5/OZRgoWHBmNbxB0LgB1I4vXFj93UoF2/0TPEsWwV9EhbIiTPqYoTHYoMn3enTDjmrFeDTIzaL1bUC/PBIMuF+vSSYSaxoVt90EO3Gu1zrMuMRGUk7Ffv3L+A931Gsb/yBoIgAAAABJRU5ErkJggg==",At="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEX6+fP8+/X+/ff///kbczPAAAACeElEQVQozxXHQUgUUQAG4P8936yzs6VvZNZmN9QxVxiF9OLBoOjtOC6rQq6ygXjI2fCQBdXBg4egtzFGdqkoI+zgBFbqkm3hQSxhFYLotOcubeKhOnVYoqQy+m4f5g5TvpX0xHLbLY9j8SMhJp+Jk4LfAUS2kVRIjILmnwGBTX42PhCVlDJQkIiy2nWAvaJ1h+oFIpJ0hMSYVbyyrgDWshcMpMyL1brPDQKWmduO+KTJ6XeXAMK9Yc3FpD7atyNwg6kt5XgFpLPhjUTFSYVn2abDiugGShwD8JTVRJVo/2ecuKtRb/qc4BK+9TboFfokog4T2Fn6Oqdnsjk90NMS76Rji6E0NmwkPBAZ4Xbkw8KoDAkAbEhkc78e9omxxgxg6qa5HvMv+UZbCV0qmHnSHKl5TxeA2XTCGWekR581mwC5crBH81PznASqB9va3TbkYAjJPLfg5uBfXaJgIgIBv9eessRIhxe7PA7kj6uUMeMaQ/OEQOYRaaHlqH2Gxwsl6E/pwVY5FH7uCypBZPKvDQyVziYBrAkMURe2MOOOxG/eQpp5PF+bFzUV5HtPj9GeiVSNZDELleifYTp9NAjsoiXg4cW+4ZORkdSMB/B74aAdjhsVakhgkugsbmqcDSLEoWp8zRjrux3tli6Q5uM3E+maT99Wy0RiP7tboiuRZle2c6CYeL2kcUc1KvPtQKucogMadKVTQOJYCeyCYlhQQ/Q7Etfd/vBygy9iqy+LyHeF46saCYvW6ingsbA9RBWtdi8GgUXW+oQx9/wP6bAAX1TWeV+CbShZDlQ9xT6SoSxZmKRAkmXb60kzEzkRF+Ccb94BGspGJoN/UzmyR4wjXHAAAAAASUVORK5CYII=",dt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAMAAAAp4XiDAAAATlBMVEXdzaHh0KPgz6LdzKDezqLczJ7ezZ/fz6Dcy5zi0aXdzZ3fz6Tfz57h0KDg0aLcyZrg0KXi0qPfzZ3j06bh0qbdyJbfzJrhz5/cxpLZwo0vDconAAAFn0lEQVRIxxyPW5LjMAwDAT5FybLl2JnM3P+i6+wXWVC1GoQGaD0h4XM3Q5o4T0HgABHBi6pZ4CDXXcUOFd6VhqC3Kch4EI8w9oMXwvU6m5LOOvcxKMOhuu8i5+5cMjcgb0t4F2uvOoeI3/MlT4IqsbtM9UG2AGSXUOsxzPevnXzK1CSHytZLvx7VdQmUcJsJCxJh2nmHW12Qod1qPjt8pih47uQ9aGpoNWF+yElCt60oH7vdIU/MnlRPSBLC/VwqxcKR8PFqnADN9ih5ufqnTlG9KwCofvs7kKYqOPHTNMQ93j9qNImFw9vjHPZ0F1m8hUUVB/Q/TrRYDMXr9++APMFARAt6sPh6wVAXzxUGhZsFUwCNfPZ8/72TAHebAhvuOuT3gO1Vn5d9Jd5sBRkg0p2seL9B7ulkjFJFIt9HPpLzdSzzMP3UcodAfMqC6pBuET2heHK1itZf1GZ1bi0BwOSxiCS8f/JBHMPMM4XCu3Mt1uz9lJbDJRqsKDZuikzkvskQEz6hanfDfO494azY5JpqPqOF1RhxD9XYEdaNxiqWqakKgmPfmrsta8KAiwF4HBxGVUJAgeSqQaiRRZJ7D2jedhw5t1CIAKxag0CBA60BpoBE6DcUi8O5AuM4pLfN0kHLmeu2B4e6HofqbgxsTWUw3PAODqa1oDtyzgXBlusi1KFdclMPE8O3jvLJ8RNi5/RxDQVzVmXA233XQ4KummunfxvLOZo+iH37964YjP06995CTdu9hsvErqJNzmf4wTrZ5DL7+qW9EoLnadrx67b8dUtrJnBXaT1N1uvPaYRKpWkq52xNsMN7vv4Sdryt/f4MhQoMCKnvVxikai1CQ6ZsnwJDc8+3Y/z8HcfvYQNq66pnAu1Hwa+3KNSwbNu8h3nDPqTl9fl7tx8fBhFfdS0o0F3JUKEZtZG9b/LZEM95lzaR30OnWPzroMxyZYdBIMoMnpN0J+m7/40+/P4soFSUjgzE7yY5zrMJuoZv0CmpVguYx1pprfb5HOviRVhHUVi/352shxCYrYBZxGtVaxiAz/MsaGSIsB7R1t4zJXH//n7RTTQQwxqcGEqEvklFHUgiO2GvJV+jAIPR+N29usWDoiSOVrN3XuqT1egQJAAU9EwslVJC8u0rGcy+WPqktJhjfMpatIG6CDAb0v5H34MGKqiVRue7GGLZ9Otxtt4JIrAhxBDwDuqI9JavcO0A7GlqFt219tH/bln9jBXzaKWAEqJV0CBxs5TwM8EvUPHaa8S86vN303MVWOsl3goDBHPWSoQ9c0kQmCKljfsKNH1+ofEOHW8a9a7glZGS8fPieL/SRSs0LAhI4FDTnXs1QYtubv2+IXPZpHB4bhivRexBkYKsSrYXNjvMUbVXpVJ+N6haV72c1k2zrnv5IYBMJBYTSZx0KTkoM3vY93rU/qs7zHplc/3d2ACadhFWByrn9LUk2IWb5JywvawTQc3F0iz+lgsBmInAIemBJtft2plKIlAFOgcroigrG2XlDsAzywQECNyaI8yr2ogoh7D4qJOYmZBzQgoZAM1PAcB8sDrr1uE5CDMR+nWSSVUGUCHAs8Vd21HOE0FzNj37pX0sLp9p3K8k++xxpkmzDxK64rmTSJnDUuIgTeslui6lg92jonZXI4jqNiUuzN4IagcKMjCniMGCODoo8T4tGDprn2hRww+NrnYiCwokd9iiWrkmbRfXYGLAoZrjO1lVQKExjUy5fIkgJURmz2uGFdASwwlWx5gDVTMK7hP6ISRVsFbYNmqtZL9MQtio285PaekyzDhZmtdexCYB0SZcTmBdhvdbmAEonk8hwcHQuZN1kVqrhyKoHHsnQhQAjF7SG533Da2S4LGjx1LoZqp7XeKQLDUBmYmydG0NQHpMeR5lRIRQc1PQ2ASMQflF4YBDMt0/GFlEHeRwCcEAAAAASUVORK5CYII=",ut="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAALVBMVEXx58b168ny6Mjz6sn06sf27Mvw5sTz6cbw5cLy58T37svv47/168v37s7t4Ltrv0//AAAEjUlEQVQ4yw2Ty2sTURxGf3dmOqmPxb0zmaStCnfmZpL6gpmbxIpUSMZGrSJkxsZiVZimNVaqMklrUnWTRq2KIDFWWx+IFrIRFxXEB4KIgqu6EBdu7M6FIPg32PW3+DhwDmBaYrK56KP4HGIsvg/uvOV0wK+qgBMlO9BujuH4DSJlOseqV5a/BEF97gt0ChyIPqBhXI9BtqtIB8vJB/LdCQ3OVjaLNX0g7+OmoI4e7nkemAqX6o8vg0yyQAyQS7IfgvFbI+6QyI3R4KELxw7kwM2ooQfyQigYnwY5MZbMlHI1DvnQVCoVcrt+R+bO7vPDif3ybNajwqAAe443dpfDsPt379VMWZzGRuqM79mQF+DUz9nt74bQ8J/O80MtVR51U02JKKmTCvTzLVf+vuxP/aHnPo9+2bW+zVsJ0Y630/CrfzX+b+UL+7O68Rczv+7lrMh5etfKXvhc2rk6KforxuoO2xB2tcxKfeXHt18rHOiHI/0RRjW/YGRDkHiwo3nzqL60o58C/bgRuaj7vk+QOwOhpnFNdjuWpKMCGP8Yapu9Ty5FTHKQLGSEFikjd9ADwP9ciaNNjc5qMH6w50AF/LKOsOYqsOG9GjKgc7ZXolqntm6fysJ6Ma6ll2CiqmOgE6O7x1wXExklbeqMYcwsmJmOoigt8SBg2WfilDSsAZJcBxDcrqtBXzFQJqZNHfscyIhoZlygAtyYAceah+elrFbI+46gEHDGiW878Kj7JpWyfhg6iyRMymV1MKBSeVpfgLHIohyTojI6sRyK1VpcqzVZeEBLOnA9unhGKUXPJDYtV9Dxuz4iA5xSkSWhCJdAiJR9PHlvfvbntbrR14FDqUNRAYDJmSnv3oKxuz5+7fiblgVJyYLTbgUM05P7LESkoXvyWNfb0aUU6FZizgQIa25VqKQZqFrk6v6BsqqIHlQmkQ9KrBhkC20/DrFsAFEEYLjM+lj2wYHXCwnNvZQR42XJ2iVK+UBXnI+OBE6oXpUUHiQ1yg0MhA03iwGbnOdQYc1CMiPIPQrCQJFH4L4BMFktAtKd9PN5gnU2Gra4KuK+V+mjtBRpAGIqDVe4wnSnajiFGO5d7smvhVQEMEYwqshrENIEaY7YeblJYtsb3QhAHWZCEKK67swwPMKw0If1Ta+6DgHmlgPzcUTSbi3rrv1Y64/BYEMPQ5SDHUOR022B4QRF6xLUPAaPX/V4IDI5N2BMwx4LqO1uO4j6uW7NvM7lATqGAxY/ZHVgoGZbu7SvkNR75x6qGSB23FdouENVwN7sCbewTdsXGrrnQ5ZZKOCOFtMTIzxlPu6eYmtL+nMFmoK7OeXajn86r9sqWbfmvHC4IagE5qfCPGZvLSq5F55hHIxJFa4/vRxHBlz0og4TojU1l/MOHJX17lybdF0mQhFO44JYUNt3UA473IXw/iPfDWtKG5oFSXIF5iU/VnyDSjxxeDk3jAXRyVyGTNB9FxH9qcFDNJpVbt2y9LytUXkK7Py6+z1RezHQqnoY8XcLimmd8dCnBhQCuaGpJCq3SoIlmYvLz8UkWhJw7T8k+Db/DYEKwgAAAABJRU5ErkJggg==",gt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEX48dr48Nf58tv379X17NJtIBxUAAACFUlEQVQ4y1XRUZakMAgF0Af2AiDWApDZgHZqAV1nZv9rGh7Rj7Y8McUFEg1wvcMESMNVD/neU8Xcaz7nYYkYlYO6Ti82PBI4BvIEg1aj3wKwRvIMgZsUy5LdhCawPFh1sZs4SrlyN9fQKpv8s5dgZ2eLyqqJiu+WkCmUEybXkm3INS01WAiv0PapJ0CZc0SJQUzcWnZYbOOY20iFD8Bk+/j2A3wNxH7GdShFYS5ff237kXh9I9zSkQmIAhOsOSVfJ6DIXTMDaPnzkRJ92S1BQQmXl5LdirgRLLDdcYqcGPwe3QN4xCBiGNbrqq9wpW1XCecChwaQdVOsRDpPCpeoolPdxeXp3WNB9PHVzWBHlygy4NJCCrFHREv6bDt0VGwJZASkpONmm1UseGeFKAQexgaAkrfYWl3AGxWOLL2AIMBNbCXpktmS3k3vHeYjGCPBa43wJTurO3ZFVpQSJdAZGLoHTyk1upkjxMEaIxum3iIARcCa5kSkFAW5fi1mUlL9eyOsaanFmOMruwvEdE3ZYzsRSzo5ewRLXyVPPEvknt8ij4DvCg2O7xOgBCUprEzV4z1WekSpUgI8DT2mrnSOXKRfQavwuKA1F+tFnMKdJSUpMA7wQAifWRkMgjUKKZE4lBl6MCM4B1pq1P4uIjDE6Pq6rL0FnW1nIFmta5vrSvq/Ch4tpqG/ZNyyWa5jZPktq81eYv8Bt5s4iFITOp4AAAAASUVORK5CYII=",pt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXN383Q4tDP4c/R5NEInCCXAAACVElEQVQozw3Hv2sTYRwH4M/79pJ7bZL2bXqtERJ97zjUpbZDhg6pfC8qibi8hLR0EaJ0EFxaCSWDxjfpj1zrYBcRBKE6SAfBJWsx9i8IQfdQxDlKtA6t2OnhQfN3lbG7ytYRywF8rVoPCNO0X2sQOKDpAnSDK2VwkHgmh5yLGT8qASt+2KofnNt2Xg1gf1UF8AoM6052cRMNaloLZb7RKQGrKKji2OefsZF+VqIvos5ZLVIZCX61JcwUdk56wASVkgQvzPfvmT2twTSwyYaC/Pl/UhAHorFhBgZtL6XdAZRp1tkPwC1NLa9CWs5prLhI85NBQsLdXvjDymG3/EbYfQhVNYqc3TtktQhWLY3ko0QsdMbSEp+64v0NfxyqLbIGdh6M2xHHlLBGqKTyQo4E/nebBgBfe1GpdeywYXc8CT7D3cKXuMXkBy4xN6o5OuKamYp3DVI6uccO9lxgd2CAlJgI2BGgaAgIJV/TYwKqu3WFccjbMuA+bVkWgS2bfnlRbD1Eb1sDyWMmjKYIBgGAWbqKRicfvzBkBIz3V5AKnguWdglQEysQsSuVzOg6ALy1pitA5ykGCsc857BRYcgCSZyFOdvoOigSGoPc5Ta73mgxshIcQE5sHMHd9D7yqITw7JO+GHVMxjhzYLcKPSEgmz3fU+BRy3iYNtiXLaBssCW8KguReqkQOTb3MStV0Ugt4U1eIs1RZWRII6Ww8xeNNItyGGQI4ZMlpg/3lQtkl2JFnBp1imRyFe0kK2Id3PCslMgiQNMS77gvFeDhG3cSkYvheeg/e7ClIh5oh+IAAAAASUVORK5CYII=",ht="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXh7eHl8eXj7+Pn8+eTbH1KAAACPElEQVQozxWPQWrbQABF/0xn3JFKQRTZOIuUsbCCbOgdRoYEOauxkYPcTRyTlPQWIxEltrsRwQ6hK9nEQek6F+gNTE/Q3qLLusv34cN7SH3mFicdYW4gNIhJWXPBRVXzjcFD0IqeU4o4PRbAIVjyico0vJpIifqPfL80QN9DAQY5ucRHE/hpHxBldXe9GilaHKcKMlj6pho2zXgkNdBl0oJ8kiF1DSiJF1ZHBJkQr0Dbux/5I42Zp4cFahJDFGeW6/QjBwmFY/Q7vZ2SnoOdW2parv/Cnm81+m0xrEfiVXQ3W4nOXIqVYi3l6AAQBwMFkViVBANMto4enXHPNTkHBB0oVj4r5vHzCWayrgBvxtygDlDB2CNDjd80ZInY69aKVYZcfJ8DW+fWuc+syEODALx+ojqoafHsthTI+ZW27PGpIeo/cR6YKcbqIuIFhHmBrzAovzIOOJk1ucvcDzrMRYGVBH2yvcAOf0KiKwfRovBI3tm/kW1eemtfNWwIIXE2mJNhvoszfmMBfRCv0OPwd2321uDW3nx2q/BDxFVeoN1g7a6Im8yRnoawa8kbdXnU0cHeTMxKfZGlJgvLb3sKsxgglQnDdAfvj9LUnqWRDo0GiUmPwyU7TAsD7wHeIW3Nfy1qVGKoE9NgJCdYCAexNRob9yCn4DAQmXtQuUtera6bEmTTXhZy6h856xi4mnEl6BI9mfISkLbtJyZIMJIAUd5ZOBEu88KRAk71yxfItj/hpIB0Errv4gO1os4/UICf+o3kkqwAAAAASUVORK5CYII=",ft="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEX0/PTx+fH2/vbz+/P4//htSO9OAAAC5UlEQVQ4yyWT0QGjMAxDZTsDWKQDmJQBYrgBUsr+M517x0+LRWw9CyA+pC1YzndrMgHaNXVKQ+di13Of1qbur48nWhuRjj8i6ON8e7pNm7zyag/DBTfS9Z4Hup1fUuXMKY4HEE8QOHCByXkIkl7lDT239RtL9quO4JItmmhOAHXg45QuYKrQFLyGJcRvaTw6kQqZy6mkR6JAPFH/XqsQjEDRmUOA+MNLHGyMUT7AHApoAhjgjIJmCxy6XHdf648AWCdGe57IUDazCeTImQOY4/z+eVYVX2IjOw9RydeAeJwl79iGi4HpgQgHEchWraUZLtayu8scq0lHHHUKMY3Ml8hB7CS1jOckDLG9ccgNeX3124phOcjL9fPnWJhTXpLHeG9DRmHnTxHEaHakS2J51lwAJcUraNbuU7q4gMTDQj3Eripc/x+qFM5VEKAB1roQfAkX5/PxqnS2QpOrxfK1Zft0/omV5T+xCSBUAIbEIwUQgvAfxFE1O8dnk233+1UZiqJ1mAbsue6Yt8tF+yOrxC/YrUhzC4qPlE3EbR5hGKhhHdlrg7J9WunV7L7BcYQwAeE59u2tnN1c6gfVYrQiLSZ9OxZdWDXQq0+r0Pbarh3UqGCwauVvbiXuDsNxCtLDdW9rTF8oQYN4EoXXdfmwNguQP26n/tRjDeo+F2W7PjWtfSr6Bn/z+cXOLp4NnMV4RytvSW4B68m+XN9XfZTFGhO/S+cHTuTqZDC21ccA0N7QsePALaDQC3D1f94U9CWo+aq6BjB3v0rxIimBM12296M3aKPHjXLQE9KQKH4By8RHraJ3AgVto2r4xdFqlaPaiAHLl1ZF4P2pI6cYc+K8UZdcmxy7lqGc1IoPxLmIFuIeEZ6j2sQT88muEg1zwrEDTIX5U/ZmcsqfgVlBumiBLF4sAyhf9BFlXOPKLZ4H0iFb3VoHrGhtHTldKrOvP2/reu2zfV8CXMPqzRdlgd0a5eI7WwB/AYcgavcqxXWEAAAAAElFTkSuQmCC",mt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXM2t7O3ODQ3uLR4OTDp25yAAACdUlEQVQozw3P70sTcQDH8c/3/M7NG+j35mnHwjwh4hRy/QFK3zvPNbeIG1koPZmxfj2IDAwihL53zj0JYisfmEHcZJZOiBUG60lZiI8T/ANusuftgQ+kCPIPeMP7hS5mUrV9c1g6MQCAEZ8tDLHwofImAGRlX+SZK3Vu9rRRPuO4PK6/9nA4GIATsxlODS+rdCMhkAZivpYV0LWoQHSLSA4NfUg+6mY+7BKL2++F9LvnrBDYm6JO9i/YO3i/HJTGQ4pdIV82TbEDFG6vGYCd4wZchgK5J2CrKTLE+Tx0v+YGlIbdWJFcQl4ptBN8fUJQN1MCJLcZLYwUVVo+famGGty8EXJF5ofOEDzcodT3/Fb0I5sHmc1ZG7CcSl8COgxlXx09jT05OafjCZLIHJhGIaU6wDZHsuMQ41wbdjmQXbhKnMq1zlXSYrjCnyZblqexA7fC8RxS74tq2P3OxSQwTuJSApH8OZLzBBp1pOe0i3rdyDUA47GySZ31YmC4EQYSXvFSvieORGBxXF9aeVtUWKGS9WMC4Z9Y2uXnJ2nCUXVMbPOYqNYNmGWWQ7Evr+BWC+a0JAMTImcq/S4Z5INdQMeuOqDIMa9beilxfA60iC6sP1INcPDpmHBW8drZHNmqwyddJtVje9q8WGUgWAOzmbU4FCQBFi8B2Wk6pickBnYhJMenmJGuRmtt2IoKq9NuFGbNFR99sHnvrnLsLysKANDIsxbp6RNMAsoDSKuRpMwZbAAzI68QatIjmZ0aImyM3O8/4e2MNlOHZomFsa/fLDsysliHS+nlYLQJMnynxrH8QO4PaAV2Li8B/+52UgeGIVNFYf8B1XG/kFSmLcUAAAAASUVORK5CYII=",vt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXh7vLf7PDj8PTm8/ecW+lZAAACZElEQVQozw2RsU8TUQCHfz3fw7MS87jeI7DdmSMpDEoHE+P0HqGkvRR8vb5XC4NpN2RQZqcK9xJkwtriekcggerC4OZADDiT+A+goxv/gfwB3zd8H/T6vYF/pTZkCSmDNd3CBEtmZJP4N+CvvhecDvmntKsvwB17rpbIRTLOEoYkj9KZzRUuJsuBQFwgptyJ3Y7EL4V+ud5LO1UnMeQSSObqisiISZkbQBlliP3qWSk3GPQXjxv6VF2BTDO4ySx1zhuJXbA2wBNJF4t5vH9keg6wu5NvUpLtXrZ3OHC9ZsgVcZdOl38PM1y/L6m8GRiErj4AqezUjHGatGGIgs5NJDHh8Ua1IuB4035haVT6SaYWMoQ0eJ3rB/Gpnr3fB49YAy1Wa21YKqAHOmAveVw6CCMGMZh5bGtVI7jnZaiQNbta1Z+285oSoKoRbta1KZ/1bBdKH/RIxv2pRVpkoCmvpr097RWoo0CpMlTWllIenSjECU8mV43mHx2fIRfH/pncrJm3+58BWdbSqCS07/yiQnvHiCG4ZPGRFeAtfreoOubyctzHvLNHhjNvIhukxQzjU5O6QdOEzUp1Ef4d98Pxz+IPYX0bcpnT52dbedfz8y7C4R89RV+MjJkuCCx7mWDt4eyK/62lQB55xXGJK7p8u6bgRv4hVHylelYGGFs64W94tng8sAIVqSRJBpqRA9rFvAysS+9ak8s7557pz5HR4qhCRmWgplpTRJ+bhYfSAMO8/YBucWPuSdmFFtOnuWqvV2NbF6CJnbhNDzEZ/T0XSDrUydzkZCG1z/oIEyUFYxW/KPXNfwopuHDcO04UAAAAAElFTkSuQmCC",Ct="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXm9PXq+Pno9vfs+vttWKBGAAACPElEQVQozw3RQWrbQACF4TfCMjPqZgIj4RRaxsZKE0PuMBZ2cLKaCI9RDAXFmJJknUWWI1O1UlamOMHJSjGkuFn3AD2Cr9CepDrAg+/xIxK4QwIqHHQkUhQ/WuphInVIFBojl8QXc012Tgq4RTtVHWVLZVFh1tEoI91uiN4joCqde8Ukn/zGM1B2W4ari2PtTwyw55Ld+Wways54qhGPyS6FzbIT3lIY8WwWdCq56Yolx6KmSKzoqrsCB5heAp4TGNQWJ1Pc6XlE5jQD5OlIX9I47A9uiUQcPQxcury/ToyxWJG/za6ki88crxKPocKS59Sl3EtBG7C89fCGflpfqoSzCeC4crioJA7F0V5+8MaSIk4qSCdwzpogmbqzEirVpGiS2dOVJvUuuqFEmhHao06KEpq+8lvHI14NJk3Qrmi9vBuRLwAz0qZB4hsDXQFXgtnlpDX3C6ug9BquSw/CYtwAzuTz5vuQNdr/YibhR68378ehZH30FSpjh71LpQkrsj+Q062h5WwZ5wlRoD6uQJy1DqvSYuCUapMBqT5YA4ZFw4KlWapxoUGlKWrx0eDQvmigu4WMYt97ruru98fYL8/0lG6CTOFcFWBhFK5gKw19h2JN808nh7xhkU6sWKLXdtkqBL6h+lULK5k19wFB/FldnGYf3LDeuf6IC2/MzJOSOP0qPxLqzaGIqtBcFIItrstkazONOkrc1D1czjuwEGESB4JJnjgSMN7PXAu7fZQpl1C236C+9mM4Af8P98Ch4R2TRl8AAAAASUVORK5CYII=",yt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXPz8/R0dHT09PU1NToNyAhAAACdElEQVQozw3NP0xTQQDH8d9d7sFrG+QeKVgQ4aoFCwFkYERyLY//0UB8GNGg1WAC0RBGJrzW4mCXQmpgvCYOwEAYiulSpYtza2KiW7s5FgNJFSV2/CzfL7RwpoJ20iadmgA8owOyaxmusKE44scBeb4vIv00dqYgmf6jzWcr7W6INbDQeZbQL9ytXeYgtFfzmW1Fek5msxJlwhyt6qDDxOLQzpVPompYrMPnEnhvLm7M5BxY5nowAj3zkydAkpC0FIG6g7AK+Ub25ybyNWVYwtpseP2rfrQwiGRpfqrnMuPeuvr2dA0p2YsHF2XghkrXKtZ8tLBjR7S2qIaYbKmyLd/QP+EogLjqqwNw5Lq1pDlMLkM5+gNoSvdq+Pxmz9/61EFq6GYM6GqaGvlN95zy3gsmEWI8K3k8OP9OmRLEPO6DP3Wv3g42COinJTZ33dcIvs4ESp6opMTjDs6mcYTEbFeUifuxh989yZrIx4lkpuixxz0nHLCekKbE17suKhYkMGhoYhTZtVBvg4bfq/1L1Im0AGMVpBFwumM0zwyuKiCMi5dqR4Flx47AGyF2xTbxqUdTwCH94BT3DozpLV5WuAL/N8rGtHKjotBOOuOtCJ9E21uqsyBoLOzaXbHPrK5PQBP+fBfeidvJAeMIAmzVt5IkJJ9DBWaZDAepYUhlQqHt0h72SJ3j8TZHom64f516xx9T5evgMPgwG82jZdJaJIDyWp6LAjOCclVyzNA3iTKzIULlBQEPaTXlPHok5gISclmyaWZlqY2aTHdRHpJOwTdDEQ3ZfKtbpclcNhyVClagmY+fIfyKukntPqBgnx5QvZHk/D/MK8JMClrSigAAAABJRU5ErkJggg==",It="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEXe3t7a2trc3Nzg4OCXP9lCAAACoklEQVQozwXBzU/TYBwA4N+QEr4CNbSFwcFuowSqMRvEAwShHWAYNsu7dS0dLnGUSWT4kZB4lGzE4VtcwgIDJqcOWLJxcv4BOoQZuCPxSNSD4WSWLJGL8XmAIiyo2RgJ4A1pxQQlOxRAszLTdnPu2oQGb05RC5slJld7ZAIfo4O44Bn1ud59F0BcjnYOa17Jhwc6EdiKettncsXjT1f8KUBZUW41pK0Jc1Az4dEV3rkkPBtDSZ83Blyt0kSf2PRjzIykoBwINisPbPPtljdVE9iAXRfUPkXLVIgYrCccp5g687NdZbcJ+xa5VE/HhTtT23IKsN5jj/pcUd0dTZNAqCVw72n4gOwnTOC0vvHfaauT8d9zAoRRfPpISZRVyUiw8ELzOG1b2DZpFzkSrHLhq52twDEdyZHwvp2j4uv/bjvOf23/AcEtTuJbY5Cp4YcAer1IGkUzOo2rn8LQOKjFJw3NTw24nprQXY5aF4wxcqcSdbFQ00H4xFl8Drx4X4CikvAM1tuR8bKIBCBoLnKN10KJG4zKAsc7c9WEB9gnCi6BhVjqoco6t20ILAJuVctvaEZK732cRHDRmGfuihOam0o2CHByUZ/epCcVlRs2wmCnMqsd6aSim3ibBJtm1LGyXW3Bb7tJCPlFtUG+SvPdeEUAB60lNdo+VQbLcwRNVtT68FsLcr1+NotgNihlpExS1V2SFgNbeC8bEhgm8sM17wSi6Us2gxVWJU/5GKBpandvfyYbU1yHCLpCgWGbbPXn40rehEsUXKIJr9DMKgICfjc4bl1YfvUhE/YIECGRqjCxSM9hrybAIkND5OeWfFZsXkxB+qDzb7pUQ3EfQ3Ml6EChEt3D+iS01VqC7EQ/Z/DuPQcz4yChoFQJce2Qr+NNAv0HxofmpXGqgHkAAAAASUVORK5CYII=",kt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAD1BMVEXm5ubo6Ojp6enr6+vt7e1FnZagAAACrklEQVQ4yx1SixUbMQgT3AKAFwDcAfzpBN1/qMrJS5w7bCQhC6IGSUGYQJd6Ox9ZPXi1AGJBavhUTT0JjYPGAab9WcDYIxsmlnxkayX8mhxCmKHA75az5cfRbWybEExiu08xDSgGym0mwuf3j4SvHeQxDJJzh2zp4iOlrD8iOb4SXyC1wiOLRTcnrje+nGamFeXVKWkmzbFIPChkmJ6Fg7mBpV8n+JGOVCd4jv1thThkjeQGNeafpeV3rsEWLfyWc8tC9jOv6FQ8rRzHOOVB+jCYEUAJpDvh8xHNFm/Tm5p5lw94Pp3NhtKEfQsGvnXhowdZE73hPwxKvjDd4i4PCdd0fe3W5fO8ktAsUAacLgstpUw60JCiPLg2XpkgiqPIYYXJd9ksGIT3q+LlevypzItvO+s0F1dBzVr2QDMUkYmuyGcrIS44mVJ7JVKwQXjYuBYp0Uetecbswzsikzu3gUR8bJC/C8Gd/NAzI/xdUGOYQQHDZ8X2d5XuzGRUiXAi9si5CRgoiToRZPtzLJkd0FUHRHZwJf0BHT1sE7gcnh0jmKKlSSF4/GBirGk5+K9NKlGDCfc9JtPhg78JdabH0YQRKNZnJ8tFnPfXHJb4xum1TTCeEmyEdbyEJLjznMLHuFD2Y9NEkSleIBs7SiCbblhgctVi9ch++kDYnn1C9DA5TvdPsToXM55wI6k+8eKT1blwPTqWb5CFJ+7dTBmab+KHy+xwNtItXhZNSpHD2fxnynrxG3ZBKRe8KBpXk11AnadlccEhr9w1nBBvBylNkv7A8eqpGBCDqhitmWQXBjjdS6idr/QjXWLDeMzMbVDoJuM8zN7WenMZWXgZ2vX3F01J3jHZbwk1LRP+DWEvDJtOUoh/AIaBUz5VpWyhuyx4QtgL/NmgC6kM/JvNe+R/C/5aL7BKIbYAAAAASUVORK5CYII=",bt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyBAMAAADsEZWCAAAAElBMVEUQERMODxESFBYWGBkaHB0eICLm6ozJAAACkUlEQVQ4yyWTUdLbMAiEASfvoOkBkBy/O5keIE0v8E/uf5h+68qZWALELgu2MG9PP9qyvCzTVhrrsPGOCjvTfXQZvtp/W3Gy6LCITqs4q/DZ+KYl76zKzHVYpY2wNY27nqN1sbLGcrLH3/ENH4oWlGctsDu8AO+HzTLlsYdh8MzP1m6YDMz0ACfcimvakBj+mwO/+5Uta5teOD379sxK1fUxmUhv8MU3jUT5gs26PMephFznkLcpQZ6/dPL9C/GWHcCxDN6oZhD5xBm5qoYBPA+PFE/H1tXDWcWl8TW7rS+4dUzAVy0BIrvC4/HcqW2TkG1HO8q9dC23INAg7NA4AFRFkDTM2lfELPyFzi1VddcpX2z0KjHBUDmdLNJ6dDps4ytrX+FPsZwE31wSL+6OWfHOAJ3+Y0Rk/MiKfmWNPg7oVP/U3Ck9FoCkC2gBpALOiqbMNTkOe8P4FWkTD2Y9Q3+5VmV0uLUJBl68U5uAK2Kl6QDXvLxbwweOL2sixW78uU8p0ysfc7cWrF1j6B1sPJ4WgclYSnJN1bzozrhEcFHmRzBkbJWqqdG+EYJXRFmT5jnLXPUNF6WBdoFbTxYsmDXVLU/WA7MExNc93sJS5hIXDeLxzMScHzdhKvEkibr6cQXYPrmtmTA7JcInISrTzRDvShTdka0uVGrsJAAR6tSn1sKziZtfKVjAxPrJsYgZO0bye+vKTZ/DgoAoLGNO6jYHimZYTL/3pLJHawquJukjBpfz8WOGVSVIWx9ywUfS5iENutidRM4NzkAmxgUSQ68xgNOU+ZLalr4TS2V+D2xqukZig+Z9DilR7Nouzwp1cp/3E5q6Rdlf08obKvAM4qZ6pMr+w3PmQALSSBfjyZn5DwrNRVbywBQiAAAAAElFTkSuQmCC",Bt="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEUWGBkYGhsdHyAfISI1t/v6AAAB5ElEQVQozxXQsYoTURSA4f/EeycZsDgDdySDjihk38Hy3GWi2J2BCaziQhaiaB+tt9AFu1kwvYUPsIXNPoB9BAUfwAfwEUzKv/v4odGrroyp9/rUaC6rZ5skv5F8qPsfYYP+yKUMymmAEEeW55oUR4o8jr05KNzJ07yvB7w0KKfLwcQUSjfmMU0PJfPHFoEVU+ohNrcKMEzMQ23FDnVSI2dqtYWI7KlLu6vE4UnyvKc3SJuL7lBbeEEl42ItpGLjzIT8PRJCmkRjVpVpsbJFVN0687okJNZiHAr5Z7MV0BnGIDc+THM1zlbieBc1Fq+tH5BH+OpnbWkj40hSqC8Lw2TvFuF0SUFJCk2IytXbjeqcRAt6NHpnrUkUU4KRzZs8RCK8N/Akn2W04LwxMU/V7XK0bDyN2RxfDyx7I4h5vjZby72V8UnOWumZL3qtYc+8DTE0siSBMXGhywx2dMYPnQHbxdFZ7deiNGxCCtD/QWnbwDoGhRYPDzUdUA3krjpnkvdAgDN4ddLkEQSov9qjd42HaDjI34gEqS9TUueAk+sc4qg5ws407KQYKs8G1jv4xBlqBVk6cb4dISZIwVi1Jzu4+HLk6lyfUxkXvwy+1Q+4WVdHIhwfybZ6CWVhxMEhShOgsP/HOW0MvZJeFwAAAABJRU5ErkJggg==",St="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAADFBMVEUWGBkYGhsdHyAfISI1t/v6AAAB5ElEQVQozxXQsYoTURSA4f/EeycZsDgDdySDjihk38Hy3GWi2J2BCaziQhaiaB+tt9AFu1kwvYUPsIXNPoB9BAUfwAfwEUzKv/v4odGrroyp9/rUaC6rZ5skv5F8qPsfYYP+yKUMymmAEEeW55oUR4o8jr05KNzJ07yvB7w0KKfLwcQUSjfmMU0PJfPHFoEVU+ohNrcKMEzMQ23FDnVSI2dqtYWI7KlLu6vE4UnyvKc3SJuL7lBbeEEl42ItpGLjzIT8PRJCmkRjVpVpsbJFVN0687okJNZiHAr5Z7MV0BnGIDc+THM1zlbieBc1Fq+tH5BH+OpnbWkj40hSqC8Lw2TvFuF0SUFJCk2IytXbjeqcRAt6NHpnrUkUU4KRzZs8RCK8N/Akn2W04LwxMU/V7XK0bDyN2RxfDyx7I4h5vjZby72V8UnOWumZL3qtYc+8DTE0siSBMXGhywx2dMYPnQHbxdFZ7deiNGxCCtD/QWnbwDoGhRYPDzUdUA3krjpnkvdAgDN4ddLkEQSov9qjd42HaDjI34gEqS9TUueAk+sc4qg5ws407KQYKs8G1jv4xBlqBVk6cb4dISZIwVi1Jzu4+HLk6lyfUxkXvwy+1Q+4WVdHIhwfybZ6CWVhxMEhShOgsP/HOW0MvZJeFwAAAABJRU5ErkJggg==";var ee={themes:[{body:"#ede7da url("+lt+") repeat",content:"#ede7da url("+rt+") repeat",popup:"#ede7da url("+At+") repeat"},{body:"#ede7da url("+dt+") repeat",content:"#ede7da url("+ut+") repeat",popup:"#ede7da url("+gt+") repeat"},{body:"#ede7da url("+pt+") repeat",content:"#ede7da url("+ht+") repeat",popup:"#ede7da url("+ft+") repeat"},{body:"#ede7da url("+mt+") repeat",content:"#ede7da url("+vt+") repeat",popup:"#ede7da url("+Ct+") repeat"},{body:"#ebcece repeat",content:"#f5e4e4 repeat",popup:"#faeceb repeat"},{body:"#ede7da url("+yt+") repeat",content:"#ede7da url("+It+") repeat",popup:"#ede7da url("+kt+") repeat"},{body:"#ede7da url("+bt+") repeat",content:"#ede7da url("+Bt+") repeat",popup:"#ede7da url("+St+") repeat"}],fonts:["Microsoft YaHei, PingFangSC-Regular, HelveticaNeue-Light, Helvetica Neue Light, sans-serif","PingFangSC-Regular, -apple-system, Simsun","Kaiti"]};const l=s=>(be("data-v-e93e95b1"),s=s(),Be(),s),wt=l(()=>e("div",{class:"settings-title"},"设置",-1)),Et={class:"setting-list"},xt={class:"theme-list"},Ut=l(()=>e("i",null,"阅读主题",-1)),Qt=["onClick"],Dt={key:0,class:"iconfont"},_t={key:1,class:"moon-icon"},Vt={class:"font-list"},Rt=l(()=>e("i",null,"正文字体",-1)),Mt=["onClick"],Ft={class:"font-list"},Pt=l(()=>e("i",null,"自定字体",-1)),Lt=l(()=>e("p",null," 请确认输入的字体名称完整无误,并且该字体已经安装在您的设备上。 ",-1)),Kt=l(()=>e("p",null,"确定保存吗?",-1)),Ot={style:{"text-align":"right",margin:"0"}},zt=l(()=>e("span",{type:"text",class:"font-item"},"保存",-1)),Nt={class:"font-size"},Ht=l(()=>e("i",null,"字体大小",-1)),Wt={class:"resize"},Jt=l(()=>e("em",{class:"iconfont"},"",-1)),Tt=[Jt],qt=l(()=>e("b",null,null,-1)),Gt={class:"lang"},Zt=l(()=>e("b",null,null,-1)),Yt=l(()=>e("em",{class:"iconfont"},"",-1)),Xt=[Yt],jt={class:"letter-spacing"},$t=l(()=>e("i",null,"字距",-1)),eo={class:"resize"},to=l(()=>e("em",{class:"iconfont"},"",-1)),oo=[to],no=l(()=>e("b",null,null,-1)),so={class:"lang"},ao=l(()=>e("b",null,null,-1)),io=l(()=>e("em",{class:"iconfont"},"",-1)),co=[io],lo={class:"line-spacing"},ro=l(()=>e("i",null,"行距",-1)),Ao={class:"resize"},uo=l(()=>e("em",{class:"iconfont"},"",-1)),go=[uo],po=l(()=>e("b",null,null,-1)),ho={class:"lang"},fo=l(()=>e("b",null,null,-1)),mo=l(()=>e("em",{class:"iconfont"},"",-1)),vo=[mo],Co={class:"paragraph-spacing"},yo=l(()=>e("i",null,"段距",-1)),Io={class:"resize"},ko={class:"resize"},bo=l(()=>e("em",{class:"iconfont"},"",-1)),Bo=[bo],So=l(()=>e("b",null,null,-1)),wo={class:"lang"},Eo=l(()=>e("b",null,null,-1)),xo=l(()=>e("em",{class:"iconfont"},"",-1)),Uo=[xo],Qo={key:0,class:"read-width"},Do=l(()=>e("i",null,"页面宽度",-1)),_o={class:"resize"},Vo=l(()=>e("em",{class:"iconfont"},"",-1)),Ro=[Vo],Mo=l(()=>e("b",null,null,-1)),Fo={class:"lang"},Po=l(()=>e("b",null,null,-1)),Lo=l(()=>e("em",{class:"iconfont"},"",-1)),Ko=[Lo],Oo={class:"infinite-loading"},zo=l(()=>e("i",null,"无限加载",-1)),No={__name:"ReadSettings",setup(s){const a=Se(),d=w(0),u=w(a.config.theme==6),n=w(""),U=He([{background:"rgba(250, 245, 235, 0.8)"},{background:"rgba(245, 234, 204, 0.8)"},{background:"rgba(230, 242, 230, 0.8)"},{background:"rgba(228, 241, 245, 0.8)"},{background:"rgba(245, 228, 228, 0.8)"},{background:"rgba(224, 224, 224, 0.8)"},{background:"rgba(0, 0, 0, 0.5)"}]),m=w({display:"inline",color:"rgba(255,255,255,0.2)"}),E=w(["雅黑","宋体","楷书"]),h=w(a.config.customFontName),y=w(!1);ke(()=>{var Q=a.config;d.value=Q.theme,d.value==6?n.value="":n.value=""});const i=r(()=>a.config),I=r(()=>({background:ee.themes[i.value.theme].popup})),A=r(()=>a.config.theme),k=r(()=>a.config.font),c=Q=>{Q==6?(u.value=!0,n.value="",m.value.color="#ed4259"):(u.value=!1,n.value="",m.value.color="rgba(255,255,255,0.2)"),i.value.theme=Q,x(i.value)},b=Q=>{i.value.font=Q,x(i.value)},L=()=>{i.value.font=-1,i.value.customFontName=h.value,x(i.value)},F=r(()=>a.config.fontSize),oe=()=>{i.value.fontSize<48&&(i.value.fontSize+=2),x(i.value)},v=()=>{i.value.fontSize>12&&(i.value.fontSize-=2),x(i.value)},B=r(()=>a.config.spacing),G=()=>{a.config.spacing.letter-=.01,x(i.value)},ge=()=>{a.config.spacing.letter+=.01,x(i.value)},ce=()=>{a.config.spacing.line-=.1,x(i.value)},pe=()=>{a.config.spacing.line+=.1,x(i.value)},he=()=>{a.config.spacing.paragraph-=.1,x(i.value)},Z=()=>{a.config.spacing.paragraph+=.1,x(i.value)},fe=r(()=>a.config.readWidth),me=()=>{i.value.readWidth+160+2*68>window.innerWidth||(i.value.readWidth+=160,x(i.value))},le=()=>{i.value.readWidth>640&&(i.value.readWidth-=160),x(i.value)},Y=r(()=>a.config.infiniteLoading),ne=Q=>{i.value.infiniteLoading=Q,x(i.value)},x=Q=>{a.setConfig(Q),localStorage.setItem("config",JSON.stringify(Q)),re(Q)},re=Q=>{de.saveReadConfig(Q)};return(Q,V)=>{const ve=Te,se=qe,T=Me;return p(),f("div",{class:_(["settings-wrapper",{night:o(u),day:!o(u)}]),style:q(o(I))},[wt,e("div",Et,[e("ul",null,[e("li",xt,[Ut,(p(!0),f(te,null,ae(o(U),(S,R)=>(p(),f("span",{class:_(["theme-item",{selected:o(A)==R}]),key:R,style:q(S),ref_for:!0,ref:"themes",onClick:Ce=>c(R)},[R<6?(p(),f("em",Dt,"")):(p(),f("em",_t,H(o(n)),1))],14,Qt))),128))]),e("li",Vt,[Rt,(p(!0),f(te,null,ae(o(E),(S,R)=>(p(),f("span",{class:_(["font-item",{selected:o(k)==R}]),key:R,onClick:Ce=>b(R)},H(S),11,Mt))),128))]),e("li",Ft,[Pt,J(ve,{effect:"dark",content:"自定义的字体名称",placement:"top"},{default:W(()=>[We(e("input",{type:"text",class:"font-item font-item-input","onUpdate:modelValue":V[0]||(V[0]=S=>ue(h)?h.value=S:null),placeholder:"请输入自定义的字体名称"},null,512),[[Je,o(h)]])]),_:1}),J(T,{placement:"top",width:"180",trigger:"click",visible:o(y),"onUpdate:visible":V[3]||(V[3]=S=>ue(y)?y.value=S:null)},{reference:W(()=>[zt]),default:W(()=>[Lt,Kt,e("div",Ot,[J(se,{size:"small",plain:"",onClick:V[1]||(V[1]=S=>y.value=!1)},{default:W(()=>[j("取消")]),_:1}),J(se,{type:"primary",size:"small",onClick:V[2]||(V[2]=S=>{L(),y.value=!1})},{default:W(()=>[j("确定")]),_:1})])]),_:1},8,["visible"])]),e("li",Nt,[Ht,e("div",Wt,[e("span",{class:"less",onClick:v},Tt),qt,j(),e("span",Gt,H(o(F)),1),Zt,e("span",{class:"more",onClick:oe},Xt)])]),e("li",jt,[$t,e("div",eo,[e("span",{class:"less",onClick:G},oo),no,j(),e("span",so,H(o(B).letter.toFixed(2)),1),ao,e("span",{class:"more",onClick:ge},co)])]),e("li",lo,[ro,e("div",Ao,[e("span",{class:"less",onClick:ce},go),po,j(),e("span",ho,H(o(B).line.toFixed(1)),1),fo,e("span",{class:"more",onClick:pe},vo)])]),e("li",Co,[yo,e("div",Io,[e("div",ko,[e("span",{class:"less",onClick:he},Bo),So,e("span",wo,H(o(B).paragraph.toFixed(1)),1),Eo,e("span",{class:"more",onClick:Z},Uo)])])]),o(a).miniInterface?Ae("",!0):(p(),f("li",Qo,[Do,e("div",_o,[e("span",{class:"less",onClick:le},Ro),Mo,j(),e("span",Fo,H(o(fe)),1),Po,e("span",{class:"more",onClick:me},Ko)])])),e("li",Oo,[zo,(p(),f("span",{class:_(["infinite-loading-item",{selected:o(Y)==!1}]),key:0,onClick:V[4]||(V[4]=S=>ne(!1))},"关闭",2)),(p(),f("span",{class:_(["infinite-loading-item",{selected:o(Y)==!0}]),key:1,onClick:V[5]||(V[5]=S=>ne(!0))},"开启",2))])])])],6)}}},Ho=ie(No,[["__scopeId","data-v-e93e95b1"]]);const Wo={class:"wrapper"},Jo=["onClick"],To={__name:"CatalogItem",props:["index","source","gotoChapter","currentChapterIndex"],setup(s){const a=s,d=n=>n==a.currentChapterIndex,u=r(()=>{var n;return((n=a.source)==null?void 0:n.catas)??[a.source]});return(n,U)=>(p(),f("div",Wo,[(p(!0),f(te,null,ae(o(u),m=>(p(),f("div",{class:_(["cata-text",{selected:d(m.index)}]),key:m.url,onClick:E=>s.gotoChapter(m)},H(m.title),11,Jo))),128))]))}},qo=ie(To,[["__scopeId","data-v-51153469"]]);const Go=s=>(be("data-v-a6bd2896"),s=s(),Be(),s),Zo=Go(()=>e("div",{class:"title"},"目录",-1)),Yo={__name:"PopCatalog",emits:["getContent"],setup(s,{emit:a}){const d=Se(),u=r(()=>E.value==6),{catalog:n,popCataVisible:U,miniInterface:m}=Fe(d),E=r(()=>d.config.theme),h=r(()=>({background:ee.themes[E.value].popup})),y=r({get:()=>d.readingBook.index,set:c=>d.readingBook.index=c}),i=r(()=>{let c=n.value;if(m.value)return c;let b=Math.ceil(c.length/2),L=new Array(b),F=0;for(;F{const b=n.value.indexOf(c);y.value=b,d.setPopCataVisible(!1),d.setContentLoading(!0),a("getContent",b)},A=w(),k=r(()=>{let c=y.value;return m.value?c:Math.floor(c/2)});return Ge(()=>{U.value&&A.value.scrollToIndex(k.value)}),(c,b)=>(p(),f("div",{class:_({"cata-wrapper":!0,visible:o(U)}),style:q(o(h))},[Zo,J(o(Ze),{style:{height:"300px",overflow:"auto"},class:_({night:o(u),day:!o(u)}),ref_key:"virtualListRef",ref:A,"data-key":"index","wrap-class":"data-wrapper","item-class":"cata","data-sources":o(i),"data-component":qo,"estimate-size":40,"extra-props":{gotoChapter:I,currentChapterIndex:o(y)}},null,8,["class","data-sources","extra-props"])],6))}},Xo=ie(Yo,[["__scopeId","data-v-a6bd2896"]]);const M=s=>(be("data-v-4804761f"),s=s(),Be(),s),jo={class:"tools"},$o=M(()=>e("div",{class:"iconfont"},"",-1)),en=M(()=>e("div",{class:"icon-text"},"目录",-1)),tn=[$o,en],on=M(()=>e("div",{class:"iconfont"},"",-1)),nn=M(()=>e("div",{class:"icon-text"},"设置",-1)),sn=[on,nn],an=M(()=>e("div",{class:"iconfont"},"",-1)),cn=M(()=>e("div",{class:"icon-text"},"书架",-1)),ln=[an,cn],rn=M(()=>e("div",{class:"iconfont"},"",-1)),An=M(()=>e("div",{class:"icon-text"},"顶部",-1)),dn=[rn,An],un=M(()=>e("div",{class:"iconfont"},"",-1)),gn=M(()=>e("div",{class:"icon-text"},"底部",-1)),pn=[un,gn],hn={class:"tools"},fn=M(()=>e("div",{class:"iconfont"},"",-1)),mn={key:0},vn={key:0},Cn=M(()=>e("div",{class:"iconfont"},"",-1)),yn=M(()=>e("div",{class:"chapter-bar"},null,-1)),In={class:"content"},kn=["chapterIndex"],bn={__name:"BookChapter",setup(s){const a=w(),{isLoading:d,loadingWrapper:u}=et(a,"正在获取信息"),n=Se();try{const t=JSON.parse(localStorage.getItem("config"));t!=null&&n.setConfig(t)}catch{localStorage.removeItem("config")}const{catalog:U,popCataVisible:m,readSettingsVisible:E,miniInterface:h,showContent:y,config:i,readingBook:I,bookProgress:A}=Fe(n),k=r({get:()=>I.value.chapterPos,set:t=>I.value.chapterPos=t}),c=r({get:()=>I.value.index,set:t=>I.value.index=t}),b=r(()=>i.value.theme),L=r(()=>i.value.infiniteLoading),F=r(()=>n.config.font>=0?ee.fonts[n.config.font]:n.config.customFontName),oe=r(()=>n.config.fontSize+"px"),v=r(()=>ee.themes[b.value].body),B=r(()=>ee.themes[b.value].content),G=r(()=>ee.themes[b.value].popup),ge=r(()=>h.value?window.innerWidth+"px":n.config.readWidth-130+"px"),ce=r(()=>h.value?window.innerWidth-33:n.config.readWidth-33),pe=r(()=>({background:v.value})),he=r(()=>({background:B.value,width:ge.value})),Z=w(!1),fe=r(()=>({background:G.value,marginLeft:h.value?0:-(n.config.readWidth/2+68)+"px",display:h.value&&!Z.value?"none":"block"})),me=r(()=>({background:G.value,marginRight:h.value?0:-(n.config.readWidth/2+52)+"px",display:h.value&&!Z.value?"none":"block"})),le=r(()=>b.value==6),Y=()=>{n.setMiniInterface(window.innerWidth<776);const t=n.config.readWidth;ne(t)},ne=t=>{n.miniInterface||t+2*68>window.innerWidth&&(n.config.readWidth-=160)};Ye(()=>n.config.readWidth,t=>ne(t));const x=w(),re=w(),Q=()=>{$(x.value)},V=()=>{$(re.value)},ve=Xe(),se=()=>{ve.push("/")},T=w([]),S=w(!0),R=(t,C=!0,z=0)=>{C&&(n.setShowContent(!1),$(x.value,{duration:0}),we(t,z),T.value=[]);let D=sessionStorage.getItem("bookUrl"),{title:N,index:K}=U.value[t];u(de.getBookContent(D,K).then(g=>{if(g.data.isSuccess){let ze=g.data.data.split(/\n+/);T.value.push({index:t,content:ze,title:N}),C&&Pe(z)}else{O({message:g.data.errorMsg,type:"error"});let X=[g.data.errorMsg];T.value.push({index:t,content:X,title:N})}if(n.setContentLoading(!0),S.value=!1,n.setShowContent(!0),!g.data.isSuccess)throw g.data},g=>{O({message:"获取章节内容失败",type:"error"});let X=["获取章节内容失败!"];throw T.value.push({index:t,content:X,title:N}),n.setShowContent(!0),g}))},Ce=w(),ye=w(),Pe=t=>{Re(()=>{ye.value.length===1&&ye.value[0].scrollToReadedLength(t)})},Le=(t,C)=>{we(t,C)};De(()=>{var t;document.title=((t=U.value[c.value])==null?void 0:t.title)||document.title});const we=(t,C)=>{let z=sessionStorage.getItem("bookUrl");var D=JSON.parse(localStorage.getItem(z));D.index=t,D.chapterPos=C,localStorage.setItem(z,JSON.stringify(D)),D=JSON.parse(localStorage.getItem("readingRecent")),D.chapterIndex=t,D.chapterPos=C,localStorage.setItem("readingRecent",JSON.stringify(D)),c.value=t,k.value=C,sessionStorage.setItem("chapterIndex",t),sessionStorage.setItem("chapterPos",String(C))},Ee=()=>{document.visibilityState=="hidden"&&de.saveBookProgressWithBeacon(A.value)},xe=()=>{n.setContentLoading(!0);let t=c.value+1;typeof U.value[t]<"u"?(O({message:"下一章",type:"info"}),R(t)):O({message:"本章是最后一章",type:"error"})},Ue=()=>{n.setContentLoading(!0);let t=c.value-1;typeof U.value[t]<"u"?(O({message:"上一章",type:"info"}),R(t)):O({message:"本章是第一章",type:"error"})};let P;const Ie=w();De(()=>{L.value?P==null||P.observe(Ie.value):P==null||P.disconnect()});const Ke=()=>{let t=T.value.slice(-1)[0].index;U.value.length-1>t&&R(t+1,!1)},Oe=t=>{if(!d.value)for(let{isIntersecting:C}of t){if(!C)return;Ke()}},Qe=t=>{switch(t.key){case"ArrowLeft":t.stopPropagation(),t.preventDefault(),Ue();break;case"ArrowRight":t.stopPropagation(),t.preventDefault(),xe();break;case"ArrowUp":t.stopPropagation(),t.preventDefault(),document.documentElement.scrollTop===0?O({message:"已到达页面顶部",type:"warn"}):$(0-document.documentElement.clientHeight+100);break;case"ArrowDown":t.stopPropagation(),t.preventDefault(),document.documentElement.clientHeight+document.documentElement.scrollTop===document.documentElement.scrollHeight?O({message:"已到达页面底部",type:"warn"}):$(document.documentElement.clientHeight-100);break}};return ke(()=>{let t=sessionStorage.getItem("bookUrl"),C=sessionStorage.getItem("bookName"),z=sessionStorage.getItem("bookAuthor"),D=Number(sessionStorage.getItem("chapterIndex")||0),N=Number(sessionStorage.getItem("chapterPos")||0);var K=JSON.parse(localStorage.getItem(t));(K==null||D!=K.index||N!=K.chapterPos)&&(K={bookName:C,bookAuthor:z,bookUrl:t,index:D,chapterPos:N},localStorage.setItem(t,JSON.stringify(K))),Y(),window.addEventListener("resize",Y),u(de.getChapterList(t).then(g=>{if(!g.data.isSuccess){O({message:g.data.errorMsg,type:"error"}),setTimeout(se,500);return}let X=g.data.data;n.setCatalog(X),n.setReadingBook(K),R(D,!0,N),window.addEventListener("keyup",Qe),document.addEventListener("visibilitychange",Ee),P=new IntersectionObserver(Oe,{rootMargin:"-100% 0% 20% 0%"}),L.value&&P.observe(Ie.value),document.title=null,document.title=C+" | "+U.value[D].title},g=>{throw O({message:"获取书籍目录失败",type:"error"}),g}))}),Ve(()=>{window.removeEventListener("keyup",Qe),window.removeEventListener("resize",Y),document.removeEventListener("visibilitychange",Ee),E.value=!1,m.value=!1,P==null||P.disconnect()}),(t,C)=>{const z=Xo,D=Me,N=Ho,K=ct;return p(),f("div",{class:_(["chapter-wrapper",{night:o(le),day:!o(le)}]),style:q(o(pe)),onClick:C[2]||(C[2]=g=>Z.value=!o(Z))},[e("div",{class:"tool-bar",style:q(o(fe))},[e("div",jo,[J(D,{placement:"right",width:o(ce),trigger:"click","show-arrow":!1,visible:o(m),"onUpdate:visible":C[0]||(C[0]=g=>ue(m)?m.value=g:null),"popper-class":"pop-cata"},{reference:W(()=>[e("div",{class:_(["tool-icon",{"no-point":o(S)}])},tn,2)]),default:W(()=>[J(z,{onGetContent:R,class:"popup"})]),_:1},8,["width","visible"]),J(D,{placement:"right",width:o(ce),trigger:"click","show-arrow":!1,visible:o(E),"onUpdate:visible":C[1]||(C[1]=g=>ue(E)?E.value=g:null),"popper-class":"pop-setting"},{reference:W(()=>[e("div",{class:_(["tool-icon",{"no-point":o(S)}])},sn,2)]),default:W(()=>[J(N,{class:"popup"})]),_:1},8,["width","visible"]),e("div",{class:"tool-icon",onClick:se},ln),e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:Q},dn,2),e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:V},pn,2)])],4),e("div",{class:"read-bar",style:q(o(me))},[e("div",hn,[e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:Ue},[fn,o(h)?(p(),f("span",mn,"上一章")):Ae("",!0)],2),e("div",{class:_(["tool-icon",{"no-point":o(S)}]),onClick:xe},[o(h)?(p(),f("span",vn,"下一章")):Ae("",!0),Cn],2)])],4),yn,e("div",{class:"chapter",ref_key:"content",ref:a,style:q(o(he))},[e("div",In,[e("div",{class:"top-bar",ref_key:"top",ref:x},null,512),(p(!0),f(te,null,ae(o(T),g=>(p(),f("div",{key:g.index,chapterIndex:g.index,ref_for:!0,ref_key:"chapter",ref:Ce},[o(y)?(p(),je(K,{key:0,ref_for:!0,ref_key:"chapterRef",ref:ye,chapterIndex:g.index,contents:g.content,title:g.title,spacing:o(n).config.spacing,fontSize:o(oe),fontFamily:o(F),onReadedLengthChange:Le},null,8,["chapterIndex","contents","title","spacing","fontSize","fontFamily"])):Ae("",!0)],8,kn))),128)),e("div",{class:"loading",ref_key:"loading",ref:Ie},null,512),e("div",{class:"bottom-bar",ref_key:"bottom",ref:re},null,512)])],4)],6)}}},En=ie(bn,[["__scopeId","data-v-4804761f"]]);export{En as default}; diff --git a/app/src/main/assets/web/vue/assets/BookShelf-40bf5ad2.js b/app/src/main/assets/web/vue/assets/BookShelf-5ae562d2.js similarity index 98% rename from app/src/main/assets/web/vue/assets/BookShelf-40bf5ad2.js rename to app/src/main/assets/web/vue/assets/BookShelf-5ae562d2.js index 10017b83a4e0..b650f720a42c 100644 --- a/app/src/main/assets/web/vue/assets/BookShelf-40bf5ad2.js +++ b/app/src/main/assets/web/vue/assets/BookShelf-5ae562d2.js @@ -1 +1 @@ -import{a2 as U,n as Q,o as l,d,g as e,F as V,P,t as u,c as $,w as b,f as z,M as I,u as a,a3 as N,p as J,i as D,s as q,z as g,O as G,a4 as X,T as j,k,e as B,A as ee,L as te,v as L,I as se,B as ae}from"./vendor-b9134af1.js";import{d as oe,u as ne}from"./loading-366381f9.js";import{_ as W,u as ce,A as E}from"./index-cb5c0eaf.js";const O=n=>(J("data-v-6da0ccca"),n=n(),D(),n),re={class:"books-wrapper"},ie={class:"wrapper"},le=["onClick"],de={class:"cover-img"},ue=["src"],he={class:"info"},pe={class:"name"},_e={class:"sub"},ve={class:"author"},ge={key:0,class:"tags"},me={key:1,class:"update-info"},fe=O(()=>e("div",{class:"dot"},"•",-1)),we={class:"size"},Ae=O(()=>e("div",{class:"dot"},"•",-1)),Ie={class:"date"},ke={key:0,class:"intro"},Be={key:1,class:"dur-chapter"},ye={class:"last-chapter"},Se={__name:"BookItems",props:["books","isSearch"],emits:["bookClick"],setup(n,{emit:c}){const y=n;U(t=>({"247f0a81":a(m)}));const S=t=>c("bookClick",t),x=t=>/^data:/.test(t)?t:location.origin+"/cover?path="+encodeURIComponent(t),m=Q(()=>y.isSearch?"space-between":"flex-start");return(t,C)=>{const R=N;return l(),d("div",re,[e("div",ie,[(l(!0),d(V,null,P(n.books,r=>{var f;return l(),d("div",{class:"book",key:r.bookUrl,onClick:i=>S(r)},[e("div",de,[(l(),d("img",{class:"cover",src:x(r.coverUrl),key:r.coverUrl,alt:"",loading:"lazy"},null,8,ue))]),e("div",he,[e("div",pe,u(r.name),1),e("div",_e,[e("div",ve,u(r.author),1),n.isSearch?(l(),d("div",ge,[(l(!0),d(V,null,P((f=r.kind)==null?void 0:f.split(",").slice(0,2),i=>(l(),$(R,{key:i},{default:b(()=>[z(u(i),1)]),_:2},1024))),128))])):I("",!0),n.isSearch?I("",!0):(l(),d("div",me,[fe,e("div",we,"共"+u(r.totalChapterNum)+"章",1),Ae,e("div",Ie,u(a(oe)(r.lastCheckTime)),1)]))]),n.isSearch?(l(),d("div",ke,u(r.intro),1)):I("",!0),n.isSearch?I("",!0):(l(),d("div",Be," 已读:"+u(r.durChapterTitle),1)),e("div",ye,"最新:"+u(r.latestChapterTitle),1)])],8,le)}),128))])])}}},xe=W(Se,[["__scopeId","data-v-6da0ccca"]]);const Ce="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAECUlEQVRYR7WXTYhcRRDHq3pY9yKrYBQ8KBsjgvHgwRhiQBTjYZm4Xe8NusawhwS/o9GLoKhgBGPAgJd1NdGIXwtZTbRf9Rqzl6gHTVyDeIkIgnEOghAM6oKHzTJd0sO8Zaa338zb7NjwmJn++Ndv+lVVVyOsoM3Ozl69sLBAiHiDc26NUuoKv9w5d14p9aeI/DI4OMgjIyN/lJXFMhOttQ8BgBaR0TLzEXEGAKzW+lCv+V0BmLmGiLtF5M5eQrFxRPxaRCaI6LOi9YUAzPwGADxxMYYjayaJ6MkoZKyTmU8AwF19Mp7LfElEW0LNZTvAzIcBYFufjedy00T0QLt2B4AxZo9S6qX/yXhT1jn3cpqme3IbSwDM/DgAvNlu3Dm3Uyl1HAA2IOJ2EdleEu5Io9H4EBHPVCqVLSISRsMuInrLazUBpqamhoaGhr4TkRsDgLVpmtbzPmPMLQBwOwD4vvzxw8P5IyJztVrtVL4my7L1iPhTx7Yj/jw/P79pfHx8vgmQZdkLiPhK+O8GBgauqVarv5f819FpxpjLlVJ/hYMi8mKSJHubAMz8KwBcF1EYI6IjqwRIlFImonGWiNZhlmVVRDxWYGTVAMx8HwB8EtMXka1orT0gIo9GJrxNRLH+FW8IMx8EgEeW5QDEgx5gTkQ2Bk7yr9b60hVb6rKAmc8BwJWBne+x4P3XiWhtPwGstV9FzpSzHuBvALgsMHaaiDp2ZbUwWZZNIuKuQOcfD7AAAJeEcaq1Xr9ao+3rmdknnscCzQse4LdWEukYazQaa2q12vl+QTDztwCwOdCr+zA8iYi3RQwREdl+ADDz9QDwIwB0OLaInPJRcEhEHoyEyAmt9d39ALDW2lg1hYjv+lfgC4WJgkTxcJIkPcuqbpC+qgKATwvm7PYAGwDgdBeRZ4notYvZCWPMDqXUe13W3to8C6y10yJyv//u6zj/2R6ziPiRiBwt6xPMrBExFZEdRcYR8WOt9bb8MNoKAJ+3Jvtwed05d4dSKtz+c4h4VGsdrRWttZMici8AXFVix+4homNLBUmWZQcQMc/9x4mommXZ84i4t11MKbV5dHR06bxvH5uZmbnZOfdN6O0RmMNE1CxulgCstdeKyBcAcFPrVTyltZ4wxiSVSuXplkhda72zh9P1rClFZFOSJHMdAP5Hq3rxR6eH+IGIvIOuqFlr94nIc10WdRzxy6riAMJnr2nn3JlcME3TppMWNWvtfhF5pmB8WX0RvZgEEEtaYUUbM2KtfUdE/FUubNHipvBmZIxZp5TaDwBprlQGIHLqzSHiPq01x4B7Xk6Z2d8TfDwPlwFozfd1f90598Hi4uKrY2NjFwrzQVkP81nNi/byAWOMv8gOp2n6fhnt/wDqJrRWLmhIrwAAAABJRU5ErkJggg==";const M=n=>(J("data-v-b636eaeb"),n=n(),D(),n),Re={class:"index-wrapper"},Ee={class:"navigation-wrapper"},be=M(()=>e("div",{class:"navigation-title-wrapper"},[e("div",{class:"navigation-title"},"阅读"),e("div",{class:"navigation-sub-title"},"清风不识字,何故乱翻书")],-1)),ze={class:"search-wrapper"},Me={class:"bottom-wrapper"},Te={class:"recent-wrapper"},Ve=M(()=>e("div",{class:"recent-title"},"最近阅读",-1)),Pe={class:"reading-recent"},Le={class:"setting-wrapper"},Ne=M(()=>e("div",{class:"setting-title"},"基本设定",-1)),Je={class:"setting-item"},De={class:"bottom-icons"},We={href:"https://github.com/gedoor/legado_web_bookshelf",target:"_blank"},Oe={class:"bottom-icon"},Ze=["src"],He={__name:"BookShelf",setup(n){const c=ce(),{connectStatus:y,connectType:S,newConnect:x,shelf:m}=q(c),t=g({name:"尚无阅读记录",author:"",url:"",chapterIndex:0,chapterPos:0}),C=g(null),{showLoading:R,closeLoading:r,loadingWrapper:f}=ne(C,"正在获取书籍信息"),i=g([]),h=g(""),w=g(!1);G(()=>{if(!(w.value&&h.value!="")){if(w.value=!1,i.value=[],h.value==""){i.value=m.value;return}i.value=m.value.filter(s=>s.name.includes(h.value)||s.author.includes(h.value))}});const Z=()=>{h.value!=""&&(i.value=[],c.clearSearchBooks(),R(),w.value=!0,E.search(h.value,s=>{try{c.setSearchBooks(JSON.parse(s)),c.searchBooks.forEach(o=>i.value.push(o))}catch(o){throw k.error("后端数据错误"),o}},()=>{r(),i.value.length==0&&k.info("搜索结果为空")}))},H=()=>{},F=X(),K=async s=>{const{bookUrl:o,name:_,author:p,durChapterIndex:v=0,durChapterPos:A=0}=s;await E.saveBook(s),T(o,_,p,v,A)},T=(s,o,_,p,v)=>{o!=="尚无阅读记录"&&(sessionStorage.setItem("bookUrl",s),sessionStorage.setItem("bookName",o),sessionStorage.setItem("bookAuthor",_),sessionStorage.setItem("chapterIndex",p),sessionStorage.setItem("chapterPos",v),t.value={name:o,author:_,url:s,chapterIndex:p,chapterPos:v},localStorage.setItem("readingRecent",JSON.stringify(t.value)),F.push({path:"/chapter"}))};j(()=>{let s=localStorage.getItem("readingRecent");s!=null&&(t.value=JSON.parse(s),typeof t.value.chapterIndex>"u"&&(t.value.chapterIndex=0)),f(c.saveBookProgress().finally(Y))});const Y=()=>E.getBookShelf().then(s=>{c.setConnectType("success"),s.data.isSuccess?c.addBooks(s.data.data.sort(function(o,_){var p=o.durChapterTime||0,v=_.durChapterTime||0;return v-p})):k.error(s.data.errorMsg),c.setConnectStatus("已连接 "),c.setNewConnect(!1)}).catch(function(s){throw c.setConnectType("danger"),c.setConnectStatus("连接失败"),k.error("后端连接失败"),c.setNewConnect(!1),s});return(s,o)=>{const _=se,p=N,v=xe;return l(),d("div",Re,[e("div",Ee,[be,e("div",ze,[B(_,{placeholder:"搜索书籍,在线书籍自动加入书架",modelValue:a(h),"onUpdate:modelValue":o[0]||(o[0]=A=>ee(h)?h.value=A:null),class:"search-input","prefix-icon":a(ae),onKeyup:te(Z,["enter"])},null,8,["modelValue","prefix-icon","onKeyup"])]),e("div",Me,[e("div",Te,[Ve,e("div",Pe,[B(p,{type:a(t).name=="尚无阅读记录"?"warning":"",class:L(["recent-book",{"no-point":a(t).url==""}]),size:"large",onClick:o[1]||(o[1]=A=>T(a(t).url,a(t).name,a(t).author,a(t).chapterIndex,a(t).chapterPos))},{default:b(()=>[z(u(a(t).name),1)]),_:1},8,["type","class"])])]),e("div",Le,[Ne,e("div",Je,[B(p,{type:a(S),size:"large",class:L(["setting-connect",{"no-point":a(x)}]),onClick:H},{default:b(()=>[z(u(a(y)),1)]),_:1},8,["type","class"])])])]),e("div",De,[e("a",We,[e("div",Oe,[e("img",{src:a(Ce),alt:""},null,8,Ze)])])])]),e("div",{class:"shelf-wrapper",ref_key:"shelfWrapper",ref:C},[B(v,{books:a(i),onBookClick:K,isSearch:a(w)},null,8,["books","isSearch"])],512)])}}},Ue=W(He,[["__scopeId","data-v-b636eaeb"]]);export{Ue as default}; +import{a2 as U,n as Q,o as l,d,g as e,F as V,P,t as u,c as $,w as b,f as z,M as I,u as a,a3 as N,p as J,i as D,s as q,z as g,O as G,a4 as X,T as j,k,e as B,A as ee,L as te,v as L,I as se,B as ae}from"./vendor-b9134af1.js";import{d as oe,u as ne}from"./loading-c2df5ede.js";import{_ as W,u as ce,A as E}from"./index-6de4941c.js";const O=n=>(J("data-v-6da0ccca"),n=n(),D(),n),re={class:"books-wrapper"},ie={class:"wrapper"},le=["onClick"],de={class:"cover-img"},ue=["src"],he={class:"info"},pe={class:"name"},_e={class:"sub"},ve={class:"author"},ge={key:0,class:"tags"},me={key:1,class:"update-info"},fe=O(()=>e("div",{class:"dot"},"•",-1)),we={class:"size"},Ae=O(()=>e("div",{class:"dot"},"•",-1)),Ie={class:"date"},ke={key:0,class:"intro"},Be={key:1,class:"dur-chapter"},ye={class:"last-chapter"},Se={__name:"BookItems",props:["books","isSearch"],emits:["bookClick"],setup(n,{emit:c}){const y=n;U(t=>({"247f0a81":a(m)}));const S=t=>c("bookClick",t),x=t=>/^data:/.test(t)?t:location.origin+"/cover?path="+encodeURIComponent(t),m=Q(()=>y.isSearch?"space-between":"flex-start");return(t,C)=>{const R=N;return l(),d("div",re,[e("div",ie,[(l(!0),d(V,null,P(n.books,r=>{var f;return l(),d("div",{class:"book",key:r.bookUrl,onClick:i=>S(r)},[e("div",de,[(l(),d("img",{class:"cover",src:x(r.coverUrl),key:r.coverUrl,alt:"",loading:"lazy"},null,8,ue))]),e("div",he,[e("div",pe,u(r.name),1),e("div",_e,[e("div",ve,u(r.author),1),n.isSearch?(l(),d("div",ge,[(l(!0),d(V,null,P((f=r.kind)==null?void 0:f.split(",").slice(0,2),i=>(l(),$(R,{key:i},{default:b(()=>[z(u(i),1)]),_:2},1024))),128))])):I("",!0),n.isSearch?I("",!0):(l(),d("div",me,[fe,e("div",we,"共"+u(r.totalChapterNum)+"章",1),Ae,e("div",Ie,u(a(oe)(r.lastCheckTime)),1)]))]),n.isSearch?(l(),d("div",ke,u(r.intro),1)):I("",!0),n.isSearch?I("",!0):(l(),d("div",Be," 已读:"+u(r.durChapterTitle),1)),e("div",ye,"最新:"+u(r.latestChapterTitle),1)])],8,le)}),128))])])}}},xe=W(Se,[["__scopeId","data-v-6da0ccca"]]);const Ce="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAECUlEQVRYR7WXTYhcRRDHq3pY9yKrYBQ8KBsjgvHgwRhiQBTjYZm4Xe8NusawhwS/o9GLoKhgBGPAgJd1NdGIXwtZTbRf9Rqzl6gHTVyDeIkIgnEOghAM6oKHzTJd0sO8Zaa338zb7NjwmJn++Ndv+lVVVyOsoM3Ozl69sLBAiHiDc26NUuoKv9w5d14p9aeI/DI4OMgjIyN/lJXFMhOttQ8BgBaR0TLzEXEGAKzW+lCv+V0BmLmGiLtF5M5eQrFxRPxaRCaI6LOi9YUAzPwGADxxMYYjayaJ6MkoZKyTmU8AwF19Mp7LfElEW0LNZTvAzIcBYFufjedy00T0QLt2B4AxZo9S6qX/yXhT1jn3cpqme3IbSwDM/DgAvNlu3Dm3Uyl1HAA2IOJ2EdleEu5Io9H4EBHPVCqVLSISRsMuInrLazUBpqamhoaGhr4TkRsDgLVpmtbzPmPMLQBwOwD4vvzxw8P5IyJztVrtVL4my7L1iPhTx7Yj/jw/P79pfHx8vgmQZdkLiPhK+O8GBgauqVarv5f819FpxpjLlVJ/hYMi8mKSJHubAMz8KwBcF1EYI6IjqwRIlFImonGWiNZhlmVVRDxWYGTVAMx8HwB8EtMXka1orT0gIo9GJrxNRLH+FW8IMx8EgEeW5QDEgx5gTkQ2Bk7yr9b60hVb6rKAmc8BwJWBne+x4P3XiWhtPwGstV9FzpSzHuBvALgsMHaaiDp2ZbUwWZZNIuKuQOcfD7AAAJeEcaq1Xr9ao+3rmdknnscCzQse4LdWEukYazQaa2q12vl+QTDztwCwOdCr+zA8iYi3RQwREdl+ADDz9QDwIwB0OLaInPJRcEhEHoyEyAmt9d39ALDW2lg1hYjv+lfgC4WJgkTxcJIkPcuqbpC+qgKATwvm7PYAGwDgdBeRZ4notYvZCWPMDqXUe13W3to8C6y10yJyv//u6zj/2R6ziPiRiBwt6xPMrBExFZEdRcYR8WOt9bb8MNoKAJ+3Jvtwed05d4dSKtz+c4h4VGsdrRWttZMici8AXFVix+4homNLBUmWZQcQMc/9x4mommXZ84i4t11MKbV5dHR06bxvH5uZmbnZOfdN6O0RmMNE1CxulgCstdeKyBcAcFPrVTyltZ4wxiSVSuXplkhda72zh9P1rClFZFOSJHMdAP5Hq3rxR6eH+IGIvIOuqFlr94nIc10WdRzxy6riAMJnr2nn3JlcME3TppMWNWvtfhF5pmB8WX0RvZgEEEtaYUUbM2KtfUdE/FUubNHipvBmZIxZp5TaDwBprlQGIHLqzSHiPq01x4B7Xk6Z2d8TfDwPlwFozfd1f90598Hi4uKrY2NjFwrzQVkP81nNi/byAWOMv8gOp2n6fhnt/wDqJrRWLmhIrwAAAABJRU5ErkJggg==";const M=n=>(J("data-v-b636eaeb"),n=n(),D(),n),Re={class:"index-wrapper"},Ee={class:"navigation-wrapper"},be=M(()=>e("div",{class:"navigation-title-wrapper"},[e("div",{class:"navigation-title"},"阅读"),e("div",{class:"navigation-sub-title"},"清风不识字,何故乱翻书")],-1)),ze={class:"search-wrapper"},Me={class:"bottom-wrapper"},Te={class:"recent-wrapper"},Ve=M(()=>e("div",{class:"recent-title"},"最近阅读",-1)),Pe={class:"reading-recent"},Le={class:"setting-wrapper"},Ne=M(()=>e("div",{class:"setting-title"},"基本设定",-1)),Je={class:"setting-item"},De={class:"bottom-icons"},We={href:"https://github.com/gedoor/legado_web_bookshelf",target:"_blank"},Oe={class:"bottom-icon"},Ze=["src"],He={__name:"BookShelf",setup(n){const c=ce(),{connectStatus:y,connectType:S,newConnect:x,shelf:m}=q(c),t=g({name:"尚无阅读记录",author:"",url:"",chapterIndex:0,chapterPos:0}),C=g(null),{showLoading:R,closeLoading:r,loadingWrapper:f}=ne(C,"正在获取书籍信息"),i=g([]),h=g(""),w=g(!1);G(()=>{if(!(w.value&&h.value!="")){if(w.value=!1,i.value=[],h.value==""){i.value=m.value;return}i.value=m.value.filter(s=>s.name.includes(h.value)||s.author.includes(h.value))}});const Z=()=>{h.value!=""&&(i.value=[],c.clearSearchBooks(),R(),w.value=!0,E.search(h.value,s=>{try{c.setSearchBooks(JSON.parse(s)),c.searchBooks.forEach(o=>i.value.push(o))}catch(o){throw k.error("后端数据错误"),o}},()=>{r(),i.value.length==0&&k.info("搜索结果为空")}))},H=()=>{},F=X(),K=async s=>{const{bookUrl:o,name:_,author:p,durChapterIndex:v=0,durChapterPos:A=0}=s;await E.saveBook(s),T(o,_,p,v,A)},T=(s,o,_,p,v)=>{o!=="尚无阅读记录"&&(sessionStorage.setItem("bookUrl",s),sessionStorage.setItem("bookName",o),sessionStorage.setItem("bookAuthor",_),sessionStorage.setItem("chapterIndex",p),sessionStorage.setItem("chapterPos",v),t.value={name:o,author:_,url:s,chapterIndex:p,chapterPos:v},localStorage.setItem("readingRecent",JSON.stringify(t.value)),F.push({path:"/chapter"}))};j(()=>{let s=localStorage.getItem("readingRecent");s!=null&&(t.value=JSON.parse(s),typeof t.value.chapterIndex>"u"&&(t.value.chapterIndex=0)),f(c.saveBookProgress().finally(Y))});const Y=()=>E.getBookShelf().then(s=>{c.setConnectType("success"),s.data.isSuccess?c.addBooks(s.data.data.sort(function(o,_){var p=o.durChapterTime||0,v=_.durChapterTime||0;return v-p})):k.error(s.data.errorMsg),c.setConnectStatus("已连接 "),c.setNewConnect(!1)}).catch(function(s){throw c.setConnectType("danger"),c.setConnectStatus("连接失败"),k.error("后端连接失败"),c.setNewConnect(!1),s});return(s,o)=>{const _=se,p=N,v=xe;return l(),d("div",Re,[e("div",Ee,[be,e("div",ze,[B(_,{placeholder:"搜索书籍,在线书籍自动加入书架",modelValue:a(h),"onUpdate:modelValue":o[0]||(o[0]=A=>ee(h)?h.value=A:null),class:"search-input","prefix-icon":a(ae),onKeyup:te(Z,["enter"])},null,8,["modelValue","prefix-icon","onKeyup"])]),e("div",Me,[e("div",Te,[Ve,e("div",Pe,[B(p,{type:a(t).name=="尚无阅读记录"?"warning":"",class:L(["recent-book",{"no-point":a(t).url==""}]),size:"large",onClick:o[1]||(o[1]=A=>T(a(t).url,a(t).name,a(t).author,a(t).chapterIndex,a(t).chapterPos))},{default:b(()=>[z(u(a(t).name),1)]),_:1},8,["type","class"])])]),e("div",Le,[Ne,e("div",Je,[B(p,{type:a(S),size:"large",class:L(["setting-connect",{"no-point":a(x)}]),onClick:H},{default:b(()=>[z(u(a(y)),1)]),_:1},8,["type","class"])])])]),e("div",De,[e("a",We,[e("div",Oe,[e("img",{src:a(Ce),alt:""},null,8,Ze)])])])]),e("div",{class:"shelf-wrapper",ref_key:"shelfWrapper",ref:C},[B(v,{books:a(i),onBookClick:K,isSearch:a(w)},null,8,["books","isSearch"])],512)])}}},Ue=W(He,[["__scopeId","data-v-b636eaeb"]]);export{Ue as default}; diff --git a/app/src/main/assets/web/vue/assets/config-b43d93ae.js b/app/src/main/assets/web/vue/assets/config-f641e63d.js similarity index 69% rename from app/src/main/assets/web/vue/assets/config-b43d93ae.js rename to app/src/main/assets/web/vue/assets/config-f641e63d.js index 9f71d7f32c9b..7c05e37f4610 100644 --- a/app/src/main/assets/web/vue/assets/config-b43d93ae.js +++ b/app/src/main/assets/web/vue/assets/config-f641e63d.js @@ -1 +1 @@ -import{A as f,u as i}from"./index-cb5c0eaf.js";import"./vendor-b9134af1.js";f.getReadConfig().then(e=>{var t=e.data.data;if(t){const a=i();let o=JSON.parse(t),s=a.config;o=Object.assign(s,o),a.setConfig(o)}}); +import{A as f,u as i}from"./index-6de4941c.js";import"./vendor-b9134af1.js";f.getReadConfig().then(e=>{var t=e.data.data;if(t){const a=i();let o=JSON.parse(t),s=a.config;o=Object.assign(s,o),a.setConfig(o)}}); diff --git a/app/src/main/assets/web/vue/assets/index-6de4941c.js b/app/src/main/assets/web/vue/assets/index-6de4941c.js new file mode 100644 index 000000000000..77bfc411eb0f --- /dev/null +++ b/app/src/main/assets/web/vue/assets/index-6de4941c.js @@ -0,0 +1,9 @@ +import{r as Ee,o as l,c as C,a as se,b as ie,d as U,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 P,A as K,B as Se,C as Le,D as Re,G as ce,V as Oe,H as Pe,I as Z,J as Je,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-b9134af1.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))s(n);new MutationObserver(n=>{for(const r of n)if(r.type==="childList")for(const a of r.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&s(a)}).observe(document,{childList:!0,subtree:!0});function o(n){const r={};return n.integrity&&(r.integrity=n.integrity),n.referrerPolicy&&(r.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?r.credentials="include":n.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(n){if(n.ep)return;n.ep=!0;const r=o(n);fetch(n.href,r)}})();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 n=document.getElementsByTagName("link");return Promise.all(o.map(r=>{if(r=Ze(r,s),r in ue)return;ue[r]=!0;const a=r.endsWith(".css"),k=a?'[rel="stylesheet"]':"";if(!!s)for(let w=n.length-1;w>=0;w--){const v=n[w];if(v.href===r&&(!a||v.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${k}`))return;const S=document.createElement("link");if(S.rel=a?"stylesheet":Ye,a||(S.as="script",S.crossOrigin=""),S.href=r,document.head.appendChild(S),a)return new Promise((w,v)=>{S.addEventListener("load",w),S.addEventListener("error",()=>v(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},J=(e,t)=>{const o=e.__vccOpts||e;for(const[s,n]of t)o[s]=n;return o},et={};function tt(e,t){const o=Ee("router-view");return l(),C(o)}const ot=J(et,[["render",tt]]),ke=[{path:"/",name:"shelf",component:()=>ne(()=>import("./BookShelf-5ae562d2.js"),["./BookShelf-5ae562d2.js","./vendor-b9134af1.js","./vendor-5578283d.css","./loading-c2df5ede.js","./loading-c009631e.css","./BookShelf-c514e936.css"],import.meta.url)},{path:"/chapter",name:"chapter",component:()=>ne(()=>import("./BookChapter-2573d786.js"),["./BookChapter-2573d786.js","./vendor-b9134af1.js","./vendor-5578283d.css","./loading-c2df5ede.js","./loading-c009631e.css","./BookChapter-06bf4dbb.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,n=he;return l(),U(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(n,null,{default:p(()=>[ct,b(" 这些是Java正则特殊符号,匹配需转义")]),_:1})]),ut,_("span",null,[g(n,null,{default:p(()=>[dt,b(" 前缀表示跨行解析")]),_:1})]),pt,_("span",null,[g(n,null,{default:p(()=>[ht,b(" 前缀表示逐行匹配")]),_:1})]),gt,_("span",null,[g(n,null,{default:p(()=>[_t,b(" 前缀表示忽略大小写")]),_:1})]),mt])],64)}}},yt=J(St,[["__scopeId","data-v-aee57c78"]]),ft=1e3,E=Ie.create({baseURL:location.origin,timeout:120*ft}),{hostname:ve,port:Ce}=new URL(location.origin),bt=/source/i.test(location.href),kt=e=>{throw bt&&B({message:"后端错误,检查网络或者阅读app",type:"error"}),e};E.interceptors.response.use(e=>e,kt);const vt=()=>E.get("/getReadConfig"),Ct=e=>E.post("/saveReadConfig",e),wt=e=>E.post("/saveBookProgress",e),xt=e=>{e&&navigator.sendBeacon(`${location.origin}/saveBookProgress`,JSON.stringify(e))},Bt=()=>E.get("/getBookshelf"),Ut=e=>E.get("/getChapterList?url="+encodeURIComponent(e)),Et=(e,t)=>E.get("/getBookContent?url="+encodeURIComponent(e)+"&index="+t),Vt=(e,t,o)=>{const s=`ws://${ve}:${Number(Ce)+1}/searchBook`,n=new WebSocket(s);n.onopen=()=>{n.send(`{"key":"${e}"}`)},n.onmessage=({data:r})=>t(r),n.onclose=()=>{o()}},Nt=e=>E.post("/saveBook",e),Tt=e=>E.post("/deleteBook",e),Q=/bookSource/i.test(location.href),It=()=>Q?E.get("getBookSources"):E.get("getRssSources"),$t=e=>Q?E.post("saveBookSource",e):E.post("saveRssSource",e),Lt=e=>Q?E.post("saveBookSources",e):E.post("saveRssSources",e),Rt=e=>Q?E.post("deleteBookSources",e):E.post("deleteRssSources",e),Ot=(e,t,o,s)=>{const n=`ws://${ve}:${Number(Ce)+1}/${Q?"bookSource":"rssSource"}Debug`,r=new WebSocket(n);r.onopen=()=>{r.send(JSON.stringify({tag:e,key:t}))},r.onmessage=({data:a})=>o(a),r.onclose=()=>{B({message:"调试已关闭!",type:"info"}),s()}},j={getReadConfig:vt,saveReadConfig:Ct,saveBookProgress:wt,saveBookProgressWithBeacon:xt,getBookShelf:Bt,getChapterList:Ut,getBookContent:Et,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,Pt=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,Jt=(e,t)=>{var o,s,n,r,a,k,m,S;return ae(e)?(((o=e.bookSourceName)==null?void 0:o.includes(t))||((s=e.bookSourceUrl)==null?void 0:s.includes(t))||((n=e.bookSourceGroup)==null?void 0:n.includes(t))||((r=e.bookSourceComment)==null?void 0:r.includes(t)))??!1:(((a=e.sourceName)==null?void 0:a.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:n}=Y(o),r=G(()=>ee(t.source)),a=m=>{o.changeCurrentSource(m)},k=G(()=>{const m=s.value;return m.size==0?!1:!m.has(r.value)});return(m,S)=>{const w=le,v=$e;return l(),C(v,{size:"large",border:"",label:i(r),class:me({error:i(k),edit:i(r)==i(n)})},{default:p(()=>[b(X(e.source.bookSourceName||e.source.sourceName)+" ",1),g(w,{text:"",icon:i(_e),onClick:S[0]||(S[0]=x=>a(e.source))},null,8,["icon"])]),_:1},8,["label","class"])}}},Kt=J(jt,[["__scopeId","data-v-830cee5a"]]);const Mt={class:"tool"},Ht={__name:"SourceList",setup(e){const t=M(),o=P([]),s=P(""),{sources:n,sourcesMap:r}=Y(t),a=G(()=>{const c=s.value;return c===""?n.value:n.value.filter(y=>Jt(y,c))}),k=G(()=>{const c=o.value;if(c.length==0)return[];const y=s.value==""?r.value:re(a.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=Pe(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=[]},w=()=>{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?a.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=Je;return l(),U(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:w,icon:i(Le)},{default:p(()=>[b("打开")]),_:1},8,["icon"]),g(f,{disabled:i(a).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(n).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(a),"data-component":Kt,"estimate-size":45},null,8,["data-key","data-sources"])]),_:1},8,["modelValue"])],64)}}},Ft=J(Ht,[["__scopeId","data-v-cd1572ca"]]);const qt={__name:"SourceDebug",setup(e){const t=M(),o=P(""),s=P("");ye(()=>t.isDebuging,()=>{t.isDebuging&&r()});const n=k=>{let m=document.querySelector("#debug-text");m.scrollTop=m.scrollHeight,o.value+=k+` +`},r=async()=>{o.value="",await j.saveSource(t.currentSource),j.debug(t.currentSourceUrl,s.value||t.searchKey,n,t.debugFinish)},a=G(()=>/bookSource/.test(window.location.href));return(k,m)=>{const S=Z;return l(),U(O,null,[i(a)?(l(),C(S,{key:0,id:"debug-key",modelValue:i(s),"onUpdate:modelValue":m[0]||(m[0]=w=>K(s)?s.value=w:null),placeholder:"搜索书名、作者","prefix-icon":i(Se),style:{"padding-bottom":"4px"},onKeydown:De(r,["enter"])},null,8,["modelValue","prefix-icon","onKeydown"])):$("",!0),g(S,{id:"debug-text",modelValue:i(o),"onUpdate:modelValue":m[1]||(m[1]=w=>K(o)?o.value=w:null),type:"textarea",readonly:"",rows:"29",placeholder:"这里用于输出调试信息"},null,8,["modelValue"])],64)}}},zt=J(qt,[["__scopeId","data-v-372e8d43"]]),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:"",spacing:{paragraph:1,line:.8,letter:0}},miniInterface:!1,readSettingsVisible:!1}),getters:{bookProgress:e=>{var a;if(e.catalog.length==0)return;const{index:t,chapterPos:o,bookName:s,bookAuthor:n}=e.readingBook;let r=(a=e.catalog[t])==null?void 0:a.title;if(r)return{name:s,author:n,durChapterIndex:t,durChapterPos:o,durChapterTime:new Date().getTime(),durChapterTitle:r}}},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=P(""),s=async n=>{try{t.changeEditTabSource(JSON.parse(n))}catch{B({message:"粘贴的源格式错误",type:"error"})}};return je(async()=>{let n=t.editTabSource;Object.keys(n).length>0?o.value=JSON.stringify(n,null,4):o.value=""}),(n,r)=>{const a=Z;return l(),C(a,{id:"source-json",modelValue:i(o),"onUpdate:modelValue":r[0]||(r[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=J(Gt,[["__scopeId","data-v-7e91a802"]]);const Xt={__name:"SourceTabTools",setup(e){const t=M(),{currentTab:o}=Y(t),s=P([["editTab","编辑源"],["editDebug","调试源"],["editList","源列表"],["editHelp","帮助信息"]]);return(n,r)=>{const a=Qt,k=zt,m=Ft,S=yt,w=fe,v=be;return l(),C(v,{modelValue:i(o),"onUpdate:modelValue":r[0]||(r[0]=x=>K(o)?o.value=x:null)},{default:p(()=>[(l(!0),U(O,null,A(i(s),(x,c)=>(l(),C(w,{key:x[0],name:x[0],label:x[1]},{default:p(()=>[c==0?(l(),C(a,{key:0})):$("",!0),c==1?(l(),C(k,{key:1})):$("",!0),c==2?(l(),C(m,{key:2})):$("",!0),c==3?(l(),C(S,{key:3})):$("",!0)]),_:2},1032,["name","label"]))),128))]),_:1},8,["modelValue"])}}},Yt=J(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"})})},n=()=>{t.changeTabName("editTab"),t.changeEditTabSource(t.currentSource)},r=()=>{t.changeCurrentSource(t.editTabSource)},a=()=>{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;Pt(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"})},w=()=>{t.startDebug()},v=P(Array.of({name:"⇈推送源",hotKeys:[],action:s},{name:"⇊拉取源",hotKeys:[],action:o},{name:"⋙生成源",hotKeys:[],action:n},{name:"⋘编辑源",hotKeys:[],action:r},{name:"✗清空表单",hotKeys:[],action:k},{name:"↶撤销操作",hotKeys:[],action:a},{name:"↷重做操作",hotKeys:[],action:m},{name:"⇏调试源",hotKeys:[],action:w},{name:"✓保存源",hotKeys:[],action:S})),x=P(!0),c=P(!1),y=P(-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 l(),U(O,null,[_("div",Zt,[(l(!0),U(O,null,A(i(v),I=>(l(),C(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)?(l(),U("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,[(l(!0),U(O,null,A(i(v),(I,te)=>(l(),U("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,[(l(!0),U(O,null,A(I.hotKeys,(oe,Ue)=>(l(),U("div",{key:oe},[_("kbd",null,X(oe),1),Ue+1[b("+")]),_:1})])):$("",!0)]))),128)),I.hotKeys.length==0?(l(),U("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=J(ao,[["__scopeId","data-v-1427b2c0"]]);const uo={__name:"SourceTabForm",props:["config"],setup(e){const t=M(),{currentSource:o}=Y(t);return(s,n)=>{const r=Z,a=Fe,k=qe,m=ze,S=We,w=Ge,v=Qe,x=fe,c=be;return l(),C(c,{id:"source-edit"},{default:p(()=>[(l(!0),U(O,null,A(Object.values(e.config),({name:y,children:V})=>(l(),C(x,{label:y,key:y},{default:p(()=>[g(v,{"label-position":"right","label-width":"5em"},{default:p(()=>[(l(!0),U(O,null,A(V,({type:f,title:N,namespace:T,id:R,array:q,hint:d,required:h})=>(l(),C(w,{label:N,key:N,required:h},{default:p(()=>[f=="String"&&typeof T>"u"?(l(),C(r,{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"?(l(),C(r,{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"?(l(),C(a,{key:2,modelValue:i(o)[R],"onUpdate:modelValue":u=>i(o)[R]=u},null,8,["modelValue","onUpdate:modelValue"])):$("",!0),f=="Number"?(l(),C(k,{key:3,modelValue:i(o)[R],"onUpdate:modelValue":u=>i(o)[R]=u,min:0},null,8,["modelValue","onUpdate:modelValue"])):$("",!0),f=="Array"?(l(),C(S,{key:4,modelValue:i(o)[R],"onUpdate:modelValue":u=>i(o)[R]=u},{default:p(()=>[(l(!0),U(O,null,A(q,(u,D)=>(l(),C(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=J(uo,[["__scopeId","data-v-2cfb5302"]]),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:"variableComment",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:"concurrentRate",type:"String",hint:"并发率,如1000(访问间隔1000ms)或者1/1000(1000ms内访问1次)"},{title:"js库",id:"jsLib",type:"String",hint:"js库, 可填写js或者key-value object获取在线js文件"},{title:"请求头",id:"header",type:"String",hint:"客户端标识"},{title:"链接验证",id:"bookUrlPattern",type:"String",hint:"当详情页URL与源URL的域名不一致时有效,用于添加网址"}]},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:"发现筛选",id:"exploreScreen",type:"String",hint:"发现筛选规则"},{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:"下载URL",namespace:"ruleBookInfo",id:"downloadUrls",type:"String",hint:"文件类书源下载地址 (规则结果为String类型的url, 多个链接返回数组)"},{title:"修改书籍",namespace:"ruleBookInfo",id:"canReName",type:"String",hint:"允许修改书名作者(规则结果为String类型, 默认不允许)"}]},directory:{name:"目录",children:[{title:"预处理",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:"isVip",type:"String",hint:"章节是否为VIP章节 (规则结果为Bool)"},{title:"购买标识",namespace:"ruleToc",id:"isPay",type:"String",hint:"章节是否为已购买 (规则结果为Bool)"},{title:"章节信息",namespace:"ruleToc",id:"updateTime",type:"String",hint:"选择章节信息 (规则结果为String)"},{title:"翻页规则",namespace:"ruleToc",id:"nextTocUrl",type:"String",hint:"选择目录下一页链接 (规则结果为List或String)"}]},content:{name:"正文",children:[{title:"脚本注入",namespace:"ruleContent",id:"webJs",type:"String",hint:"注入javascript,用于模拟鼠标点击等,必须有返回值,一般为String类型"},{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:"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:"payAction",type:"String",hint:"填写JavaScript 返回购买链接或者调用购买接口"},{title:"图片解密",namespace:"ruleContent",id:"imageDecode",type:"String",hint:"填写JavaScript 返回解密图片的bytes "}]},other:{name:"其他",children:[{title:"启用搜索",id:"enabled",type:"Boolean"},{title:"启用发现",id:"enabledExplore",type:"Boolean"},{title:"Cookie",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链接加载白名单,英文逗号隔开"}]},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 n=po,r=co,a=Yt;return l(),U("div",_o,[g(n,{class:"left",config:i(t)},null,8,["config"]),g(r),g(a,{class:"right"})])}}},pe=J(mo,[["__scopeId","data-v-5fe2b79d"]]),we=[{path:"/bookSource",name:"book-home",component:pe},{path:"/rssSource",name:"rss-home",component:pe}];se({history:ie(),routes:we});const xe=se({history:ie(),routes:ke.concat(we)});xe.afterEach(e=>{e.name=="shelf"&&(document.title="书架")});Xe(ot).use(Wt).use(xe).mount("#app");ne(()=>import("./config-f641e63d.js"),["./config-f641e63d.js","./vendor-b9134af1.js","./vendor-5578283d.css","./config-811f2a0b.css"],import.meta.url);export{j as A,J as _,yo as u}; diff --git a/app/src/main/assets/web/vue/assets/index-cb5c0eaf.js b/app/src/main/assets/web/vue/assets/index-cb5c0eaf.js deleted file mode 100644 index 7db12c275fa8..000000000000 --- a/app/src/main/assets/web/vue/assets/index-cb5c0eaf.js +++ /dev/null @@ -1,13 +0,0 @@ -import{r as Ue,o as l,c as C,a as se,b as ie,d as E,e as p,w as u,f as b,u as i,l as H,g,F as P,E as Ee,h as he,p as Ve,i as Ne,j as Te,k as U,m as ge,s as X,n as W,t as Q,q as _e,v as me,x as le,y as Ie,z as D,A as j,B as Se,C as $e,D as Le,G as ce,V as Re,H as Oe,I as Y,J as Pe,K as ye,L as De,M as L,N as Je,O as Ae,P as A,Q as fe,R as be,S as q,T as Ke,U as je,W as Me,X as Fe,Y as He,Z as qe,_ as ze,$ as We,a0 as Ge,a1 as Qe}from"./vendor-b9134af1.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const n of document.querySelectorAll('link[rel="modulepreload"]'))s(n);new MutationObserver(n=>{for(const r of n)if(r.type==="childList")for(const a of r.addedNodes)a.tagName==="LINK"&&a.rel==="modulepreload"&&s(a)}).observe(document,{childList:!0,subtree:!0});function o(n){const r={};return n.integrity&&(r.integrity=n.integrity),n.referrerPolicy&&(r.referrerPolicy=n.referrerPolicy),n.crossOrigin==="use-credentials"?r.credentials="include":n.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function s(n){if(n.ep)return;n.ep=!0;const r=o(n);fetch(n.href,r)}})();const Xe="modulepreload",Ye=function(e,t){return new URL(e,t).href},ue={},ne=function(t,o,s){if(!o||o.length===0)return t();const n=document.getElementsByTagName("link");return Promise.all(o.map(r=>{if(r=Ye(r,s),r in ue)return;ue[r]=!0;const a=r.endsWith(".css"),k=a?'[rel="stylesheet"]':"";if(!!s)for(let w=n.length-1;w>=0;w--){const x=n[w];if(x.href===r&&(!a||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${k}`))return;const m=document.createElement("link");if(m.rel=a?"stylesheet":Xe,a||(m.as="script",m.crossOrigin=""),m.href=r,document.head.appendChild(m),a)return new Promise((w,x)=>{m.addEventListener("load",w),m.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},J=(e,t)=>{const o=e.__vccOpts||e;for(const[s,n]of t)o[s]=n;return o},Ze={};function et(e,t){const o=Ue("router-view");return l(),C(o)}const tt=J(Ze,[["render",et]]),ke=[{path:"/",name:"shelf",component:()=>ne(()=>import("./BookShelf-40bf5ad2.js"),["./BookShelf-40bf5ad2.js","./vendor-b9134af1.js","./vendor-5578283d.css","./loading-366381f9.js","./loading-c009631e.css","./BookShelf-c514e936.css"],import.meta.url)},{path:"/chapter",name:"chapter",component:()=>ne(()=>import("./BookChapter-7a6fac07.js"),["./BookChapter-7a6fac07.js","./vendor-b9134af1.js","./vendor-5578283d.css","./loading-366381f9.js","./loading-c009631e.css","./BookChapter-06bf4dbb.css"],import.meta.url)}];se({history:ie(),routes:ke});const R=e=>(Ve("data-v-aee57c78"),e=e(),Ne(),e),ot=R(()=>g("br",null,null,-1)),nt=R(()=>g("br",null,null,-1)),rt=R(()=>g("br",null,null,-1)),st=R(()=>g("br",null,null,-1)),it=R(()=>g("br",null,null,-1)),lt={style:{"margin-top":"20px"}},at=R(()=>g("code",null,"^$()[]{}.?+*|",-1)),ct=R(()=>g("br",null,null,-1)),ut=R(()=>g("code",null,"(?s)",-1)),dt=R(()=>g("br",null,null,-1)),pt=R(()=>g("code",null,"(?m)",-1)),ht=R(()=>g("br",null,null,-1)),gt=R(()=>g("code",null,"(?i)",-1)),_t=R(()=>g("br",null,null,-1)),mt={__name:"SourceHelp",setup(e){return(t,o)=>{const s=Ee,n=he;return l(),E(P,null,[p(s,{icon:i(H),href:"https://alanskycn.gitee.io/teachme/",target:"_blank"},{default:u(()=>[b("书源制作教程")]),_:1},8,["icon"]),ot,p(s,{icon:i(H),href:"https://zhuanlan.zhihu.com/p/29436838",target:"_blank"},{default:u(()=>[b("xpath基础教程")]),_:1},8,["icon"]),nt,p(s,{icon:i(H),href:"https://zhuanlan.zhihu.com/p/32187820",target:"_blank"},{default:u(()=>[b("xpath高级教程")]),_:1},8,["icon"]),rt,p(s,{icon:i(H),href:"https://www.w3cschool.cn/regex_rmjc",target:"_blank"},{default:u(()=>[b("正则表达式教程")]),_:1},8,["icon"]),st,p(s,{icon:i(H),href:"https://regexr-cn.com/",target:"_blank"},{default:u(()=>[b("正则表达式在线验证工具")]),_:1},8,["icon"]),it,g("div",lt,[g("span",null,[p(n,null,{default:u(()=>[at,b(" 这些是Java正则特殊符号,匹配需转义")]),_:1})]),ct,g("span",null,[p(n,null,{default:u(()=>[ut,b(" 前缀表示跨行解析")]),_:1})]),dt,g("span",null,[p(n,null,{default:u(()=>[pt,b(" 前缀表示逐行匹配")]),_:1})]),ht,g("span",null,[p(n,null,{default:u(()=>[gt,b(" 前缀表示忽略大小写")]),_:1})]),_t])],64)}}},St=J(mt,[["__scopeId","data-v-aee57c78"]]),yt=1e3,V=Te.create({baseURL:location.origin,timeout:120*yt}),{hostname:ve,port:Ce}=new URL(location.origin),ft=/source/i.test(location.href),bt=e=>{throw ft&&U({message:"后端错误,检查网络或者阅读app",type:"error"}),e};V.interceptors.response.use(e=>e,bt);const kt=()=>V.get("/getReadConfig"),vt=e=>V.post("/saveReadConfig",e),Ct=e=>V.post("/saveBookProgress",e),wt=e=>{e&&navigator.sendBeacon(`${location.origin}/saveBookProgress`,JSON.stringify(e))},xt=()=>V.get("/getBookshelf"),Bt=e=>V.get("/getChapterList?url="+encodeURIComponent(e)),Ut=(e,t)=>V.get("/getBookContent?url="+encodeURIComponent(e)+"&index="+t),Et=(e,t,o)=>{const s=`ws://${ve}:${Number(Ce)+1}/searchBook`,n=new WebSocket(s);n.onopen=()=>{n.send(`{"key":"${e}"}`)},n.onmessage=({data:r})=>t(r),n.onclose=()=>{o()}},Vt=e=>V.post("/saveBook",e),Nt=e=>V.post("/deleteBook",e),G=/bookSource/i.test(location.href),Tt=()=>G?V.get("getBookSources"):V.get("getRssSources"),It=e=>G?V.post("saveBookSource",e):V.post("saveRssSource",e),$t=e=>G?V.post("saveBookSources",e):V.post("saveRssSources",e),Lt=e=>G?V.post("deleteBookSources",e):V.post("deleteRssSources",e),Rt=(e,t,o,s)=>{const n=`ws://${ve}:${Number(Ce)+1}/${G?"bookSource":"rssSource"}Debug`,r=new WebSocket(n);r.onopen=()=>{r.send(JSON.stringify({tag:e,key:t}))},r.onmessage=({data:a})=>o(a),r.onclose=()=>{U({message:"调试已关闭!",type:"info"}),s()}},K={getReadConfig:kt,saveReadConfig:vt,saveBookProgress:Ct,saveBookProgressWithBeacon:wt,getBookShelf:xt,getChapterList:Bt,getBookContent:Ut,search:Et,saveBook:Vt,deleteBook:Nt,getSources:Tt,saveSources:$t,saveSource:It,deleteSource:Lt,debug:Rt},z=e=>e==null||e.length===0||/^\s+$/.test(e),ae=e=>"bookSourceName"in e,Ot=e=>ae(e)?!z(e.bookSourceName)&&!z(e.bookSourceUrl)&&!z(e.bookSourceType):!z(e.sourceName)&&!z(e.sourceName),Z=e=>ae(e)?e.bookSourceUrl:e.sourceUrl,Pt=(e,t)=>{var o,s,n,r,a,k,_,m;return ae(e)?(((o=e.bookSourceName)==null?void 0:o.includes(t))||((s=e.bookSourceUrl)==null?void 0:s.includes(t))||((n=e.bookSourceGroup)==null?void 0:n.includes(t))||((r=e.bookSourceComment)==null?void 0:r.includes(t)))??!1:(((a=e.sourceName)==null?void 0:a.includes(t))||((k=e.sourceUrl)==null?void 0:k.includes(t))||((_=e.sourceGroup)==null?void 0:_.includes(t))||((m=e.sourceComment)==null?void 0:m.includes(t)))??!1},re=e=>{const t=new Map;return e.forEach(o=>t.set(Z(o),o)),t},Dt={ruleSearch:{},ruleBookInfo:{},ruleToc:{},ruleContent:{},ruleReview:{},ruleExplore:{}},Jt={},F=/bookSource/i.test(location.href),de=F?Dt:Jt,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(Z(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 At={__name:"SourceItem",props:["source"],setup(e){const t=e,o=M(),{savedSourcesMap:s,currentSourceUrl:n}=X(o),r=W(()=>Z(t.source)),a=_=>{o.changeCurrentSource(_)},k=W(()=>{const _=s.value;return _.size==0?!1:!_.has(r.value)});return(_,m)=>{const w=le,x=Ie;return l(),C(x,{size:"large",border:"",label:i(r),class:me({error:i(k),edit:i(r)==i(n)})},{default:u(()=>[b(Q(e.source.bookSourceName||e.source.sourceName)+" ",1),p(w,{text:"",icon:i(_e),onClick:m[0]||(m[0]=B=>a(e.source))},null,8,["icon"])]),_:1},8,["label","class"])}}},Kt=J(At,[["__scopeId","data-v-830cee5a"]]);const jt={class:"tool"},Mt={__name:"SourceList",setup(e){const t=M(),o=D([]),s=D(""),{sources:n,sourcesMap:r}=X(t),a=W(()=>{const c=s.value;return c===""?n.value:n.value.filter(y=>Pt(y,c))}),k=W(()=>{const c=o.value;if(c.length==0)return[];const y=s.value==""?r.value:re(a.value);return c.reduce((N,f)=>{const T=y.get(f);return T&&N.push(T),N},[])}),_=()=>{const c=k.value;K.deleteSource(c).then(({data:y})=>{if(!y.isSuccess)return U.error(y.errorMsg);t.deleteSources(c);const N=Oe(o.value);c.forEach(f=>{const T=N.indexOf(Z(f));T>-1&&N.splice(T,1)}),o.value=N})},m=()=>{t.clearAllSource(),o.value=[]},w=()=>{const c=document.createElement("input");c.type="file",c.accept=".json,.txt",c.addEventListener("change",y=>{const N=y.target.files[0];var f=new FileReader;f.readAsText(N),f.onload=()=>{try{const T=JSON.parse(f.result);t.saveSources(T)}catch{U({message:"上传的源格式错误",type:"error"})}}}),c.click()},x=/bookSource/.test(window.location.href),B=()=>{const c=document.createElement("a");let y=o.value.length===0?a.value:k.value,N=x?"BookSource":"RssSource";c.download=`${N}_${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 N=Y,f=le,T=Pe;return l(),E(P,null,[p(N,{modelValue:i(s),"onUpdate:modelValue":y[0]||(y[0]=I=>j(s)?s.value=I:null),class:"search","prefix-icon":i(Se),placeholder:"筛选源"},null,8,["modelValue","prefix-icon"]),g("div",jt,[p(f,{onClick:w,icon:i($e)},{default:u(()=>[b("打开")]),_:1},8,["icon"]),p(f,{disabled:i(a).length===0,onClick:B,icon:i(Le)},{default:u(()=>[b(" 导出")]),_:1},8,["disabled","icon"]),p(f,{type:"danger",icon:i(ce),onClick:_,disabled:i(k).length===0},{default:u(()=>[b("删除")]),_:1},8,["icon","disabled"]),p(f,{type:"danger",icon:i(ce),onClick:m,disabled:i(n).length===0},{default:u(()=>[b("清空")]),_:1},8,["icon","disabled"])]),p(T,{id:"source-list",modelValue:i(o),"onUpdate:modelValue":y[1]||(y[1]=I=>j(o)?o.value=I:null)},{default:u(()=>[p(i(Re),{style:{height:"100%","overflow-y":"auto","overflow-x":"hidden"},"data-key":I=>I.bookSourceUrl||I.sourceUrl,"data-sources":i(a),"data-component":Kt,"estimate-size":45},null,8,["data-key","data-sources"])]),_:1},8,["modelValue"])],64)}}},Ft=J(Mt,[["__scopeId","data-v-cd1572ca"]]);const Ht={__name:"SourceDebug",setup(e){const t=M(),o=D(""),s=D("");ye(()=>t.isDebuging,()=>{t.isDebuging&&r()});const n=k=>{let _=document.querySelector("#debug-text");_.scrollTop=_.scrollHeight,o.value+=k+` -`},r=async()=>{o.value="",await K.saveSource(t.currentSource),K.debug(t.currentSourceUrl,s.value||t.searchKey,n,t.debugFinish)},a=W(()=>/bookSource/.test(window.location.href));return(k,_)=>{const m=Y;return l(),E(P,null,[i(a)?(l(),C(m,{key:0,id:"debug-key",modelValue:i(s),"onUpdate:modelValue":_[0]||(_[0]=w=>j(s)?s.value=w:null),placeholder:"搜索书名、作者","prefix-icon":i(Se),style:{"padding-bottom":"4px"},onKeydown:De(r,["enter"])},null,8,["modelValue","prefix-icon","onKeydown"])):L("",!0),p(m,{id:"debug-text",modelValue:i(o),"onUpdate:modelValue":_[1]||(_[1]=w=>j(o)?o.value=w:null),type:"textarea",readonly:"",rows:"29",placeholder:"这里用于输出调试信息"},null,8,["modelValue"])],64)}}},qt=J(Ht,[["__scopeId","data-v-372e8d43"]]),So=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:"",spacing:{paragraph:1,line:.8,letter:0}},miniInterface:!1,readSettingsVisible:!1}),getters:{bookProgress:e=>{var a;if(e.catalog.length==0)return;const{index:t,chapterPos:o,bookName:s,bookAuthor:n}=e.readingBook;let r=(a=e.catalog[t])==null?void 0:a.title;if(r)return{name:s,author:n,durChapterIndex:t,durChapterPos:o,durChapterTime:new Date().getTime(),durChapterTitle:r}}},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?K.saveBookProgress(this.bookProgress):Promise.resolve()}}}),zt=Je();const Wt={__name:"SourceJson",setup(e){const t=M(),o=D(""),s=async n=>{try{t.changeEditTabSource(JSON.parse(n))}catch{U({message:"粘贴的源格式错误",type:"error"})}};return Ae(async()=>{let n=t.editTabSource;Object.keys(n).length>0?o.value=JSON.stringify(n,null,4):o.value=""}),(n,r)=>{const a=Y;return l(),C(a,{id:"source-json",modelValue:i(o),"onUpdate:modelValue":r[0]||(r[0]=k=>j(o)?o.value=k:null),type:"textarea",placeholder:"这里输出序列化的JSON数据,可直接导入'阅读'APP",rows:"30",onChange:s,style:{"margin-bottom":"4px"}},null,8,["modelValue"])}}},Gt=J(Wt,[["__scopeId","data-v-7e91a802"]]);const Qt={__name:"SourceTabTools",setup(e){const t=M(),{currentTab:o}=X(t),s=D([["editTab","编辑源"],["editDebug","调试源"],["editList","源列表"],["editHelp","帮助信息"]]);return(n,r)=>{const a=Gt,k=qt,_=Ft,m=St,w=fe,x=be;return l(),C(x,{modelValue:i(o),"onUpdate:modelValue":r[0]||(r[0]=B=>j(o)?o.value=B:null)},{default:u(()=>[(l(!0),E(P,null,A(i(s),(B,c)=>(l(),C(w,{key:B[0],name:B[0],label:B[1]},{default:u(()=>[c==0?(l(),C(a,{key:0})):L("",!0),c==1?(l(),C(k,{key:1})):L("",!0),c==2?(l(),C(_,{key:2})):L("",!0),c==3?(l(),C(m,{key:3})):L("",!0)]),_:2},1032,["name","label"]))),128))]),_:1},8,["modelValue"])}}},Xt=J(Qt,[["__scopeId","data-v-dcce2457"]]);const Yt={class:"menu flex-column-center"},Zt={class:"hotkeys-header flex-space-between"},eo=["id"],to={key:0},oo={class:"hotkeys-settings flex-column-center"},no={class:"title"},ro={class:"hotkeys-item__content"},so={key:0},io={key:0},lo={__name:"ToolBar",setup(e){const t=M(),o=()=>{const h=U({message:"加载中……",showClose:!0,duration:0});K.getSources().then(({data:d})=>{d.isSuccess?(t.changeTabName("editList"),t.saveSources(d.data),U({message:`成功拉取${d.data.length}条源`,type:"success"})):U({message:d.errorMsg??"后端错误",type:"error"})}).finally(()=>h.close())},s=()=>{let h=t.sources;if(t.changeTabName("editList"),h.length===0)return U({message:"空空如也",type:"info"});U({message:"正在推送中",type:"info"}),K.saveSources(h).then(({data:d})=>{if(d.isSuccess){let S=d.data;if(Array.isArray(S)){let v="";h.length>S.length&&(v=` -推送失败的源将用红色字体标注!`,t.setPushReturnSources(S)),U({message:`批量推送源到「阅读3.0APP」 -共计: ${h.length} 条 -成功: ${S.length} 条 -失败: ${h.length-S.length} 条${v}`,type:"success"})}}else U({message:`批量推送源失败! -ErrorMsg: ${d.errorMsg}`,type:"error"})})},n=()=>{t.changeTabName("editTab"),t.changeEditTabSource(t.currentSource)},r=()=>{t.changeCurrentSource(t.editTabSource)},a=()=>{t.editHistoryUndo()},k=()=>{t.clearEdit(),U({message:"已清除",type:"success"})},_=()=>{t.clearEdit(),t.clearAllHistory(),U({message:"已清除所有历史记录",type:"success"})},m=()=>{let h=/bookSource/.test(location.href),d=t.currentSource;Ot(d)?K.saveSource(d).then(({data:S})=>{S.isSuccess?(U({message:`源《${h?d.bookSourceName:d.sourceName}》已成功保存到「阅读3.0APP」`,type:"success"}),t.saveCurrentSource()):U({message:`源《${h?d.bookSourceName:d.sourceName}》保存失败! -ErrorMsg: ${S.errorMsg}`,type:"error"})}):U({message:"请检查<必填>项是否全部填写",type:"error"})},w=()=>{t.startDebug()},x=D(Array.of({name:"⇈推送源",hotKeys:[],action:s},{name:"⇊拉取源",hotKeys:[],action:o},{name:"⋙生成源",hotKeys:[],action:n},{name:"⋘编辑源",hotKeys:[],action:r},{name:"✗清空表单",hotKeys:[],action:k},{name:"↶撤销操作",hotKeys:[],action:a},{name:"↷重做操作",hotKeys:[],action:_},{name:"⇏调试源",hotKeys:[],action:w},{name:"✓保存源",hotKeys:[],action:m})),B=D(!0),c=D(!1),y=D(-1),N=()=>{c.value||(B.value=!1),c.value=!1};ye(B,h=>{if(!h)return q.unbind("*");q.unbind(),q("*",d=>{d.preventDefault();let S=q.getPressedKeyString();S.length==1&&S[0]=="esc"||c.value&&y.value>-1&&(x.value[y.value].hotKeys=S)})},{immediate:!0});const f=h=>{c.value=!0,U({message:"按ESC键或者点击空白处结束录入",type:"info"}),x.value[h].hotKeys=[],y.value=h},T=()=>{B.value=!1;const h=[];x.value.forEach(({hotKeys:d,action:S})=>{q(d.join("+"),v=>{v.preventDefault(),S.call(null)}),h.push(d)}),I(h)},I=h=>{localStorage.setItem("legado_web_hotkeys",JSON.stringify(h))},O=()=>{try{const h=JSON.parse(localStorage.getItem("legado_web_hotkeys"));if(!Array.isArray(h)||h.length==0)return;x.value.forEach((d,S)=>d.hotKeys=h[S]),B.value=!1,T()}catch{U({message:"快捷键配置错误",type:"error"}),localStorage.removeItem("legado_web_hotkeys")}};return Ke(()=>{O()}),(h,d)=>{const S=le,v=he,ee=Me;return l(),E(P,null,[g("div",Yt,[(l(!0),E(P,null,A(i(x),$=>(l(),C(S,{size:"large",key:$.name,onClick:$.action},{default:u(()=>[b(Q($.name),1)]),_:2},1032,["onClick"]))),128)),p(S,{size:"large",onClick:d[0]||(d[0]=()=>B.value=!0)},{default:u(()=>[b("快捷键")]),_:1})]),p(ee,{modelValue:i(B),"onUpdate:modelValue":d[1]||(d[1]=$=>j(B)?B.value=$:null),"show-close":!1,"before-close":N},{header:u(({titleClass:$,titleId:te})=>[g("div",Zt,[g("div",{id:te,class:me($)},[b(" 快捷键设置 "),i(c)?(l(),E("span",to,[p(v,null,{default:u(()=>[b(" / 录入中 ")]),_:1})])):L("",!0)],10,eo),p(S,{disabled:i(c),onClick:T,icon:i(je)},{default:u(()=>[b("保存")]),_:1},8,["disabled","icon"])])]),default:u(()=>[g("div",oo,[(l(!0),E(P,null,A(i(x),($,te)=>(l(),E("div",{key:$.name,class:"hotkeys-item flex-space-between"},[g("span",no,[p(v,null,{default:u(()=>[b(Q($.name),1)]),_:2},1024)]),g("div",ro,[(l(!0),E(P,null,A($.hotKeys,(oe,Be)=>(l(),E("div",{key:oe},[g("kbd",null,Q(oe),1),Be+1<$.hotKeys.length?(l(),E("span",so,[p(v,null,{default:u(()=>[b("+")]),_:1})])):L("",!0)]))),128)),$.hotKeys.length==0?(l(),E("span",io,"未设置")):L("",!0)]),p(S,{disabled:i(c),text:"",icon:i(_e),onClick:oe=>f(te)},{default:u(()=>[b("编辑")]),_:2},1032,["disabled","icon","onClick"])]))),128))])]),_:1},8,["modelValue"])],64)}}},ao=J(lo,[["__scopeId","data-v-e3b61f1f"]]);const co={__name:"SourceTabForm",props:["config"],setup(e){const t=M(),{currentSource:o}=X(t);return(s,n)=>{const r=Y,a=Fe,k=He,_=qe,m=ze,w=We,x=Ge,B=fe,c=be;return l(),C(c,{id:"source-edit"},{default:u(()=>[(l(!0),E(P,null,A(Object.values(e.config),({name:y,children:N})=>(l(),C(B,{label:y,key:y},{default:u(()=>[p(x,{"label-position":"right","label-width":"5em"},{default:u(()=>[(l(!0),E(P,null,A(N,({type:f,title:T,namespace:I,id:O,array:h,hint:d,required:S})=>(l(),C(w,{label:T,key:T,required:S},{default:u(()=>[f=="String"&&typeof I>"u"?(l(),C(r,{key:0,type:"textarea",modelValue:i(o)[O],"onUpdate:modelValue":v=>i(o)[O]=v,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):L("",!0),f=="String"&&typeof I<"u"?(l(),C(r,{key:1,type:"textarea",modelValue:i(o)[I][O],"onUpdate:modelValue":v=>i(o)[I][O]=v,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):L("",!0),f=="Boolean"?(l(),C(a,{key:2,modelValue:i(o)[O],"onUpdate:modelValue":v=>i(o)[O]=v},null,8,["modelValue","onUpdate:modelValue"])):L("",!0),f=="Number"?(l(),C(k,{key:3,modelValue:i(o)[O],"onUpdate:modelValue":v=>i(o)[O]=v,min:0},null,8,["modelValue","onUpdate:modelValue"])):L("",!0),f=="Array"?(l(),C(m,{key:4,modelValue:i(o)[O],"onUpdate:modelValue":v=>i(o)[O]=v},{default:u(()=>[(l(!0),E(P,null,A(h,(v,ee)=>(l(),C(_,{value:ee,key:v,label:v},null,8,["value","label"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])):L("",!0)]),_:2},1032,["label","required"]))),128))]),_:2},1024)]),_:2},1032,["label"]))),128))]),_:1})}}},uo=J(co,[["__scopeId","data-v-2cfb5302"]]),po={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:"variableComment",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:"concurrentRate",type:"String",hint:"并发率"},{title:"js库",id:"jsLib",type:"String",hint:"js库"},{title:"请求头",id:"header",type:"String",hint:"客户端标识"},{title:"链接验证",id:"bookUrlPattern",type:"String",hint:"当详情页URL与源URL的域名不一致时有效,用于添加网址"}]},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:`内容能显示在发现菜单 -每行一条发现分类(网址域名可省略),例: -名称1::网址(Url)1 -名称2::网址(Url)2 -...`},{title:"发现筛选",id:"exploreScreen",type:"String",hint:"发现筛选规则"},{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:"下载URL",namespace:"ruleBookInfo",id:"downloadUrls",type:"String",hint:"文件类书源下载地址 (规则结果为String类型的url, 多个链接返回数组)"},{title:"修改书籍",namespace:"ruleBookInfo",id:"canReName",type:"String",hint:"允许修改书名作者(规则结果为String类型, 默认不允许)"}]},directory:{name:"目录",children:[{title:"预处理",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:"isVolume",type:"String",hint:"章节名称是否是卷名 (规则结果为Bool)"},{title:"收费标识",namespace:"ruleToc",id:"isVip",type:"String",hint:"章节是否为VIP章节 (规则结果为Bool)"},{title:"购买标识",namespace:"ruleToc",id:"isPay",type:"String",hint:"章节是否为已购买 (规则结果为Bool)"},{title:"章节信息",namespace:"ruleToc",id:"updateTime",type:"String",hint:"选择章节信息 (规则结果为String)"},{title:"翻页规则",namespace:"ruleToc",id:"nextTocUrl",type:"String",hint:"选择目录下一页链接 (规则结果为List或String)"}]},content:{name:"正文",children:[{title:"脚本注入",namespace:"ruleContent",id:"webJs",type:"String",hint:"注入javascript,用于模拟鼠标点击等,必须有返回值,一般为String类型"},{title:"正文规则",namespace:"ruleContent",id:"content",type:"String",hint:"选择正文内容 (规则结果为String)"},{title:"翻页规则",namespace:"ruleContent",id:"nextContentUrl",type:"String",hint:"选择下一分页(不是下一章)链接 (规则结果为String类型的Url)"},{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:"payAction",type:"String",hint:"填写JavaScript 返回购买链接或者调用购买接口"},{title:"图片解密",namespace:"ruleContent",id:"imageDecode",type:"String",hint:"填写JavaScript 返回解密图片的bytes "}]},other:{name:"其他",children:[{title:"启用搜索",id:"enabled",type:"Boolean"},{title:"启用发现",id:"enabledExplore",type:"Boolean"},{title:"Cookie",id:"enabledCookieJar",type:"Boolean"},{title:"搜索权重",id:"weight",type:"Number"},{title:"排序编号",id:"customOrder",type:"Number"}]}},ho={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链接加载白名单,英文逗号隔开"}]},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 go={class:"editor"},_o={__name:"SourceEditor",setup(e){let t;return/bookSource/i.test(location.href)?(t=po,document.title="书源管理"):(t=ho,document.title="订阅源管理"),(o,s)=>{const n=uo,r=ao,a=Xt;return l(),E("div",go,[p(n,{class:"left",config:i(t)},null,8,["config"]),p(r),p(a,{class:"right"})])}}},pe=J(_o,[["__scopeId","data-v-5fe2b79d"]]),we=[{path:"/bookSource",name:"book-home",component:pe},{path:"/rssSource",name:"rss-home",component:pe}];se({history:ie(),routes:we});const xe=se({history:ie(),routes:ke.concat(we)});xe.afterEach(e=>{e.name=="shelf"&&(document.title="书架")});Qe(tt).use(zt).use(xe).mount("#app");ne(()=>import("./config-b43d93ae.js"),["./config-b43d93ae.js","./vendor-b9134af1.js","./vendor-5578283d.css","./config-811f2a0b.css"],import.meta.url);export{K as A,J as _,So as u}; diff --git a/app/src/main/assets/web/vue/assets/index-f0744ec1.css b/app/src/main/assets/web/vue/assets/index-f9e374f2.css similarity index 76% rename from app/src/main/assets/web/vue/assets/index-f0744ec1.css rename to app/src/main/assets/web/vue/assets/index-f9e374f2.css index c8b6914db8e9..7e6b2596889f 100644 --- a/app/src/main/assets/web/vue/assets/index-f0744ec1.css +++ b/app/src/main/assets/web/vue/assets/index-f9e374f2.css @@ -1 +1 @@ -.el-link[data-v-aee57c78]{padding:4px}.el-text[data-v-aee57c78]{padding-top:20px}[data-v-830cee5a] .el-checkbox__label{flex:1;display:flex;justify-content:space-between;align-items:center}.error[data-v-830cee5a]{border-color:var(--el-color-error)!important;color:var(--el-color-error)!important;--el-checkbox-checked-text-color: var(--el-color-error);--el-checkbox-checked-bg-color: var(--el-color-error);--el-checkbox-checked-input-border-color: var(--el-color-error)}.edit[data-v-830cee5a]{border-color:var(--el-color-dark)!important}.tool[data-v-cd1572ca]{display:flex;margin:4px 0;justify-content:center}#source-list[data-v-cd1572ca]{margin-top:6px;height:calc(100vh - 119px)}#source-list[data-v-cd1572ca] .el-checkbox{margin-bottom:4px;width:100%}[data-v-372e8d43] #debug-text{height:calc(100vh - 86px)}[data-v-7e91a802] .el-input{width:100%}[data-v-7e91a802] #source-json{height:calc(100vh - 50px)}[data-v-dcce2457] .el-tabs__header{margin-bottom:5px}.flex-space-between[data-v-e3b61f1f]{display:flex;justify-content:space-between;align-items:baseline}.flex-column-center[data-v-e3b61f1f]{display:flex;flex-direction:column;justify-content:center}.menu>.el-button[data-v-e3b61f1f]{margin:4px;padding:1em;width:6em}.hotkeys-item .title[data-v-e3b61f1f]{width:5em;display:flex;justify-content:flex-end;margin-right:1em}.hotkeys-item__content[data-v-e3b61f1f]{display:flex;flex-wrap:wrap;flex:1}.hotkeys-item__content div[data-v-e3b61f1f]{margin-bottom:1em}.hotkeys-item__content span[data-v-e3b61f1f]{margin:.5em}[data-v-2cfb5302] .el-tab-pane{height:calc(100vh - 55px);padding-top:15px;padding-right:5px;overflow-y:auto}[data-v-2cfb5302] .el-tabs__header{margin:0}kbd{background-color:#fcfcfc;border-radius:3px;border:1px solid hsl(0deg,0%,80%);padding:4px 5px;font-weight:700}code{background-color:#f2f1f1;padding:.125rem .25rem;border-radius:.25rem;font-size:.835rem}body{padding:0;margin:0}.el-tabs__header{position:sticky;top:0px;z-index:2;background-color:#fff}.editor[data-v-5fe2b79d]{display:flex;height:100vh;overflow:hidden}.editor .left[data-v-5fe2b79d]{flex:1;margin-left:20px}.editor .right[data-v-5fe2b79d]{flex:1;width:360px;margin-right:20px} +.el-link[data-v-aee57c78]{padding:4px}.el-text[data-v-aee57c78]{padding-top:20px}[data-v-830cee5a] .el-checkbox__label{flex:1;display:flex;justify-content:space-between;align-items:center}.error[data-v-830cee5a]{border-color:var(--el-color-error)!important;color:var(--el-color-error)!important;--el-checkbox-checked-text-color: var(--el-color-error);--el-checkbox-checked-bg-color: var(--el-color-error);--el-checkbox-checked-input-border-color: var(--el-color-error)}.edit[data-v-830cee5a]{border-color:var(--el-color-dark)!important}.tool[data-v-cd1572ca]{display:flex;margin:4px 0;justify-content:center}#source-list[data-v-cd1572ca]{margin-top:6px;height:calc(100vh - 119px)}#source-list[data-v-cd1572ca] .el-checkbox{margin-bottom:4px;width:100%}[data-v-372e8d43] #debug-text{height:calc(100vh - 86px)}[data-v-7e91a802] .el-input{width:100%}[data-v-7e91a802] #source-json{height:calc(100vh - 50px)}[data-v-dcce2457] .el-tabs__header{margin-bottom:5px}.flex-space-between[data-v-1427b2c0]{display:flex;justify-content:space-between;align-items:baseline}.flex-column-center[data-v-1427b2c0]{display:flex;flex-direction:column;justify-content:center}.menu>.el-button[data-v-1427b2c0]{margin:4px;padding:1em;width:6em}.hotkeys-item .title[data-v-1427b2c0]{width:5em;display:flex;justify-content:flex-end;margin-right:1em}.hotkeys-item__content[data-v-1427b2c0]{display:flex;flex-wrap:wrap;flex:1}.hotkeys-item__content div[data-v-1427b2c0]{margin-bottom:1em}.hotkeys-item__content span[data-v-1427b2c0]{margin:.5em}[data-v-2cfb5302] .el-tab-pane{height:calc(100vh - 55px);padding-top:15px;padding-right:5px;overflow-y:auto}[data-v-2cfb5302] .el-tabs__header{margin:0}kbd{background-color:#fcfcfc;border-radius:3px;border:1px solid hsl(0deg,0%,80%);padding:4px 5px;font-weight:700}code{background-color:#f2f1f1;padding:.125rem .25rem;border-radius:.25rem;font-size:.835rem}body{padding:0;margin:0}.el-tabs__header{position:sticky;top:0px;z-index:2;background-color:#fff}.editor[data-v-5fe2b79d]{display:flex;height:100vh;overflow:hidden}.editor .left[data-v-5fe2b79d]{flex:1;margin-left:20px}.editor .right[data-v-5fe2b79d]{flex:1;width:360px;margin-right:20px} diff --git a/app/src/main/assets/web/vue/assets/loading-366381f9.js b/app/src/main/assets/web/vue/assets/loading-c2df5ede.js similarity index 97% rename from app/src/main/assets/web/vue/assets/loading-366381f9.js rename to app/src/main/assets/web/vue/assets/loading-c2df5ede.js index e1bece3044d8..bc6c5de730d1 100644 --- a/app/src/main/assets/web/vue/assets/loading-366381f9.js +++ b/app/src/main/assets/web/vue/assets/loading-c2df5ede.js @@ -1 +1 @@ -import{u as S}from"./index-cb5c0eaf.js";import{z as L,K as p,a5 as w,ae as D,u as v}from"./vendor-b9134af1.js";const Y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;function y(t,i,e,a){let o=t<12?"AM":"PM";return a&&(o=o.split("").reduce((n,l)=>n+=`${l}.`,"")),e?o.toLowerCase():o}function z(t,i,e={}){var a;const o=t.getFullYear(),n=t.getMonth(),l=t.getDate(),s=t.getHours(),r=t.getMinutes(),g=t.getSeconds(),f=t.getMilliseconds(),h=t.getDay(),c=(a=e.customMeridiem)!=null?a:y,d={YY:()=>String(o).slice(-2),YYYY:()=>o,M:()=>n+1,MM:()=>`${n+1}`.padStart(2,"0"),MMM:()=>t.toLocaleDateString(e.locales,{month:"short"}),MMMM:()=>t.toLocaleDateString(e.locales,{month:"long"}),D:()=>String(l),DD:()=>`${l}`.padStart(2,"0"),H:()=>String(s),HH:()=>`${s}`.padStart(2,"0"),h:()=>`${s%12||12}`.padStart(1,"0"),hh:()=>`${s%12||12}`.padStart(2,"0"),m:()=>String(r),mm:()=>`${r}`.padStart(2,"0"),s:()=>String(g),ss:()=>`${g}`.padStart(2,"0"),SSS:()=>`${f}`.padStart(3,"0"),d:()=>h,dd:()=>t.toLocaleDateString(e.locales,{weekday:"narrow"}),ddd:()=>t.toLocaleDateString(e.locales,{weekday:"short"}),dddd:()=>t.toLocaleDateString(e.locales,{weekday:"long"}),A:()=>c(s,r),AA:()=>c(s,r,!1,!0),a:()=>c(s,r,!0),aa:()=>c(s,r,!0,!0)};return i.replace(Y,(m,M)=>{var u;return M||((u=d[m])==null?void 0:u.call(d))||m})}const b=t=>/,\s*\{/.test(t)||!(t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"));function A(t){return location.origin+"/image?path="+encodeURIComponent(t)+"&url="+encodeURIComponent(sessionStorage.getItem("bookUrl"))+"&width="+S().config.readWidth}const W=t=>{let i=new Date().getTime(),e=Math.floor((i-t)/1e3),a="";return e<=30?a="刚刚":e<60?a=e+"秒前":e<3600?a=Math.floor(e/60)+"分钟前":e<86400?a=Math.floor(e/3600)+"小时前":e<2592e3?a=Math.floor(e/86400)+"天前":a=z(new Date(t),"YYYY-MM-DD"),a},$='';const U=(t,i,e=$)=>{const a=L(!1);let o=null;const n=()=>a.value=!1,l=()=>a.value=!0;p(a,r=>{if(!r)return o==null?void 0:o.close();o=D.service({target:v(t),spinner:e,text:i,lock:!0,background:"rgba(0, 0, 0, 0)"})});const s=r=>{if(!(r instanceof Promise))throw TypeError("loadingWrapper argument must be Promise");return l(),r.finally(n)};return w(()=>{n()}),{isLoading:a,showLoading:l,closeLoading:n,loadingWrapper:s}};export{W as d,A as g,b as i,U as u}; +import{u as S}from"./index-6de4941c.js";import{z as L,K as p,a5 as w,ae as D,u as v}from"./vendor-b9134af1.js";const Y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;function y(t,i,e,a){let o=t<12?"AM":"PM";return a&&(o=o.split("").reduce((n,l)=>n+=`${l}.`,"")),e?o.toLowerCase():o}function z(t,i,e={}){var a;const o=t.getFullYear(),n=t.getMonth(),l=t.getDate(),s=t.getHours(),r=t.getMinutes(),g=t.getSeconds(),f=t.getMilliseconds(),h=t.getDay(),c=(a=e.customMeridiem)!=null?a:y,d={YY:()=>String(o).slice(-2),YYYY:()=>o,M:()=>n+1,MM:()=>`${n+1}`.padStart(2,"0"),MMM:()=>t.toLocaleDateString(e.locales,{month:"short"}),MMMM:()=>t.toLocaleDateString(e.locales,{month:"long"}),D:()=>String(l),DD:()=>`${l}`.padStart(2,"0"),H:()=>String(s),HH:()=>`${s}`.padStart(2,"0"),h:()=>`${s%12||12}`.padStart(1,"0"),hh:()=>`${s%12||12}`.padStart(2,"0"),m:()=>String(r),mm:()=>`${r}`.padStart(2,"0"),s:()=>String(g),ss:()=>`${g}`.padStart(2,"0"),SSS:()=>`${f}`.padStart(3,"0"),d:()=>h,dd:()=>t.toLocaleDateString(e.locales,{weekday:"narrow"}),ddd:()=>t.toLocaleDateString(e.locales,{weekday:"short"}),dddd:()=>t.toLocaleDateString(e.locales,{weekday:"long"}),A:()=>c(s,r),AA:()=>c(s,r,!1,!0),a:()=>c(s,r,!0),aa:()=>c(s,r,!0,!0)};return i.replace(Y,(m,M)=>{var u;return M||((u=d[m])==null?void 0:u.call(d))||m})}const b=t=>/,\s*\{/.test(t)||!(t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"));function A(t){return location.origin+"/image?path="+encodeURIComponent(t)+"&url="+encodeURIComponent(sessionStorage.getItem("bookUrl"))+"&width="+S().config.readWidth}const W=t=>{let i=new Date().getTime(),e=Math.floor((i-t)/1e3),a="";return e<=30?a="刚刚":e<60?a=e+"秒前":e<3600?a=Math.floor(e/60)+"分钟前":e<86400?a=Math.floor(e/3600)+"小时前":e<2592e3?a=Math.floor(e/86400)+"天前":a=z(new Date(t),"YYYY-MM-DD"),a},$='';const U=(t,i,e=$)=>{const a=L(!1);let o=null;const n=()=>a.value=!1,l=()=>a.value=!0;p(a,r=>{if(!r)return o==null?void 0:o.close();o=D.service({target:v(t),spinner:e,text:i,lock:!0,background:"rgba(0, 0, 0, 0)"})});const s=r=>{if(!(r instanceof Promise))throw TypeError("loadingWrapper argument must be Promise");return l(),r.finally(n)};return w(()=>{n()}),{isLoading:a,showLoading:l,closeLoading:n,loadingWrapper:s}};export{W as d,A as g,b as i,U as u}; diff --git a/app/src/main/assets/web/vue/index.html b/app/src/main/assets/web/vue/index.html index 1a3e7ba9af63..56e49fdd227c 100644 --- a/app/src/main/assets/web/vue/index.html +++ b/app/src/main/assets/web/vue/index.html @@ -4,10 +4,10 @@ - + - + diff --git a/app/src/main/java/io/legado/app/constant/PreferKey.kt b/app/src/main/java/io/legado/app/constant/PreferKey.kt index 069ed7b9916e..47a5c7c64792 100644 --- a/app/src/main/java/io/legado/app/constant/PreferKey.kt +++ b/app/src/main/java/io/legado/app/constant/PreferKey.kt @@ -128,6 +128,7 @@ object PreferKey { const val showLastUpdateTime = "showLastUpdateTime" const val clearWebViewData = "clearWebViewData" const val onlyLatestBackup = "onlyLatestBackup" + const val brightnessVwPos = "brightnessVwPos" const val cPrimary = "colorPrimary" const val cAccent = "colorAccent" diff --git a/app/src/app/java/io/legado/app/help/AppUpdateGitHub.kt b/app/src/main/java/io/legado/app/help/AppUpdateGitHub.kt similarity index 100% rename from app/src/app/java/io/legado/app/help/AppUpdateGitHub.kt rename to app/src/main/java/io/legado/app/help/AppUpdateGitHub.kt diff --git a/app/src/main/java/io/legado/app/help/config/AppConfig.kt b/app/src/main/java/io/legado/app/help/config/AppConfig.kt index b00b5f496c5d..dec18efa9b01 100644 --- a/app/src/main/java/io/legado/app/help/config/AppConfig.kt +++ b/app/src/main/java/io/legado/app/help/config/AppConfig.kt @@ -451,6 +451,12 @@ object AppConfig : SharedPreferences.OnSharedPreferenceChangeListener { appCtx.putPrefBoolean(PreferKey.audioPlayWakeLock, value) } + var brightnessVwPos: Boolean + get() = appCtx.getPrefBoolean(PreferKey.brightnessVwPos) + set(value) { + appCtx.putPrefBoolean(PreferKey.brightnessVwPos, value) + } + fun detectClickArea() { if (clickActionTL * clickActionTC * clickActionTR * clickActionML * clickActionMC * clickActionMR diff --git a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt index 02aa799f0a0f..917c0b1b47ce 100644 --- a/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt +++ b/app/src/main/java/io/legado/app/lib/webdav/WebDav.kt @@ -404,7 +404,7 @@ open class WebDav( val supportBasicAuth = headers.any { it.startsWith("Basic", ignoreCase = true) } - if (!supportBasicAuth) { + if (headers.isNotEmpty() && !supportBasicAuth) { AppLog.put("服务器不支持BasicAuth认证") } } diff --git a/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt b/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt index 7d99ba23349b..a1b2e8f102f3 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookChapterList.kt @@ -121,6 +121,7 @@ object BookChapterList { coroutineContext.ensureActive() val formatJs = tocRule.formatJs val bindings = SimpleBindings() + bindings["gInt"] = 0 list.forEachIndexed { index, bookChapter -> bookChapter.index = index if (!formatJs.isNullOrBlank()) { diff --git a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt index 61b9581be06b..a6bbccb137c1 100644 --- a/app/src/main/java/io/legado/app/model/webBook/BookContent.kt +++ b/app/src/main/java/io/legado/app/model/webBook/BookContent.kt @@ -57,17 +57,16 @@ object BookContent { analyzeRule.chapter = bookChapter analyzeRule.nextChapterUrl = mNextChapterUrl coroutineContext.ensureActive() - contentRule.title?.let { - if (it.isNotBlank()) { - val title = analyzeRule.runCatching { - getString(it) - }.onFailure { e -> - Debug.log(bookSource.bookSourceUrl, "获取标题出错, ${e.localizedMessage}") - }.getOrNull() - if (!title.isNullOrBlank()) { - bookChapter.title = title - appDb.bookChapterDao.upDate(bookChapter) - } + val titleRule = contentRule.title + if (!titleRule.isNullOrBlank()) { + val title = analyzeRule.runCatching { + getString(titleRule) + }.onFailure { + Debug.log(bookSource.bookSourceUrl, "获取标题出错, ${it.localizedMessage}") + }.getOrNull() + if (!title.isNullOrBlank()) { + bookChapter.title = title + appDb.bookChapterDao.upDate(bookChapter) } } var contentData = analyzeContent( diff --git a/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt b/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt index 64d379a6cc9c..01b38faa50fa 100644 --- a/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/AddToBookshelfDialog.kt @@ -137,7 +137,7 @@ class AddToBookshelfDialog() : BaseDialogFragment(R.layout.dialog_add_to_bookshe } throw NoStackTraceException("未找到匹配书源") }.onError { - AppLog.put("添加书籍 ${bookUrl} 出错", it) + AppLog.put("添加书籍 $bookUrl 出错", it) loadErrorLiveData.postValue(it.localizedMessage) }.onSuccess { book = it diff --git a/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt b/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt index b3c68ccf8354..7d777464f67a 100644 --- a/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt +++ b/app/src/main/java/io/legado/app/ui/association/OnLineImportActivity.kt @@ -49,8 +49,8 @@ class OnLineImportActivity : finallyDialog(getString(R.string.error), it) } intent.data?.let { - val url = it.toString().substringAfter("src=", "") - if (url.isEmpty()) { + val url = it.getQueryParameter("src") + if (url.isNullOrEmpty()) { finish() return } diff --git a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt index 79b06fcbfcf5..332eb23df85c 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/ReadMenu.kt @@ -208,6 +208,7 @@ class ReadMenu @JvmOverloads constructor( } else { titleBarAddition.gone() } + upBrightnessVwPos() } fun reset() { @@ -366,7 +367,10 @@ class ReadMenu @JvmOverloads constructor( } }) - + vwBrightnessPosAdjust.setOnClickListener { + AppConfig.brightnessVwPos = !AppConfig.brightnessVwPos + upBrightnessVwPos() + } //阅读进度 seekReadPage.setOnSeekBarChangeListener(object : SeekBarChangeListener { @@ -492,6 +496,7 @@ class ReadMenu @JvmOverloads constructor( progress = ReadBook.durPageIndex } } + "chapter" -> { max = ReadBook.chapterSize - 1 progress = ReadBook.durChapterIndex @@ -515,6 +520,20 @@ class ReadMenu @JvmOverloads constructor( fabAutoPage.setColorFilter(textColor) } + private fun upBrightnessVwPos() { + if (AppConfig.brightnessVwPos) { + binding.root.modifyBegin() + .clear(R.id.ll_brightness, ConstraintModify.Anchor.LEFT) + .rightToRightOf(R.id.ll_brightness, R.id.vw_menu_root) + .commit() + } else { + binding.root.modifyBegin() + .clear(R.id.ll_brightness, ConstraintModify.Anchor.RIGHT) + .leftToLeftOf(R.id.ll_brightness, R.id.vw_menu_root) + .commit() + } + } + interface CallBack { fun autoPage() fun openReplaceRule() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt index 67049d70494e..8c11c414d019 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/PageView.kt @@ -97,8 +97,8 @@ class PageView(context: Context) : FrameLayout(context) { it.footerPaddingRight.dpToPx(), it.footerPaddingBottom.dpToPx() ) - vwTopDivider.visible(it.showHeaderLine) - vwBottomDivider.visible(it.showFooterLine) + vwTopDivider.gone(llHeader.isGone || !it.showHeaderLine) + vwBottomDivider.gone(llFooter.isGone || !it.showFooterLine) } contentTextView.upVisibleRect() upTime() diff --git a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt index e7b73e55ae7e..2673692f7832 100644 --- a/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt +++ b/app/src/main/java/io/legado/app/ui/book/read/page/provider/ChapterProvider.kt @@ -182,7 +182,7 @@ object ChapterProvider { } durY = setTypeImage( book, matcher.group(1)!!, - absStartX, durY, textPages, book.getImageStyle() + absStartX, durY, textPages, stringBuilder, book.getImageStyle() ) start = matcher.end() } @@ -232,13 +232,17 @@ object ChapterProvider { x: Int, y: Float, textPages: ArrayList, + stringBuilder: StringBuilder, imageStyle: String?, ): Float { var durY = y val size = ImageProvider.getImageSize(book, src, ReadBook.bookSource) if (size.width > 0 && size.height > 0) { if (durY > visibleHeight) { - textPages.last().height = durY + val textPage = textPages.last() + textPage.height = durY + textPage.text = stringBuilder.toString() + stringBuilder.clear() textPages.add(TextPage()) durY = 0f } @@ -249,6 +253,7 @@ object ChapterProvider { width = visibleWidth height = size.height * visibleWidth / size.width } + else -> { if (size.width > visibleWidth) { height = size.height * visibleWidth / size.width @@ -259,7 +264,10 @@ object ChapterProvider { height = visibleHeight } if (durY + height > visibleHeight) { - textPages.last().height = durY + val textPage = textPages.last() + textPage.height = durY + textPage.text = stringBuilder.toString() + stringBuilder.clear() textPages.add(TextPage()) durY = 0f } @@ -326,8 +334,10 @@ object ChapterProvider { y - textLayoutHeight } } + isTitle && textPages.size == 1 && textPages.last().lines.isEmpty() -> y + titleTopSpacing + else -> y } for (lineIndex in 0 until layout.lineCount) { @@ -363,6 +373,7 @@ object ChapterProvider { textPaint, desiredWidth, srcList ) } + lineIndex == layout.lineCount - 1 -> { //最后一行 textLine.text = words @@ -381,6 +392,7 @@ object ChapterProvider { startX, !isTitle && lineIndex == 0, srcList ) } + else -> { if ( isTitle && @@ -566,6 +578,7 @@ object ChapterProvider { src = src ) } + isLineEnd && char == reviewChar -> { ReviewColumn( start = absStartX + xStart, @@ -573,6 +586,7 @@ object ChapterProvider { count = 100 ) } + else -> { TextColumn( start = absStartX + xStart, @@ -632,9 +646,11 @@ object ChapterProvider { Typeface.Builder(it.fileDescriptor).build() } } + fontPath.isContentScheme() -> { Typeface.createFromFile(RealPathUtil.getPath(appCtx, Uri.parse(fontPath))) } + fontPath.isNotEmpty() -> Typeface.createFromFile(fontPath) else -> when (AppConfig.systemTypefaces) { 1 -> Typeface.SERIF @@ -660,12 +676,14 @@ object ChapterProvider { else Pair(bold, bold) } + 2 -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) Pair(normal, Typeface.create(typeface, 300, false)) else Pair(normal, normal) } + else -> Pair(bold, normal) } @@ -709,6 +727,7 @@ object ChapterProvider { doublePage = (viewWidth > viewHeight) && ReadBook.pageAnim() != 3 } + "3" -> { doublePage = (viewWidth > viewHeight || appCtx.isPad) && ReadBook.pageAnim() != 3 diff --git a/app/src/main/java/io/legado/app/ui/login/WebViewLoginFragment.kt b/app/src/main/java/io/legado/app/ui/login/WebViewLoginFragment.kt index 429e3219376c..d36b4289a03d 100644 --- a/app/src/main/java/io/legado/app/ui/login/WebViewLoginFragment.kt +++ b/app/src/main/java/io/legado/app/ui/login/WebViewLoginFragment.kt @@ -108,7 +108,8 @@ class WebViewLoginFragment : BaseFragment(R.layout.fragment_web_view_login) { } source.loginUrl?.let { - binding.webView.loadUrl(it, source.getHeaderMap(true)) + val absoluteUrl = NetworkUtils.getAbsoluteURL(source.getKey(), it) + binding.webView.loadUrl(absoluteUrl, source.getHeaderMap(true)) } } @@ -117,4 +118,4 @@ class WebViewLoginFragment : BaseFragment(R.layout.fragment_web_view_login) { binding.webView.destroy() } -} \ No newline at end of file +} diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt index 1fcbbc90c7d0..98cf6dbdd543 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesFragment.kt @@ -107,7 +107,7 @@ class RssArticlesFragment() : VMBaseFragment(R.layout.frag private fun loadArticles() { activityViewModel.rssSource?.let { - viewModel.loadContent(it) + viewModel.loadArticles(it) } } diff --git a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt index 721a1d54ca7d..2c834682a181 100644 --- a/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/article/RssArticlesViewModel.kt @@ -11,8 +11,7 @@ import io.legado.app.data.entities.RssArticle import io.legado.app.data.entities.RssSource import io.legado.app.model.rss.Rss import io.legado.app.utils.stackTraceStr -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext +import kotlinx.coroutines.Dispatchers.IO class RssArticlesViewModel(application: Application) : BaseViewModel(application) { @@ -32,71 +31,64 @@ class RssArticlesViewModel(application: Application) : BaseViewModel(application } } - fun loadContent(rssSource: RssSource) { + fun loadArticles(rssSource: RssSource) { isLoading = true page = 1 order = System.currentTimeMillis() - Rss.getArticles(viewModelScope, sortName, sortUrl, rssSource, page) - .onSuccess(Dispatchers.IO) { - nextPageUrl = it.second - it.first.let { list -> - list.forEach { rssArticle -> - rssArticle.order = order-- - } - appDb.rssArticleDao.insert(*list.toTypedArray()) - if (!rssSource.ruleNextPage.isNullOrEmpty()) { - appDb.rssArticleDao.clearOld(rssSource.sourceUrl, sortName, order) - } - val hasMore = list.isNotEmpty() && !rssSource.ruleNextPage.isNullOrEmpty() - loadFinallyLiveData.postValue(hasMore) - isLoading = false - } - }.onError { - loadFinallyLiveData.postValue(false) - AppLog.put("rss获取内容失败", it) - loadErrorLiveData.postValue(it.stackTraceStr) + Rss.getArticles(viewModelScope, sortName, sortUrl, rssSource, page).onSuccess(IO) { + nextPageUrl = it.second + val articles = it.first + articles.forEach { rssArticle -> + rssArticle.order = order-- } + appDb.rssArticleDao.insert(*articles.toTypedArray()) + if (!rssSource.ruleNextPage.isNullOrEmpty()) { + appDb.rssArticleDao.clearOld(rssSource.sourceUrl, sortName, order) + } + val hasMore = articles.isNotEmpty() && !rssSource.ruleNextPage.isNullOrEmpty() + loadFinallyLiveData.postValue(hasMore) + isLoading = false + }.onError { + loadFinallyLiveData.postValue(false) + AppLog.put("rss获取内容失败", it) + loadErrorLiveData.postValue(it.stackTraceStr) + } } fun loadMore(rssSource: RssSource) { isLoading = true page++ val pageUrl = nextPageUrl - if (!pageUrl.isNullOrEmpty()) { - Rss.getArticles(viewModelScope, sortName, pageUrl, rssSource, page) - .onSuccess(Dispatchers.IO) { - nextPageUrl = it.second - loadMoreSuccess(it.first) - } - .onError { - loadFinallyLiveData.postValue(false) - AppLog.put("rss获取内容失败", it) - loadErrorLiveData.postValue(it.stackTraceStr) - } - } else { + if (pageUrl.isNullOrEmpty()) { + loadFinallyLiveData.postValue(false) + return + } + Rss.getArticles(viewModelScope, sortName, pageUrl, rssSource, page).onSuccess(IO) { + nextPageUrl = it.second + loadMoreSuccess(it.first) + isLoading = false + }.onError { loadFinallyLiveData.postValue(false) + AppLog.put("rss获取内容失败", it) + loadErrorLiveData.postValue(it.stackTraceStr) } } private fun loadMoreSuccess(articles: MutableList) { - articles.let { list -> - if (list.isEmpty()) { - loadFinallyLiveData.postValue(false) - return@let - } - val firstArticle = list.first() - val dbArticle = appDb.rssArticleDao - .get(firstArticle.origin, firstArticle.link) - if (dbArticle != null) { - loadFinallyLiveData.postValue(false) - } else { - list.forEach { rssArticle -> - rssArticle.order = order-- - } - appDb.rssArticleDao.insert(*list.toTypedArray()) + if (articles.isEmpty()) { + loadFinallyLiveData.postValue(false) + return + } + val firstArticle = articles.first() + val dbArticle = appDb.rssArticleDao.get(firstArticle.origin, firstArticle.link) + if (dbArticle != null) { + loadFinallyLiveData.postValue(false) + } else { + articles.forEach { + it.order = order-- } + appDb.rssArticleDao.insert(*articles.toTypedArray()) } - isLoading = false } } \ No newline at end of file diff --git a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt index df9456b78185..5470f92ce028 100644 --- a/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/rss/read/ReadRssViewModel.kt @@ -14,6 +14,7 @@ import io.legado.app.data.appDb import io.legado.app.data.entities.RssArticle import io.legado.app.data.entities.RssSource import io.legado.app.data.entities.RssStar +import io.legado.app.exception.NoStackTraceException import io.legado.app.help.TTS import io.legado.app.help.http.newCallResponseBody import io.legado.app.help.http.okHttpClient @@ -42,38 +43,35 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { fun initData(intent: Intent) { execute { - val origin = intent.getStringExtra("origin") + val origin = intent.getStringExtra("origin") ?: return@execute val link = intent.getStringExtra("link") - origin?.let { - rssSource = appDb.rssSourceDao.getByKey(origin) - if (link != null) { - rssStar = appDb.rssStarDao.get(origin, link) - rssArticle = rssStar?.toRssArticle() ?: appDb.rssArticleDao.get(origin, link) - rssArticle?.let { rssArticle -> - if (!rssArticle.description.isNullOrBlank()) { - contentLiveData.postValue(rssArticle.description!!) + rssSource = appDb.rssSourceDao.getByKey(origin) + if (link != null) { + rssStar = appDb.rssStarDao.get(origin, link) + rssArticle = rssStar?.toRssArticle() ?: appDb.rssArticleDao.get(origin, link) + val rssArticle = rssArticle ?: return@execute + if (!rssArticle.description.isNullOrBlank()) { + contentLiveData.postValue(rssArticle.description!!) + } else { + rssSource?.let { + val ruleContent = it.ruleContent + if (!ruleContent.isNullOrBlank()) { + loadContent(rssArticle, ruleContent) } else { - rssSource?.let { - val ruleContent = it.ruleContent - if (!ruleContent.isNullOrBlank()) { - loadContent(rssArticle, ruleContent) - } else { - loadUrl(rssArticle.link, rssArticle.origin) - } - } ?: loadUrl(rssArticle.link, rssArticle.origin) + loadUrl(rssArticle.link, rssArticle.origin) } - } + } ?: loadUrl(rssArticle.link, rssArticle.origin) + } + } else { + val ruleContent = rssSource?.ruleContent + if (ruleContent.isNullOrBlank()) { + loadUrl(origin, origin) } else { - val ruleContent = rssSource?.ruleContent - if (ruleContent.isNullOrBlank()) { - loadUrl(origin, origin) - } else { - val rssArticle = RssArticle() - rssArticle.origin = origin - rssArticle.link = origin - rssArticle.title = rssSource!!.sourceName - loadContent(rssArticle, ruleContent) - } + val rssArticle = RssArticle() + rssArticle.origin = origin + rssArticle.link = origin + rssArticle.title = rssSource!!.sourceName + loadContent(rssArticle, ruleContent) } } }.onFinally { @@ -91,18 +89,17 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { } private fun loadContent(rssArticle: RssArticle, ruleContent: String) { - rssSource?.let { source -> - Rss.getContent(viewModelScope, rssArticle, ruleContent, source) - .onSuccess(IO) { body -> - rssArticle.description = body - appDb.rssArticleDao.insert(rssArticle) - rssStar?.let { - it.description = body - appDb.rssStarDao.insert(it) - } - contentLiveData.postValue(body) + val source = rssSource ?: return + Rss.getContent(viewModelScope, rssArticle, ruleContent, source) + .onSuccess(IO) { body -> + rssArticle.description = body + appDb.rssArticleDao.insert(rssArticle) + rssStar?.let { + it.description = body + appDb.rssStarDao.insert(it) } - } + contentLiveData.postValue(body) + } } fun refresh(finish: () -> Unit) { @@ -139,18 +136,8 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { webPic ?: return execute { val fileName = "${AppConst.fileNameFormat.format(Date(System.currentTimeMillis()))}.jpg" - webData2bitmap(webPic)?.let { biteArray -> - if (uri.isContentScheme()) { - DocumentFile.fromTreeUri(context, uri)?.let { doc -> - DocumentUtils.createFileIfNotExist(doc, fileName) - ?.writeBytes(context, biteArray) - } - } else { - val dir = File(uri.path ?: uri.toString()) - val file = FileUtils.createFileIfNotExist(dir, fileName) - file.writeBytes(biteArray) - } - } ?: throw Throwable("NULL") + val byteArray = webData2bitmap(webPic) ?: throw NoStackTraceException("NULL") + uri.writeBytes(context, fileName, byteArray) }.onError { context.toastOnUi("保存图片失败:${it.localizedMessage}") }.onSuccess { @@ -178,9 +165,11 @@ class ReadRssViewModel(application: Application) : BaseViewModel(application) { $content """.trimIndent() } + content.contains("