├── .gitattributes ├── .github ├── FUNDING.yml └── workflows │ ├── ASTRAutoUpdater.yml │ ├── build.yml │ └── pr_test.yml ├── .gitignore ├── .gitmodules ├── ASTR ├── ASTR.png ├── ASTR.svg ├── ASTReader.ai ├── CHANGELOG.md ├── MaterialIcons-Regular.ttf ├── favicon.png ├── favicon.svg ├── favicon_bg.png ├── i18n.js ├── icon.ai ├── reader.css ├── reader.html ├── script.js ├── storymenu.html ├── style.css └── terminal_icons.ai ├── LICENSE ├── README.md └── reader ├── .gitignore ├── .nvmrc ├── README.md ├── index.html ├── index2.html ├── package-lock.json ├── package.json ├── public ├── ASTR.svg ├── favicon.png └── favicon.svg ├── relics.html ├── src ├── ASTRv2 │ ├── ASTR.vue │ ├── ak_terminal.ttf │ ├── assets │ │ ├── ASTReader.png │ │ └── favicon.png │ ├── components │ │ ├── opcard.vue │ │ ├── openInGTL.vue │ │ └── openInNewBtn.vue │ ├── content │ │ ├── animtext.vue │ │ ├── decision.vue │ │ ├── delay.vue │ │ ├── img.vue │ │ ├── link.vue │ │ ├── nameline.vue │ │ ├── paging.vue │ │ ├── predicate.vue │ │ └── subtitle.vue │ ├── contentpage.vue │ ├── eventpage.vue │ ├── export.vue │ ├── footer.vue │ ├── func.js │ ├── gdoc.json │ ├── header.vue │ ├── i18n.json │ ├── menu.vue │ ├── menupage.vue │ ├── menupage │ │ ├── additional_links.json │ │ ├── banners │ │ │ ├── analysis.png │ │ │ ├── maintheme.png │ │ │ └── op.png │ │ ├── changelog.vue │ │ ├── event_card.vue │ │ ├── events.vue │ │ ├── friendlink.vue │ │ ├── homepage.vue │ │ ├── maintheme.vue │ │ ├── ms.vue │ │ ├── or.vue │ │ └── search.vue │ ├── misc.vue │ ├── misc │ │ ├── act17side_log.vue │ │ ├── act25side_log.vue │ │ ├── analysis.vue │ │ ├── extra.vue │ │ ├── isdialog.vue │ │ ├── isrecords.vue │ │ ├── stats.vue │ │ └── stats2023.vue │ ├── server.vue │ ├── settings.vue │ ├── source.js │ ├── style.css │ └── warp.vue ├── export.js ├── export │ └── export.vue ├── main2.js ├── relics.js └── relics │ ├── item.vue │ └── relics.vue └── vite.config.js /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | patreon: m31nightsky 4 | custom: "支付宝/Alipay: 050644zf@outlook.com" 5 | -------------------------------------------------------------------------------- /.github/workflows/ASTRAutoUpdater.yml: -------------------------------------------------------------------------------- 1 | # This workflow will install Python dependencies, run tests and lint with a single version of Python 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions 3 | 4 | name: ASTR Auto Updater 5 | 6 | on: 7 | repository_dispatch: 8 | type: [update] 9 | schedule: 10 | - cron: 0 0 * * 1 11 | # add manual trigger 12 | workflow_dispatch: 13 | 14 | 15 | jobs: 16 | build: 17 | 18 | runs-on: ubuntu-latest 19 | 20 | steps: 21 | - uses: actions/checkout@v4 22 | with: 23 | repository: 050644zf/ASTR-Script 24 | token: ${{secrets.PAT}} 25 | - uses: actions/checkout@v4 26 | with: 27 | repository: Kengxxiao/ArknightsGameData 28 | path: ArknightsGameData 29 | - uses: actions/checkout@v4 30 | with: 31 | repository: Kengxxiao/ArknightsGameData_YoStar 32 | path: ArknightsGameData_YoStar 33 | - uses: actions/checkout@v4 34 | with: 35 | repository: 050644zf/ArknightsStoryJson 36 | path: ArknightsStoryJson 37 | token: ${{secrets.PAT}} 38 | fetch-depth: 0 39 | - name: Set up Python 3.8 40 | uses: actions/setup-python@v2 41 | with: 42 | python-version: "3.8" 43 | 44 | - name: Updater 45 | run: | 46 | if [ "${{ github.event_name }}" == "repository_dispatch" ]; then 47 | python ./jsonconvert.py -q 48 | else 49 | python ./jsonconvert.py -q --all 50 | fi 51 | 52 | - name: Upload Artifact 53 | uses: actions/upload-artifact@v4 54 | with: 55 | name: changes-and-deletion 56 | path: | 57 | ./changes.txt 58 | ./deletion.txt 59 | 60 | - name: Copy diff to tmp folder 61 | run: | 62 | bash ./copy_diff.sh 63 | 64 | - name: Install AWS CLI 2 65 | run: | 66 | curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64-2.22.35.zip" -o "awscliv2.zip" 67 | unzip awscliv2.zip 68 | sudo ./aws/install --update 69 | 70 | - name: Configure AWS CLI for Cloudflare R2 71 | run: | 72 | aws configure set aws_access_key_id ${{ secrets.CLOUDFLARE_ACCESS_KEY_ID }} 73 | aws configure set aws_secret_access_key ${{ secrets.CLOUDFLARE_SECRET_ACCESS_KEY }} 74 | aws configure set default.region auto 75 | 76 | - name: Sync repository to Cloudflare R2 77 | run: | 78 | aws s3 sync . s3://${{ secrets.CLOUDFLARE_BUCKET_NAME }} --endpoint-url=https://${{ secrets.CLOUDFLARE_ACCOUNT_ID }}.r2.cloudflarestorage.com --exclude ".git/*" 79 | env: 80 | CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} 81 | working-directory: ./tmp 82 | 83 | - name: Push 84 | working-directory: ./ArknightsStoryJson 85 | run: | 86 | git push 87 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: ASTR Webpage Builder 5 | 6 | on: 7 | push: 8 | branches: [ master ] 9 | 10 | jobs: 11 | build: 12 | 13 | runs-on: ubuntu-latest 14 | 15 | env: 16 | VITE_BASE: /ArknightsStoryTextReader/ 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | with: 21 | submodules: 'recursive' 22 | - uses: actions/checkout@v2 23 | with: 24 | repository: 050644zf/ArknightsStoryTextReader 25 | ref: gh-pages 26 | path: gh-pages 27 | token: ${{secrets.PAT}} 28 | - uses: actions/setup-node@v4.0.3 29 | with: 30 | node-version: '22.14.0' 31 | - run: | 32 | cd reader 33 | npm ci 34 | npm run build 35 | echo "Build Completed!" 36 | cd .. 37 | cp ./reader/dist/* ./gh-pages -r 38 | echo "File Transfer Completed!" 39 | cd gh-pages 40 | git config --global user.email ${{secrets.EMAIL}} 41 | git config --global user.name ${{secrets.USERNAME}} 42 | git add -A 43 | git commit --allow-empty -m 'Build' 44 | git push 45 | echo "Build Pushed!" 46 | 47 | 48 | -------------------------------------------------------------------------------- /.github/workflows/pr_test.yml: -------------------------------------------------------------------------------- 1 | # This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions 3 | 4 | name: ASTR Webpage PR Test 5 | 6 | on: 7 | # pull_request: 8 | # branches: [ master ] 9 | workflow_dispatch: 10 | 11 | jobs: 12 | build: 13 | 14 | runs-on: ubuntu-latest 15 | 16 | env: 17 | VITE_BASE: /ArknightsStoryTextReader/ 18 | 19 | steps: 20 | - uses: actions/checkout@v4 21 | with: 22 | submodules: 'recursive' 23 | - uses: actions/setup-node@v4.0.3 24 | with: 25 | node-version: '20.9.0' 26 | - run: | 27 | cd reader 28 | npm ci 29 | npm run build 30 | echo "Build Completed!" 31 | 32 | 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | *.txt 3 | __pycache__ 4 | .vscode 5 | .csv 6 | *.csv 7 | *.xlsx 8 | *.jpg 9 | en05 10 | ./ArknightsGameData 11 | ArknightsGameData/ 12 | roguelike_table.json 13 | ArknightsData/ 14 | *.nb 15 | *.zip 16 | ArknightsStoryJson/ 17 | reader/node_modules/* 18 | reader/dist/* 19 | *.ipynb -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "reader/src/ASTRv2/astr-i18n"] 2 | path = reader/src/ASTRv2/astr-i18n 3 | url = https://github.com/050644zf/astr-i18n 4 | -------------------------------------------------------------------------------- /ASTR/ASTR.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/ASTR/ASTR.png -------------------------------------------------------------------------------- /ASTR/ASTR.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /ASTR/ASTReader.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/ASTR/ASTReader.ai -------------------------------------------------------------------------------- /ASTR/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## wv0.8.1 4 | 5 | New Features: 6 | 7 | - Adding an icon 8 | 9 | Other: 10 | 11 | - Optimize header layout 12 | 13 | ## wv0.8 14 | 15 | New Features: 16 | 17 | - Adding blank for delay [#7](https://github.com/050644zf/ArknightsStoryTextReader/issues/7) 18 | - Showing Developer Info in Settings 19 | 20 | ## wv0.7 21 | 22 | New Feature: 23 | 24 | - Settings of Doctors' Name [#3](https://github.com/050644zf/ArknightsStoryTextReader/issues/3) 25 | 26 | ## v0.6 27 | 28 | New Feature: 29 | 30 | - Color Code Text Support [#4](https://github.com/050644zf/ArknightsStoryTextReader/issues/4) 31 | 32 | Bug Fixes: 33 | 34 | - Set a maximum image height for over-high images [#5](https://github.com/050644zf/ArknightsStoryTextReader/issues/5) 35 | 36 | ## v0.5 37 | 38 | - Adding operators' names in Operators Records [#2](https://github.com/050644zf/ArknightsStoryTextReader/issues/2) 39 | 40 | ## v0.4 41 | 42 | - Auto locate the current story in menu. 43 | - (beta) Configurable Doctor Name, currently can be accessed by `dr=` request 44 | - Merge the repo into Arknights Story Text Reader 45 | 46 | ## v0.3 47 | 48 | - Add a link warp button that allow user to share the link to a certain line. 49 | - Redesigned the menu button 50 | - Add Google's Material Design Icon 51 | 52 | ## v0.2 53 | 54 | Add mobile broser support 55 | 56 | ## v0.1 57 | 58 | Early design 59 | -------------------------------------------------------------------------------- /ASTR/MaterialIcons-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/ASTR/MaterialIcons-Regular.ttf -------------------------------------------------------------------------------- /ASTR/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/ASTR/favicon.png -------------------------------------------------------------------------------- /ASTR/favicon.svg: -------------------------------------------------------------------------------- 1 | R -------------------------------------------------------------------------------- /ASTR/favicon_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/ASTR/favicon_bg.png -------------------------------------------------------------------------------- /ASTR/i18n.js: -------------------------------------------------------------------------------- 1 | var i18n = { 2 | langs: {zh_CN:'简中',en_US:'English',ja_JP:'日本語',ko_KR:'한국어', zh_TW:'繁中'}, 3 | currentLang: {zh_CN:'当前语言',en_US:'Current Language',ja_JP:'現在の言語',ko_KR:'현재 언어', zh_TW:'當前語言'}, 4 | selectStory: {zh_CN:'请从目录中选择故事查看', 5 | en_US:'Select the story you wanna view from the menu', 6 | ja_JP:'Select the story you wanna view from the menu', 7 | ko_KR:'Select the story you wanna view from the menu', 8 | zh_TW:'請從目錄中選擇故事查看'}, 9 | main: {zh_CN:'主题曲',en_US:'Maintheme',ja_JP:'Maintheme',ko_KR:'Maintheme', zh_TW:'主题曲'}, 10 | ss: {zh_CN:'别传',en_US:'Sidestory',ja_JP:'Sidestory',ko_KR:'Sidestory', zh_TW:'别传'}, 11 | mini: {zh_CN:'故事集',en_US:'Storyset',ja_JP:'Storyset',ko_KR:'Storyset', zh_TW:'故事集'}, 12 | or: {zh_CN:'干员密录',en_US:"Operators' Records",ja_JP:"Operators' Records",ko_KR:"Operators' Records", zh_TW:'幹員密錄'}, 13 | setting:{zh_CN:'设置',en_US:"Settings",ja_JP:"Settings",ko_KR:"Settings", zh_TW:'设置'}, 14 | clear:{zh_CN:'重置所有设置',en_US:"Reset All Settings",ja_JP:"Reset All Settings",ko_KR:"Reset All Settings", zh_TW:'重置所有设置'}, 15 | dr:{zh_CN:'博士称呼',en_US:"Doctor's Name",ja_JP:"ドクターの名前",ko_KR:"Doctor's Name", zh_TW:'博士稱呼'}, 16 | save:{zh_CN:'应用设置',en_US:"Apply Setting",ja_JP:"Apply Setting",ko_KR:"Apply Setting", zh_TW:'应用设置'} 17 | } -------------------------------------------------------------------------------- /ASTR/icon.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/ASTR/icon.ai -------------------------------------------------------------------------------- /ASTR/reader.css: -------------------------------------------------------------------------------- 1 | .topButton{ 2 | position: fixed; 3 | right: 5%; 4 | bottom: 15%; 5 | font-weight: bold; 6 | background-color: rgba(0,128,128,0.2); 7 | transition: background-color 0.5s; 8 | padding: 10px; 9 | } 10 | .topButton:hover{ 11 | background-color: rgba(0,128,128,1); 12 | } 13 | .menuButton{ 14 | position: fixed; 15 | font-size: 64px; 16 | background-color: #3f51b500; 17 | transition: background-color 0.5s; 18 | left: 0%; 19 | padding-left: 10px; 20 | padding-top: 30px; 21 | padding-bottom: 30px; 22 | top: 50%; 23 | transform: rotate(0deg); 24 | transition: background-color 0.5s, left 0.5s, transform 0.5s; 25 | } 26 | .menuButton:hover{ 27 | background-color: #3f51b580; 28 | } 29 | .menuButtonR{ 30 | left: 50%; 31 | transform: rotate(180deg); 32 | background-color: #3f51b5ff; 33 | } 34 | .linkButton{ 35 | display: block; 36 | position: relative; 37 | color: #88888800; 38 | text-decoration: none; 39 | margin-left: -32px; 40 | line-height: 0; 41 | float: left; 42 | top: 15px; 43 | right: 0%; 44 | padding-right: 4px; 45 | transition: color 0.5s; 46 | } 47 | .line:hover .linkButton{ 48 | color: #888888FF; 49 | } 50 | .setting{ 51 | margin: 4px; 52 | transition: background-color 0.5s; 53 | } 54 | .setting *{ 55 | margin: 4px; 56 | 57 | } 58 | .settingshow{ 59 | background-color: rgba(0, 0, 0, 0.2); 60 | } 61 | #settingbutton{ 62 | padding: 4px; 63 | float: left; 64 | } 65 | #settingbutton:hover{ 66 | background-color: rgba(255, 255, 255, 0.2); 67 | } 68 | #settingbutton:hover ~ #settingtitle{ 69 | color:rgba(255, 255, 255, 1); 70 | } 71 | .settingtitle{ 72 | font-weight: bold; 73 | font-size: 18px; 74 | padding: 4px; 75 | float: left; 76 | color: rgba(255, 255, 255, 0); 77 | transition: color 0.5s; 78 | } 79 | .settingshow .settingtitle{ 80 | color:rgba(255, 255, 255, 1); 81 | } 82 | 83 | input{ 84 | font-size: unset; 85 | background-color: rgba(0,0,0,0); 86 | margin-bottom: -2px; 87 | border-radius: 0px; 88 | border-width: 0px; 89 | border-bottom: 2px solid rgba(255, 255, 255, 0.5); 90 | color:rgb(255, 255, 255); 91 | transition: border-color 0.5s; 92 | } 93 | input:hover{ 94 | border-bottom: 2px solid rgba(255, 255, 255, 1); 95 | } 96 | input:active{ 97 | border-bottom: 2px solid rgba(255, 255, 255, 1); 98 | } 99 | 100 | .warning{ 101 | position: fixed; 102 | right: 5%; 103 | bottom: 25%; 104 | display: block; 105 | width: 20%; 106 | background-color: rgba(248, 160, 160, 0.2); 107 | padding: 4px; 108 | border-radius: 4px; 109 | font-size: x-small; 110 | } 111 | .currentLang{ 112 | text-align: center; 113 | background-color: rgb(36, 54, 153); 114 | font-weight: bold; 115 | } 116 | .langSelect{ 117 | display: none; 118 | position: absolute; 119 | margin: auto; 120 | width: 100%; 121 | text-align: center; 122 | } 123 | .langSelect div{ 124 | text-align: center; 125 | background-color: rgb(57, 61, 87); 126 | 127 | } 128 | .langSelect div:hover{ 129 | background-color: rgb(114, 122, 173); 130 | } 131 | .currentLang:hover .langSelect{ 132 | display: block; 133 | } 134 | .eventtype{ 135 | text-align: center; 136 | font-weight: bolder; 137 | color: #ffc4c4; 138 | background-color: #383838; 139 | padding: 4px; 140 | } 141 | .eventname{ 142 | font-weight: bold; 143 | background-color: rgba(42,186,255,0); 144 | margin: 4px; 145 | margin-left: 10px; 146 | padding: 2px; 147 | transition: padding 0.2s; 148 | } 149 | .eventnamehl{ 150 | background-color: rgba(42,186,255,0.4); 151 | padding: 5px; 152 | } 153 | .eventname:hover{ 154 | padding: 10px; 155 | background-color: rgba(42,186,255,0.2); 156 | } 157 | .story{ 158 | margin: 4px; 159 | margin-left: 40px; 160 | transition: padding 0.2s; 161 | } 162 | .story:hover{ 163 | background-color: rgba(255, 255, 255, 0.2); 164 | padding: 5px; 165 | } 166 | .storyFocused{ 167 | background-color: #f4433633; 168 | padding: 5px; 169 | } 170 | .storydata{ 171 | font-weight: bold; 172 | margin: 10px; 173 | } 174 | .storycode{ 175 | font-size: x-small; 176 | color: rgba(255, 255, 255, 0.8); 177 | } 178 | .storyname{ 179 | font-weight: normal; 180 | } 181 | .line{ 182 | height: max-content; 183 | } 184 | .textblock{ 185 | margin: 4px; 186 | } 187 | .nameblock{ 188 | background-color: unset; 189 | width: 100px; 190 | float: left; 191 | margin: 2px; 192 | margin-right: 6px; 193 | text-align: right; 194 | font-weight: bold; 195 | } 196 | .contentblock{ 197 | background-color: unset; 198 | max-width: 650px; 199 | float: left; 200 | margin: 2px; 201 | } 202 | .Subtitle{ 203 | background-color: unset; 204 | margin: 4px; 205 | padding-top: 20px; 206 | padding-bottom: 20px; 207 | padding: 10px; 208 | clear: both; 209 | } 210 | .line img{ 211 | max-width: 500px; 212 | max-height: 300px; 213 | margin: 4px; 214 | margin-left: 114px; 215 | } 216 | .Decision{ 217 | margin: 4px; 218 | } 219 | .option{ 220 | text-align: center; 221 | margin: 4px; 222 | padding: 4px; 223 | transition: background-color 0.5s; 224 | font-weight: bold; 225 | background-color: rgba(0, 0, 0, 0.4); 226 | } 227 | .option:hover{ 228 | background-color: rgba(255, 255, 255, 0.2); 229 | } 230 | .Predicate{ 231 | font-size: 50%; 232 | margin: 4px; 233 | transition: background-color 0.5s; 234 | color: rgba(255, 255, 255, 0.8); 235 | background-color: rgba(0, 0, 0, 0.4); 236 | } 237 | .optText{ 238 | float: left; 239 | padding: 4px; 240 | } 241 | .toEnd{ 242 | padding: 4px; 243 | padding-left: 83px; 244 | width: 21px; 245 | float: right; 246 | background-color: rgba(58, 58, 58, 0.5); 247 | transition: width 0.5s, padding-left 0.5s; 248 | overflow: hidden; 249 | max-height: 70px; 250 | text-align: right; 251 | white-space: nowrap; 252 | } 253 | .toEnd:hover{ 254 | width: 100px; 255 | padding-left: 4px; 256 | background-color: rgba(255, 255, 255, 0.5); 257 | } 258 | .Delay{ 259 | max-height: 50px; 260 | background-color: rgba(255, 255, 255,0); 261 | } 262 | .Delay hr{ 263 | border: none; 264 | height: 0px; 265 | background-color: slategray; 266 | margin: auto; 267 | } 268 | @media (max-width: 1000px){ 269 | .warning{ 270 | font-size: 20px; 271 | width: 300px; 272 | background-color: rgb(90, 58, 58); 273 | } 274 | .nameblock{ 275 | width: 150px; 276 | word-wrap: break-word; 277 | } 278 | .topButton{ 279 | font-size: 70px; 280 | } 281 | .menuButton{ 282 | font-size: 100px; 283 | background-color: rgba(0,128,128,0.2); 284 | transition: none; 285 | } 286 | .menuButtonR{ 287 | left: 80%; 288 | } 289 | .eventtype{ 290 | font-size: 40px; 291 | } 292 | .eventname{ 293 | font-size: 40px; 294 | } 295 | .story{ 296 | font-size: 30px; 297 | } 298 | .storycode{ 299 | font-size: 20px; 300 | } 301 | .currentLang{ 302 | font-size: 40px; 303 | } 304 | .langSelect{ 305 | font-size: 40px; 306 | } 307 | .option{ 308 | font-size: 30px; 309 | } 310 | .settingtitle{ 311 | font-size: 30px; 312 | margin: 10px 0; 313 | } 314 | input{ 315 | font-size: 30px; 316 | } 317 | .settingoptions *{ 318 | font-size: 30px; 319 | } 320 | } -------------------------------------------------------------------------------- /ASTR/reader.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Warping 6 | 7 | 8 | Warp to ASTR... 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /ASTR/script.js: -------------------------------------------------------------------------------- 1 | title = "Test" 2 | 3 | sideBar = 'Links
\ 4 |
\ 5 | \ 8 | Github\ 9 |
\ 10 |
\ 11 | \ 12 | Bilibili\ 13 |
' 14 | 15 | 16 | function setHeader(){ 17 | document.getElementById("header").innerHTML = 'M31\'s Nightsky' 18 | } 19 | 20 | function setFooter(){ 21 | document.getElementById("footer").innerHTML = "@050644zf"; 22 | } 23 | 24 | function setSideBar(){ 25 | document.getElementById("sidebar").innerHTML = sideBar; 26 | } 27 | 28 | function initialize(){ 29 | document.querySelector("title").innerHTML = title 30 | setHeader();setSideBar();setFooter(); 31 | } 32 | 33 | -------------------------------------------------------------------------------- /ASTR/storymenu.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 |
18 | 21 |
22 | 23 | 34 | 35 | 36 |
37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /ASTR/style.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Material Icons'; 3 | font-style: normal; 4 | font-weight: 400; 5 | src: local('Material Icons'), 6 | local('MaterialIcons-Regular'), 7 | url(MaterialIcons-Regular.ttf) format('truetype'); 8 | } 9 | .material-icons { 10 | font-family: 'Material Icons'; 11 | font-weight: normal; 12 | font-style: normal; 13 | font-size: 24px; /* Preferred icon size */ 14 | display: inline-block; 15 | line-height: 1; 16 | text-transform: none; 17 | letter-spacing: normal; 18 | word-wrap: normal; 19 | white-space: nowrap; 20 | direction: ltr; 21 | 22 | /* Support for all WebKit browsers. */ 23 | -webkit-font-smoothing: antialiased; 24 | /* Support for Safari and Chrome. */ 25 | text-rendering: optimizeLegibility; 26 | 27 | /* Support for Firefox. */ 28 | -moz-osx-font-smoothing: grayscale; 29 | 30 | /* Support for IE. */ 31 | font-feature-settings: 'liga'; 32 | } 33 | body{ 34 | background-color: rgb(41, 41, 41); 35 | color: white; 36 | font-family: sans-serif; 37 | margin: 0px; 38 | overflow-x: hidden; 39 | } 40 | h1{ 41 | font-size: 200%; 42 | } 43 | a{ 44 | color: blanchedalmond; 45 | } 46 | canvas{ 47 | border: cyan 1px solid; 48 | } 49 | #header{ 50 | font-weight: bold; 51 | background-color: #007575; 52 | font-size: 200%; 53 | padding: 4px; 54 | padding-top: 8px; 55 | position: sticky; 56 | height: 42px; 57 | top: 0px; 58 | } 59 | #header a{ 60 | text-decoration: none; 61 | color: white; 62 | } 63 | .sidebar{ 64 | /*background-color: darkslategray;*/ 65 | background-color: rgb(22, 22, 22); 66 | width: 50%; 67 | margin-right: 4px; 68 | padding: 4px; 69 | padding-bottom: 1800px; 70 | max-height: 90%; 71 | overflow-y: scroll; 72 | overflow-x: clip; 73 | word-wrap: normal; 74 | position: fixed; 75 | top: 62px; 76 | transition: width 0.5s; 77 | /*box-shadow: 2px 2px 2px #000000;*/ 78 | } 79 | .sidebarhidden{ 80 | width: 0%; 81 | } 82 | #content{ 83 | margin: 8px; 84 | margin-left: 15%; 85 | width: 800px; 86 | } 87 | #footer{ 88 | background-color: teal; 89 | clear: both; 90 | text-align: center; 91 | } 92 | #ol{ 93 | text-decoration: overline; 94 | } 95 | #lt{ 96 | text-decoration: line-through; 97 | } 98 | #ul{ 99 | text-decoration: underline; 100 | } 101 | .linkblock{ 102 | display: block; 103 | text-decoration: none; 104 | width: 80px; 105 | margin: 4px; 106 | } 107 | .linkblock a{ 108 | text-decoration: none; 109 | color: unset; 110 | } 111 | .linkblock a:hover{ 112 | background-color: slategrey; 113 | } 114 | #github{ 115 | color: white; 116 | } 117 | #bili{ 118 | color: white; 119 | } 120 | @media (max-width: 1000px){ 121 | #content{ 122 | margin-left: 5%; 123 | width: 90%; 124 | font-size: 30px; 125 | } 126 | .sidebar{ 127 | width: 80%; 128 | transition: none; 129 | } 130 | .sidebarhidden{ 131 | width: 0%; 132 | } 133 | .material-icons{ 134 | font-size: 50px; 135 | } 136 | } -------------------------------------------------------------------------------- /ASTR/terminal_icons.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/ASTR/terminal_icons.ai -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) [2023] [Nightsky a.k.a 050644zf, and ASTR Contributors] 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Arknights Story Text Reader 2 | 3 | The python scripts for this repository have been move to [ASTR-Script](https://github.com/050644zf/ASTR-Script) 4 | 5 |

6 |   7 | 8 |

9 | 10 |

11 | CN | 12 | JP | 13 | KR | 14 | EN 15 |

16 | 17 |

18 |   19 |   20 |   21 | 22 |

23 | 24 | [Arknights Story Text Reader](https://astr.pages.dev/) is a website that help you view stories text in mobile game Arknights with following features: 25 | 26 | - Browsing Stories in all Arknights Servers (CN/JP/KR/EN/TW), and easily switch to different server in events, stories or anywhere else at upper right corner(if corresponding event exist). 27 | - Providing settings for configuring interface language and doctor's name in story 28 | - Pretty formatted story text, selecting option will navigate to corresponding line (in most stories) 29 | - More interesting features in misc 30 | 31 | ## Development Info 32 | 33 | ### File Structure 34 | 35 | `/.github`: Github Action Related Script 36 | 37 | `/ASTR`: Assets like Icons and fonts. 38 | 39 | `/reader`: Main Code Folder 40 | 41 | `/reader/src/ASTR`: Legacy Version of ASTR (Deprecated) 42 | 43 | `/reader/src/ASTRv2`: Current Version of ASTR (In active development) 44 | 45 | ### Related Repositories 46 | 47 | [ASTR-Script](https://github.com/050644zf/ASTR-Script) : Python script to generate data, including convert raw txt into json, counting words/characters, summarize story introdution and so on. 48 | 49 | [Kengxxiao/ArknightsGameData](https://github.com/Kengxxiao/ArknightsGameData) : Providing raw data, trigger of the Github Actions. 50 | 51 | [ArknightsStoryJson](https://github.com/050644zf/ArknightsStoryJson) : Storing the result generated from [ASTR-Script](https://github.com/050644zf/ASTR-Script). 52 | 53 | [Aceship/Arknight-Images](https://github.com/Aceship/Arknight-Images) : Providing images. 54 | 55 | ### Installation 56 | 57 | 1. **Clone** 58 | 59 | ```bash 60 | git clone https://github.com/050644zf/ArknightsStoryTextReader.git 61 | git submodule update --init --recursive 62 | cd ArknightsStoryTextReader 63 | ``` 64 | 65 | 2. **Install Dependencies** 66 | Navigate to the `reader` directory and install Node dependencies: 67 | 68 | ```bash 69 | cd reader 70 | npm install 71 | ``` 72 | 73 | 3. **Build** 74 | To build for production: 75 | 76 | ```bash 77 | npm run build 78 | ``` 79 | 80 | This will create a production-ready build in the `dist` folder inside `reader`. 81 | 82 | ### ASTRv2 Explained 83 | 84 | 1. Entrance Script: `reader\src\main2.js` 85 | 2. Load server data in `reader\src\ASTRv2\server.vue` into session storage, including `story_review_table.json` (events and stories index), `chardict.json` (character id -> character name), `storyinfo.json` (story path -> story info), `chapter_table.json` (maintheme index) and `wordcount.json` (words/chars countings of stories). 86 | 3. Render corresponding components base on route. Fetch more data (like story json) if necessary. 87 | -------------------------------------------------------------------------------- /reader/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .DS_Store 3 | dist 4 | dist-ssr 5 | *.local -------------------------------------------------------------------------------- /reader/.nvmrc: -------------------------------------------------------------------------------- 1 | v22.14.0 -------------------------------------------------------------------------------- /reader/README.md: -------------------------------------------------------------------------------- 1 | # Arknights Story Text Reader for web / 明日方舟剧情文本阅读器 for web 2 | 3 | **Arknights Story Text Reader (ASTR) for web** is a webpage application based on [ASTR](https://github.com/050644zf/ArknightsStoryTextReader). 4 | 5 | **明日方舟剧情文本阅读器(ASTR) for web** 是基于 [ASTR](https://github.com/050644zf/ArknightsStoryTextReader) 的网页应用 6 | 7 | [Change Log/ 更新日志](CHANGELOG.md) 8 | 9 | Powered by / 由以下项目支持: 10 | 11 | - Data Source / 数据源: [Kengxxiao/ArknightsGameData](https://github.com/Kengxxiao/ArknightsGameData) 12 | - Image Source / 图片源: [Aceship/AN-EN-Tags](https://github.com/Aceship/AN-EN-Tags) 13 | - Icon / 图标: [google/material-design-icons](https://github.com/google/material-design-icons) 14 | - Vue.js 15 | - jQuery -------------------------------------------------------------------------------- /reader/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 25 | 26 | 27 | 31 |
32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /reader/index2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Redirecting... 5 | 6 | 7 | 12 |

If you are not redirected automatically, click here.

13 | 14 | 15 | -------------------------------------------------------------------------------- /reader/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "reader", 3 | "version": "0.0.0", 4 | "scripts": { 5 | "dev": "vite", 6 | "build": "vite build", 7 | "serve": "vite preview" 8 | }, 9 | "dependencies": { 10 | "echarts": "^5.5.0", 11 | "jquery": "^3.6.0", 12 | "lodash": "^4.17.21", 13 | "vue": "^3.2.16", 14 | "vue-echarts": "^6.7.3", 15 | "vue-i18n": "^9.13.1", 16 | "vue-meta": "^3.0.0-alpha.10", 17 | "vue-router": "^4.0.12", 18 | "xlsx": "^0.17.5" 19 | }, 20 | "devDependencies": { 21 | "@vicons/fa": "^0.13.0", 22 | "@vicons/material": "^0.13.0", 23 | "@vitejs/plugin-vue": "^1.9.3", 24 | "naive-ui": "^2.38.1", 25 | "sass": "^1.49.0", 26 | "vite": "^2.9.17" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /reader/public/ASTR.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /reader/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/reader/public/favicon.png -------------------------------------------------------------------------------- /reader/public/favicon.svg: -------------------------------------------------------------------------------- 1 | R -------------------------------------------------------------------------------- /reader/relics.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Arknights Story Text Reader 9 | 10 | 11 | 15 |
16 | 17 | 18 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/ASTR.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 49 | 50 | 125 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/ak_terminal.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/reader/src/ASTRv2/ak_terminal.ttf -------------------------------------------------------------------------------- /reader/src/ASTRv2/assets/ASTReader.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/reader/src/ASTRv2/assets/ASTReader.png -------------------------------------------------------------------------------- /reader/src/ASTRv2/assets/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/reader/src/ASTRv2/assets/favicon.png -------------------------------------------------------------------------------- /reader/src/ASTRv2/components/opcard.vue: -------------------------------------------------------------------------------- 1 | 116 | 117 | 169 | 170 | 190 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/components/openInGTL.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 35 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/components/openInNewBtn.vue: -------------------------------------------------------------------------------- 1 | 15 | 16 | 36 | 37 | 44 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/animtext.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/decision.vue: -------------------------------------------------------------------------------- 1 | 29 | 30 | 61 | 62 | 85 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/delay.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/img.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 42 | 43 | 84 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/link.vue: -------------------------------------------------------------------------------- 1 | 25 | 26 | 67 | 68 | 85 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/nameline.vue: -------------------------------------------------------------------------------- 1 | 33 | 34 | 102 | 103 | 146 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/paging.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 94 | 95 | 107 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/predicate.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 26 | 27 | 38 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/content/subtitle.vue: -------------------------------------------------------------------------------- 1 | 28 | 29 | 75 | 76 | 104 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/eventpage.vue: -------------------------------------------------------------------------------- 1 | 145 | 146 | 231 | 232 | 250 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/footer.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 101 | 102 | 109 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/func.js: -------------------------------------------------------------------------------- 1 | const langList = ["zh_CN", "en_US", "ko_KR", "ja_JP", "zh_TW"]; 2 | const serverList = ["zh_CN", "en_US", "ko_KR", "ja_JP", "zh_TW"]; 3 | const bgModes = ["full", "stripe", "off"]; 4 | const professions = [ 5 | "PIONEER", 6 | "CASTER", 7 | "WARRIOR", 8 | "MEDIC", 9 | "TANK", 10 | "SUPPORT", 11 | "SNIPER", 12 | "SPECIAL", 13 | ]; 14 | const professions_aceship = [ 15 | "VANGUARD", 16 | "CASTER", 17 | "GUARD", 18 | "MEDIC", 19 | "DEFENDER", 20 | "SUPPORTER", 21 | "SNIPER", 22 | "SPECIALIST", 23 | ]; 24 | 25 | const rarity_colors = [ 26 | "#000000", 27 | "#9F9F9F", 28 | "#DCE537", 29 | "#00B2F6", 30 | "#DBB1DB", 31 | "#FFAE00", 32 | "#FF6600", 33 | ]; 34 | 35 | const server_epoch = { 36 | zh_CN: 2019, 37 | en_US: 2020, 38 | ko_KR: 2020, 39 | ja_JP: 2020, 40 | } 41 | 42 | var urlParams = new URLSearchParams(window.location.search); 43 | var server = urlParams.get("s"); 44 | var l = window.localStorage.getItem("lang"); 45 | var alt = window.localStorage.getItem("alt"); 46 | var doctor = window.localStorage.getItem("doctor"); 47 | var hidetip = window.localStorage.getItem("hidetip"); 48 | var showDelay = window.localStorage.getItem("showDelay"); 49 | var hideName = window.localStorage.getItem("hideName"); 50 | var wversion = window.localStorage.getItem("wversion"); 51 | // var showbg = window.localStorage.getItem('showbg'); 52 | var bgMode = window.localStorage.getItem("bgMode"); 53 | var inited = window.localStorage.getItem("inited"); 54 | var mirror = window.localStorage.getItem("mirror"); 55 | var fontsize = window.localStorage.getItem("fontsize"); 56 | var margin = window.localStorage.getItem("margin"); 57 | var imageRepo = window.localStorage.getItem("imageRepo"); 58 | var storyFile = urlParams.get("f"); 59 | var storyData = { eventName: "Loading..." }; 60 | var isOldversion = false; 61 | const currentwversion = 13; 62 | 63 | if (!server) { 64 | server = "zh_CN"; 65 | } 66 | if (!alt) { 67 | alt = 'none'; 68 | } 69 | if (!l || l == "none" || l == "Default") { 70 | l = navigator.language.replace("-", "_"); 71 | } 72 | if (l == "ja") { 73 | l = "ja_JP"; 74 | } 75 | if (langList.indexOf(l) == -1) { 76 | l = "en_US"; 77 | } 78 | console.log("Current Language: " + l); 79 | if (!doctor) { 80 | doctor = "{@nickname}"; 81 | } 82 | if (!hidetip) { 83 | hidetip = false; 84 | } 85 | if (!showDelay) { 86 | showDelay = "y"; 87 | } 88 | if (!hideName) { 89 | hideName = "n"; 90 | } 91 | if (!bgMode) { 92 | bgMode = "stripe"; 93 | } 94 | if (!imageRepo) { 95 | imageRepo = "fexli"; 96 | } 97 | if (!inited) { 98 | inited = false; 99 | } 100 | if (!mirror) { 101 | mirror = "origin"; 102 | } 103 | if (!margin) { 104 | margin = 4; 105 | } 106 | if (!fontsize) { 107 | fontsize = 14; 108 | } 109 | if (!wversion || wversion < currentwversion) { 110 | wversion = currentwversion; 111 | window.localStorage.setItem("wversion", wversion); 112 | isOldversion = true; 113 | } 114 | 115 | export default { 116 | urlParams: urlParams, 117 | professions: professions, 118 | professions_aceship: professions_aceship, 119 | rarity_colors: rarity_colors, 120 | l: l, 121 | alt: alt, 122 | langList: langList, 123 | serverList: serverList, 124 | server: server, 125 | server_epoch: server_epoch[server], 126 | doctor: doctor, 127 | hidetip: hidetip, 128 | showDelay: showDelay, 129 | bgMode: bgMode, 130 | bgModes: bgModes, 131 | imageRepo: imageRepo, 132 | hideName: hideName, 133 | inited: inited, 134 | mirror: mirror, 135 | margin: margin, 136 | fontsize: fontsize, 137 | storyFile: storyFile, 138 | storyData: storyData, 139 | intermezzi: [ 140 | "act9d0", 141 | "act18d0", 142 | "act18d3", 143 | "act17side", 144 | "act25side", 145 | "act33side", 146 | "act37side" 147 | ], 148 | collab: [ 149 | "act17d0", 150 | "act13mini", 151 | "act32side" 152 | ], 153 | wversion: wversion, 154 | isOldversion: isOldversion, 155 | parseContent(content) { 156 | if (content) { 157 | const color_re = /(.+?)<\/color>/gm; 158 | const color_sub = `$2`; 159 | const nbsp_sub_before = /(\s+)(<\/?\w+>)/gm; 160 | const nbsp_sub_after = /(<\/?\w+>)(\s+)/gm; 161 | content = content.replaceAll("{@nickname}", this.doctor); 162 | content = content.replace(/(?:\r\n|\r|\n|\\n|\\r)/g, "
"); 163 | content = content.replace(color_re, color_sub); 164 | // content = content.replace("#000000","white"); 165 | content = content.replace(nbsp_sub_before, " $2"); 166 | content = content.replace(nbsp_sub_after, "$1 "); 167 | } 168 | return content; 169 | }, 170 | focus() { 171 | var foc = document.getElementsByClassName("storyFocused")[0]; 172 | if (foc) { 173 | foc.scrollIntoView({ behavior: "smooth", block: "center" }); 174 | } 175 | console.log("focused!"); 176 | }, 177 | }; 178 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/gdoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "main_10": "https://docs.google.com/spreadsheets/d/1ZuLVsqNaub6hANauExjPc7LR0KdyOVl_OWdP3ykIW6Q", 3 | "act16side": "https://docs.google.com/spreadsheets/d/17YhGyRnNqsaOmIewhHCqhbGNxFZIhVvkuxGRby2DZnA", 4 | "act10mini": "https://docs.google.com/spreadsheets/d/1pBXeseF0-uRX5Y_szGIInelQRBaVC8M9Vt2qi1Y8jDo" 5 | } -------------------------------------------------------------------------------- /reader/src/ASTRv2/header.vue: -------------------------------------------------------------------------------- 1 | 90 | 91 | 162 | 163 | 198 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/i18n.json: -------------------------------------------------------------------------------- 1 | { 2 | "server": {"zh_CN":"简中服(CN)","en_US":"Global Server(EN)","ja_JP":"日本サーバー(JP)","ko_KR":"한국 서버(KR)", "zh_TW":"繁中服(TW)"}, 3 | "currentLang": {"zh_CN":"UI语言","en_US":"UI Language","ja_JP":"UIの言語","ko_KR":"현재 언어", "zh_TW":"UI語言"}, 4 | "selectStory": {"zh_CN":"请从目录中选择故事查看", 5 | "en_US":"Select the story you wanna view from the menu", 6 | "ja_JP":"閲覧したいストーリーをメニューから選んでください", 7 | "ko_KR":"열람하려는 스토리를 메뉴에서 선택하세요", 8 | "zh_TW":"請從目錄中選擇故事查看"}, 9 | "homepage": {"zh_CN":"首页","en_US":"Homepage","ja_JP":"ホーム","ko_KR":"홈페이지","zh_TW":"首頁"}, 10 | "main": {"zh_CN":"主题曲","en_US":"Main Theme","ja_JP":"メインテーマ","ko_KR":"메인", "zh_TW":"主题曲"}, 11 | "maintheme": {"zh_CN":"主题曲","en_US":"Maintheme","ja_JP":"メインテーマ","ko_KR":"메인", "zh_TW":"主题曲"}, 12 | "intermezzi": {"zh_CN":"插曲","en_US":"Intermezzi","ja_JP":"エピソード","ko_KR":"에피소드", "zh_TW":"插曲"}, 13 | "ss": {"zh_CN":"别传","en_US":"Side Story","ja_JP":"公共事業実録","ko_KR":"사이드", "zh_TW":"别传"}, 14 | "sidestory": {"zh_CN":"别传","en_US":"Sidestory","ja_JP":"公共事業実録","ko_KR":"사이드", "zh_TW":"别传"}, 15 | "mini": {"zh_CN":"故事集","en_US":"Story Collection","ja_JP":"特殊行動記録","ko_KR":"미니 스토리", "zh_TW":"故事集"}, 16 | "storyset": {"zh_CN":"故事集","en_US":"Storyset","ja_JP":"特殊行動記録","ko_KR":"미니 스토리", "zh_TW":"故事集"}, 17 | "operator_data": {"zh_CN":"干员资料","en_US":"Operators' Data","ja_JP":"オペレーター情報","ko_KR":"오퍼레이터 정보", "zh_TW":"干员资料"}, 18 | "archive": {"zh_CN":"干员档案","en_US":"Archive","ja_JP":"オペレーター档案","ko_KR":"오퍼레이터 아카이브", "zh_TW":"干员档案"}, 19 | "module": {"zh_CN":"干员模组","en_US":"Module","ja_JP":"オペレーターモジュール","ko_KR":"오퍼레이터 모듈", "zh_TW":"干员模组"}, 20 | "or": {"zh_CN":"干员密录","en_US":"Records","ja_JP":"回想秘録","ko_KR":"오퍼레이터 파일", "zh_TW":"幹員密錄"}, 21 | "search": {"zh_CN":"搜索","en_US":"Search","ja_JP":"検索","ko_KR":"검색", "zh_TW":"搜索"}, 22 | "misc": {"zh_CN":"其他","en_US":"Misc","ja_JP":"その他","ko_KR":"기타", "zh_TW":"其他"}, 23 | "setting":{"zh_CN":"设置","en_US":"Settings","ja_JP":"設定","ko_KR":"설정", "zh_TW":"设置"}, 24 | "clear":{"zh_CN":"重置所有设置","en_US":"Reset All Settings","ja_JP":"全ての設定を初期化","ko_KR":"모든 설정 초기화", "zh_TW":"重置所有设置"}, 25 | "dr":{"zh_CN":"博士称呼","en_US":"Doctor's Name","ja_JP":"ドクターの名前","ko_KR":"박사의 이름", "zh_TW":"博士稱呼"}, 26 | "showDelay":{"zh_CN":"显示空白分割行","en_US":"Show Blank Seperation Line","ja_JP":"空行を表示する","ko_KR":"공백 구분선 표시", "zh_TW":"顯示空白分割行"}, 27 | "mirror":{"zh_CN":"使用镜像加速(Beta,内地访问建议勾选)","en_US":"Use Mirror Resources(Beta)","ja_JP":"ミラーのリソースを使用する(Beta)","ko_KR":"미러 리소스 사용(Beta)", "zh_TW":"使用鏡像資源(Beta)"}, 28 | "showbg":{"zh_CN":"显示背景","en_US":"Show Background","ja_JP":"背景を表示する","ko_KR":"배경 표시", "zh_TW":"顯示背景"}, 29 | "fontsize":{"zh_CN":"字体大小","en_US":"Font Size","ja_JP":"フォントサイズ","ko_KR":"글꼴 크기", "zh_TW":"字體大小"}, 30 | "margin":{"zh_CN": "行距","en_US": "Line Spacing","ja_JP": "行間","ko_KR": "행 간격", "zh_TW": "行距"}, 31 | "save":{"zh_CN":"应用设置","en_US":"Apply Setting","ja_JP":"設定を適用","ko_KR":"설정 적용", "zh_TW":"应用设置"}, 32 | "home":{"zh_CN":"返回目录","en_US":"Return to Menu","ja_JP":"メニューに戻る","ko_KR":"메뉴로 돌아가기", "zh_TW":"返回目錄"}, 33 | "menu":{"zh_CN":"目录","en_US":"Menu","ja_JP":"メニュー","ko_KR":"메뉴", "zh_TW":"目錄"}, 34 | "export2excel":{"zh_CN":"导出Excel","en_US":"Export to Excel","ja_JP":"Excelに出力する","ko_KR":"엑셀로 내보내기", "zh_TW":"導出Excel"}, 35 | "showIntro":{"zh_CN":"显示简介","en_US":"Show Intro","ja_JP":"あらすじを表示する","ko_KR":"개략 표시", "zh_TW":"顯示簡介"}, 36 | "optionTraceDisabled":{"zh_CN":"由于技术问题,选项跟踪在该故事已被禁用","en_US":"Option Tracing Feature is disabled in this story due to technical issues.","ja_JP":"技術的問題により、当ストーリーでは選択肢は正常に機能しません。","ko_KR":"기술적인 문제로 인해 이 스토리에서 오퍼레이터 추적 기능을 사용할 수 없습니다", "zh_TW":"由於技術問題,選項跟踪在該故事已被禁用"}, 37 | "wordCount":{"zh_CN":" 词","en_US":" Words ","ja_JP":" 語 ","ko_KR":" 개 단어 ", "zh_TW":" 詞"}, 38 | "charCount":{"zh_CN":" 字","en_US":" Characters ","ja_JP":" 文字 ","ko_KR":" 자 ", "zh_TW":" 字"}, 39 | "length":{"zh_CN":"长度","en_US":"Length ","ja_JP":"文量 ","ko_KR":"길이 ", "zh_TW":"長度"}, 40 | "unit":{"zh_CN":" 单位","en_US":" Unit ","ja_JP":" 単位 ","ko_KR":" 단위 ", "zh_TW":" 單位"}, 41 | "loadDialog":{"zh_CN":"加载对话","en_US":"Load Dialog","ja_JP":"ダイアログを読み込む","ko_KR":"이야기 불러오기", "zh_TW":"加載對話"}, 42 | "unfold":{"zh_CN":"展开","en_US":"Unfold","ja_JP":"展開する","ko_KR":"펴기", "zh_TW":"展開"}, 43 | "fold":{"zh_CN":"折叠","en_US":"Fold","ja_JP":"たたむ","ko_KR":"접기", "zh_TW":"折疊"}, 44 | "warp":{"zh_CN":"跳转到故事...","en_US":"Warp to Story...","ja_JP":"ストーリーに移動...","ko_KR":"스토리로 이동...", "zh_TW":"跳轉到故事..."}, 45 | "bg_full": {"zh_CN":"完整","en_US":"Full","ja_JP":"フル","ko_KR":"Full", "zh_TW":"完整"}, 46 | "bg_stripe": {"zh_CN":"条形","en_US":"Stripe","ja_JP":"横長","ko_KR":"Stripe", "zh_TW":"條形"}, 47 | "bg_off": {"zh_CN":"关闭","en_US":"Off","ja_JP":"オフ","ko_KR":"Off", "zh_TW":"關閉"}, 48 | "extra": {"zh_CN":"其他/隐藏章节","en_US":"Extra/Hidden Chapters","ja_JP":"Extra/Hidden Chapters","ko_KR":"Extra/Hidden Chapters", "zh_TW":"其他/隱藏章節"}, 49 | "analysis": {"zh_CN":"字数/词数统计", 50 | "en_US":"Word/Char Count of Chapters", 51 | "ja_JP":"Word/Char Count of Chapters", 52 | "ko_KR":"Word/Char Count of Chapters", 53 | "zh_TW":"字數/詞數統計"}, 54 | "stats": {"zh_CN":"明日方舟特别回顾(仅支持CN服)", 55 | "en_US":"Arknights Journey Review (CN Server Only)", 56 | "ja_JP":"Arknights Journey Review (CN Server Only)", 57 | "ko_KR":"Arknights Journey Review (CN Server Only)", 58 | "zh_TW":"明日方舟特別回顧(僅支持CN服)"}, 59 | "isrecords": {"zh_CN":"集成战略月度记录", 60 | "en_US":"Integrated Strategies Monthly Records", 61 | "ja_JP":"Integrated Strategies Monthly Records", 62 | "ko_KR":"Integrated Strategies Monthly Records", 63 | "zh_TW":"集成戰略月度記錄"}, 64 | "act17side_log": {"zh_CN":"愚人号行动日志", 65 | "en_US":"Stultifera Navis Operation Log", 66 | "ja_JP":"Stultifera Navis Operation Log", 67 | "ko_KR":"Stultifera Navis Operation Log", 68 | "zh_TW":"愚人號行動日誌"}, 69 | "act25side_log": {"zh_CN":"孤星调查报告", 70 | "en_US":"Lone Trail Investigation Report", 71 | "ja_JP":"Lone Trail Investigation Report", 72 | "ko_KR":"Lone Trail Investigation Report", 73 | "zh_TW":"孤星調查報告"}, 74 | "openInNew": {"zh_CN":"在新标签页中打开","en_US":"Open in New Tab","ja_JP":"新しいタブで開く","ko_KR":"새 탭에서 열기", "zh_TW":"在新標籤頁中打開"}, 75 | "startTime": {"zh_CN":"开始时间","en_US":"Start Time","ja_JP":"開始時間","ko_KR":"시작 시간", "zh_TW":"開始時間"}, 76 | "annual_report": {"zh_CN":"明日方舟年度工作报告(仅支持CN服)", 77 | "en_US":"Arknights Annual Report (CN Server Only)", 78 | "ja_JP":"Arknights Annual Report (CN Server Only)", 79 | "ko_KR":"Arknights Annual Report (CN Server Only)", 80 | "zh_TW":"明日方舟年度工作報告(僅支持CN服)"}, 81 | "copied": {"zh_CN": "已复制该行链接!", 82 | "en_US": "The link of this line has been copied!", 83 | "ja_JP": "この行のリンクがコピーされました!", 84 | "ko_KR": "이 줄의 링크가 복사되었습니다!", 85 | "zh_TW": "已複製該行鏈接!"}, 86 | "timeasc": {"zh_CN": "时间升序", 87 | "en_US": "Time Ascending", 88 | "ja_JP": "時間昇順", 89 | "ko_KR": "시간 오름차순", 90 | "zh_TW": "時間升序"}, 91 | "timedesc": {"zh_CN": "时间降序", 92 | "en_US": "Time Descending", 93 | "ja_JP": "時間降順", 94 | "ko_KR": "시간 내림차순", 95 | "zh_TW": "時間降序"}, 96 | "openInGoogleTL": {"zh_CN": "在谷歌翻译中打开", 97 | "en_US": "Open in Google Translate", 98 | "ja_JP": "Google翻訳で開く", 99 | "ko_KR": "Google 번역에서 열기", 100 | "zh_TW": "在谷歌翻譯中打開"} 101 | } 102 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menu.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 63 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage.vue: -------------------------------------------------------------------------------- 1 | 95 | 96 | 163 | 164 | 193 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/additional_links.json: -------------------------------------------------------------------------------- 1 | { 2 | "data":[ 3 | { 4 | "id": "future", 5 | "localized_name": { 6 | "zh_CN": "FUTURE攻坚组", 7 | "en_US": "TEAM FUTURE" 8 | }, 9 | "localized_description": { 10 | "zh_CN": "", 11 | "en_US": "" 12 | }, 13 | "localized_slogan": { 14 | "zh_CN": "We create puzzles, we reveal puzzles", 15 | "en_US": "We create puzzles, we reveal puzzles" 16 | }, 17 | "localized_tags": { 18 | "zh_CN": [ 19 | "明日方舟谜题", 20 | "饭制谜题" 21 | ], 22 | "en_US": [ 23 | "Arknights Args Hunt", 24 | "Fan-made Puzzles" 25 | ] 26 | }, 27 | "icon_url": "https://theteamfuture.github.io/favicon.svg", 28 | "links": [ 29 | { 30 | "primary": true, 31 | "regionality": "EXCEPT_CHINA_MAINLAND", 32 | "localized_name": { 33 | "zh_CN": "官方网站", 34 | "en_US": "Official Website" 35 | }, 36 | "url": "https://theteamfuture.github.io/" 37 | }, 38 | { 39 | "primary": false, 40 | "regionality": "CHINA_MAINLAND", 41 | "localized_name": { 42 | "zh_CN": "森空岛", 43 | "en_US": "Skland" 44 | }, 45 | "url": "https://www.skland.com/" 46 | }, 47 | { 48 | "primary": false, 49 | "regionality": "CHINA_MAINLAND", 50 | "localized_name": { 51 | "zh_CN": "Bilibili", 52 | "en_US": "Bilibili" 53 | }, 54 | "url": "https://space.bilibili.com/1795756019" 55 | }, 56 | { 57 | "primary": false, 58 | "regionality": "CHINA_MAINLAND", 59 | "localized_name": { 60 | "zh_CN": "新浪微博", 61 | "en_US": "Weibo" 62 | }, 63 | "url": "https://weibo.com/u/7917542342" 64 | } 65 | ] 66 | } 67 | ] 68 | } -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/banners/analysis.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/reader/src/ASTRv2/menupage/banners/analysis.png -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/banners/maintheme.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/reader/src/ASTRv2/menupage/banners/maintheme.png -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/banners/op.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/050644zf/ArknightsStoryTextReader/1febb24531cce3efbbd3b19f65825b063084595e/reader/src/ASTRv2/menupage/banners/op.png -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/changelog.vue: -------------------------------------------------------------------------------- 1 | 231 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/event_card.vue: -------------------------------------------------------------------------------- 1 | 116 | 117 | 182 | 183 | 201 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/events.vue: -------------------------------------------------------------------------------- 1 | 140 | 141 | 204 | 205 | 239 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/friendlink.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 76 | 77 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/maintheme.vue: -------------------------------------------------------------------------------- 1 | 58 | 59 | 79 | 80 | 94 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/or.vue: -------------------------------------------------------------------------------- 1 | 64 | 65 | 199 | 200 | 258 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/menupage/search.vue: -------------------------------------------------------------------------------- 1 | 84 | 85 | 190 | 191 | 216 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/misc.vue: -------------------------------------------------------------------------------- 1 | 135 | 136 | 150 | 151 | 157 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/misc/act17side_log.vue: -------------------------------------------------------------------------------- 1 | 52 | 53 | 119 | 120 | 121 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/misc/act25side_log.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 118 | 119 | 133 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/misc/analysis.vue: -------------------------------------------------------------------------------- 1 | 48 | 49 | 279 | 280 | 291 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/misc/extra.vue: -------------------------------------------------------------------------------- 1 | 66 | 67 | 135 | 136 | 154 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/misc/isdialog.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | 158 | 159 | 168 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/misc/isrecords.vue: -------------------------------------------------------------------------------- 1 | 61 | 62 | 117 | 118 | 123 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/settings.vue: -------------------------------------------------------------------------------- 1 | 172 | 173 | 248 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/source.js: -------------------------------------------------------------------------------- 1 | const IMAGES_SRC_REPOS = { 2 | Aceship: "https://raw.githubusercontent.com/Aceship/Arknight-Images/main", 3 | fexli: "https://raw.githubusercontent.com/fexli/ArknightsResource/main", 4 | }; 5 | 6 | const GAME_DATA_REPOS = { 7 | github: "https://raw.githubusercontent.com/050644zf/ArknightsStoryJson/main/", 8 | m31ns: "https://r2.m31ns.top/" 9 | } 10 | 11 | export default { 12 | IMAGES_SRC_REPOS: IMAGES_SRC_REPOS, 13 | GAME_DATA_REPOS: GAME_DATA_REPOS, 14 | getAvgUrl(repo, imgtype, image) { 15 | if (repo == "Aceship") { 16 | return `${IMAGES_SRC_REPOS[repo]}/avg/${imgtype}/${image}.png`; 17 | } else if (repo == "fexli") { 18 | if (imgtype == "backgrounds") { 19 | return `${IMAGES_SRC_REPOS[repo]}/avgs/bg/${image}.png`; 20 | } else { 21 | return `${IMAGES_SRC_REPOS[repo]}/avgs/${image}.png`; 22 | } 23 | } 24 | }, 25 | getEquipUrl(repo, uniEquipId) { 26 | if (repo == "Aceship") { 27 | return `${IMAGES_SRC_REPOS[repo]}/equip/icon/${uniEquipId}.png`; 28 | } else if (repo == "fexli") { 29 | return `${IMAGES_SRC_REPOS[repo]}/equip/${uniEquipId}.png`; 30 | } 31 | }, 32 | getAvatarUrl(repo, charId) { 33 | if (repo == "Aceship") { 34 | return `${IMAGES_SRC_REPOS[repo]}/avatars/${charId}.png`; 35 | } else if (repo == "fexli") { 36 | return `${IMAGES_SRC_REPOS[repo]}/avatar/ASSISTANT/${charId}.png`; 37 | } 38 | }, 39 | async getData(server, path) { 40 | try{ 41 | return await fetch(`${GAME_DATA_REPOS["m31ns"]}${server}${path}`); 42 | } 43 | catch(e){ 44 | return await fetch(`${GAME_DATA_REPOS["github"]}${server}${path}`); 45 | } 46 | 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /reader/src/ASTRv2/style.css: -------------------------------------------------------------------------------- 1 | body{ 2 | width: 100%; 3 | overflow-x:hidden; 4 | overflow-y:hidden; 5 | } -------------------------------------------------------------------------------- /reader/src/ASTRv2/warp.vue: -------------------------------------------------------------------------------- 1 | 17 | 18 | 82 | 83 | 103 | -------------------------------------------------------------------------------- /reader/src/export.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import exportApp from './export/export.vue' 3 | 4 | 5 | createApp(exportApp).mount('#export') -------------------------------------------------------------------------------- /reader/src/main2.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import naive from 'naive-ui' 3 | import { createRouter,createWebHashHistory } from 'vue-router' 4 | import { createMetaManager, plugin as metaPlugin } from 'vue-meta' 5 | import { createI18n } from 'vue-i18n'; 6 | 7 | 8 | import ASTR from './ASTRv2/ASTR.vue' 9 | import server from './ASTRv2/server.vue' 10 | import menupage from './ASTRv2/menupage.vue' 11 | import eventpage from './ASTRv2/eventpage.vue' 12 | import contentpage from './ASTRv2/contentpage.vue' 13 | import exportpage from './ASTRv2/export.vue' 14 | import analysis from './ASTRv2/misc/analysis.vue' 15 | import stats from './ASTRv2/misc/stats.vue' 16 | import stats2023 from './ASTRv2/misc/stats2023.vue' 17 | import isrecords from './ASTRv2/misc/isrecords.vue' 18 | import act17side_log from './ASTRv2/misc/act17side_log.vue' 19 | import act25side_log from './ASTRv2/misc/act25side_log.vue' 20 | import extra from './ASTRv2/misc/extra.vue' 21 | import opcard from './ASTRv2/components/opcard.vue' 22 | import event_card from './ASTRv2/menupage/event_card.vue'; 23 | 24 | import en_US from './ASTRv2/astr-i18n/en_US.json' 25 | import zh_CN from './ASTRv2/astr-i18n/zh_CN.json' 26 | import ja_JP from './ASTRv2/astr-i18n/ja_JP.json' 27 | import ko_KR from './ASTRv2/astr-i18n/ko_KR.json' 28 | import zh_TW from './ASTRv2/astr-i18n/zh_TW.json' 29 | 30 | import func from './ASTRv2/func.js' 31 | 32 | const messages = { 33 | en_US: en_US, 34 | zh_CN: zh_CN, 35 | ja_JP: ja_JP, 36 | ko_KR: ko_KR, 37 | zh_TW: zh_TW, 38 | } 39 | 40 | const routes = [ 41 | { 42 | path: '/:server', 43 | component: server, 44 | children: [ 45 | { path: 'menu/:selected?', name:'menu', component: menupage, 46 | children: [ 47 | { path: 'char/:cid', name:'opcard', component: opcard }, 48 | { path: 'event/:eid', name:'event_card', component: event_card }, 49 | ] 50 | }, 51 | { path: 'event/:event',name:'event', component: eventpage }, 52 | { path: 'content',name:'content', component: contentpage }, 53 | { path: 'export',name:'export', component: exportpage }, 54 | { path: 'analysis',name:'analysis', component: analysis }, 55 | { path: 'stats',name:'stats', component: stats }, 56 | { path: 'stats2023', name:'stats2023', component: stats2023}, 57 | { path: 'isrecords',name:'isrecords', component: isrecords }, 58 | { path: 'act17side_log',name:'act17side_log', component: act17side_log }, 59 | { path: 'act25side_log',name:'act25side_log', component: act25side_log }, 60 | { path: 'extra',name:'extra', component: extra }, 61 | ] 62 | }, 63 | {path:'/',redirect:'/zh_CN/menu'} 64 | ] 65 | 66 | const router = createRouter({ 67 | // 4. 内部提供了 history 模式的实现。为了简单起见,我们在这里使用 hash 模式。 68 | history: createWebHashHistory(), 69 | routes, // `routes: routes` 的缩写 70 | }) 71 | const metaManager = createMetaManager(); 72 | 73 | const i18n = createI18n({ 74 | locale: func.l, 75 | fallbackLocale: 'en_US', 76 | messages: messages 77 | }) 78 | 79 | const app = createApp(ASTR); 80 | app.use(naive); 81 | app.use(router); 82 | app.use(metaManager); 83 | app.use(metaPlugin); 84 | app.use(i18n); 85 | app.mount('#ASTR'); 86 | 87 | 88 | -------------------------------------------------------------------------------- /reader/src/relics.js: -------------------------------------------------------------------------------- 1 | import { createApp } from 'vue' 2 | import relics from './relics/relics.vue' 3 | 4 | 5 | createApp(relics).mount('#relics') 6 | -------------------------------------------------------------------------------- /reader/src/relics/item.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 38 | 39 | -------------------------------------------------------------------------------- /reader/src/relics/relics.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 34 | 35 | -------------------------------------------------------------------------------- /reader/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig, loadEnv } from 'vite' 2 | const { resolve } = require('path') 3 | import vue from '@vitejs/plugin-vue' 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig(({command, mode}) => { 7 | 8 | const env = loadEnv(mode, process.cwd(), '') 9 | var base = env.VITE_BASE; 10 | if(!base){ 11 | base = '/'; 12 | } 13 | 14 | return{ 15 | plugins: [vue()], 16 | base: base, 17 | build: { 18 | rollupOptions: { 19 | input: { 20 | main: resolve(__dirname, 'index.html'), 21 | main2: resolve(__dirname, 'index2.html'), 22 | } 23 | } 24 | }, 25 | server:{ 26 | host: '0.0.0.0', 27 | port: 3000, 28 | fs:{ 29 | strict:false 30 | } 31 | } 32 | }}) 33 | --------------------------------------------------------------------------------