Merge remote-tracking branch 'origin/master'

This commit is contained in:
kunfei committed 2023-05-04 22:36:19 +08:00
commit aabece0a9e
17 files changed
+121 -34

No files matched your search

@@ -1 +1 @@
import{i as Re,g as ke,l as Pe}from"./el-loading-b910ac83.js";import{_ as de,u as ue,A as ve}from"./index-f4927a88.js";import{x as m,P as Z,a8 as re,o as A,d as p,M as ae,a9 as T,u as o,F as le,v as g,aa as Ke,R as Se,g as t,n as Q,t as X,e as G,w as W,a2 as Ne,y as Ae,ab as Le,f as ce,K as ne,ac as He,G as ze,ad as Ee,p as me,i as ye,ae as he,s as we,I as se,k as z,af as Je,a6 as We,c as Te,a7 as Ge}from"./vendor-bf77f5c0.js";const qe="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=",Ze="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAACVBMVEX28ef48+n69esoK7jYAAAB4UlEQVQozw2OsW4bQQxEhwLXkDrysGdEqRRgVShfQQq8wOr2jD0jSpXCLvwXbtKfADlFqgSwC/9ljqweZgYzQFnb/QGepYhA9jzmTc1WaSEtQpbFgjWATI00ZZtIckXx8q2Oe5yEByBy+RHOTcM+VVTadULsvxvRC/q8WTwgcWGD+Mnaqa0oy2gw2pKFzK+PzEsus5hP9AHojKslVynLlioVTBEN8cjDNnZoR1uMGTiZAAN47HxMtEkGUE9b8HWzkqNX5Lpk0yVziAJOs46rK1pG/xNuXLjz95fSDoJE5IqG23MAYPtWoeWPvfVtIV/Ng9oH3W0gGMPIOqd4MK4QZ55dV61gOb8Zxp7I9qayaGxp6Q91cmC0ZRdBwEQVHWzSAanlZwVWc9yljeTCeaHjBVvlPSLeyeBUT2rPdJegQI103jVS3uYkyIx1il6mslMDedZuOkwzolsagvPuQAfp7cYg7k9V1NOxfq64PNSvMdwONV4VYEmqlbpZy5OAakRKkjPnL4CBv5/OZRgoWHBmNbxB0LgB1I4vXFj93UoF2/0TPEsWwV9EhbIiTPqYoTHYoMn3enTDjmrFeDTIzaL1bUC/PBIMuF+vSSYSaxoVt90EO3Gu1zrMuMRGUk7Ffv3L+A931Gsb/yBoIgAAAABJRU5ErkJggg==",Ye="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=",_e="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+nWSSVUGUCHAs8VdLine truncated import{i as Re,g as ke,l as Pe}from"./el-loading-404c2b84.js";import{_ as de,u as ue,A as ve}from"./index-76057bdd.js";import{z as m,Q as Z,a8 as re,o as A,d as p,N as ae,a9 as T,u as o,F as le,y as g,aa as Ke,S as Se,g as t,q as Q,t as X,e as q,w as W,a2 as Ne,A as Ae,ab as Le,f as ce,L as ne,ac as He,v as ze,ad as Ee,p as me,i as ye,ae as he,s as we,J as se,k as z,af as Je,a6 as We,c as Te,a7 as qe}from"./vendor-93648100.js";const Ge="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=",Ze="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyAgMAAABjUWAiAAAACVBMVEX28ef48+n69esoK7jYAAAB4UlEQVQozw2OsW4bQQxEhwLXkDrysGdEqRRgVShfQQq8wOr2jD0jSpXCLvwXbtKfADlFqgSwC/9ljqweZgYzQFnb/QGepYhA9jzmTc1WaSEtQpbFgjWATI00ZZtIckXx8q2Oe5yEByBy+RHOTcM+VVTadULsvxvRC/q8WTwgcWGD+Mnaqa0oy2gw2pKFzK+PzEsus5hP9AHojKslVynLlioVTBEN8cjDNnZoR1uMGTiZAAN47HxMtEkGUE9b8HWzkqNX5Lpk0yVziAJOs46rK1pG/xNuXLjz95fSDoJE5IqG23MAYPtWoeWPvfVtIV/Ng9oH3W0gGMPIOqd4MK4QZ55dV61gOb8Zxp7I9qayaGxp6Q91cmC0ZRdBwEQVHWzSAanlZwVWc9yljeTCeaHjBVvlPSLeyeBUT2rPdJegQI103jVS3uYkyIx1il6mslMDedZuOkwzolsagvPuQAfp7cYg7k9V1NOxfq64PNSvMdwONV4VYEmqlbpZy5OAakRKkjPnL4CBv5/OZRgoWHBmNbxB0LgB1I4vXFj93UoF2/0TPEsWwV9EhbIiTPqYoTHYoMn3enTDjmrFeDTIzaL1bUC/PBIMuF+vSSYSaxoVt90EO3Gu1zrMuMRGUk7Ffv3L+A931Gsb/yBoIgAAAABJRU5ErkJggg==",Ye="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=",_e="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+nWSSVUGUCHAs8VdLine truncated
@@ -0,0 +1 @@
import{a1 as U,z as q,o as g,d as m,g as e,F as V,N as P,t as d,a2 as B,a3 as S,c as $,w as z,f as M,u as o,a4 as G,a5 as D,p as L,i as W,s as X,y as _,Q as j,J,S as ee,k,e as y,A as te,K as se,q as N,a6 as ae,H as oe,B as ne,a7 as ce}from"./vendor-93648100.js";import{d as re,l as ie}from"./el-loading-404c2b84.js";import{_ as H,u as le,A as E}from"./index-76057bdd.js";const Z=n=>(L("data-v-fd33c3e8"),n=n(),W(),n),de={class:"books-wrapper"},ue={class:"wrapper"},he=["onClick"],pe={class:"cover-img"},ve=["src"],_e={class:"info"},ge={class:"name"},me={class:"sub"},fe={class:"author"},we={class:"tags"},Ae={class:"update-info"},Ie=Z(()=>e("div",{class:"dot"},"•",-1)),Be={class:"size"},Se=Z(()=>e("div",{class:"dot"},"•",-1)),ke={class:"date"},ye={class:"last-chapter"},xe={__name:"BookItems",props:["books","isSearch"],emits:["bookClick"],setup(n,{emit:r}){const x=n;U(s=>({"036742a7":o(f)}));const C=s=>r("bookClick",G(s)),R=s=>/^data:/.test(s)?s:location.origin+"/cover?path="+encodeURIComponent(s),f=q(()=>x.isSearch?"space-between":"flex-start");return(s,h)=>{const w=D;return g(),m("div",de,[e("div",ue,[(g(!0),m(V,null,P(n.books,c=>{var l;return g(),m("div",{class:"book",key:c.bookUrl,onClick:i=>C(c)},[e("div",pe,[(g(),m("img",{class:"cover",src:R(c.coverUrl),key:c.coverUrl,alt:"",loading:"lazy"},null,8,ve))]),e("div",_e,[e("div",ge,d(c.name),1),e("div",me,[e("div",fe,d(c.author),1),B(e("div",we,[(g(!0),m(V,null,P((l=c.kind)==null?void 0:l.split(",").slice(0,2),i=>(g(),$(w,{key:i},{default:z(()=>[M(d(i),1)]),_:2},1024))),128))],512),[[S,n.isSearch]]),B(e("div",Ae,[Ie,e("div",Be,"共"+d(c.totalChapterNum)+"章",1),Se,e("div",ke,d(o(re)(c.lastCheckTime)),1)],512),[[S,!n.isSearch]])]),B(e("div",{class:"intro"},d(c.intro),513),[[S,n.isSearch]]),B(e("div",{class:"dur-chapter"}," 已读:"+d(c.durChapterTitle),513),[[S,!n.isSearch]]),e("div",ye,"最新:"+d(c.latestChapterTitle),1)])],8,he)}),128))])])}}},Ce=H(xe,[["__scopeId","data-v-fd33c3e8"]]);const Re="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 T=n=>(L("data-v-7e6be94e"),n=n(),W(),n),Ee={class:"index-wrapper"},ze={class:"navigation-wrapper"},Me=T(()=>e("div",{class:"navigation-title-wrapper"},[e("div",{class:"navigation-title"},"阅读"),e("div",{class:"navigation-sub-title"},"清风不识字,何故乱翻书")],-1)),Te={class:"search-wrapper"},be={class:"bottom-wrapper"},Ve={class:"recent-wrapper"},Pe=T(()=>e("div",{class:"recent-title"},"最近阅读",-1)),Je={class:"reading-recent"},Ne={class:"setting-wrapper"},De=T(()=>e("div",{class:"setting-title"},"基本设定",-1)),Le={class:"setting-item"},We={class:"bottom-icons"},He={href:"https://github.com/gedoor/legado_web_bookshelf",target:"_blank"},Ze={class:"bottom-icon"},Ke=["src"],Oe={__name:"BookShelf",setup(n){const r=le(),{connectStatus:x,connectType:C,newConnect:R,shelf:f}=X(r),s=_({name:"尚无阅读记录",author:"",url:"",chapterIndex:0,chapterPos:0}),h=_(!1),w=_(null),c=_(null);j(h,t=>{var a;if(!t)return(a=c.value)==null?void 0:a.close();c.value=ce.service({target:w.value,spinner:ie,text:"正在获取书籍信息",lock:!0})});const l=_([]);J(()=>{l.value.length>0&&(h.value=!1)});const i=_(""),A=_(!1);J(()=>{if(!(A.value&&i.value!="")){if(A.value=!1,l.value=[],i.value==""){l.value=f.value;return}l.value=f.value.filter(t=>t.name.includes(i.value)||t.author.includes(i.value))}});const K=()=>{i.value!=""&&(l.value=[],r.clearSearchBooks(),h.value=!0,A.value=!0,E.search(i.value,t=>{try{r.setSearchBooks(JSON.parse(t)),r.searchBooks.forEach(a=>l.value.push(a))}catch(a){throw k.error("后端Line truncated
@@ -1 +0,0 @@
import{a1 as Q,x as $,o as g,d as m,g as e,F as V,M as P,t as d,a2 as B,a3 as S,c as q,w as z,f as M,u as o,a4 as G,a5 as L,p as N,i as W,s as X,v as _,P as j,I as D,R as ee,k,e as x,y as te,J as se,n as J,a6 as ae,D as oe,z as ne,a7 as ce}from"./vendor-bf77f5c0.js";import{d as re,l as ie}from"./el-loading-b910ac83.js";import{_ as Z,u as le,A as E}from"./index-f4927a88.js";const H=n=>(N("data-v-fd33c3e8"),n=n(),W(),n),de={class:"books-wrapper"},ue={class:"wrapper"},he=["onClick"],pe={class:"cover-img"},ve=["src"],_e={class:"info"},ge={class:"name"},me={class:"sub"},fe={class:"author"},we={class:"tags"},Ie={class:"update-info"},Ae=H(()=>e("div",{class:"dot"},"•",-1)),Be={class:"size"},Se=H(()=>e("div",{class:"dot"},"•",-1)),ke={class:"date"},xe={class:"last-chapter"},ye={__name:"BookItems",props:["books","isSearch"],emits:["bookClick"],setup(n,{emit:r}){const y=n;Q(s=>({"036742a7":o(f)}));const C=s=>r("bookClick",G(s)),R=s=>/^data:/.test(s)?s:location.origin+"/cover?path="+encodeURIComponent(s),f=$(()=>y.isSearch?"space-between":"flex-start");return(s,h)=>{const w=L;return g(),m("div",de,[e("div",ue,[(g(!0),m(V,null,P(n.books,c=>{var l;return g(),m("div",{class:"book",key:c.bookUrl,onClick:i=>C(c)},[e("div",pe,[(g(),m("img",{class:"cover",src:R(c.coverUrl),key:c.coverUrl,alt:"",loading:"lazy"},null,8,ve))]),e("div",_e,[e("div",ge,d(c.name),1),e("div",me,[e("div",fe,d(c.author),1),B(e("div",we,[(g(!0),m(V,null,P((l=c.kind)==null?void 0:l.split(",").slice(0,2),i=>(g(),q(w,{key:i},{default:z(()=>[M(d(i),1)]),_:2},1024))),128))],512),[[S,n.isSearch]]),B(e("div",Ie,[Ae,e("div",Be,"共"+d(c.totalChapterNum)+"章",1),Se,e("div",ke,d(o(re)(c.lastCheckTime)),1)],512),[[S,!n.isSearch]])]),B(e("div",{class:"intro"},d(c.intro),513),[[S,n.isSearch]]),B(e("div",{class:"dur-chapter"}," 已读:"+d(c.durChapterTitle),513),[[S,!n.isSearch]]),e("div",xe,"最新:"+d(c.latestChapterTitle),1)])],8,he)}),128))])])}}},Ce=Z(ye,[["__scopeId","data-v-fd33c3e8"]]);const Re="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 T=n=>(N("data-v-7e6be94e"),n=n(),W(),n),Ee={class:"index-wrapper"},ze={class:"navigation-wrapper"},Me=T(()=>e("div",{class:"navigation-title-wrapper"},[e("div",{class:"navigation-title"},"阅读"),e("div",{class:"navigation-sub-title"},"清风不识字,何故乱翻书")],-1)),Te={class:"search-wrapper"},be={class:"bottom-wrapper"},Ve={class:"recent-wrapper"},Pe=T(()=>e("div",{class:"recent-title"},"最近阅读",-1)),De={class:"reading-recent"},Je={class:"setting-wrapper"},Le=T(()=>e("div",{class:"setting-title"},"基本设定",-1)),Ne={class:"setting-item"},We={class:"bottom-icons"},Ze={href:"https://github.com/gedoor/legado_web_bookshelf",target:"_blank"},He={class:"bottom-icon"},Oe=["src"],Fe={__name:"BookShelf",setup(n){const r=le(),{connectStatus:y,connectType:C,newConnect:R,shelf:f}=X(r),s=_({name:"尚无阅读记录",author:"",url:"",chapterIndex:0,chapterPos:0}),h=_(!1),w=_(null),c=_(null);j(h,t=>{var a;if(!t)return(a=c.value)==null?void 0:a.close();c.value=ce.service({target:w.value,spinner:ie,text:"正在获取书籍信息",lock:!0})});const l=_([]);D(()=>{l.value.length>0&&(h.value=!1)});const i=_(""),I=_(!1);D(()=>{if(!(I.value&&i.value!="")){if(I.value=!1,l.value=[],i.value==""){l.value=f.value;return}l.value=f.value.filter(t=>t.name.includes(i.value)||t.author.includes(i.value))}});const O=()=>{i.value!=""&&(l.value=[],r.clearSearchBooks(),h.value=!0,I.value=!0,E.search(i.value,t=>{try{r.setSearchBooks(JSON.parse(t)),r.searchBooks.forEach(a=>l.value.push(a))}catch(a){throw k.error("Line truncated
@@ -1 +1 @@
import{u as n,A as r}from"./index-f4927a88.js";import"./vendor-bf77f5c0.js";const i=n();i.setMiniInterface(window.innerWidth<750);window.onresize=()=>{i.setMiniInterface(window.innerWidth<750)};r.getReadConfig().then(a=>{var e=a.data.data;if(e){const t=n();let o=JSON.parse(e),s=t.config;o=Object.assign(s,o),t.setConfig(o)}}); import{u as n,A as r}from"./index-76057bdd.js";import"./vendor-93648100.js";const i=n();i.setMiniInterface(window.innerWidth<750);window.onresize=()=>{i.setMiniInterface(window.innerWidth<750)};r.getReadConfig().then(a=>{var e=a.data.data;if(e){const t=n();let o=JSON.parse(e),s=t.config;o=Object.assign(s,o),t.setConfig(o)}});
@@ -1 +1 @@
import{u}from"./index-f4927a88.js";const f=/\[([^\]]+)]|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 D(t,n,e,a){let s=t<12?"AM":"PM";return a&&(s=s.split("").reduce((l,i)=>l+=`${i}.`,"")),e?s.toLowerCase():s}function L(t,n,e={}){var a;const s=t.getFullYear(),l=t.getMonth(),i=t.getDate(),o=t.getHours(),r=t.getMinutes(),g=t.getSeconds(),m=t.getMilliseconds(),d=t.getDay(),c=(a=e.customMeridiem)!=null?a:D,M={YY:()=>String(s).slice(-2),YYYY:()=>s,M:()=>l+1,MM:()=>`${l+1}`.padStart(2,"0"),MMM:()=>t.toLocaleDateString(e.locales,{month:"short"}),MMMM:()=>t.toLocaleDateString(e.locales,{month:"long"}),D:()=>String(i),DD:()=>`${i}`.padStart(2,"0"),H:()=>String(o),HH:()=>`${o}`.padStart(2,"0"),h:()=>`${o%12||12}`.padStart(1,"0"),hh:()=>`${o%12||12}`.padStart(2,"0"),m:()=>String(r),mm:()=>`${r}`.padStart(2,"0"),s:()=>String(g),ss:()=>`${g}`.padStart(2,"0"),SSS:()=>`${m}`.padStart(3,"0"),d:()=>d,dd:()=>t.toLocaleDateString(e.locales,{weekday:"narrow"}),ddd:()=>t.toLocaleDateString(e.locales,{weekday:"short"}),dddd:()=>t.toLocaleDateString(e.locales,{weekday:"long"}),A:()=>c(o,r),AA:()=>c(o,r,!1,!0),a:()=>c(o,r,!0),aa:()=>c(o,r,!0,!0)};return n.replace(f,(S,h)=>h||M[S]())}const w=t=>/,\s*\{/.test(t)||!(t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"));function Y(t){return location.origin+"/image?path="+encodeURIComponent(t)+"&url="+encodeURIComponent(sessionStorage.getItem("bookUrl"))+"&width="+u().config.readWidth}const $=t=>{let n=new Date().getTime(),e=Math.floor((n-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=L(new Date(t),"YYYY-MM-DD"),a},v='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32zM195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0zm-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"/></svg>';export{$ as d,Y as g,w as i,v as l}; import{u}from"./index-76057bdd.js";const f=/\[([^\]]+)]|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 D(t,n,e,a){let s=t<12?"AM":"PM";return a&&(s=s.split("").reduce((l,i)=>l+=`${i}.`,"")),e?s.toLowerCase():s}function L(t,n,e={}){var a;const s=t.getFullYear(),l=t.getMonth(),i=t.getDate(),o=t.getHours(),r=t.getMinutes(),g=t.getSeconds(),m=t.getMilliseconds(),d=t.getDay(),c=(a=e.customMeridiem)!=null?a:D,M={YY:()=>String(s).slice(-2),YYYY:()=>s,M:()=>l+1,MM:()=>`${l+1}`.padStart(2,"0"),MMM:()=>t.toLocaleDateString(e.locales,{month:"short"}),MMMM:()=>t.toLocaleDateString(e.locales,{month:"long"}),D:()=>String(i),DD:()=>`${i}`.padStart(2,"0"),H:()=>String(o),HH:()=>`${o}`.padStart(2,"0"),h:()=>`${o%12||12}`.padStart(1,"0"),hh:()=>`${o%12||12}`.padStart(2,"0"),m:()=>String(r),mm:()=>`${r}`.padStart(2,"0"),s:()=>String(g),ss:()=>`${g}`.padStart(2,"0"),SSS:()=>`${m}`.padStart(3,"0"),d:()=>d,dd:()=>t.toLocaleDateString(e.locales,{weekday:"narrow"}),ddd:()=>t.toLocaleDateString(e.locales,{weekday:"short"}),dddd:()=>t.toLocaleDateString(e.locales,{weekday:"long"}),A:()=>c(o,r),AA:()=>c(o,r,!1,!0),a:()=>c(o,r,!0),aa:()=>c(o,r,!0,!0)};return n.replace(f,(S,h)=>h||M[S]())}const w=t=>/,\s*\{/.test(t)||!(t.startsWith("http")||t.startsWith("data:")||t.startsWith("blob:"));function Y(t){return location.origin+"/image?path="+encodeURIComponent(t)+"&url="+encodeURIComponent(sessionStorage.getItem("bookUrl"))+"&width="+u().config.readWidth}const $=t=>{let n=new Date().getTime(),e=Math.floor((n-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=L(new Date(t),"YYYY-MM-DD"),a},v='<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"><path fill="currentColor" d="M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32zm0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32zm448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32zm-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32zM195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0zm-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"/></svg>';export{$ as d,Y as g,w as i,v as l};
@@ -1 +0,0 @@
.el-link[data-v-aee57c78]{padding:4px}.el-text[data-v-aee57c78]{padding-top:20px}.error[data-v-d4c4e88b]{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)}.tool[data-v-76d18c9a]{display:flex;margin:4px 0;justify-content:center}#source-list[data-v-76d18c9a]{margin-top:6px;height:calc(100vh - 119px)}#source-list[data-v-76d18c9a] .el-checkbox{margin-bottom:4px;width:100%}[data-v-fe904689] #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-dc7cd0f9]{display:flex;justify-content:space-between;align-items:baseline}.flex-column-center[data-v-dc7cd0f9]{display:flex;flex-direction:column;justify-content:center}.menu>.el-button[data-v-dc7cd0f9]{margin:4px;padding:1em;width:6em}.hotkeys-item .title[data-v-dc7cd0f9]{width:5em;display:flex;justify-content:flex-end;margin-right:1em}.hotkeys-item__content[data-v-dc7cd0f9]{display:flex;flex-wrap:wrap;flex:1}.hotkeys-item__content div[data-v-dc7cd0f9]{margin-bottom:1em}.hotkeys-item__content span[data-v-dc7cd0f9]{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-e99e7704]{display:flex;height:100vh;overflow:hidden}.editor .left[data-v-e99e7704]{flex:1;margin-left:20px}.editor .right[data-v-e99e7704]{flex:1;width:360px;margin-right:20px}
@@ -0,0 +1 @@
.el-link[data-v-aee57c78]{padding:4px}.el-text[data-v-aee57c78]{padding-top:20px}[data-v-dfd5b00c] .el-checkbox__label{flex:1;display:flex;justify-content:space-between;align-items:center}.error[data-v-dfd5b00c]{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-dfd5b00c]{border-color:var(--el-color-dark)!important}.tool[data-v-f7855a32]{display:flex;margin:4px 0;justify-content:center}#source-list[data-v-f7855a32]{margin-top:6px;height:calc(100vh - 119px)}#source-list[data-v-f7855a32] .el-checkbox{margin-bottom:4px;width:100%}[data-v-fe904689] #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-dc7cd0f9]{display:flex;justify-content:space-between;align-items:baseline}.flex-column-center[data-v-dc7cd0f9]{display:flex;flex-direction:column;justify-content:center}.menu>.el-button[data-v-dc7cd0f9]{margin:4px;padding:1em;width:6em}.hotkeys-item .title[data-v-dc7cd0f9]{width:5em;display:flex;justify-content:flex-end;margin-right:1em}.hotkeys-item__content[data-v-dc7cd0f9]{display:flex;flex-wrap:wrap;flex:1}.hotkeys-item__content div[data-v-dc7cd0f9]{margin-bottom:1em}.hotkeys-item__content span[data-v-dc7cd0f9]{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-e99e7704]{display:flex;height:100vh;overflow:hidden}.editor .left[data-v-e99e7704]{flex:1;margin-left:20px}.editor .right[data-v-e99e7704]{flex:1;width:360px;margin-right:20px}
@@ -0,0 +1,13 @@
import{r as xe,o as l,c as k,a as ne,b as re,d as U,e as p,w as u,f as y,u as i,l as q,g as _,F as O,E as Ue,h as ue,p as Be,i as Ee,j as Ie,k as w,m as de,s as X,t as G,n as pe,q as he,v as se,x as Ve,y as P,z as Q,A as j,B as _e,C as Ne,D as Te,G as ie,V as $e,H as Y,I as Le,J as ge,K as Re,L as T,M as Oe,N as A,O as me,P as Se,Q as Pe,R as z,S as De,T as Je,U as Ae,W as Ke,X as je,Y as He,Z as Fe,_ as qe,$ as ze,a0 as Me}from"./vendor-93648100.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 We="modulepreload",Ge=function(e,t){return new URL(e,t).href},le={},oe=function(t,o,s){if(!o||o.length===0)return t();const n=document.getElementsByTagName("link");return Promise.all(o.map(r=>{if(r=Ge(r,s),r in le)return;le[r]=!0;const a=r.endsWith(".css"),b=a?'[rel="stylesheet"]':"";if(!!s)for(let v=n.length-1;v>=0;v--){const x=n[v];if(x.href===r&&(!a||x.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${b}`))return;const g=document.createElement("link");if(g.rel=a?"stylesheet":We,a||(g.as="script",g.crossOrigin=""),g.href=r,document.head.appendChild(g),a)return new Promise((v,x)=>{g.addEventListener("load",v),g.addEventListener("error",()=>x(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},D=(e,t)=>{const o=e.__vccOpts||e;for(const[s,n]of t)o[s]=n;return o},Qe={};function Xe(e,t){const o=xe("router-view");return l(),k(o)}const Ye=D(Qe,[["render",Xe]]),ye=[{path:"/",name:"shelf",component:()=>oe(()=>import("./BookShelf-751754db.js"),["./BookShelf-751754db.js","./vendor-93648100.js","./vendor-6f0d1692.css","./el-loading-404c2b84.js","./el-loading-d0f2d079.css","./BookShelf-f637327a.css"],import.meta.url)},{path:"/chapter",name:"chapter",component:()=>oe(()=>import("./BookChapter-0270f952.js"),["./BookChapter-0270f952.js","./el-loading-404c2b84.js","./el-loading-d0f2d079.css","./vendor-93648100.js","./vendor-6f0d1692.css","./BookChapter-468f2c8e.css"],import.meta.url)}];ne({history:re(),routes:ye});const $=e=>(Be("data-v-aee57c78"),e=e(),Ee(),e),Ze=$(()=>_("br",null,null,-1)),et=$(()=>_("br",null,null,-1)),tt=$(()=>_("br",null,null,-1)),ot=$(()=>_("br",null,null,-1)),nt=$(()=>_("br",null,null,-1)),rt={style:{"margin-top":"20px"}},st=$(()=>_("code",null,"^$()[]{}.?+*|",-1)),it=$(()=>_("br",null,null,-1)),lt=$(()=>_("code",null,"(?s)",-1)),ct=$(()=>_("br",null,null,-1)),at=$(()=>_("code",null,"(?m)",-1)),ut=$(()=>_("br",null,null,-1)),dt=$(()=>_("code",null,"(?i)",-1)),pt=$(()=>_("br",null,null,-1)),ht={__name:"SourceHelp",setup(e){return(t,o)=>{const s=Ue,n=ue;return l(),U(O,null,[p(s,{icon:i(q),href:"https://alanskycn.gitee.io/teachme/",target:"_blank"},{default:u(()=>[y("书源制作教程")]),_:1},8,["icon"]),Ze,p(s,{icon:i(q),href:"https://zhuanlan.zhihu.com/p/29436838",target:"_blank"},{default:u(()=>[y("xpath基础教程")]),_:1},8,["icon"]),et,p(s,{icon:i(q),href:"https://zhuanlan.zhihu.com/p/32187820",target:"_blank"},{default:u(()=>[y("xpath高级教程")]),_:1},8,["icon"]),tt,p(s,{icon:i(q),href:"https://www.w3cschool.cn/regex_rmjc",target:"_blank"},{default:u(()=>[y("正则表达式教程")]),_:1},8,["icon"]),ot,p(s,{icon:i(q),href:"https://regexr-cn.com/",target:"_blank"},{default:u(()=>[y("正则表达式在线验证工具")]),_:1},8,["icon"]),nt,_("div",rt,[_("span",null,[p(n,null,{default:u(()=>[st,y(" 这些是Java正则特殊符号,匹配需转义")]),_:1})]),it,_("span",null,[p(n,null,{default:u(()=>[lt,y(" 前缀表示跨行解析")]),_:1})]),ct,_("span",null,[p(n,null,{default:u(()=>[at,y(" 前缀表示逐行匹配")]),_:1})]),ut,_("span",null,[p(n,null,{default:u(()=>[dt,y(" 前缀表示忽略大小写")]),_:1})]),pt])],64)}}},_t=D(ht,[["__scopeId","data-v-aee57c78"]]),gt=1e3,B=Ie.create({baseURL:location.origin,timeout:120*gt}),{hostname:fe,port:be}=new URL(location.href),mt=/source/i.test(location.href),St=e=>{throw mt&&w({message:"后端错误,检查网络或者阅读app",type:"error"}),e};B.interceptors.response.use(e=>e,St);const yt=()=>B.get("/getReadConfig"),ft=e=>B.post("/saveReadConfig",e),bt=e=>B.post("/saveBookProgress",e),kt=()=>B.get("/getBookshelf"),vt=e=>B.get("/getChapterList?url="+encodeURIComponent(e)),Ct=(e,t)=>B.get("/getBookContent?url="+encodeURIComponent(e)+"&index="+t),wt=(e,t,o)=>{const s=`ws://${fe}:${Number(be)+1}/searchBook`,n=new WebSocket(s);n.onopen=()=>{n.send(`{ Line truncated
`},r=async()=>{o.value="",await K.saveSource(t.currentSource),K.debug(t.currentSourceUrl,s.value||t.searchKey,n,t.debugFinish)},a=Q(()=>/bookSource/.test(window.location.href));return(b,S)=>{const g=Y;return l(),U(O,null,[i(a)?(l(),k(g,{key:0,id:"debug-key",modelValue:i(s),"onUpdate:modelValue":S[0]||(S[0]=v=>j(s)?s.value=v:null),placeholder:"搜索书名、作者","prefix-icon":i(_e),style:{"padding-bottom":"4px"},onKeydown:Re(r,["enter"])},null,8,["modelValue","prefix-icon","onKeydown"])):T("",!0),p(g,{id:"debug-text",modelValue:i(o),"onUpdate:modelValue":S[1]||(S[1]=v=>j(o)?o.value=v:null),type:"textarea",readonly:"",rows:"29",placeholder:"这里用于输出调试信息"},null,8,["modelValue"])],64)}}},jt=D(Kt,[["__scopeId","data-v-fe904689"]]),ho=de("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:""},miniInterface:!1,readSettingsVisible:!1}),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){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 saveBookProcess(){var r;if(this.catalog.length==0)return;const{index:e,chapterPos:t,bookName:o,bookAuthor:s}=this.readingBook;let n=(r=this.catalog[e])==null?void 0:r.title;n&&K.saveBookProcess({name:o,author:s,durChapterIndex:e,durChapterPos:t,durChapterTime:new Date().getTime(),durChapterTitle:n})}}}),Ht=Oe();const Ft={__name:"SourceJson",setup(e){const t=H(),o=P(""),s=async n=>{try{t.changeEditTabSource(JSON.parse(n))}catch{w({message:"粘贴的源格式错误",type:"error"})}};return ge(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(),k(a,{id:"source-json",modelValue:i(o),"onUpdate:modelValue":r[0]||(r[0]=b=>j(o)?o.value=b:null),type:"textarea",placeholder:"这里输出序列化的JSON数据,可直接导入'阅读'APP",rows:"30",onChange:s,style:{"margin-bottom":"4px"}},null,8,["modelValue"])}}},qt=D(Ft,[["__scopeId","data-v-7e91a802"]]);const zt={__name:"SourceTabTools",setup(e){const t=H(),{currentTab:o}=X(t),s=P([["editTab","编辑源"],["editDebug","调试源"],["editList","源列表"],["editHelp","帮助信息"]]);return(n,r)=>{const a=qt,b=jt,S=At,g=_t,v=me,x=Se;return l(),k(x,{modelValue:i(o),"onUpdate:modelValue":r[0]||(r[0]=c=>j(o)?o.value=c:null)},{default:u(()=>[(l(!0),U(O,null,A(i(s),(c,m)=>(l(),k(v,{key:c[0],name:c[0],label:c[1]},{default:u(()=>[m==0?(l(),k(a,{key:0})):T("",!0),m==1?(l(),k(b,{key:1})):T("",!0),m==2?(l(),k(S,{key:2})):T("",!0),m==3?(l(),k(g,{key:3})):T("",!0)]),_:2},1032,["name","label"]))),128))]),_:1},8,["modelValue"])}}},Mt=D(zt,[["__scopeId","data-v-dcce2457"]]);const Wt={class:"menu flex-column-center"},Gt={class:"hotkeys-header flex-space-between"},Qt=["id"],Xt={key:0},Yt={class:"hotkeys-settings flex-column-center"},Zt={class:"title"},eo={class:"hotkeys-item__content"},to={key:0},oo={key:0},no={__name:"ToolBar",setup(e){const t=H(),o=()=>{const h=w({message:"加载中……",showClose:!0,duration:0});K.getSources().then(({data:d})=>{d.isSuccess?(t.changeTabName("editList"),t.saveSources(d.data),w({message:`成功拉取${d.data.length}条源`,type:"success"})):w({message:d.errorMsg??"后端错误",type:"error"})}).finally(()=>h.close())},s=()=>{let h=t.sources;if(t.changeTabName("editList"),h.length===0)return w({message:"空空如也",type:"info"});w({message:"正在推送中",type:"info"}),K.saveSources(h).then(({data:d})=>{if(d.isSuccess){let C=d.data;if(Array.isArray(C)){let f="";h.length>C.length&&(f=`
推送失败的源将用红色字体标注!`,t.setPushReturnSources(C)),w({message:`批量推送源到「阅读3.0APP」
共计: ${h.length} 条
成功: ${C.length} 条
失败: ${h.length-C.length} 条${f}`,type:"success"})}}else w({message:`批量推送源失败!
ErrorMsg: ${d.errorMsg}`,type:"error"})})},n=()=>{t.changeTabName("editTab"),t.changeEditTabSource(t.currentSource)},r=()=>{t.changeCurrentSource(t.editTabSource)},a=()=>{t.editHistoryUndo()},b=()=>{t.clearEdit(),w({message:"已清除",type:"success"})},S=()=>{t.clearEdit(),t.clearAllHistory(),w({message:"已清除所有历史记录",type:"success"})},g=()=>{let h=/bookSource/.test(location.href),d=t.currentSource;Tt(d)?K.saveSource(d).then(({data:C})=>{C.isSuccess?(w({message:`源《${h?d.bookSourceName:d.sourceName}》已成功保存到「阅读3.0APP」`,type:"success"}),t.saveCurrentSource()):w({message:`源《${h?d.bookSourceName:d.sourceName}》保存失败!
ErrorMsg: ${C.errorMsg}`,type:"error"})}):w({message:"请检查<必填>项是否全部填写",type:"error"})},v=()=>{t.startDebug()},x=P(Array.of({name:"⇈推送源",hotKeys:[],action:s},{name:"⇊拉取源",hotKeys:[],action:o},{name:"⋙生成源",hotKeys:[],action:n},{name:"⋘编辑源",hotKeys:[],action:r},{name:"✗清空表单",hotKeys:[],action:b},{name:"↶撤销操作",hotKeys:[],action:a},{name:"↷重做操作",hotKeys:[],action:S},{name:"⇏调试源",hotKeys:[],action:v},{name:"✓保存源",hotKeys:[],action:g})),c=P(!0),m=P(!1),I=P(-1),E=()=>{m.value=!1};Pe(c,h=>{if(!h)return z.unbind("*");z.unbind(),z("*",d=>{d.preventDefault(),m.value&&I.value>-1&&(x.value[I.value].hotKeys=z.getPressedKeyString())})});const V=h=>{m.value=!0,w({message:"按ESC键或者点击空白处结束录入",type:"info"}),x.value[h].hotKeys=[],I.value=h},L=()=>{c.value=!1;const h=[];x.value.forEach(({hotKeys:d,action:C})=>{z(d.join("+"),f=>{f.preventDefault(),C.call(null)}),h.push(d)}),F(h)},F=h=>{localStorage.setItem("legado_web_hotkeys",JSON.stringify(h))},R=()=>{try{const h=JSON.parse(localStorage.getItem("legado_web_hotkeys"));if(!Array.isArray(h)||h.length==0)return;x.value.forEach((d,C)=>d.hotKeys=h[C]),c.value=!1,L()}catch{w({message:"快捷键配置错误",type:"error"}),localStorage.removeItem("legado_web_hotkeys")}};return De(()=>{R()}),(h,d)=>{const C=se,f=ue,Z=Ae;return l(),U(O,null,[_("div",Wt,[(l(!0),U(O,null,A(i(x),N=>(l(),k(C,{size:"large",key:N.name,onClick:N.action},{default:u(()=>[y(G(N.name),1)]),_:2},1032,["onClick"]))),128)),p(C,{size:"large",onClick:d[0]||(d[0]=()=>c.value=!0)},{default:u(()=>[y("快捷键")]),_:1})]),p(Z,{modelValue:i(c),"onUpdate:modelValue":d[1]||(d[1]=N=>j(c)?c.value=N:null),"show-close":!1,"before-close":E},{header:u(({titleClass:N,titleId:ee})=>[_("div",Gt,[_("div",{id:ee,class:he(N)},[y(" 快捷键设置 "),i(m)?(l(),U("span",Xt,[p(f,null,{default:u(()=>[y(" / 录入中 ")]),_:1})])):T("",!0)],10,Qt),p(C,{disabled:i(m),onClick:L,icon:i(Je)},{default:u(()=>[y("保存")]),_:1},8,["disabled","icon"])])]),default:u(()=>[_("div",Yt,[(l(!0),U(O,null,A(i(x),(N,ee)=>(l(),U("div",{key:N.name,class:"hotkeys-item flex-space-between"},[_("span",Zt,[p(f,null,{default:u(()=>[y(G(N.name),1)]),_:2},1024)]),_("div",eo,[(l(!0),U(O,null,A(N.hotKeys,(te,we)=>(l(),U("div",{key:te},[_("kbd",null,G(te),1),we+1<N.hotKeys.length?(l(),U("span",to,[p(f,null,{default:u(()=>[y("+")]),_:1})])):T("",!0)]))),128)),N.hotKeys.length==0?(l(),U("span",oo,"未设置")):T("",!0)]),p(C,{disabled:i(m),text:"",icon:i(pe),onClick:te=>V(ee)},{default:u(()=>[y("编辑")]),_:2},1032,["disabled","icon","onClick"])]))),128))])]),_:1},8,["modelValue"])],64)}}},ro=D(no,[["__scopeId","data-v-dc7cd0f9"]]);const so={__name:"SourceTabForm",props:["config"],setup(e){const t=H(),{currentSource:o}=X(t);return(s,n)=>{const r=Y,a=Ke,b=je,S=He,g=Fe,v=qe,x=ze,c=me,m=Se;return l(),k(m,{id:"source-edit"},{default:u(()=>[(l(!0),U(O,null,A(Object.values(e.config),({name:I,children:E})=>(l(),k(c,{label:I,key:I},{default:u(()=>[p(x,{"label-position":"right","label-width":"5em"},{default:u(()=>[(l(!0),U(O,null,A(E,({type:V,title:L,namespace:F,id:R,array:h,hint:d,required:C})=>(l(),k(v,{label:L,key:L,required:C},{default:u(()=>[V=="String"&&typeof F>"u"?(l(),k(r,{key:0,type:"textarea",modelValue:i(o)[R],"onUpdate:modelValue":f=>i(o)[R]=f,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):T("",!0),V=="String"&&typeof F<"u"?(l(),k(r,{key:1,type:"textarea",modelValue:i(o)[F][R],"onUpdate:modelValue":f=>i(o)[F][R]=f,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):T("",!0),V=="Boolean"?(l(),k(a,{key:2,modelValue:i(o)[R],"onUpdate:modelValue":f=>i(o)[R]=f},null,8,["modelValue","onUpdate:modelValue"])):T("",!0),V=="Number"?(l(),k(b,{key:3,modelValue:i(o)[R],"onUpdate:modelValue":f=>i(o)[R]=f,min:0},null,8,["modelValue","onUpdate:modelValue"])):T("",!0),V=="Array"?(l(),k(g,{key:4,modelValue:i(o)[R],"onUpdate:modelValue":f=>i(o)[R]=f},{default:u(()=>[(l(!0),U(O,null,A(h,(f,Z)=>(l(),k(S,{value:Z,key:f,label:f},null,8,["value","label"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])):T("",!0)]),_:2},1032,["label","required"]))),128))]),_:2},1024)]),_:2},1032,["label"]))),128))]),_:1})}}},io=D(so,[["__scopeId","data-v-2cfb5302"]]),lo={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:"登录地址",i Line truncated
每行一条发现分类(网址域名可省略),例:
名称1::网址(Url)1
名称2::网址(Url)2
...`},{title:"发现筛选",id:"exploreScreen",type:"String",hint:"发现筛选规则"},{title:"列表规则",namespace:"ruleExplore",id:"bookList",type:"String",hint:"选择书籍节点 (规则结果为List<Element>)"},{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<Element>)"},{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>或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:"payAc Line truncated
名称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<Element>"},{title:"翻页规则",id:"ruleNextPage",type:"String",hint:"下一页链接 规则结果为List<String>或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 ao={class:"editor"},uo={__name:"SourceEditor",setup(e){const t=P({});return/bookSource/i.test(location.href)?(t.value=lo,document.title="书源管理"):(t.value=co,document.title="订阅源管理"),(o,s)=>{const n=io,r=ro,a=Mt;return l(),U("div",ao,[p(n,{class:"left",config:i(t)},null,8,["config"]),p(r),p(a,{class:"right"})])}}},ae=D(uo,[["__scopeId","data-v-e99e7704"]]),ve=[{path:"/bookSource",name:"book-home",component:ae},{path:"/rssSource",name:"rss-home",component:ae}];ne({history:re(),routes:ve});const Ce=ne({history:re(),routes:ye.concat(ve)});Ce.afterEach(e=>{e.name=="shelf"&&(document.title="书架")});Me(Ye).use(Ht).use(Ce).mount("#app");oe(()=>import("./config-0e6be994.js"),["./config-0e6be994.js","./vendor-93648100.js","./vendor-6f0d1692.css","./config-811f2a0b.css"],import.meta.url);export{K as A,D as _,ho as u};
@@ -1,13 +0,0 @@
import{r as we,o as l,c as b,a as ne,b as re,d as U,e as p,w as a,f as m,u as i,l as q,g,F as L,E as xe,h as ae,p as Be,i as Ue,j as Ee,k as C,m as ue,s as Q,t as G,n as de,q as Ve,v as R,x as te,y as K,z as pe,A as Ie,B as Ne,C as se,V as Te,D as X,G as he,H as $e,I as _e,J as Le,K as N,L as Re,M as J,N as ge,O as me,P as Oe,Q as z,R as Pe,S as De,T as Je,U as Ae,W as Ke,X as je,Y as He,Z as Fe,_ as qe,$ as ze,a0 as Me}from"./vendor-bf77f5c0.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 u of r.addedNodes)u.tagName==="LINK"&&u.rel==="modulepreload"&&s(u)}).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 We="modulepreload",Ge=function(e,t){return new URL(e,t).href},ie={},oe=function(t,o,s){if(!o||o.length===0)return t();const n=document.getElementsByTagName("link");return Promise.all(o.map(r=>{if(r=Ge(r,s),r in ie)return;ie[r]=!0;const u=r.endsWith(".css"),w=u?'[rel="stylesheet"]':"";if(!!s)for(let x=n.length-1;x>=0;x--){const c=n[x];if(c.href===r&&(!u||c.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${r}"]${w}`))return;const y=document.createElement("link");if(y.rel=u?"stylesheet":We,u||(y.as="script",y.crossOrigin=""),y.href=r,document.head.appendChild(y),u)return new Promise((x,c)=>{y.addEventListener("load",x),y.addEventListener("error",()=>c(new Error(`Unable to preload CSS for ${r}`)))})})).then(()=>t())},O=(e,t)=>{const o=e.__vccOpts||e;for(const[s,n]of t)o[s]=n;return o},Qe={};function Xe(e,t){const o=we("router-view");return l(),b(o)}const Ye=O(Qe,[["render",Xe]]),Se=[{path:"/",name:"shelf",component:()=>oe(()=>import("./BookShelf-c2410b56.js"),["./BookShelf-c2410b56.js","./vendor-bf77f5c0.js","./vendor-6f0d1692.css","./el-loading-b910ac83.js","./el-loading-d0f2d079.css","./BookShelf-f637327a.css"],import.meta.url)},{path:"/chapter",name:"chapter",component:()=>oe(()=>import("./BookChapter-6faa194e.js"),["./BookChapter-6faa194e.js","./el-loading-b910ac83.js","./el-loading-d0f2d079.css","./vendor-bf77f5c0.js","./vendor-6f0d1692.css","./BookChapter-468f2c8e.css"],import.meta.url)}];ne({history:re(),routes:Se});const T=e=>(Be("data-v-aee57c78"),e=e(),Ue(),e),Ze=T(()=>g("br",null,null,-1)),et=T(()=>g("br",null,null,-1)),tt=T(()=>g("br",null,null,-1)),ot=T(()=>g("br",null,null,-1)),nt=T(()=>g("br",null,null,-1)),rt={style:{"margin-top":"20px"}},st=T(()=>g("code",null,"^$()[]{}.?+*|",-1)),it=T(()=>g("br",null,null,-1)),lt=T(()=>g("code",null,"(?s)",-1)),ct=T(()=>g("br",null,null,-1)),at=T(()=>g("code",null,"(?m)",-1)),ut=T(()=>g("br",null,null,-1)),dt=T(()=>g("code",null,"(?i)",-1)),pt=T(()=>g("br",null,null,-1)),ht={__name:"SourceHelp",setup(e){return(t,o)=>{const s=xe,n=ae;return l(),U(L,null,[p(s,{icon:i(q),href:"https://alanskycn.gitee.io/teachme/",target:"_blank"},{default:a(()=>[m("书源制作教程")]),_:1},8,["icon"]),Ze,p(s,{icon:i(q),href:"https://zhuanlan.zhihu.com/p/29436838",target:"_blank"},{default:a(()=>[m("xpath基础教程")]),_:1},8,["icon"]),et,p(s,{icon:i(q),href:"https://zhuanlan.zhihu.com/p/32187820",target:"_blank"},{default:a(()=>[m("xpath高级教程")]),_:1},8,["icon"]),tt,p(s,{icon:i(q),href:"https://www.w3cschool.cn/regex_rmjc",target:"_blank"},{default:a(()=>[m("正则表达式教程")]),_:1},8,["icon"]),ot,p(s,{icon:i(q),href:"https://regexr-cn.com/",target:"_blank"},{default:a(()=>[m("正则表达式在线验证工具")]),_:1},8,["icon"]),nt,g("div",rt,[g("span",null,[p(n,null,{default:a(()=>[st,m(" 这些是Java正则特殊符号,匹配需转义")]),_:1})]),it,g("span",null,[p(n,null,{default:a(()=>[lt,m(" 前缀表示跨行解析")]),_:1})]),ct,g("span",null,[p(n,null,{default:a(()=>[at,m(" 前缀表示逐行匹配")]),_:1})]),ut,g("span",null,[p(n,null,{default:a(()=>[dt,m(" 前缀表示忽略大小写")]),_:1})]),pt])],64)}}},_t=O(ht,[["__scopeId","data-v-aee57c78"]]),gt=1e3,E=Ee.create({baseURL:location.origin,timeout:120*gt}),{hostname:ye,port:fe}=new URL(location.href),mt=/source/i.test(location.href),St=e=>{throw mt&&C({message:"后端错误,检查网络或者阅读app",type:"error"}),e};E.interceptors.response.use(e=>e,St);const yt=()=>E.get("/getReadConfig"),ft=e=>E.post("/saveReadConfig",e),bt=e=>E.post("/saveBookProgress",e),kt=()=>E.get("/getBookshelf"),vt=e=>E.get("/getChapterList?url="+encodeURIComponent(e)),Ct=(e,t)=>E.get("/getBookContent?url="+encodeURIComponent(e)+"&index="+t),wt=(e,t,o)=>{const s=`ws://${ye}:${Number(fe)+1}/searchBook`,n=new WebSocket(s);n.onopen=()=>{n.send(`{"key Line truncated
`},r=async()=>{o.value="",await A.saveSource(t.currentSource),A.debug(t.currentSourceUrl,s.value||t.searchKey,n,t.debugFinish)},u=te(()=>/bookSource/.test(window.location.href));return(w,S)=>{const y=X;return l(),U(L,null,[i(u)?(l(),b(y,{key:0,id:"debug-key",modelValue:i(s),"onUpdate:modelValue":S[0]||(S[0]=x=>K(s)?s.value=x:null),placeholder:"搜索书名、作者","prefix-icon":i(pe),style:{"padding-bottom":"4px"},onKeydown:Le(r,["enter"])},null,8,["modelValue","prefix-icon","onKeydown"])):N("",!0),p(y,{id:"debug-text",modelValue:i(o),"onUpdate:modelValue":S[1]||(S[1]=x=>K(o)?o.value=x:null),type:"textarea",readonly:"",rows:"29",placeholder:"这里用于输出调试信息"},null,8,["modelValue"])],64)}}},jt=O(Kt,[["__scopeId","data-v-fe904689"]]),ho=ue("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:""},miniInterface:!1,readSettingsVisible:!1}),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){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 saveBookProcess(){var r;if(this.catalog.length==0)return;const{index:e,chapterPos:t,bookName:o,bookAuthor:s}=this.readingBook;let n=(r=this.catalog[e])==null?void 0:r.title;n&&A.saveBookProcess({name:o,author:s,durChapterIndex:e,durChapterPos:t,durChapterTime:new Date().getTime(),durChapterTitle:n})}}}),Ht=Re();const Ft={__name:"SourceJson",setup(e){const t=j(),o=R(""),s=async n=>{try{t.changeEditTabSource(JSON.parse(n))}catch{C({message:"粘贴的源格式错误",type:"error"})}};return _e(async()=>{let n=t.editTabSource;Object.keys(n).length>0?o.value=JSON.stringify(n,null,4):o.value=""}),(n,r)=>{const u=X;return l(),b(u,{id:"source-json",modelValue:i(o),"onUpdate:modelValue":r[0]||(r[0]=w=>K(o)?o.value=w:null),type:"textarea",placeholder:"这里输出序列化的JSON数据,可直接导入'阅读'APP",rows:"30",onChange:s,style:{"margin-bottom":"4px"}},null,8,["modelValue"])}}},qt=O(Ft,[["__scopeId","data-v-7e91a802"]]);const zt={__name:"SourceTabTools",setup(e){const t=j(),{currentTab:o}=Q(t),s=R([["editTab","编辑源"],["editDebug","调试源"],["editList","源列表"],["editHelp","帮助信息"]]);return(n,r)=>{const u=qt,w=jt,S=At,y=_t,x=ge,c=me;return l(),b(c,{modelValue:i(o),"onUpdate:modelValue":r[0]||(r[0]=_=>K(o)?o.value=_:null)},{default:a(()=>[(l(!0),U(L,null,J(i(s),(_,k)=>(l(),b(x,{key:_[0],name:_[0],label:_[1]},{default:a(()=>[k==0?(l(),b(u,{key:0})):N("",!0),k==1?(l(),b(w,{key:1})):N("",!0),k==2?(l(),b(S,{key:2})):N("",!0),k==3?(l(),b(y,{key:3})):N("",!0)]),_:2},1032,["name","label"]))),128))]),_:1},8,["modelValue"])}}},Mt=O(zt,[["__scopeId","data-v-dcce2457"]]);const Wt={class:"menu flex-column-center"},Gt={class:"hotkeys-header flex-space-between"},Qt=["id"],Xt={key:0},Yt={class:"hotkeys-settings flex-column-center"},Zt={class:"title"},eo={class:"hotkeys-item__content"},to={key:0},oo={key:0},no={__name:"ToolBar",setup(e){const t=j(),o=()=>{const h=C({message:"加载中……",showClose:!0,duration:0});A.getSources().then(({data:d})=>{d.isSuccess?(t.changeTabName("editList"),t.saveSources(d.data),C({message:`成功拉取${d.data.length}条源`,type:"success"})):C({message:d.errorMsg??"后端错误",type:"error"})}).finally(()=>h.close())},s=()=>{let h=t.sources;if(t.changeTabName("editList"),h.length===0)return C({message:"空空如也",type:"info"});C({message:"正在推送中",type:"info"}),A.saveSources(h).then(({data:d})=>{if(d.isSuccess){let v=d.data;if(Array.isArray(v)){let f="";h.length>v.length&&(f=`
推送失败的源将用红色字体标注!`,t.setPushReturnSources(v)),C({message:`批量推送源到「阅读3.0APP」
共计: ${h.length} 条
成功: ${v.length} 条
失败: ${h.length-v.length} 条${f}`,type:"success"})}}else C({message:`批量推送源失败!
ErrorMsg: ${d.errorMsg}`,type:"error"})})},n=()=>{t.changeTabName("editTab"),t.changeEditTabSource(t.currentSource)},r=()=>{t.changeCurrentSource(t.editTabSource)},u=()=>{t.editHistoryUndo()},w=()=>{t.clearEdit(),C({message:"已清除",type:"success"})},S=()=>{t.clearEdit(),t.clearAllHistory(),C({message:"已清除所有历史记录",type:"success"})},y=()=>{let h=/bookSource/.test(location.href),d=t.currentSource;Tt(d)?A.saveSource(d).then(({data:v})=>{v.isSuccess?(C({message:`源《${h?d.bookSourceName:d.sourceName}》已成功保存到「阅读3.0APP」`,type:"success"}),t.saveCurrentSource()):C({message:`源《${h?d.bookSourceName:d.sourceName}》保存失败!
ErrorMsg: ${v.errorMsg}`,type:"error"})}):C({message:"请检查<必填>项是否全部填写",type:"error"})},x=()=>{t.startDebug()},c=R(Array.of({name:"⇈推送源",hotKeys:[],action:s},{name:"⇊拉取源",hotKeys:[],action:o},{name:"⋙生成源",hotKeys:[],action:n},{name:"⋘编辑源",hotKeys:[],action:r},{name:"✗清空表单",hotKeys:[],action:w},{name:"↶撤销操作",hotKeys:[],action:u},{name:"↷重做操作",hotKeys:[],action:S},{name:"⇏调试源",hotKeys:[],action:x},{name:"✓保存源",hotKeys:[],action:y})),_=R(!0),k=R(!1),B=R(-1),D=()=>{k.value=!1};Oe(_,h=>{if(!h)return z.unbind("*");z.unbind(),z("*",d=>{d.preventDefault(),k.value&&B.value>-1&&(c.value[B.value].hotKeys=z.getPressedKeyString())})});const V=h=>{k.value=!0,C({message:"按ESC键或者点击空白处结束录入",type:"info"}),c.value[h].hotKeys=[],B.value=h},F=()=>{_.value=!1;const h=[];c.value.forEach(({hotKeys:d,action:v})=>{z(d.join("+"),f=>{f.preventDefault(),v.call(null)}),h.push(d)}),H(h)},H=h=>{localStorage.setItem("legado_web_hotkeys",JSON.stringify(h))},$=()=>{try{const h=JSON.parse(localStorage.getItem("legado_web_hotkeys"));if(!Array.isArray(h)||h.length==0)return;c.value.forEach((d,v)=>d.hotKeys=h[v]),_.value=!1,F()}catch{C({message:"快捷键配置错误",type:"error"}),localStorage.removeItem("legado_web_hotkeys")}};return Pe(()=>{$()}),(h,d)=>{const v=he,f=ae,Y=Ae;return l(),U(L,null,[g("div",Wt,[(l(!0),U(L,null,J(i(c),I=>(l(),b(v,{size:"large",key:I.name,onClick:I.action},{default:a(()=>[m(G(I.name),1)]),_:2},1032,["onClick"]))),128)),p(v,{size:"large",onClick:d[0]||(d[0]=()=>_.value=!0)},{default:a(()=>[m("快捷键")]),_:1})]),p(Y,{modelValue:i(_),"onUpdate:modelValue":d[1]||(d[1]=I=>K(_)?_.value=I:null),"show-close":!1,"before-close":D},{header:a(({titleClass:I,titleId:Z})=>[g("div",Gt,[g("div",{id:Z,class:de(I)},[m(" 快捷键设置 "),i(k)?(l(),U("span",Xt,[p(f,null,{default:a(()=>[m(" / 录入中 ")]),_:1})])):N("",!0)],10,Qt),p(v,{disabled:i(k),onClick:F,icon:i(De)},{default:a(()=>[m("保存")]),_:1},8,["disabled","icon"])])]),default:a(()=>[g("div",Yt,[(l(!0),U(L,null,J(i(c),(I,Z)=>(l(),U("div",{key:I.name,class:"hotkeys-item flex-space-between"},[g("span",Zt,[p(f,null,{default:a(()=>[m(G(I.name),1)]),_:2},1024)]),g("div",eo,[(l(!0),U(L,null,J(I.hotKeys,(ee,Ce)=>(l(),U("div",{key:ee},[g("kbd",null,G(ee),1),Ce+1<I.hotKeys.length?(l(),U("span",to,[p(f,null,{default:a(()=>[m("+")]),_:1})])):N("",!0)]))),128)),I.hotKeys.length==0?(l(),U("span",oo,"未设置")):N("",!0)]),p(v,{disabled:i(k),text:"",icon:i(Je),onClick:ee=>V(Z)},{default:a(()=>[m("编辑")]),_:2},1032,["disabled","icon","onClick"])]))),128))])]),_:1},8,["modelValue"])],64)}}},ro=O(no,[["__scopeId","data-v-dc7cd0f9"]]);const so={__name:"SourceTabForm",props:["config"],setup(e){const t=j(),{currentSource:o}=Q(t);return(s,n)=>{const r=X,u=Ke,w=je,S=He,y=Fe,x=qe,c=ze,_=ge,k=me;return l(),b(k,{id:"source-edit"},{default:a(()=>[(l(!0),U(L,null,J(Object.values(e.config),({name:B,children:D})=>(l(),b(_,{label:B,key:B},{default:a(()=>[p(c,{"label-position":"right","label-width":"5em"},{default:a(()=>[(l(!0),U(L,null,J(D,({type:V,title:F,namespace:H,id:$,array:h,hint:d,required:v})=>(l(),b(x,{label:F,key:F,required:v},{default:a(()=>[V=="String"&&typeof H>"u"?(l(),b(r,{key:0,type:"textarea",modelValue:i(o)[$],"onUpdate:modelValue":f=>i(o)[$]=f,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):N("",!0),V=="String"&&typeof H<"u"?(l(),b(r,{key:1,type:"textarea",modelValue:i(o)[H][$],"onUpdate:modelValue":f=>i(o)[H][$]=f,placeholder:d,autosize:""},null,8,["modelValue","onUpdate:modelValue","placeholder"])):N("",!0),V=="Boolean"?(l(),b(u,{key:2,modelValue:i(o)[$],"onUpdate:modelValue":f=>i(o)[$]=f},null,8,["modelValue","onUpdate:modelValue"])):N("",!0),V=="Number"?(l(),b(w,{key:3,modelValue:i(o)[$],"onUpdate:modelValue":f=>i(o)[$]=f,min:0},null,8,["modelValue","onUpdate:modelValue"])):N("",!0),V=="Array"?(l(),b(y,{key:4,modelValue:i(o)[$],"onUpdate:modelValue":f=>i(o)[$]=f},{default:a(()=>[(l(!0),U(L,null,J(h,(f,Y)=>(l(),b(S,{value:Y,key:f,label:f},null,8,["value","label"]))),128))]),_:2},1032,["modelValue","onUpdate:modelValue"])):N("",!0)]),_:2},1032,["label","required"]))),128))]),_:2},1024)]),_:2},1032,["label"]))),128))]),_:1})}}},io=O(so,[["__scopeId","data-v-2cfb5302"]]),lo={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:"l Line truncated
每行一条发现分类(网址域名可省略),例:
名称1::网址(Url)1
名称2::网址(Url)2
...`},{title:"发现筛选",id:"exploreScreen",type:"String",hint:"发现筛选规则"},{title:"列表规则",namespace:"ruleExplore",id:"bookList",type:"String",hint:"选择书籍节点 (规则结果为List<Element>)"},{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<Element>)"},{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>或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:"payAc Line truncated
名称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<Element>"},{title:"翻页规则",id:"ruleNextPage",type:"String",hint:"下一页链接 规则结果为List<String>或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 ao={class:"editor"},uo={__name:"SourceEditor",setup(e){const t=R({});return/bookSource/i.test(location.href)?(t.value=lo,document.title="书源管理"):(t.value=co,document.title="订阅源管理"),(o,s)=>{const n=io,r=ro,u=Mt;return l(),U("div",ao,[p(n,{class:"left",config:i(t)},null,8,["config"]),p(r),p(u,{class:"right"})])}}},ce=O(uo,[["__scopeId","data-v-e99e7704"]]),ke=[{path:"/bookSource",name:"book-home",component:ce},{path:"/rssSource",name:"rss-home",component:ce}];ne({history:re(),routes:ke});const ve=ne({history:re(),routes:Se.concat(ke)});ve.afterEach(e=>{e.name=="shelf"&&(document.title="书架")});Me(Ye).use(Ht).use(ve).mount("#app");oe(()=>import("./config-752e04be.js"),["./config-752e04be.js","./vendor-bf77f5c0.js","./vendor-6f0d1692.css","./config-811f2a0b.css"],import.meta.url);export{A,O as _,ho as u};
@@ -28,4 +28,4 @@ In order to be iterable, non-array objects must have a [Symbol.iterator]() metho
* pinia v2.0.34 * pinia v2.0.34
* (c) 2023 Eduardo San Martin Morote * (c) 2023 Eduardo San Martin Morote
* @license MIT * @license MIT
*/let Am;const ba=e=>Am=e,Pm=Symbol();function Kl(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var os;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(os||(os={}));function gI(){const e=ap(!0),t=e.run(()=>V({}));let n=[],r=[];const o=po({install(s){ba(o),o._a=s,s.provide(Pm,o),s.config.globalProperties.$pinia=o,r.forEach(i=>n.push(i)),r=[]},use(s){return!this._a&&!v0?r.push(s):n.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}const $m=()=>{};function Xd(e,t,n,r=$m){e.push(t);const o=()=>{const s=e.indexOf(t);s>-1&&(e.splice(s,1),r())};return!n&&Xl()&&Ql(o),o}function no(e,...t){e.slice().forEach(n=>{n(...t)})}function ql(e,t){e instanceof Map&&t instanceof Map&&t.forEach((n,r)=>e.set(r,n)),e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const r=t[n],o=e[n];Kl(o)&&Kl(r)&&e.hasOwnProperty(n)&&!qe(r)&&!Ln(r)?e[n]=ql(o,r):e[n]=r}return e}const S6=Symbol();function E6(e){return!Kl(e)||!e.hasOwnProperty(S6)}const{assign:or}=Object;function C6(e){return!!(qe(e)&&e.effect)}function O6(e,t,n,r){const{state:o,actions:s,getters:i}=t,a=n.state.value[e];let l;function u(){a||(n.state.value[e]=o?o():{});const c=gr(n.state.value[e]);return or(c,s,Object.keys(i||{}).reduce((f,d)=>(f[d]=po(O(()=>{ba(n);const v=n._s.get(e);return i[d].call(v,v)})),f),{}))}return l=Im(e,u,t,n,r,!0),l}function Im(e,t,n={},r,o,s){let i;const a=or({actions:{}},n),l={deep:!0};let u,c,f=po([]),d=po([]),v;const m=r.state.value[e];!s&&!m&&(r.state.value[e]={}),V({});let p;function y(E){let x;u=c=!1,typeof E=="function"?(E(r.state.value[e]),x={type:os.patchFunction,storeId:e,events:v}):(ql(r.state.value[e],E),x={type:os.patchObject,payload:E,storeId:e,events:v});const F=p=Symbol();Re().then(()=>{p===F&&(u=!0)}),c=!0,no(f,x,r.state.value[e])}const g=s?function(){const{state:x}=n,F=x?x():{};this.$patch(R=>{or(R,F)})}:$m;function w(){i.stop(),f=[],d=[],r._s.delete(e)}function _(E,x){return function(){ba(r);const F=Array.from(arguments),R=[],H=[];function B(K){R.push(K)}function A(K){H.push(K)}no(d,{args:F,name:E,store:C,after:B,onError:A});let $;try{$=x.apply(this&&this.$id===e?this:C,F)}catch(K){throw no(H,K),K}return $ instanceof Promise?$.then(K=>(no(R,K),K)).catch(K=>(no(H,K),Promise.reject(K))):(no(R,$),$)}}const T={_p:r,$id:e,$onAction:Xd.bind(null,d),$patch:y,$reset:g,$subscribe(E,x={}){const F=Xd(f,E,x.detached,()=>R()),R=i.run(()=>ue(()=>r.state.value[e],H=>{(x.flush==="sync"?c:u)&&E({storeId:e,type:os.direct,events:v},H)},or({},l,x)));return F},$dispose:w},C=Et(T);r._s.set(e,C);const P=r._e.run(()=>(i=ap(),i.run(()=>t())));for(const E in P){const x=P[E];if(qe(x)&&!C6(x)||Ln(x))s||(m&&E6(x)&&(qe(x)?x.value=m[E]:ql(x,m[E])),r.state.value[e][E]=x);else if(typeof x=="function"){const F=_(E,x);P[E]=F,a.actions[E]=x}}return or(C,P),or(Ae(C),P),Object.defineProperty(C,"$state",{get:()=>r.state.value[e],set:E=>{y(x=>{or(x,E)})}}),r._p.forEach(E=>{or(C,i.run(()=>E({store:C,app:r._a,pinia:r,options:a})))}),m&&s&&n.hydrate&&n.hydrate(C.$state,m),u=!0,c=!0,C}function yI(e,t,n){let r,o;const s=typeof t=="function";typeof e=="string"?(r=e,o=s?n:t):(o=e,r=e.id);function i(a,l){const u=st();return a=a||u&&Oe(Pm,null),a&&ba(a),a=Am,a._s.has(r)||(s?Im(r,t,o,a):O6(r,o,a)),a._s.get(r)}return i.$id=r,i}function bI(e){{e=Ae(e);const t={};for(const n in e){const r=e[n];(qe(r)||Ln(r))&&(t[n]=jt(e,n))}return t}}var Ja=typeof navigator<"u"?navigator.userAgent.toLowerCase().indexOf("firefox")>0:!1;function Xa(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),function(){n(window.event)})}function Rm(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function km(e){typeof e!="string"&&(e=""),e=e.replace(/\s/g,"");for(var t=e.split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}function T6(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,s=0;s<n.length;s++)r.indexOf(n[s])===-1&&(o=!1);return o}var xs={backspace:8,"⌫":8,tab:9,clear:12,enter:13,"↩":13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":Ja?173:189,"=":Ja?61:187,";":Ja?59:186,"'":222,"[":219,"]":221,"\\":220},xn={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},Ul={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},bt={16:!1,18:!1,17:!1,91:!1},ut={};for(var ri=1;ri<20;ri++)xs["f".concat(ri)]=111+ri;var Qe=[],Qd=!1,Nm="all",Mm=[],wa=function(t){return xs[tLine truncated */let Am;const ba=e=>Am=e,Pm=Symbol();function Kl(e){return e&&typeof e=="object"&&Object.prototype.toString.call(e)==="[object Object]"&&typeof e.toJSON!="function"}var os;(function(e){e.direct="direct",e.patchObject="patch object",e.patchFunction="patch function"})(os||(os={}));function gI(){const e=ap(!0),t=e.run(()=>V({}));let n=[],r=[];const o=po({install(s){ba(o),o._a=s,s.provide(Pm,o),s.config.globalProperties.$pinia=o,r.forEach(i=>n.push(i)),r=[]},use(s){return!this._a&&!v0?r.push(s):n.push(s),this},_p:n,_a:null,_e:e,_s:new Map,state:t});return o}const $m=()=>{};function Xd(e,t,n,r=$m){e.push(t);const o=()=>{const s=e.indexOf(t);s>-1&&(e.splice(s,1),r())};return!n&&Xl()&&Ql(o),o}function no(e,...t){e.slice().forEach(n=>{n(...t)})}function ql(e,t){e instanceof Map&&t instanceof Map&&t.forEach((n,r)=>e.set(r,n)),e instanceof Set&&t instanceof Set&&t.forEach(e.add,e);for(const n in t){if(!t.hasOwnProperty(n))continue;const r=t[n],o=e[n];Kl(o)&&Kl(r)&&e.hasOwnProperty(n)&&!qe(r)&&!Ln(r)?e[n]=ql(o,r):e[n]=r}return e}const S6=Symbol();function E6(e){return!Kl(e)||!e.hasOwnProperty(S6)}const{assign:or}=Object;function C6(e){return!!(qe(e)&&e.effect)}function O6(e,t,n,r){const{state:o,actions:s,getters:i}=t,a=n.state.value[e];let l;function u(){a||(n.state.value[e]=o?o():{});const c=gr(n.state.value[e]);return or(c,s,Object.keys(i||{}).reduce((f,d)=>(f[d]=po(O(()=>{ba(n);const v=n._s.get(e);return i[d].call(v,v)})),f),{}))}return l=Im(e,u,t,n,r,!0),l}function Im(e,t,n={},r,o,s){let i;const a=or({actions:{}},n),l={deep:!0};let u,c,f=po([]),d=po([]),v;const m=r.state.value[e];!s&&!m&&(r.state.value[e]={}),V({});let p;function y(E){let x;u=c=!1,typeof E=="function"?(E(r.state.value[e]),x={type:os.patchFunction,storeId:e,events:v}):(ql(r.state.value[e],E),x={type:os.patchObject,payload:E,storeId:e,events:v});const F=p=Symbol();Re().then(()=>{p===F&&(u=!0)}),c=!0,no(f,x,r.state.value[e])}const g=s?function(){const{state:x}=n,F=x?x():{};this.$patch(R=>{or(R,F)})}:$m;function w(){i.stop(),f=[],d=[],r._s.delete(e)}function _(E,x){return function(){ba(r);const F=Array.from(arguments),R=[],H=[];function B(K){R.push(K)}function A(K){H.push(K)}no(d,{args:F,name:E,store:C,after:B,onError:A});let $;try{$=x.apply(this&&this.$id===e?this:C,F)}catch(K){throw no(H,K),K}return $ instanceof Promise?$.then(K=>(no(R,K),K)).catch(K=>(no(H,K),Promise.reject(K))):(no(R,$),$)}}const T={_p:r,$id:e,$onAction:Xd.bind(null,d),$patch:y,$reset:g,$subscribe(E,x={}){const F=Xd(f,E,x.detached,()=>R()),R=i.run(()=>ue(()=>r.state.value[e],H=>{(x.flush==="sync"?c:u)&&E({storeId:e,type:os.direct,events:v},H)},or({},l,x)));return F},$dispose:w},C=Et(T);r._s.set(e,C);const P=r._e.run(()=>(i=ap(),i.run(()=>t())));for(const E in P){const x=P[E];if(qe(x)&&!C6(x)||Ln(x))s||(m&&E6(x)&&(qe(x)?x.value=m[E]:ql(x,m[E])),r.state.value[e][E]=x);else if(typeof x=="function"){const F=_(E,x);P[E]=F,a.actions[E]=x}}return or(C,P),or(Ae(C),P),Object.defineProperty(C,"$state",{get:()=>r.state.value[e],set:E=>{y(x=>{or(x,E)})}}),r._p.forEach(E=>{or(C,i.run(()=>E({store:C,app:r._a,pinia:r,options:a})))}),m&&s&&n.hydrate&&n.hydrate(C.$state,m),u=!0,c=!0,C}function yI(e,t,n){let r,o;const s=typeof t=="function";typeof e=="string"?(r=e,o=s?n:t):(o=e,r=e.id);function i(a,l){const u=st();return a=a||u&&Oe(Pm,null),a&&ba(a),a=Am,a._s.has(r)||(s?Im(r,t,o,a):O6(r,o,a)),a._s.get(r)}return i.$id=r,i}function bI(e){{e=Ae(e);const t={};for(const n in e){const r=e[n];(qe(r)||Ln(r))&&(t[n]=jt(e,n))}return t}}var Ja=typeof navigator<"u"?navigator.userAgent.toLowerCase().indexOf("firefox")>0:!1;function Xa(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),function(){n(window.event)})}function Rm(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function km(e){typeof e!="string"&&(e=""),e=e.replace(/\s/g,"");for(var t=e.split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}function T6(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,s=0;s<n.length;s++)r.indexOf(n[s])===-1&&(o=!1);return o}var xs={backspace:8,"⌫":8,tab:9,clear:12,enter:13,"↩":13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":Ja?173:189,"=":Ja?61:187,";":Ja?59:186,"'":222,"[":219,"]":221,"\\":220},xn={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},Ul={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},bt={16:!1,18:!1,17:!1,91:!1},ut={};for(var ri=1;ri<20;ri++)xs["f".concat(ri)]=111+ri;var Qe=[],Qd=!1,Nm="all",Mm=[],wa=function(t){return xs[tLine truncated
+3 -3
View File
@@ -4,10 +4,10 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" href="./favicon.ico" /> <link rel="icon" href="./favicon.ico" />
<meta name="viewport" content="width=device-width,initial-scale=1.0" /> <meta name="viewport" content="width=device-width,initial-scale=1.0" />
<script type="module" crossorigin src="./assets/index-f4927a88.js"></script> <script type="module" crossorigin src="./assets/index-76057bdd.js"></script>
<link rel="modulepreload" crossorigin href="./assets/vendor-bf77f5c0.js"> <link rel="modulepreload" crossorigin href="./assets/vendor-93648100.js">
<link rel="stylesheet" href="./assets/vendor-6f0d1692.css"> <link rel="stylesheet" href="./assets/vendor-6f0d1692.css">
<link rel="stylesheet" href="./assets/index-060af40e.css"> <link rel="stylesheet" href="./assets/index-3a786cf8.css">
</head> </head>
<body> <body>
@@ -1,10 +1,12 @@
package io.legado.app.help.http package io.legado.app.help.http
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.net.http.SslError
import android.os.Handler import android.os.Handler
import android.os.Looper import android.os.Looper
import android.util.AndroidRuntimeException import android.util.AndroidRuntimeException
import android.webkit.CookieManager import android.webkit.CookieManager
import android.webkit.SslErrorHandler
import android.webkit.WebSettings import android.webkit.WebSettings
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
@@ -135,6 +137,15 @@ class BackstageWebView(
mHandler.postDelayed(runnable, 1000) mHandler.postDelayed(runnable, 1000)
} }
@SuppressLint("WebViewClientOnReceivedSslError")
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
handler?.proceed()
}
} }
private inner class EvalJsRunnable( private inner class EvalJsRunnable(
@@ -197,6 +208,15 @@ class BackstageWebView(
} }
} }
@SuppressLint("WebViewClientOnReceivedSslError")
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
handler?.proceed()
}
} }
private class LoadJsRunnable( private class LoadJsRunnable(
@@ -3,6 +3,7 @@ package io.legado.app.ui.browser
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.net.Uri import android.net.Uri
import android.net.http.SslError
import android.os.Bundle import android.os.Bundle
import android.view.KeyEvent import android.view.KeyEvent
import android.view.Menu import android.view.Menu
@@ -247,12 +248,14 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
"http", "https" -> { "http", "https" -> {
return false return false
} }
"legado", "yuedu" -> { "legado", "yuedu" -> {
startActivity<OnLineImportActivity> { startActivity<OnLineImportActivity> {
data = url data = url
} }
return true return true
} }
else -> { else -> {
binding.root.longSnackbar("跳转其它应用", "确认") { binding.root.longSnackbar("跳转其它应用", "确认") {
openUrl(url) openUrl(url)
@@ -262,6 +265,15 @@ class WebViewActivity : VMBaseActivity<ActivityWebViewBinding, WebViewModel>() {
} }
} }
@SuppressLint("WebViewClientOnReceivedSslError")
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
handler?.proceed()
}
} }
} }
@@ -2,6 +2,7 @@ package io.legado.app.ui.login
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.graphics.Bitmap import android.graphics.Bitmap
import android.net.http.SslError
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
@@ -85,6 +86,15 @@ class WebViewLoginFragment : BaseFragment(R.layout.fragment_web_view_login) {
} }
super.onPageFinished(view, url) super.onPageFinished(view, url)
} }
@SuppressLint("WebViewClientOnReceivedSslError")
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
handler?.proceed()
}
} }
binding.webView.webChromeClient = object : WebChromeClient() { binding.webView.webChromeClient = object : WebChromeClient() {
@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.content.pm.ActivityInfo import android.content.pm.ActivityInfo
import android.content.res.Configuration import android.content.res.Configuration
import android.net.Uri import android.net.Uri
import android.net.http.SslError
import android.os.Bundle import android.os.Bundle
import android.view.* import android.view.*
import android.webkit.* import android.webkit.*
@@ -66,6 +67,7 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN) window.clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN)
window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) window.addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
} }
Configuration.ORIENTATION_PORTRAIT -> { Configuration.ORIENTATION_PORTRAIT -> {
window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN) window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN)
window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN) window.addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN)
@@ -95,6 +97,7 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
R.id.menu_rss_refresh -> viewModel.refresh { R.id.menu_rss_refresh -> viewModel.refresh {
binding.webView.reload() binding.webView.reload()
} }
R.id.menu_rss_star -> viewModel.favorite() R.id.menu_rss_star -> viewModel.favorite()
R.id.menu_share_it -> { R.id.menu_share_it -> {
binding.webView.url?.let { binding.webView.url?.let {
@@ -103,11 +106,13 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
share(it.link) share(it.link)
} ?: toastOnUi(R.string.null_url) } ?: toastOnUi(R.string.null_url)
} }
R.id.menu_aloud -> readAloud() R.id.menu_aloud -> readAloud()
R.id.menu_login -> startActivity<SourceLoginActivity> { R.id.menu_login -> startActivity<SourceLoginActivity> {
putExtra("type", "rssSource") putExtra("type", "rssSource")
putExtra("key", viewModel.rssSource?.loginUrl) putExtra("key", viewModel.rssSource?.loginUrl)
} }
R.id.menu_browser_open -> binding.webView.url?.let { R.id.menu_browser_open -> binding.webView.url?.let {
openUrl(it) openUrl(it)
} ?: toastOnUi("url null") } ?: toastOnUi("url null")
@@ -397,12 +402,14 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
"http", "https", "jsbridge" -> { "http", "https", "jsbridge" -> {
return false return false
} }
"legado", "yuedu" -> { "legado", "yuedu" -> {
startActivity<OnLineImportActivity> { startActivity<OnLineImportActivity> {
data = url data = url
} }
return true return true
} }
else -> { else -> {
binding.root.longSnackbar(R.string.jump_to_another_app, R.string.confirm) { binding.root.longSnackbar(R.string.jump_to_another_app, R.string.confirm) {
openUrl(url) openUrl(url)
@@ -412,6 +419,15 @@ class ReadRssActivity : VMBaseActivity<ActivityRssReadBinding, ReadRssViewModel>
} }
} }
@SuppressLint("WebViewClientOnReceivedSslError")
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
handler?.proceed()
}
} }
} }
+20 -5
View File
@@ -2,23 +2,35 @@
<el-checkbox <el-checkbox
size="large" size="large"
border border
:label="source" :label="sourceUrl"
:class="{ error: errorPushSources.includes(source) }" :class="{
@change="handleSourceClick(source)" error: errorPushSources.includes(source),
edit: sourceUrl == currentSourceUrl,
}"
> >
{{ source.bookSourceName || source.sourceName }} {{ source.bookSourceName || source.sourceName }}
<el-button text :icon="Edit" @click="handleSourceClick(source)" />
</el-checkbox> </el-checkbox>
</template> </template>
<script setup> <script setup>
defineProps(["source"]); import { Edit } from "@element-plus/icons-vue";
const props = defineProps(["source"]);
const sourceUrl = props.source.bookSourceUrl || props.source.sourceUrl;
const store = useSourceStore(); const store = useSourceStore();
const { errorPushSources } = storeToRefs(store); const { errorPushSources, currentSourceUrl } = storeToRefs(store);
const handleSourceClick = (source) => { const handleSourceClick = (source) => {
store.changeCurrentSource(source); store.changeCurrentSource(source);
}; };
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
:deep(.el-checkbox__label) {
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
}
.error { .error {
border-color: var(--el-color-error) !important; border-color: var(--el-color-error) !important;
color: var(--el-color-error) !important; color: var(--el-color-error) !important;
@@ -26,4 +38,7 @@ const handleSourceClick = (source) => {
--el-checkbox-checked-bg-color: var(--el-color-error); --el-checkbox-checked-bg-color: var(--el-color-error);
--el-checkbox-checked-input-border-color: var(--el-color-error); --el-checkbox-checked-input-border-color: var(--el-color-error);
} }
.edit {
border-color: var(--el-color-dark) !important;
}
</style> </style>
+21 -7
View File
@@ -18,7 +18,7 @@
type="danger" type="danger"
:icon="Delete" :icon="Delete"
@click="deleteSelectSources" @click="deleteSelectSources"
:disabled="sourceSelect.length === 0" :disabled="sourceUrlSelect.length === 0"
>删除</el-button >删除</el-button
> >
<el-button <el-button
@@ -29,7 +29,7 @@
>清空</el-button >清空</el-button
> >
</div> </div>
<el-checkbox-group id="source-list" v-model="sourceSelect"> <el-checkbox-group id="source-list" v-model="sourceUrlSelect">
<virtual-list <virtual-list
style="height: 100%; overflow-y: auto; overflow-x: hidden" style="height: 100%; overflow-y: auto; overflow-x: hidden"
:data-key="(source) => source.bookSourceUrl || source.sourceUrl" :data-key="(source) => source.bookSourceUrl || source.sourceUrl"
@@ -48,22 +48,37 @@ import VirtualList from "vue3-virtual-scroll-list";
import SourceItem from "./SourceItem.vue"; import SourceItem from "./SourceItem.vue";
const store = useSourceStore(); const store = useSourceStore();
const sourceSelect = ref([]); const sourceUrlSelect = ref([]);
const searchKey = ref(""); const searchKey = ref("");
const { sources } = storeToRefs(store); const { sources } = storeToRefs(store);
const isBookSource = computed(() => { const isBookSource = computed(() => {
return /bookSource/.test(window.location.href); return /bookSource/.test(window.location.href);
}); });
const sourceSelect = computed(() => {
let temp = sourceUrlSelect.value,
selectUrlsLength = temp.length;
if (selectUrlsLength == 0) return [];
let searchKey = "sourceUrl";
if (isBookSource.value) searchKey = "bookSourceUrl";
return sources.value.filter((source) => {
let searchIndex = temp.indexOf(source[searchKey]);
if (searchIndex > -1) {
temp.splice(searchIndex, 1);
return true;
}
return false;
});
});
const deleteSelectSources = () => { const deleteSelectSources = () => {
API.deleteSource(sourceSelect.value).then(({ data }) => { API.deleteSource(sourceSelect.value).then(({ data }) => {
if (!data.isSuccess) return ElMessage.error(data.errorMsg); if (!data.isSuccess) return ElMessage.error(data.errorMsg);
store.deleteSources(sourceSelect.value); store.deleteSources(sourceSelect.value);
sourceSelect.value = []; sourceUrlSelect.value = [];
}); });
}; };
const clearAllSources = () => { const clearAllSources = () => {
store.clearAllSource(); store.clearAllSource();
sourceSelect.value = []; sourceUrlSelect.value = [];
}; };
//筛选源 //筛选源
const sourcesFiltered = computed(() => { const sourcesFiltered = computed(() => {
@@ -104,7 +119,7 @@ const importSourceFile = () => {
const outExport = () => { const outExport = () => {
const exportFile = document.createElement("a"); const exportFile = document.createElement("a");
let sources = let sources =
sourceSelect.value.length === 0 sourceUrlSelect.value.length === 0
? sourcesFiltered.value ? sourcesFiltered.value
: sourceSelect.value, : sourceSelect.value,
sourceType = isBookSource.value ? "BookSource" : "RssSource"; sourceType = isBookSource.value ? "BookSource" : "RssSource";
@@ -131,7 +146,6 @@ const outExport = () => {
#source-list { #source-list {
margin-top: 6px; margin-top: 6px;
height: calc(100vh - 112px - 7px); height: calc(100vh - 112px - 7px);
:deep(.el-checkbox) { :deep(.el-checkbox) {
margin-bottom: 4px; margin-bottom: 4px;
width: 100%; width: 100%;