├── .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 |
--------------------------------------------------------------------------------
/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 | '
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 |
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 |
--------------------------------------------------------------------------------
/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 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
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 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
13 | {{ cdata.name }}
14 | {{ cdata.appellation }}
15 |
16 |
17 | {{ cdata.displayNumber }}
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 | {{ aline.storyTitle }}
30 |
35 |
36 |
37 |
38 |
39 |
40 | {{ $t('opcard.module') }}
46 |
47 |
48 |
53 |
54 | {{ equip.uniEquipName }}
55 |
56 |
57 |
61 | {{ equip.typeName1 }} - {{ equip.typeName2 }}
62 |
63 | {{ equip.typeName1 }}
64 |
65 |
66 |
67 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | {{ $t('opcard.or') }}
87 |
88 |
89 |
{{ recs.storySetName }}
90 |
91 |
96 |
97 |
98 |
99 |
100 |
101 | {{ rec.storyIntro }}
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
169 |
170 |
190 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/components/openInGTL.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | {{ $t('header.openInGoogleTL') }}
7 |
8 |
9 |
10 |
35 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/components/openInNewBtn.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | {{ $t('eventpage.openInNew') }}
13 |
14 |
15 |
16 |
36 |
37 |
44 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/animtext.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ content }}
9 |
10 |
11 |
12 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/decision.vue:
--------------------------------------------------------------------------------
1 |
2 |
28 |
29 |
30 |
61 |
62 |
85 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/delay.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/img.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
12 |
13 |
42 |
43 |
84 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/link.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
17 |
18 |
19 |
20 |
21 |
22 | {{ $t("contentpage.copied") }}
23 |
24 |
25 |
26 |
67 |
68 |
85 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/nameline.vue:
--------------------------------------------------------------------------------
1 |
2 |
7 | {{
8 | line.attributes.name
9 | }}
10 |
14 |
15 |
16 |
24 |
25 |
26 |
27 |
28 |
29 | {{ $t("contentpage.copied") }}
30 |
31 |
32 |
33 |
34 |
102 |
103 |
146 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/paging.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
17 |
18 |
19 |
20 |
21 | {{ storyOpts[storyIdx - 1]["label"] }}
22 |
23 |
24 |
25 |
34 |
35 | {{ storyOpts[storyIdx + 1]["label"] }}
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
94 |
95 |
107 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/predicate.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 | Options: {{ line.attributes.references.replaceAll(";", " ") }}
9 |
10 |
11 |
12 |
26 |
27 |
38 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/content/subtitle.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
18 |
19 |
20 |
21 |
22 |
23 | {{ $t("contentpage.copied") }}
24 |
25 |
26 |
27 |
28 |
29 |
75 |
76 |
104 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/eventpage.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 | {{ $t('eventpage.menu') }}
11 |
12 | {{ mdata[eventid]["name"] }}
13 |
14 |
15 |
21 |
22 |
23 |
24 | {{ $t('eventpage.showIntro') }}
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 | {{ $t('eventpage.export2excel') }}
37 |
38 |
39 |
40 |
41 |
42 |
47 |
48 | {{ $t('eventpage.act17side_log') }}
49 |
50 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
68 |
69 | {{ $t('eventpage.act25side_log') }}
70 |
71 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
89 |
90 | {{ $t('eventpage.extra') }}
91 |
92 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
107 |
117 |
118 | {{
119 | story.storyName
120 | }}
121 | {{ story.storyCode }} {{ story.avgTag }}
124 |
125 |
126 |
127 | {{ infodata[story["storyTxt"]] }}
128 |
129 |
130 |
131 |
132 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
231 |
232 |
250 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/footer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
45 |
46 |
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 |
2 |
3 |
88 |
89 |
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 |
2 |
3 | {{ eventList }}
4 |
5 |
6 |
7 |
63 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/menupage.vue:
--------------------------------------------------------------------------------
1 |
2 |
94 |
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 |
2 |
3 |
4 | Changelog
5 |
6 | v1.11.1
7 |
8 | Added gray color to alt language. #88
9 |
10 | v1.11
11 |
12 | Add basic music score support in CN server.
13 | Event now presented in modal card instead of pages. (CN server only so far)
14 |
15 | v1.10.2
16 |
17 | Fix the alt language misalignment issue, thanks to a322655's PR
18 |
19 | v1.10.1
20 |
21 | Adding connection of FriendLink API provided by Ceobe Canteen.
22 | Fix some layout issue in homepage.
23 | Fix the index of Main theme chapters.
24 |
25 | v1.10
26 |
27 | Migrate the ArknightsJson repo to Cloudflare R2 service. If the R2 is unavailable will fallback to githubusercontent.
28 |
29 | v1.9.2
30 |
31 | Adding i18n keys for homepage.
32 | #74
33 |
34 | v1.9.1
35 |
36 | Enable horizontal centering of img. Thanks to RieLCho's
37 | PR
38 |
39 | v1.9
40 |
41 | New Feature that can display alternative language when reading story.
42 | Now available in settings.
43 | Add i18n keys for error.
44 |
45 | v1.8.1
46 |
47 | Add support for new property animtext.
48 | #64
49 |
50 | v1.8
51 |
52 | Using Vue-i18n as i18n module.
53 |
54 | v1.7.1
55 |
56 | Fixed the is#4 monthly squad text.
57 |
58 | v1.7
59 |
60 | Migrate the data visualization framework from d3 to echarts in
61 | wordcount.
62 | Adding navigation of frequent use features in homepage
63 | Prettify the codes
64 |
65 | v1.6.2
66 |
67 | New feature: Open in google tl.
68 |
69 | v1.6.1
70 |
71 | Fixed display issue of white background & black color font
72 | subtitle.
73 | Using
74 | fexli/ArknightsResource
75 | as new image source
76 |
77 | v1.6
78 |
79 | Add event start time and sort by time feature in intermezzi and
80 | sidestory, thank's to
81 | Tsuk1ko's assistance.
82 |
83 | New Operators' Data page that shows the operators' archive, modules and
84 | records.
85 |
86 |
87 | v1.5.1
88 |
89 | Add aria roles for accessibility tools and main menu selection qol ,
90 | thank's to hanss314's
91 | PR
92 |
93 | v1.5
94 |
95 | Adapt to the major changes of game data.
96 |
97 | v1.4.3
98 |
99 | Add copy permalink to line and line warpping feature.
100 |
101 | v1.4.2
102 |
103 | Optimize the Predicate line.
104 | Add line margin adjustment.
105 |
106 | v1.4.1
107 |
108 | Add initialization guidance when launch ASTR first time.
109 | Add mirror accerlation support. Currently support Source serif
110 | loading.
111 | Add fontsize adjustment.
112 |
113 | v1.4
114 |
115 | Using Source Han Serif in the content of ASTR.
116 |
117 | v1.3.1
118 |
119 | Fix line break in subtitle class.
120 |
121 | v1.3
122 |
123 | Fix the search issue.
124 |
125 | v1.2.4
126 |
127 | Revert changes for new json format.
128 |
129 | v1.2.3
130 |
131 | Add new property support for excel export.
132 | Add Lone Trail Investigation Reports.
133 | Disable the search feature until available.
134 |
135 | v1.2.2
136 |
137 | Rhine Theme for Rhine Event!
138 |
139 | v1.2.1
140 |
141 | Fix missing space before & after html tag in content
142 | Change the alignment to center in content page
143 |
144 | v1.2
145 |
146 | Add Arknights Annual Report 2023
147 |
148 | v1.1.1
149 |
150 | Add "open in new tab" feature in menus.
151 |
152 | v1.1
153 |
154 | Bring back the paging feature
155 | Tweak the size of option button
156 |
157 | v1.0.1
158 |
159 | Add extra story in misc
160 |
161 | v1.0
162 |
163 | Add layout responsiveness for different scrren.
164 | Add "Scroll to the Top" button
165 | Add tab swap animation on menupage.
166 |
167 | Add Japanese UI support. Thanks to
168 | c-stella's PR
169 |
170 | v0.99.1
171 |
172 | Fix Monthly Team Records
173 |
174 | v0.99
175 |
176 | UI overhaul.
177 | Add animation in list selection and story introdution switch
178 | Add more option to background image display in settings
179 | (Under development) Add some responsiveness on some UI components
180 | Fix the image source, thanks to
181 | Fryze's PR
182 |
183 |
184 | v0.98.1
185 |
186 |
187 | Fix the wrong language issue in Monthly Squad Records, Integrated
188 | Stratgies
189 | Add animation in Event Characters/Words analysis
190 |
191 | Fix the en_US terms, thanks to
192 | jaywyeee's PR
193 |
194 |
195 | v0.98
196 |
197 | Add Backgroud Support
198 |
199 | v0.97
200 |
201 | Optimized the style of website
202 | Optimized some content in misc
203 | Add "Stultifera Navis Operation Log" in misc
204 | Add Warp to Story Feature
205 |
206 | v0.96
207 |
208 | v0.95
209 |
210 | Add "Arknights Journey Review" in misc
211 | Add loading screen
212 |
213 | v0.94
214 |
215 | Add support for new "Sticker" property
216 | Add analysis for word/characters number in events
217 | Add support for new "multiline" property
218 |
219 | v0.93
220 |
221 | Add meta data for social media embeddings.
222 | Fix the issue of loading data error in event page.
223 |
224 | v0.92
225 |
226 | Add return to home feature on icon.
227 | Add zoom in feature on story CGs.
228 |
229 |
230 |
231 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/menupage/event_card.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
11 |
20 |
29 |
30 | {{ edata.name }}
31 |
32 |
33 |
34 |
35 | {{ $t('eventpage.startTime') }}
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | {{ $t('eventpage.length') }}
45 |
46 |
47 | {{ $t('eventpage.wordCount') }}
54 | {{ $t('eventpage.charCount') }}
61 |
62 |
63 |
64 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 | {{ $t('eventpage.showIntro') }}
79 |
80 |
81 |
82 |
83 |
84 |
89 |
90 |
91 | {{
92 | story.storyName
93 | }}
94 | {{ story.storyCode }} {{ story.avgTag }}
97 |
98 |
99 | {{ infodata[story["storyTxt"]] }}
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
182 |
183 |
201 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/menupage/events.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
29 | {{
30 | $t('eventpage.timeasc')
31 | }}
32 | {{
33 | $t('eventpage.timedesc')
34 | }}
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
49 |
59 |
72 |
73 |
74 | {{ edata.name }}
83 | #{{ edata.set }}
86 |
87 |
88 |
89 |
90 |
91 | {{ $t('eventpage.startTime') }}
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 | {{ $t('eventpage.length') }}
101 |
102 |
103 | {{ $t('eventpage.wordCount') }}
110 | {{ $t('eventpage.charCount') }}
117 |
118 |
119 |
120 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
204 |
205 |
239 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/menupage/friendlink.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ data.localized_name[lang] }}
5 |
6 |
7 |
8 |
9 |
10 | {{ tag }}
11 |
12 |
19 |
20 |
21 | {{ data.localized_name[lang] }}
22 |
23 |
24 |
25 |
26 |
27 | {{ tag }}
28 |
29 | {{ data.localized_slogan[lang] }}
30 | {{ data.localized_description[lang] }}
31 |
32 |
41 | 🇨🇳
42 | 🌏
43 |
44 | {{ link.localized_name[lang] }}
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
76 |
77 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/menupage/maintheme.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 | {{ cidx }}
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 | {{ chapter.chapterName }}
17 |
18 |
19 | {{ chapter.chapterName2 }}
20 |
21 |
22 |
23 |
24 |
25 |
26 |
36 |
37 |
48 |
49 | {{ mdata[eid].name }}
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
79 |
80 |
94 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/menupage/or.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | All
8 |
9 |
14 |
23 |
24 |
25 |
26 |
32 |
33 |
34 |
35 |
36 |
37 |
44 |
45 |
50 |
51 | {{ cdata.name }}
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
199 |
200 |
258 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/menupage/search.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
29 |
30 | {{ eventid }}
32 | {{ event.length }} result(s)
33 |
34 |
35 |
36 |
37 |
38 | {{ story.storyCode }} {{ story.storyName }}
41 | {{ story.avgTag }}
42 |
43 |
44 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 | 关于搜索 / About Search:
70 | ASTR提供基于Github API的搜索功能。由于Github API的限制,每个文件只能展示两条结果
74 | ASTR provides search feature based on Github API. Due to the limitation of
75 | Github API,
76 | each file can only show two results
78 | 归根结底还是没钱搭服务器,只能靠嫖Github过日子。
81 |
82 |
83 |
84 |
85 |
190 |
191 |
216 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/misc.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 |
10 |
11 | {{ $t('misc.analysis') }}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
26 |
27 |
28 |
29 | {{ $t('misc.isrecords') }}
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
44 |
45 |
46 |
47 | {{ $t('misc.act17side_log') }}
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
62 |
63 |
64 |
65 | {{ $t('misc.act25side_log') }}
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | 已弃用 / Deprecated
80 |
81 |
82 |
83 |
84 |
85 | {{ $t('misc.stats') }}
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
100 |
101 |
102 |
103 | {{ $t('misc.annual_report') }}
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 | {{ $t('misc.extra') }}
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
150 |
151 |
157 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/misc/act17side_log.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 | {{ $t('eventpage.menu') }}
10 |
11 | 愚人号行动日志 | Stultifera Navis Operation Log
14 |
15 |
16 |
25 |
26 |
27 |
28 |
29 |
30 | {{ current_Opt.id }} {{ current_Opt.label }}
33 |
34 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
119 |
120 |
121 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/misc/act25side_log.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 | {{ $t('eventpage.menu') }}
10 |
11 | 孤星调查报告 | Lone Trail Investigation Report
14 |
15 |
16 |
17 |
23 |
24 |
25 |
26 | {{
27 | report.label
28 | }}
29 |
30 |
31 |
32 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
118 |
119 |
133 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/misc/analysis.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 | {{ $t('eventpage.menu') }}
10 |
11 | {{$t('misc.analysis')}}
14 |
15 |
16 |
17 |
23 |
26 | {{ $t('eventType.'+eType) }}
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | 计数规则/Counting Rule
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
279 |
280 |
291 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/misc/extra.vue:
--------------------------------------------------------------------------------
1 |
2 |
65 |
66 |
67 |
135 |
136 |
154 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/misc/isdialog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 | {{ $t('isrecords.loadDialog') }}
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | {{ $t('isrecords.unfold') }}
21 | {{ $t('isrecords.fold') }}
22 |
23 |
24 |
25 |
31 |
32 |
33 |
{{ line.content }}
34 |
{{ line.content }}
35 |
41 |
46 | {{
47 | line.content
48 | }}
49 |
50 |
51 |
52 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
158 |
159 |
168 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/misc/isrecords.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
9 | {{ $t('eventpage.menu') }}
10 |
11 | 月度小队记录 | Monthly Team Records
14 |
15 |
16 |
17 |
18 | {{ topic.name }}
19 |
20 |
21 |
26 |
27 |
32 | {{ team.teamYear }}-{{ team.teamMonth }}
34 | {{ team.teamName }}
36 |
37 |
43 |
44 |
45 |
46 | {{ team.teamDes }}
47 |
48 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
117 |
118 |
123 |
--------------------------------------------------------------------------------
/reader/src/ASTRv2/settings.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {{ $t('settings.setting') }}
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 | {{ $t('settings.currentLang') }}:
23 |
24 |
25 | {{ lang }}
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 | {{ $t('settings.altLang') }}:
36 |
37 |
38 | {{ $t('settings.none') }}
39 |
40 |
41 | {{ lang }}
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 | {{ $t('settings.mirror') }}:
52 |
57 |
58 |
59 |
60 |
61 |
62 |
63 | {{ $t('settings.dr') }}:
64 |
65 | Dr.
66 |
71 |
72 |
73 |
74 |
75 |
76 |
77 | {{ $t('settings.showDelay') }}:
78 |
83 |
84 |
85 |
86 |
87 |
88 |
89 | {{ $t('settings.showbg') }}:
90 |
91 |
92 | {{ $t('settings.bg_'+mode) }}
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 | {{ $t('settings.fontsize') }}:
102 |
103 |
111 |
112 |
113 |
114 |
115 |
116 |
117 | {{ $t('settings.margin') }}:
118 |
119 |
127 |
128 |
129 |
130 |
136 | 明日方舟剧情文本阅读器
137 |
138 |
144 | Arknights Story Text Reader
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 | {{ $t('settings.clear') }}
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 | {{ $t('settings.save') }}
166 |
167 |
168 |
169 |
170 |
171 |
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 |
2 |
16 |
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 |
2 |
3 |
4 |
![]()
5 |
6 |
7 |
8 |
{{itemInfo.name}}
9 |
{{itemInfo.usage}}
10 |
{{itemInfo.description}}
11 |
12 | lock_open
13 | {{itemInfo.unlockCondDesc}}
14 |
15 |
16 |
17 |
18 |
19 |
20 |
38 |
39 |
--------------------------------------------------------------------------------
/reader/src/relics/relics.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
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 |
--------------------------------------------------------------------------------