mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Merge branch 'preview' of https://github.com/the1812/Bilibili-Evolved into preview
This commit is contained in:
commit
1e74de18ca
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
2
.github/ISSUE_TEMPLATE/bug_report.md
vendored
@ -4,7 +4,7 @@ about: 功能运行不正常 / 失效
|
||||
|
||||
---
|
||||
<!-- 发布后默认您已阅读 Issues 须知 -->
|
||||
<!-- https://github.com/the1812/Bilibili-Evolved/blob/preview/issue-rules.md -->
|
||||
<!-- https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/issue-rules.md -->
|
||||
|
||||
<!-- 发之前记得看下置顶问题 (Pinned issues)(如果有的话) -->
|
||||
<!-- https://github.com/the1812/Bilibili-Evolved/issues -->
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/config.yml
vendored
2
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -10,7 +10,7 @@ contact_links:
|
||||
url: https://github.com/the1812/Bilibili-Evolved/discussions
|
||||
about: Issues 用于反馈 Bug, 新的功能建议和提问答疑请到讨论区查看
|
||||
- name: 查看 Issues 须知
|
||||
url: https://github.com/the1812/Bilibili-Evolved/blob/preview/issue-rules.md
|
||||
url: https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/issue-rules.md
|
||||
about: 默认所有 Issues 发起者均已了解此处的内容
|
||||
- name: 查看置顶问题
|
||||
url: https://github.com/the1812/Bilibili-Evolved/issues
|
||||
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -10,6 +10,7 @@ dark-template.css
|
||||
_dark-template.scss
|
||||
min/dark-slice-*.min.scss
|
||||
min/dark-slice-*.min.css
|
||||
doc/roadmap.*
|
||||
*.csx
|
||||
*.backup.*
|
||||
*.vue.ts
|
||||
|
||||
10
README.md
10
README.md
@ -6,11 +6,11 @@
|
||||
|
||||
</div>
|
||||
|
||||
[📦 安装](#安装) / [Install](install-tutorial.en-US.md) / [インストール](install-tutorial.ja-JP.md)
|
||||
[📦 安装](#安装) / [Install](doc/install-tutorial.en-US.md) / [インストール](doc/install-tutorial.ja-JP.md)
|
||||
|
||||
[⚙ 设置](#设置)
|
||||
|
||||
[📚 功能](features.md)
|
||||
[📚 功能](doc/features.md)
|
||||
|
||||
[👻 兼容性](#兼容性)
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
|
||||
[📖 参与开发](CONTRIBUTING.md)
|
||||
|
||||
[❤ 捐助](donate.md)
|
||||
[❤ 捐助](doc/donate.md)
|
||||
|
||||
# 安装
|
||||
需要浏览器拥有[Tampermonkey](https://tampermonkey.net/)插件.
|
||||
@ -57,7 +57,7 @@
|
||||
# 设置
|
||||
脚本启用后, 在网页左侧中央会有一个齿轮图标, 点击即可打开设置. 默认只启用了一部分功能, 您可以根据需要自由调整设置.
|
||||
|
||||
可以在[功能列表](features.md)页中查看每项功能的详细说明, 在网页中通过鼠标停留在某一项也可以查看简要说明.
|
||||
可以在[功能列表](doc/features.md)页中查看每项功能的详细说明, 在网页中通过鼠标停留在某一项也可以查看简要说明.
|
||||
|
||||
大部分功能可通过设置面板开启, 有一些功能会以`附加功能`的形式生效, 或者是可以在`附加功能`做进一步设置. `附加功能`可从网页左侧中央的功能按钮进入.
|
||||
|
||||
@ -141,7 +141,7 @@ UWP 版 Edge 已经不再支持了(就是 Windows 10 自带的那个), 请使用
|
||||
|
||||
**喜欢的话就点个⭐Star吧(°∀°)ノ**
|
||||
|
||||
**或者也可以考虑[捐助](donate.md)支持一下哦(`・ω・´)**
|
||||
**或者也可以考虑[捐助](doc/donate.md)支持一下哦(`・ω・´)**
|
||||
|
||||
支付宝
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
71
doc/aria2-notice.md
Normal file
71
doc/aria2-notice.md
Normal file
@ -0,0 +1,71 @@
|
||||
# 使用 aria2 下载大文件
|
||||
使用 aria2 可以解决 Chrome 无法下载超过 2GB 视频的限制, 以及 Firefox 内存占用过大导致标签页卡顿或崩溃的问题.
|
||||
|
||||
## 下载 aria2
|
||||
您可以在 [aria2官网](https://aria2.github.io/) 或 [GitHub Releases页面](https://github.com/aria2/aria2/releases/latest) 下载 aria2. 无需安装, 解压放在一个文件夹里后即可使用.
|
||||
|
||||
## 使用 aria2
|
||||
脚本支持两种方式将数据传送给 aria2:
|
||||
### 导出 aria2
|
||||
这个选项将导出一个纯文本文件, 里面记录了下载视频所需的信息, 将它传给 aria2 即可开始下载.
|
||||
|
||||
假设导出的文件是`export.txt`, 放在 aria2 相同的文件夹中. 可以在终端中使用以下命令开始下载: (当然终端里的工作目录也要在 aria2 的文件夹里)
|
||||
```powershell
|
||||
aria2c -i export.txt
|
||||
```
|
||||
|
||||
> Windows 系统的终端可以从 **资源管理器** 里的 **文件** - **打开 Windows Powershell** 启动.
|
||||
|
||||
如果经常需要下载, 这些步骤还是比较繁琐的, 有一些方法可以简化这些步骤:
|
||||
|
||||
1. 添加 aria2 的文件夹到 PATH 环境变量中, 这样就可以在任意位置使用 `aria2c` 命令. 可以参考[Java官网对PATH的解释](https://www.java.com/zh_CN/download/help/path.xml)或者[这篇知乎专栏](https://zhuanlan.zhihu.com/p/67726501)的3.2节.
|
||||
2. 使用下方的 aria2 RPC 方法.
|
||||
|
||||
### 导出 aria2 RPC
|
||||
aria2 RPC 是 aria2 提供的一种功能, 可以让 aria2 保持运行, 源源不断地接收下载任务并自动完成下载. 初次配置会比较繁琐, 但完成后就不需要像上面那样每次都要在终端里输命令了.
|
||||
|
||||
配置 RPC 的过程篇幅比较长, 推荐去网上搜一下教程, 这里给出一些参考教程: (请先看一下下面的简要说明再开始跟着教程)
|
||||
1. [如何配置 Aria2 来进行文件下载 - 简书](https://www.jianshu.com/p/ab2b0c8a077a)
|
||||
2. [aria2配置示例 | Binuxの杂货铺](https://binux.blog/2012/12/aria2-examples/)
|
||||
|
||||
配置文件参考: (只包含了几个关键的设置, 教程里其他设置可以跳过)
|
||||
```conf
|
||||
# 文件的保存路径 (可使用绝对路径或相对路径), 默认: 当前启动位置
|
||||
dir=C:/xxxx
|
||||
# 单个任务最大线程数, 添加时可指定, 默认:5
|
||||
split=12
|
||||
# 启用 RPC, 默认:false
|
||||
enable-rpc=true
|
||||
# RPC 监听端口, 端口被占用时可以修改, 默认:6800
|
||||
rpc-listen-port=6800
|
||||
# 允许所有来源, 默认:false
|
||||
rpc-allow-origin-all=true
|
||||
# 允许非外部访问, 默认:false
|
||||
rpc-listen-all=true
|
||||
# 设置的 RPC 授权令牌, v1.18.4 新增功能, 取代 --rpc-user 和 --rpc-passwd 选项
|
||||
rpc-secret=xxxxxx
|
||||
```
|
||||
基本上就是指定一下保存路径, 设一个密钥, 其他 RPC 设置开起来就 OK 了. RPC 密钥(rpc-secret)就是类似密码的东西, 下载请求里带上正确的密码才可以下载, 建议还是设一个比较好.
|
||||
|
||||
只要做到让 aria2 读取您的配置后启动即可, 有需要还可以加一个开机自启动.
|
||||
```powershell
|
||||
aria2c --conf-path=aria2.conf
|
||||
```
|
||||
|
||||
在脚本中选择`导出 aria2 RPC`选项后, 会出现 RPC 配置面板, 需要填一下对应的配置:
|
||||
- 主机: 默认是本地, 如果您的 aria2 运行在远程服务器上, 可以把主机改成服务器的.
|
||||
- 端口: 默认6800, 如果您在配置文件里改过, 那么这里也要改.
|
||||
- 密钥: 如果您设置了RPC密钥, 需要在这里输入, 没设置的话留空.
|
||||
- 限速: 单个任务的最大下载速度, 默认不限速.
|
||||
- 默认路径: 设置一个默认路径, 脚本最后会把`默认路径`和`路径`拼在一起产生最终路径发送给aria2.
|
||||
- 路径: 如果需要下载到默认路径里的子文件夹, 可以在这里设置.
|
||||
- 方法: 如果需要更改发送请求时的HTTP方法, 可以选择GET或POST.
|
||||
|
||||
点`开始下载`后, 脚本会记住这些配置, 然后发送下载请求给 aria2, 配置都正确无误的话, 下载就会自动开始了.
|
||||
|
||||
> 您可以在 [aria2 WebUI](https://ziahamza.github.io/webui-aria2/) 中输入您的配置, 连接后可以直观地看到下载状态等信息
|
||||
|
||||
> 如果您的远程服务器是 `http` 而非 `https`, 首次导出时脚本管理器可能会弹出警告, 询问您是否允许脚本访问跨域网址, 选择始终允许即可.
|
||||
|
||||
## 卸载 aria2
|
||||
如需卸载 aria2, 删掉它的文件夹就行了.
|
||||
151
doc/donate.md
Normal file
151
doc/donate.md
Normal file
@ -0,0 +1,151 @@
|
||||
# 投喂区
|
||||
如果您很喜欢这个项目, 欢迎打赏, 金额随意. 您的支持是我们的动力(=・ω・=)
|
||||
|
||||
如需匿名或使用昵称请在备注中写明哦. (支付宝不自带昵称, 所以昵称名也要写明才能使用昵称)
|
||||
|
||||
## 支付宝
|
||||
|
||||
<img alt="支付宝" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/alipay.jpg" height="200">
|
||||
|
||||
## 微信
|
||||
|
||||
<img alt="微信" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/wechat.jpg" height="200">
|
||||
|
||||
# 历史
|
||||
|
||||
(列表是手动维护的, 可能无法及时更新)
|
||||
<!--'单号'在支付宝中为'收款单号'/'交易订单号'-->
|
||||
<!-- | 2020.10.16 17:16:05 | 匿名 (要求不列出) | \ | \ | -->
|
||||
|
||||
| 时间 | 用户名 | 单号后4位 | 金额 |
|
||||
| ------------------- | ------------ | --------- | ------ |
|
||||
| 2020.11.18 00:28:46 | *荣 | 4327 | ¥0.42 |
|
||||
| 2020.11.16 18:41:29 | *浩 | 5499 | ¥5.00 |
|
||||
| 2020.11.14 19:49:39 | *阳 | 8260 | ¥5.00 |
|
||||
| 2020.11.08 17:37:11 | *稳 | 0269 | ¥10.00 |
|
||||
| 2020.11.07 11:44:41 | *s | 4609 | ¥1.00 |
|
||||
| 2020.11.06 19:53:27 | *云 | 5308 | ¥5.00 |
|
||||
| 2020.11.05 00:58:11 | 饭团 | 8551 | ¥50.00 |
|
||||
| 2020.11.03 23:26:36 | 🍭 | 0560 | ¥5.00 |
|
||||
| 2020.11.02 18:02:02 | 匿名 | 2574 | ¥1.00 |
|
||||
| 2020.11.01 17:26:27 | *起 | 7617 | ¥5.00 |
|
||||
| 2020.10.31 00:39:25 | E*. | 3618 | ¥1.00 |
|
||||
| 2020.10.28 20:57:27 | *行 | 6778 | ¥5.00 |
|
||||
| 2020.10.28 19:54:10 | 匿名 | 9287 | ¥5.00 |
|
||||
| 2020.10.28 02:47:58 | 流逸 | 4223 | ¥10.24 |
|
||||
| 2020.10.26 13:12:03 | *子 | 7709 | ¥10.00 |
|
||||
| 2020.10.23 12:24:17 | *晔 | 7328 | ¥5.00 |
|
||||
| 2020.10.20 11:44:48 | *淇 | 9423 | ¥50.00 |
|
||||
| 2020.10.19 22:07:35 | *水 | 8206 | ¥2.00 |
|
||||
| 2020.10.18 21:02:49 | 栗子啊栗子 | 6598 | ¥10.00 |
|
||||
| 2020.10.18 15:05:20 | 一年级么么哒 | 1538 | ¥11.45 |
|
||||
| 2020.10.17 21:22:45 | *瑞 | 3555 | ¥10.00 |
|
||||
| 2020.10.17 01:55:58 | 行秋赛高! | 6598 | ¥8.88 |
|
||||
| 2020.10.15 14:19:54 | *涛 | 6510 | ¥10.00 |
|
||||
| 2020.10.08 15:37:46 | zerojm | 4405 | ¥2.22 |
|
||||
| 2020.10.06 17:00:23 | *林 | 1630 | ¥2.00 |
|
||||
| 2020.10.05 20:39:15 | *海 | 6647 | ¥1.00 |
|
||||
| 2020.10.04 14:03:16 | *华 | 1633 | ¥1.00 |
|
||||
| 2020.10.03 09:21:52 | qiuku233 | 6503 | ¥8.00 |
|
||||
| 2020.10.03 02:06:12 | A*N | 8644 | ¥10.00 |
|
||||
| 2020.09.28 16:44:05 | *叶 | 5560 | ¥2.00 |
|
||||
| 2020.09.27 18:12:44 | *斐 | 0603 | ¥5.00 |
|
||||
| 2020.09.26 23:47:03 | 嘉禾望岗 | 3565 | ¥6.66 |
|
||||
| 2020.09.22 18:01:28 | *磊 | 2645 | ¥2.00 |
|
||||
| 2020.09.21 11:55:45 | a*r | 6534 | ¥6.66 |
|
||||
| 2020.09.20 10:13:10 | *淦 | 2619 | ¥3.00 |
|
||||
| 2020.09.15 22:05:56 | k*s | 7545 | ¥10.00 |
|
||||
| 2020.09.14 23:24:11 | *峰 | 4528 | ¥10.00 |
|
||||
| 2020.09.12 11:13:11 | *清 | 7010 | ¥2.00 |
|
||||
| 2020.09.09 00:54:49 | *荣 | 0399 | ¥6.00 |
|
||||
| 2020.09.06 10:48:24 | *曦 | 2020 | ¥2.33 |
|
||||
| 2020.09.05 18:07:26 | K*6 | 0595 | ¥5.00 |
|
||||
| 2020.09.05 15:51:29 | *元 | 7344 | ¥1.00 |
|
||||
| 2020.09.04 22:38:47 | *峰 | 3099 | ¥2.22 |
|
||||
| 2020.08.26 17:41:23 | *彬 | 9108 | ¥0.01 |
|
||||
| 2020.08.22 18:56:16 | b*g | 2623 | ¥20.00 |
|
||||
| 2020.08.17 01:58:53 | *波 | 6776 | ¥5.00 |
|
||||
| 2020.08.16 17:54:17 | *烈 | 4673 | ¥3.00 |
|
||||
| 2020.08.05 21:38:39 | K*n | 7216 | ¥5.00 |
|
||||
| 2020.08.04 10:25:26 | i*u | 0253 | ¥8.88 |
|
||||
| 2020.08.02 13:53:40 | *里 | 6415 | ¥5.00 |
|
||||
| 2020.08.01 21:21:58 | 匿名 | 8649 | ¥10.00 |
|
||||
| 2020.07.31 18:41:31 | *动 | 9674 | ¥0.50 |
|
||||
| 2020.07.31 17:42:52 | *福 | 8570 | ¥9.99 |
|
||||
| 2020.07.30 16:43:58 | 匿名 | 7591 | ¥20.00 |
|
||||
| 2020.07.30 14:02:27 | *元 | 3283 | ¥1.00 |
|
||||
| 2020.07.28 10:05:05 | *延 | 2478 | ¥2.33 |
|
||||
| 2020.07.27 21:17:36 | 风林火山 | 6511 | ¥15.00 |
|
||||
| 2020.07.27 18:55:57 | *跃 | 1577 | ¥15.00 |
|
||||
| 2020.07.21 09:46:58 | H503mc | 1226 | ¥5.00 |
|
||||
| 2020.07.16 20:41:47 | Lucky9 | 9489 | ¥10.00 |
|
||||
| 2020.06.15 16:43:58 | *彬 | 1359 | ¥0.10 |
|
||||
| 2020.06.13 22:38:22 | *超 | 6703 | ¥5.00 |
|
||||
| 2020.06.08 12:41:57 | *销 | 5340 | ¥1.00 |
|
||||
| 2020.06.05 16:20:23 | 0*0 | 0604 | ¥2.33 |
|
||||
| 2020.05.26 16:38:41 | XQs.Reuter | 0220 | ¥3.00 |
|
||||
| 2020.05.24 10:16:10 | *奇 | 1357 | ¥5.00 |
|
||||
| 2020.05.21 12:46:04 | S*z | 3238 | ¥0.01 |
|
||||
| 2020.05.21 02:11:23 | 匿名 | 0980 | ¥6.66 |
|
||||
| 2020.05.19 11:27:09 | *は | 9322 | ¥1.00 |
|
||||
| 2020.05.15 12:46:05 | *柳 | 4624 | ¥5.91 |
|
||||
| 2020.05.09 17:40:11 | *捷 | 0536 | ¥5.00 |
|
||||
| 2020.05.09 07:38:28 | *徒 | 1571 | ¥20.00 |
|
||||
| 2020.05.08 23:10:46 | *梓 | 0599 | ¥0.01 |
|
||||
| 2020.05.02 15:54:23 | A*i | 8334 | ¥3.00 |
|
||||
| 2020.05.02 01:58:45 | *元 | 1144 | ¥1.00 |
|
||||
| 2020.04.30 20:50:48 | D*n | 2215 | ¥1.00 |
|
||||
| 2020.04.27 17:18:07 | 匿名 | 3563 | ¥11.78 |
|
||||
| 2020.04.24 08:37:44 | *蒙 | 0577 | ¥1.00 |
|
||||
| 2020.04.14 22:40:14 | M*V | 9235 | ¥10.00 |
|
||||
| 2020.04.11 19:48:27 | *记 | 8588 | ¥10.00 |
|
||||
| 2020.04.10 17:16:53 | *云 | 0293 | ¥1.00 |
|
||||
| 2020.04.08 23:07:57 | 风林火山 | 9323 | ¥6.00 |
|
||||
| 2020.04.04 21:01:31 | t*i | 6346 | ¥5.00 |
|
||||
| 2020.04.01 11:44:29 | *豪 | 2718 | ¥1.00 |
|
||||
| 2020.03.30 18:37:14 | 匿名 | 9610 | ¥10.00 |
|
||||
| 2020.03.26 16:47:18 | 匿名 | 3862 | ¥10.00 |
|
||||
| 2020.03.25 10:07:46 | *兄 | 6534 | ¥0.01 |
|
||||
| 2020.03.24 18:36:37 | K*e | 6541 | ¥12.00 |
|
||||
| 2020.03.24 16:16:04 | *J | 4253 | ¥6.66 |
|
||||
| 2020.03.21 15:40:35 | *涛 | 0476 | ¥10.00 |
|
||||
| 2020.03.18 19:33:28 | *. | 6551 | ¥5.00 |
|
||||
| 2020.03.09 18:24:10 | *柳 | 2522 | ¥10.00 |
|
||||
| 2020.02.14 20:00:17 | pandline | 3302 | ¥5.00 |
|
||||
| 2020.02.09 02:05:35 | Lucky9 | 0233 | ¥10.00 |
|
||||
| 2020.02.06 20:56:15 | *凯 | 2251 | ¥5.00 |
|
||||
| 2020.02.06 20:55:24 | *凯 | 1247 | ¥20.20 |
|
||||
| 2020.01.31 21:14:21 | D*n | 5231 | ¥2.00 |
|
||||
| 2020.01.28 23:06:56 | 匿名 | 4162 | ¥20.00 |
|
||||
| 2020.01.23 23:06:56 | 匿名 | 8203 | ¥20.00 |
|
||||
| 2019.12.30 12:06:41 | *蒙 | 8772 | ¥0.50 |
|
||||
| 2019.12.22 15:42:56 | *康 | 9834 | ¥5.00 |
|
||||
| 2019.12.09 21:10:07 | *旭 | 8648 | ¥10.00 |
|
||||
| 2019.12.07 09:05:16 | Lucky9 | 7976 | ¥10.00 |
|
||||
| 2019.11.27 20:05:01 | *强 | 8232 | ¥20.00 |
|
||||
| 2019.11.17 16:11:09 | *轩 | 2468 | ¥1.88 |
|
||||
| 2019.11.16 23:59:03 | *恒 | 1233 | ¥2.00 |
|
||||
| 2019.10.17 15:20:20 | *心 | 5265 | ¥5.00 |
|
||||
| 2019.08.22 19:26:01 | 匿名 | 3083 | ¥22.33 |
|
||||
| 2019.08.08 21:12:46 | *奴 | 8309 | ¥5.00 |
|
||||
| 2019.08.07 03:47:05 | 匿名 | 2174 | ¥50.00 |
|
||||
| 2019.07.31 20:49:07 | *宇 | 5181 | ¥50.00 |
|
||||
| 2019.04.28 09:33:31 | *飞 | 4775 | ¥10.00 |
|
||||
| 2019.03.18 11:22:34 | T*r | 2298 | ¥2.00 |
|
||||
| 2019.02.03 00:40:46 | *睿 | 2418 | ¥6.00 |
|
||||
| 2019.01.20 12:17:02 | *杨 | 4063 | ¥10.00 |
|
||||
| 2019.01.19 19:39:10 | *鹏 | 8554 | ¥10.00 |
|
||||
|
||||
# 对备注的回复
|
||||
|
||||
## [2020.04.10][0293]
|
||||
抱歉, 不能.
|
||||
|
||||
## [2020.03.26][3862]
|
||||
支付宝显示的是带*号的名字, 并没有昵称哦. 所以我只好写匿名了.
|
||||
|
||||
## [2019.03.18][2298]
|
||||
参见[#1161](https://github.com/the1812/Bilibili-Evolved/issues/1161).
|
||||
|
||||
## [2019.08.07][2174]
|
||||
参见[关于浏览器插件](browser-extensions.md).
|
||||
719
doc/features.md
Normal file
719
doc/features.md
Normal file
@ -0,0 +1,719 @@
|
||||
# 功能列表
|
||||
以下是功能列表, 可以点击某一项功能展开详细说明.
|
||||
|
||||
> 我有时候会忘了更新这里, 可以在脚本设置里鼠标停在上面查看简短说明.
|
||||
|
||||
<h2 align="center">视频</h2>
|
||||
<div align="center">各种视频相关功能</div>
|
||||
|
||||
<details>
|
||||
<summary><strong>下载视频</strong></summary>
|
||||
|
||||
在视频播放页面中, `下载视频`按钮将在`附加功能`中启用, 点击可以选择清晰度并下载.
|
||||
|
||||
### 注意事项
|
||||
- 请尊重视频原作者的版权, 因下载产生的纠纷本人概不负责.
|
||||
- 4K清晰度只能导出下载, 不能直接下载.
|
||||
- `DASH`格式下载将得到视频和音频两个文件, 合并请参考[#183](https://github.com/the1812/Bilibili-Evolved/issues/183).
|
||||
- `FLV`格式视频如果有分段, 会把所有视频打包成`.zip`格式.
|
||||
- 能够下载的清晰度取决于当前登录的账号, 例如`高清 1080P60`需要已登录大会员账号.
|
||||
- 如果以您的账号权限无法观看某些视频(地区限制, 大会员专享等), 就算使用了类似[解除B站区域限制](https://greasyfork.org/zh-CN/scripts/25718-%E8%A7%A3%E9%99%A4b%E7%AB%99%E5%8C%BA%E5%9F%9F%E9%99%90%E5%88%B6)的脚本也是无法下载的, 除非您有对应节点的梯子.
|
||||
- 直接下载过程中所有数据都存在内存里, 内存占用很大的话会导致系统卡顿. 可以考虑使用`显示链接`转给IDM或浏览器下载, 或使用[导出 aria2](aria2-notice.md)来进行下载.
|
||||
- 短时间内大量下载(错误代码为412, 多发于批量导出某某教程/课程的全套视频)会遭到b站的暂时封禁, 需要等待一段时间后才能恢复, 这期间脚本的下载视频功能也会停用.
|
||||
|
||||
<div>
|
||||
<img height="500" alt="single" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/download-video-single.jpg">
|
||||
<img height="500" alt="batch" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/download-video-batch.jpg">
|
||||
</div>
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>下载弹幕</strong></summary>
|
||||
|
||||
在视频播放页面中, `下载弹幕`按钮将在`附加功能`中启用, 点击可以下载XML或ASS格式的弹幕.
|
||||
> ASS格式不支持高级弹幕, 反向弹幕, 字幕弹幕
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>下载字幕</strong></summary>
|
||||
|
||||
在视频播放页面中, `下载字幕`按钮将在`附加功能`中启用, 点击可以下载JSON或ASS格式的CC字幕.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>查看封面</strong></summary>
|
||||
|
||||
在视频播放页面/直播间中, `查看封面`按钮将在`附加功能`中启用, 点击可以查看或保存封面. (其实还可以看专栏的封面, 不过专栏的封面本来就显示在标题上方了)
|
||||
|
||||
<img height="400" alt="查看封面/下载视频/下载弹幕" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/download-video-view-cover.jpg">
|
||||
|
||||
</details>
|
||||
|
||||
<!-- <details>
|
||||
<summary><strong>指定播放器布局</strong></summary>
|
||||
|
||||
设置默认的播放器布局, 可分别设置视频区和番剧区. 尽量在相应的页面里设置(比如在番剧播放页面设置番剧播放器布局), 否则可能没有效果.
|
||||
|
||||
> **⚠ 旧版布局中, 很多脚本功能将不适用.**
|
||||
|
||||
- 旧版: 传统布局
|
||||
- 新版: 视频区默认的新版布局
|
||||
|
||||
</details> -->
|
||||
|
||||
<details>
|
||||
<summary><strong>默认播放器模式</strong></summary>
|
||||
|
||||
设置默认的播放器模式, 可以为`常规`, `宽屏`, `网页全屏`或`全屏`. 可以选择在进入页面的首次播放时应用, 或者一进入页面就应用. 还可以设置是否自动关灯.
|
||||
|
||||
> ⚠ 自动全屏的效果并不稳定, 可以尝试改用播放时全屏并关闭自动播放.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>默认视频画质</strong></summary>
|
||||
|
||||
进入视频时自动选择指定的画质, 若视频最高画质低于所选画质, 则使用视频的最高画质.
|
||||
|
||||
> 此功能将于2020.10.02下架, 届时请使用官方的视频画质记忆
|
||||
|
||||
> 官方于2018.12.27已正式支持记忆画质
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>默认视频速度</strong></summary>
|
||||
|
||||
进入视频时自动选择指定的视频倍速.
|
||||
|
||||
</details>
|
||||
|
||||
<!-- <details>
|
||||
<summary><strong>默认弹幕设置</strong></summary>
|
||||
|
||||
设置默认是否开启弹幕, 以及是否记住防挡字幕和智能防挡弹幕.
|
||||
|
||||
</details> -->
|
||||
|
||||
<details>
|
||||
<summary><strong>自动展开弹幕列表</strong></summary>
|
||||
|
||||
新版播放页面中, 弹幕列表默认收起以显示推荐的其他视频. 启用此功能可在每次加载视频时自动展开弹幕列表.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>自动展开视频简介</strong></summary>
|
||||
|
||||
长的视频简介默认会被折叠, 启用此功能可以强制展开完整的视频简介.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>自动从历史记录点播放</strong></summary>
|
||||
|
||||
播放视频时如果检测到历史记录信息(`上次看到...`消息), 则自动跳转到相应的时间播放.
|
||||
> 如果还开启了`允许跨集跳转`, 即使当前集数跟历史记录不同也会跳转.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>跳过充电鸣谢</strong></summary>
|
||||
|
||||
自动跳过视频结尾处的充电鸣谢.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>启用逐帧调整</strong></summary>
|
||||
|
||||
在播放器的时间右边增加两个按钮, 用于**较**精细调整视频时间. 支持键盘快捷键`Shift + 左/右方向键`. (旧版播放器只能用键盘快捷键, 不会显示按钮)
|
||||
|
||||
注: `视频的实际播放帧率`跟`视频本身的帧率`和`显示器的刷新率`有关, 很难计算一个精准的数值, 部分视频仍然会有暂停不到那种一闪而过的图的情况.
|
||||
|
||||
逐帧调整的精确度固定为:
|
||||
- `1080P60`/`720P60`: 1001 / 60000 秒 (59.94006 fps)
|
||||
- `其他清晰度`: 1001 / 30000 秒 (29.97003 fps)
|
||||
|
||||
<img height="100" alt="时间右边的按钮" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/control-enhance-buttons.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>启用视频截图</strong></summary>
|
||||
|
||||
在播放器的时间右边增加截图按钮, 点击可以截取视频画面, 不会包含暂停标志和弹幕. 截取的图片将在网页右侧显示(非全屏或网页全屏模式), 可以单独保存或丢弃, 也可以截取一定数量后一次性保存. 支持键盘快捷键`Ctrl + Alt + C`. (旧版播放器只能用键盘快捷键, 不会显示按钮)
|
||||
|
||||
如果弹幕渲染类型选择了Canvas, 则可以再按住`Shift`键来截取带弹幕的截图. 也就是鼠标操作为"按住`Shift`点击截图按钮", 键盘操作为"`Ctrl + Shift + Alt + C`".
|
||||
|
||||
<img height="100" alt="时间右边的按钮" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/control-enhance-buttons.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>自动定位到播放器</strong></summary>
|
||||
|
||||
进入视频/番剧页面时, 自动定位到播放器.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>外置稍后再看</strong></summary>
|
||||
|
||||
将视频页面菜单里的`稍后再看`移到外面.
|
||||
|
||||
<img height="100" alt="外置稍后再看" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/watchlater.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>启用快速收藏</strong></summary>
|
||||
|
||||
启用快速收藏, 在视频页面可以一键收藏到设定的某个收藏夹.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>快捷键扩展</strong></summary>
|
||||
|
||||
为视频播放器启用更多的快捷键:
|
||||
- `w` 网页全屏
|
||||
- `t` 宽屏
|
||||
- `r` 循环播放
|
||||
- `m` 静音
|
||||
- `d` 弹幕开关
|
||||
- `l` 点赞
|
||||
- `c` 投币
|
||||
- `s` 收藏
|
||||
- `j` 前进85秒
|
||||
- `p` 切换画中画
|
||||
- `` ` `` 打开播放器菜单
|
||||
- `Shift + j` 倒退85秒
|
||||
- `Shift + w` 稍后再看
|
||||
- `Shift + s` 快速收藏
|
||||
- `Shift + ↑/↓` / `Shift + ,/.` 播放速度调整
|
||||
- `Shift + /` 重置播放速度
|
||||
|
||||
附: b站原生快捷键列表:
|
||||
- `f` 全屏/退出全屏
|
||||
- `space` 播放/暂停
|
||||
- `→` 前进5s
|
||||
- `←` 倒退5s
|
||||
- `↑` 音量增加10%
|
||||
- `↓` 音量降低10%
|
||||
- `媒体键 play/pause` 播放/暂停
|
||||
- `esc` 退出全屏
|
||||
- `[` 多P 上一个
|
||||
- `]` 多P 下一个
|
||||
- `enter` 发弹幕
|
||||
|
||||
> ⚠ 此功能与原生快捷键有一点差异: 在网页任何地方点下快捷键都会生效, 除非正在打字. (原生快捷键需要聚焦到播放器才能用, 除了`f`和`space`快捷键会被额外再扩展到全网页范围)
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>双击全屏</strong></summary>
|
||||
|
||||
允许双击播放器切换全屏, 请注意不能与`播放器触摸支持-启用双击控制`一同使用.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>播放前显示封面</strong></summary>
|
||||
|
||||
在视频开始播放前, 在播放器中显示封面.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>SEO页面重定向</strong></summary>
|
||||
|
||||
当进入SEO页面时, 自动跳转回原视频页面.
|
||||
|
||||
> SEO页面通常是专为搜索引擎优化的页面, 目前通常是谷歌的搜索结果里进b站会遇到.
|
||||
|
||||
</details>
|
||||
|
||||
<h2 align="center">样式</h2>
|
||||
<div align="center">掌控哔哩哔哩的外观</div>
|
||||
|
||||
<details>
|
||||
<summary><strong>主题颜色</strong></summary>
|
||||
|
||||
设定顶栏和夜间模式使用的主题色, 可以点击颜色预览的圆圈打开色板, 其中含有预定义的16种主题色, 也可以在右侧的文本框直接输入任何有效的16进制颜色值(`#rrggbb`或`#rgb`).
|
||||
|
||||
<img height="200" alt="颜色设置" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/theme-color.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>自定义顶栏</strong></summary>
|
||||
|
||||
启用自定义顶栏, 替代原版的顶栏, 仅对主站生效, 直播/相簿/会员购等仍使用原来的顶栏.
|
||||
|
||||
可用的选项包括:
|
||||
- 使用季节Logo
|
||||
- 使用主题色填充顶栏
|
||||
- 在顶部横幅存在时, 使用透明填充
|
||||
- 为顶栏添加一层阴影效果
|
||||
- 为顶栏使用更紧凑的布局, 紧凑布局将使用更小的间距, 以及在视频标题过长时用...省略后面的部分
|
||||
- 在顶部横幅存在时, 使用背景模糊效果
|
||||
- 设定背景模糊效果的不透明度
|
||||
- 改变顶栏边缘两侧的间距
|
||||
- 改变顶栏里栏目的顺序和显示状态
|
||||
|
||||
前7个是整体的外观设置, 可以在设置里直接开关, 后面2个是对顶栏里面内容的详细布局设定, 可以在`附加功能`里设置.
|
||||
|
||||
下图展示了顶栏在不同设置下的整体外观: (从上到下依次为: 不使用主题色填充, 不填充+夜间模式, 填充主题色, 使用不同的主题色)
|
||||

|
||||
|
||||
顶栏内容的布局也可以自定义, 可以通过此功能移除顶栏里不需要的组件, 或排列它们的顺序:
|
||||

|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>夜间模式</strong></summary>
|
||||
|
||||
夜间模式更适合光线暗的环境, 并会大量应用主题颜色.
|
||||
|
||||
目前仅支持部分常用页面, 其他页面会陆续添加, 不支持推广板块(会被`删除广告`功能去除的部分).
|
||||
|
||||
<img width="500" alt="日间" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/light-style.jpg">
|
||||
<img width="500" alt="夜间" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/dark-style.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>夜间模式计划时段</strong></summary>
|
||||
|
||||
设置一个使用夜间模式的时间段, 进入/离开此时间段时, 会自动开启/关闭夜间模式.
|
||||
> 结束时间小于起始时间时将视为次日, 如`18:00`至`6:00`表示晚上18:00到次日6:00.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>夜间模式跟随系统</strong></summary>
|
||||
|
||||
使夜间模式同步系统设置的亮/暗主题.
|
||||
|
||||
- Windows: 设置 - 个性化 - 颜色 - 选择颜色
|
||||
- macOS: 系统偏好设置 - 通用 - 外观
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>简化评论区</strong></summary>
|
||||
|
||||
- 删除热评头像下方的关注按钮
|
||||
- 删除用户的等级标识
|
||||
- 删除发送源信息(`来自安卓客户端`这种)
|
||||
- 删除用户名右边的勋章
|
||||
- 删除评论区顶部的横幅
|
||||
- 发送时间移动到右上角
|
||||
- 位图图标全部换用矢量图标, 高分屏不会模糊
|
||||
- 投票仅显示链接, 隐藏下面的大框.
|
||||
|
||||
> 关注和等级可以通过鼠标停留在头像上, 在弹出的资料卡小窗中查看
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>简化首页</strong></summary>
|
||||
|
||||
> 此功能需要做一些额外设置, 详见[简化首页注意事项](src/style/simplify-home/simplify-home.md)
|
||||
|
||||
替换原本的首页, 有两种样式可用:
|
||||
- `清爽`: 布局与原主页类似, 多一个`动态`栏目.
|
||||
- `极简`: 去除其他所有栏目, 只保留`视频动态`和`热门视频`两个功能.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>隐藏顶部横幅</strong></summary>
|
||||
|
||||
隐藏主站顶部的横幅, 注意这会导致搜索框也被隐藏, 除非开启了自定义顶栏.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>播放器投影</strong></summary>
|
||||
|
||||
为播放器添加主题色投影.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>强制保留弹幕发送栏</strong></summary>
|
||||
|
||||
在网页全屏时, 即使宽度过小也强制保留弹幕发送栏, 注意这可能导致右侧的功能按钮挤出边界.
|
||||
|
||||
</details>
|
||||
<!-- <details>
|
||||
<summary><strong>模糊视频控制栏背景</strong></summary>
|
||||
模糊视频控制栏背景, 原有的阴影效果将无效.
|
||||
此功能需要浏览器支持背景模糊效果, 详情见[背景模糊兼容性](backdrop-filter.md)一节.
|
||||
**启用前**
|
||||

|
||||
**启用后**
|
||||

|
||||
</details> -->
|
||||
<details>
|
||||
<summary><strong>控制栏着色</strong></summary>
|
||||
|
||||
给视频控制栏附上半透明的黑色, 代替原来的阴影, 黑色的不透明度可在设置中调整.
|
||||
|
||||
**启用前**
|
||||

|
||||
|
||||
**启用后**
|
||||

|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>删除视频标题层</strong></summary>
|
||||
|
||||
删除视频里鼠标经过时出现在右上角的标题层.
|
||||
|
||||
<img height="400" alt="覆盖层" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/remove-top-mask.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>隐藏番剧点评</strong></summary>
|
||||
|
||||
隐藏番剧播放页面的点评板块, 不会隐藏番剧介绍页那里的点评.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>隐藏推荐视频</strong></summary>
|
||||
|
||||
隐藏番剧和视频页面右侧的推荐视频列表.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>隐藏推荐直播</strong></summary>
|
||||
|
||||
隐藏视频页面右侧下方的推荐直播.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>隐藏番剧承包</strong></summary>
|
||||
|
||||
隐藏番剧页面下方的承包榜, 以及右边的承包按钮.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>隐藏分区栏</strong></summary>
|
||||
|
||||
隐藏主站的分区栏, 分区仍然可以从顶栏的主站菜单中进入.
|
||||
|
||||
<img height="300" alt="分区栏" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/hide-category.jpg">
|
||||
|
||||
</details>
|
||||
|
||||
<h2 align="center">动态</h2>
|
||||
<div align="center">改善动态体验</div>
|
||||
|
||||
<details>
|
||||
<summary><strong>解除动态存图限制</strong></summary>
|
||||
|
||||
右键点击动态大图时, 如果这张图的右键菜单被禁止了, 将弹出带图片的消息方便保存.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>快速收起动态评论区</strong></summary>
|
||||
|
||||
动态里查看评论区时, 在底部添加一个`收起评论`按钮, 这样就不用再回到上面收起了.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>展开动态标题</strong></summary>
|
||||
|
||||
在顶栏的动态预览框中, 不管名称多长, 总是完全展开视频的标题.
|
||||
|
||||
<img height="300" alt="展开动态标题" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/full-tweets-title.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>展开动态内容</strong></summary>
|
||||
|
||||
不管内容多长, 总是完全展开动态的内容.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>动态过滤器</strong></summary>
|
||||
|
||||
按照类型或者关键词过滤动态首页的内容, 也可以移除动态页的一些侧边卡片. 注意目前仅仅在全部动态里生效, 切换到别的类别时无效.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>动态翻译</strong></summary>
|
||||
|
||||
在动态首页和动态详情页中, 每条动态下方添加翻译按钮, 可将动态的文字机器翻译为中文. 若开启了界面翻译, 则会翻译成界面翻译里设定的语言.
|
||||
|
||||
可以使用的翻译器如下:
|
||||
- Bing: 必应翻译
|
||||
- Google: 谷歌翻译
|
||||
- GoogleCN: 谷歌中国翻译(google.cn)
|
||||
|
||||
也可以再开启`评论翻译`, 将这一功能带入到评论区中.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>强制固定顶栏和侧栏</strong></summary>
|
||||
|
||||
动态更新后, 侧栏以一种非常怪异的方法固定在两侧, 快速下拉时会有抖动, 而且无法适应动态过滤器折叠产生的高度变化.
|
||||
|
||||
因此, 开启动态过滤器后, 会禁用侧栏固定.
|
||||
|
||||
而强制固定顶栏和侧栏可以完美固定侧栏, 避免产生抖动.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>直播信息扩充</strong></summary>
|
||||
|
||||
在动态的正在直播中, 为每一个直播间加上标题, 并且能够显示多达24个直播间.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>禁止跳转动态详情</strong></summary>
|
||||
|
||||
禁止动态点击后跳转详情页, 方便选择其中的文字.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>动态链接复制</strong></summary>
|
||||
|
||||
在动态的菜单里添加复制链接选项.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>动态反折叠</strong></summary>
|
||||
|
||||
自动展开被折叠的动态.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>动态图片导出</strong></summary>
|
||||
|
||||
在动态的右上角菜单中可选择导出图片来下载当前动态里的所有图片.
|
||||
|
||||
</details>
|
||||
|
||||
<h2 align="center">直播</h2>
|
||||
<div align="center">各种直播相关功能</div>
|
||||
|
||||
|
||||
<details>
|
||||
<summary><strong>简化直播间</strong></summary>
|
||||
|
||||
- 隐藏姥爷图标
|
||||
- 隐藏入场通知
|
||||
- 隐藏粉丝勋章
|
||||
- 隐藏活动头衔
|
||||
- 隐藏弹幕特效
|
||||
- 隐藏全区广播
|
||||
- 隐藏欢迎信息 (xxx老爷进入直播间)
|
||||
- 隐藏礼物弹幕 (仅弹幕列表, 特殊效果如节奏风暴不受影响)
|
||||
- 隐藏上舰提示 (弹幕列表里的 xxx开通了舰长)
|
||||
- 隐藏付费礼物 (播放器下面的各种金瓜子礼物, 以及许愿瓶, 上舰等)
|
||||
- 隐藏入场特效
|
||||
- 隐藏看板娘
|
||||
- 隐藏活动横幅
|
||||
- 隐藏排行榜
|
||||
- 隐藏抽奖提示 (开通舰长, 小飞船抽奖等)
|
||||
- 隐藏PK浮窗
|
||||
- 隐藏高能榜提示
|
||||
- 禁用直播间皮肤
|
||||
|
||||
每一项都可以在`附加功能`中单独选择是否隐藏. 图片中展示的是全部隐藏时的弹幕区效果对比.
|
||||
|
||||
<img height="500" alt="简化直播间" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/simplify-liveroom.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>缩放直播看板娘</strong></summary>
|
||||
|
||||
根据屏幕DPI缩放直播看板娘的大小以提高像素的清晰度, DPI缩放为100%的用户不需要此功能.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>收起直播间侧栏</strong></summary>
|
||||
|
||||
自动收起直播间的侧边栏.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>删除直播水印</strong></summary>
|
||||
|
||||
删除观看直播时角落的水印.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>禁止直播首页自动播放</strong></summary>
|
||||
|
||||
禁止直播首页的推荐直播间自动开始播放, 开启后, 还可以通过`隐藏首页推荐直播`直接隐藏掉这个推荐板块.
|
||||
|
||||

|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>直播间自动领奖</strong></summary>
|
||||
|
||||
在当前直播间有抽奖活动时, 自动点击抽奖按钮. 注意只适用于少量抽奖, 那种99+限量抽奖可能跟不上其他人的手速.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>自动选择当前直播间勋章</strong></summary>
|
||||
|
||||
如果拥有当前直播间的勋章, 则自动佩戴, 否则佩戴上次手动选择的勋章.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>直播弹幕记录器</strong></summary>
|
||||
|
||||
开启后, 在直播间里可以从附加功能中启动弹幕记录器, 会记录启动后所有收到的弹幕, 并可以导出为XML弹幕文件.
|
||||
|
||||
> 弹幕的发送时间是相对于直播开始时间确定的.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>直板全屏弹幕栏</strong></summary>
|
||||
|
||||
在直播的网页全屏和全屏模式状态下, 在底部显示弹幕栏.
|
||||
|
||||
</details>
|
||||
|
||||
<h2 align="center">工具</h2>
|
||||
<div align="center">各式各样的小玩意</div>
|
||||
|
||||
<details>
|
||||
<summary><strong>删除广告</strong></summary>
|
||||
|
||||
删除站内的各种广告. 包括首页的推广模块, 手机app推荐, 视频页面右侧的广告等.
|
||||

|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>稍后再看重定向</strong></summary>
|
||||
|
||||
将稍后再看的链接重定向为普通播放网址, 以使用新版播放页面. 可以分别选择是否重定向顶栏和稍后再看页面.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>隐藏搜索推荐</strong></summary>
|
||||
|
||||
将搜索框的推荐词替换为`搜索`.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>展开选集列表</strong></summary>
|
||||
|
||||
在视频选集列表中, (选集多时)展开整个列表, 当标题超出一行时, 另起一行以显示完整标题.
|
||||
> 因为番剧选集用的绝对布局, 所以此功能在番剧区无效.
|
||||
|
||||
<img height="600" alt="展开选集标题" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/full-page-title.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>直播间勋章快速切换</strong></summary>
|
||||
|
||||
在直播区(live.bilibili.com)中, 可从`附加功能`中直接切换勋章和头衔.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>BiliPlus跳转支持</strong></summary>
|
||||
|
||||
在视频/番剧/空间中, 附加功能`转到BiliPlus`, 点击可以转到[BiliPlus](https://biliplus.com)上对应的页面.
|
||||
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>下载音频</strong></summary>
|
||||
|
||||
在音频区中, 附加功能会出现`下载音频`按钮, 当你进入某一音乐的详细信息页面时, 点击按钮可以下载该页面对应的音乐. 在其他页面中此按钮将不可点击.
|
||||
|
||||
> 正在播放的音乐点击封面即可转到详细信息页面.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>高分辨率图片</strong></summary>
|
||||
|
||||
根据屏幕DPI请求更高分辨率的图片, 例如DPI缩放200%则请求2倍的分辨率, 加载时间也会相应变长一些.
|
||||
适用于2K, 4K等的显示屏, DPI缩放为100%的用户不需要此功能.
|
||||
|
||||
<img height="600" alt="高分辨率图片" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/image-resolution.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>界面翻译(实验性)</strong></summary>
|
||||
|
||||
为界面中一些常用文本提供翻译, 完成度不高, 目前仅开放日语和英语.
|
||||
|
||||
> 如果希望贡献翻译, 请参阅[翻译指南](https://github.com/the1812/Bilibili-Evolved/blob/preview/src/utils/i18n/i18n.md). 在文件中添加翻译文本后即可发送 Pull Request (到 preview 分支), 不需要编译. ~~因为本项目的开发环境弄得很烂, 请不要把时间和精力浪费在搭建开发环境上.~~
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>瓜子换硬币</strong></summary>
|
||||
|
||||
在附加功能中添加`瓜子换硬币`的按钮, 点击可以将700银瓜子换成1个硬币, 每天限1次.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>专栏文字选择</strong></summary>
|
||||
|
||||
使专栏的文字可以选择.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>网址参数清理</strong></summary>
|
||||
|
||||
自动删除链接中的多余跟踪参数, 例如`spm_id_from`, `from_source`, `share_source`等.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>网址AV号转换</strong></summary>
|
||||
|
||||
当视频的链接是BV号时, 自动转换为AV号.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>评论链接复制</strong></summary>
|
||||
|
||||
在评论的菜单里添加复制链接选项.
|
||||
|
||||
</details>
|
||||
|
||||
<details>
|
||||
<summary><strong>专栏图片导出</strong></summary>
|
||||
|
||||
在专栏页面中可在附加功能中导出所有图片.
|
||||
|
||||
</details>
|
||||
|
||||
|
||||
<h2 align="center">触摸</h2>
|
||||
<div align="center">为支持触屏的设备特别设计的功能</div>
|
||||
|
||||
<details>
|
||||
<summary><strong>顶栏触摸优化</strong></summary>
|
||||
|
||||
删除顶栏右侧的一级链接(从`大会员`到`历史`), 以方便触屏设备快速预览信息. 被删除的链接可从各预览中的`查看更多`进入.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>素质三连触摸支持</strong></summary>
|
||||
|
||||
为素质三连(长按点赞)启用触摸支持.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>播放器触摸支持</strong></summary>
|
||||
|
||||
- 增大控制栏的按钮间距, 使触摸操作更准确.
|
||||

|
||||

|
||||
- 启用触摸手势
|
||||
- 左右滑动可调整进度, 上下位置不同灵敏度不同
|
||||
- 进度调整可在左上角和右上角取消
|
||||
- 左侧上下滑动可调整亮度
|
||||
- 右侧上下滑动可调整音量
|
||||
|
||||
<img width="600" alt="进度调整" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/touch-gestures.jpg">
|
||||
<img width="600" alt="亮度和音量调整" src="https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/images/compressed/touch-gestures-vertical.jpg">
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>启用双击控制</strong></summary>
|
||||
|
||||
将操作方式更改为: 单击显示/隐藏控制栏, 双击播放/暂停.
|
||||
|
||||
</details>
|
||||
<details>
|
||||
<summary><strong>迷你播放器触摸拖动</strong></summary>
|
||||
|
||||
使迷你播放器的拖动条可以触摸拖动.
|
||||
|
||||
</details>
|
||||
55
doc/install-tutorial.en-US.md
Normal file
55
doc/install-tutorial.en-US.md
Normal file
@ -0,0 +1,55 @@
|
||||
# Install tutorial
|
||||
This tutorial will help you install Bilibili-Evolved in your browser.
|
||||
|
||||
## 1. Before install
|
||||
Please check your browser, Bilibili-Evolved must run with the **latest** Chrome / Firefox / Safari.
|
||||
|
||||
> You can also use the new [Chromium-based Edge](https://www.microsoftedgeinsider.com/en-us/), while UWP Edge (Windows 10 built-in) is **not** supported.
|
||||
|
||||
In this tutorial, I'll use Chrome as an example:
|
||||
|
||||
<img height="300" alt="Chrome" src="images/compressed/chrome.en-US.jpg">
|
||||
|
||||
## 2. Get a user script manager
|
||||
> If you already have one, skip this step.
|
||||
|
||||
Bilibili-Evolved is delivered as JavaScript code snippets, a user script manager is required to help you execute the code every time you visit bilibili and keep your personal settings.
|
||||
|
||||
Supported managers: [Tampermonkey](https://tampermonkey.net/), [Violentmonkey](https://violentmonkey.github.io/).
|
||||
|
||||
Choose the one you like and click the link to visit its homepage, or get it in your browser's extension store.
|
||||
> You may know another manager called Greasemonkey, unfortunately, it's not supported.
|
||||
|
||||
e.g. Install Tampermonkey from Chrome Web Store
|
||||
|
||||
<img height="300" alt="Install from Chrome Web Store" src="images/compressed/tampermonkey.en-US.jpg">
|
||||
|
||||
## 3. Install
|
||||
Having at least one user script manager installed, you can now select a version of Bilibili-Evolved to install. (Click the name to install)
|
||||
|
||||
| [Stable](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@master/bilibili-evolved.user.js) | [Preview](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/bilibili-evolved.preview.user.js) | [Offline](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@master/bilibili-evolved.offline.user.js) | [Preview Offline](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/bilibili-evolved.preview-offline.user.js) |
|
||||
| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||
| Provides stable features, but not frequently updated. | New features got tested here, updated more frequently. | Inlined all dependencies to avoid GitHub server problems. | As the name says, Preview + Offline. |
|
||||
|
||||
> ⚠ Sometimes the breaking changes will cause old version not work at all, please update the script in time.
|
||||
|
||||
e.g. Install the Offline version
|
||||
|
||||
<img height="350" alt="Install Offline version" src="images/compressed/install-script.zh-CN.jpg">
|
||||
|
||||
## 4. Change the display language (Optional)
|
||||
> Language should be automatically set to your browser's default language. If not, you can follow this step to change the display language.
|
||||
|
||||
Visit bilibili, there should be 2 icons (Add-ons and settings) on the left side of the page. Open settings by clicking the icon.
|
||||
|
||||
Assuming the current language is Simplified Chinese (default fallback language), unfold `工具` (tools) category and find `界面翻译` (UI translation).
|
||||
|
||||
Enable it and select a target language you want to see, then refresh the page.
|
||||
|
||||
e.g. Select English as the target language
|
||||
|
||||
<img height="500" alt="Open settings" src="images/compressed/settings-icon.en-US.jpg">
|
||||
<img height="500" alt="Change settings" src="images/compressed/settings.en-US.jpg">
|
||||
|
||||
## 5. Enjoy
|
||||
You are all set! Explore settings and add-ons to discover interesting features, and feel free to suggest a new feature or report a bug on my GitHub repo.
|
||||
57
doc/install-tutorial.ja-JP.md
Normal file
57
doc/install-tutorial.ja-JP.md
Normal file
@ -0,0 +1,57 @@
|
||||
# インストールの説明
|
||||
この説明では、ブラウザに「Bilibili-Evolved」をインストールするのに役立ちます.
|
||||
|
||||
## 1. インストール前の注意
|
||||
ブラウザを確認してください.「Bilibili-Evolved」は **最新** の「Chrome / Firefox / Safari」で実行する必要があります.
|
||||
|
||||
### Edge (UWP) [**サポート停止**]
|
||||
- 上記のブラウザを使用してください. あるいはこの[Chromium-based Edge](https://microsoftedgeinsider.com/)に切り替えることができます.
|
||||
|
||||
下記のチュートリアルでは、例として Chrome を使用します:
|
||||
|
||||
<img height="300" alt="Chrome" src="images/compressed/chrome.en-US.jpg">
|
||||
|
||||
## 2. インストール前の準備
|
||||
> ユーザースクリプトマネージャ(user script manager)が既にある場合は、このステップをスキップします.
|
||||
|
||||
「Bilibili-Evolved」は、JavaScript code snippetsとして提供されています.ビリビリを访ねる時、個人設定を保持するたびにコード(code)を実行できるように、ユーザースクリプトマネージャーが必要です.
|
||||
|
||||
サポートされているマネージャ: [Tampermonkey](https://tampermonkey.net/) と [Violentmonkey](https://violentmonkey.github.io/).
|
||||
|
||||
お好きなマネージャを選択して、リンクをクリックして、そのホームページにアクセスするか、ブラウザの拡張ストアにアクセスしてください.
|
||||
> Greasemonkeyという別のマネージャを知っているかもしれませんが、残念ながらそれはサポートされていません.
|
||||
|
||||
例えば、Chrome Web StoreからTampermonkeyをインストールする.
|
||||
|
||||
<img height="300" alt="Install from Chrome Web Store" src="images/compressed/tampermonkey.en-US.jpg">
|
||||
|
||||
## 3. インストール
|
||||
少なくとも1つのユーザスクリプトマネージャをインストールしたら、「Bilibili-Evolved」のバージョンを選択してインストールできます. (インストールしたいバージョンの名をクリックしてください)
|
||||
|
||||
| [公式版](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@master/bilibili-evolved.user.js) | [プレビュー版](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/bilibili-evolved.preview.user.js) | [オフライン版](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@master/bilibili-evolved.offline.user.js) | [プレビュー・オフライン版](https://cdn.jsdelivr.net/gh/the1812/Bilibili-Evolved@preview/bilibili-evolved.preview-offline.user.js) |
|
||||
| ----------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
|
||||
| 安定した機能を提供しますが、頻繁には更新されません. | 新機能はここでテストされ、より頻繁に更新されます. | GitHubサーバーの問題を回避するためにすべての依存関係をインライン化しました. | その名の通り、プレビュー+オフライン. |
|
||||
|
||||
> ⚠ 時々には、破壊的な大きな更新は、古いスクリプトが完全に使用できなくなります、適時に更新を確認してください.
|
||||
|
||||
例えば、オフライン版をインストールする
|
||||
|
||||
<img height="350" alt="Install Offline version" src="images/compressed/install-script.zh-CN.jpg">
|
||||
|
||||
## 4. 翻訳言語を変更する (オプション)
|
||||
> 翻訳言语は自分自身のブラウザのデフォルト言语に自动的に设定します.それがなければ、このステップに従って翻訳言语を変えることができます.
|
||||
|
||||
ビリビリを访ねると、ページの左側に2つのアイコン(追加機能と设定)があるはずです.アイコンをクリックすることで「設定」を展開します.
|
||||
|
||||
今の言語が簡体字中国語(デフォルトのフォールバック言語)であると仮定し、 `工具`(道具)を展開し、 `界面翻译`(UI 翻訳)を見つけます.
|
||||
|
||||
有効にして見たい翻訳言語を選択してからページを更新します.
|
||||
|
||||
例えば、翻訳言語として「英語」を選択する
|
||||
|
||||
<img height="500" alt="Open settings" src="images/compressed/settings-icon.en-US.jpg">
|
||||
<img height="500" alt="Change settings" src="images/compressed/settings.en-US.jpg">
|
||||
|
||||
## 5. 最後
|
||||
今、準備万端です! 設定や追加機能を探索して興味深い機能を発見できます.
|
||||
もし、新しい機能とバグを提案したり、私のGitHub repoに報告してください.
|
||||
42
doc/issue-rules.md
Normal file
42
doc/issue-rules.md
Normal file
@ -0,0 +1,42 @@
|
||||
New Issue / Issues 须知
|
||||
|
||||
## 默认所有 Issues 发起者均已了解此处的内容
|
||||
Issues 用于记录 Bug 等发生异常问题的情况, 如果您希望讨论新功能或是提问 / 答疑, 请到[讨论区](https://github.com/the1812/Bilibili-Evolved/discussions)进行.
|
||||
> 讨论区于 2020-12-10 启用, 在此之前的新功能建议 / 提问 / 答疑的讨论仍然可以在 Issues 这边搜索到.
|
||||
> 讨论区使用指南见 https://github.com/the1812/Bilibili-Evolved/discussions/1297
|
||||
|
||||
发之前记得看下置顶 (Pinned) 的 issue (如果有的话), 当遇到一些我认为会影响绝大部分用户的情况时, 我就会把这个 issue 置顶.
|
||||
|
||||
----
|
||||
|
||||
Bug 反馈不仅仅是描述您遇到了什么样的 bug, 更重要的是总结一套步骤, 按照这个步骤来就能稳定遇到 bug. (对应模板中的`问题描述`) 其次是一些环境信息, 模板中也已经给出, 通常包括`脚本版本`, `浏览器版本`, `错误信息`等. 有时候我可能还会需要您导出脚本设置.
|
||||
|
||||
> 提示: 最好先在预览离线版(Preview Offline)中测试一下, 有些问题可能已经修复了但还未正式发布.
|
||||
|
||||
我们对此的处理方式如下:
|
||||
1. 对于给出了所有必要信息的 bug 反馈, 我们会尽量尝试重现并修复这个 bug, 优先级高于功能请求.
|
||||
2. 信息不全或者无法重现的, 我们会追问更多信息, 争取转变为上一条的情况.
|
||||
3. **只描述了 bug 的现象, 未提供任何其他信息, 或者只写个标题 / 正文随便放几句话, 导致我们无法确定 bug 的问题所在的, 将不予理会, 下次更新时直接关闭.** (带有`bad-issue`标签)
|
||||
> 除非您有十足的自信, 认为其他人一看标题就能马上明白整个 bug 的来龙去脉, 否则尽量不要只写标题.
|
||||
4. 若与现有的重复, 可能我们会提示您重复, 也可能不予理会, 下次更新时直接关闭. (带有`duplicate`标签)
|
||||
|
||||
- 正面例子: [#221](https://github.com/the1812/Bilibili-Evolved/issues/221) [#604](https://github.com/the1812/Bilibili-Evolved/issues/604)
|
||||
- 反面例子: [#562](https://github.com/the1812/Bilibili-Evolved/issues/562) [#564](https://github.com/the1812/Bilibili-Evolved/issues/564)
|
||||
|
||||
----
|
||||
|
||||
Bug 反馈不一定会做出回复, 特别是内容写得非常清晰时, 我就会直接加上相应的标签 (`bug` 或 `feature-request`), 表示我将会处理.
|
||||
|
||||
附部分标签含义解释:
|
||||
- `bug`: 确认为Bug, 将会处理
|
||||
- `maybe-bug`: 可能是Bug, 待测试验证
|
||||
- `feature-request`: 确认为功能请求, 将会处理
|
||||
- `question`: 提问/答疑
|
||||
- `adaptation`: b站的变化导致脚本未跟进适配
|
||||
- `bad-issue`: 不符合以上规范的issue
|
||||
- `compatibility`: 兼容性问题
|
||||
- `duplicate`: 重复
|
||||
- `help-wanted`: 没啥解决思路
|
||||
- `long-term`: 需要长期开发, 短时间内无法完成
|
||||
- `stale`: 即将因无活动而关闭
|
||||
- `wontfix`: 不予考虑
|
||||
@ -1 +1 @@
|
||||
<div class=bilibili-evolved-about><div class=about-header><i class="mdi mdi-information-outline mdi-24px"></i><span class=about-title>关于</span></div><div class=about-content><p v-if=branch class="name light"v-html=logoImage></p><p v-if=branch class="name dark"v-html=logoImageDark></p><p class=version>v{{version}} · {{clientType}}</p><p class=love><a target=_blank href=https://github.com/the1812/Bilibili-Evolved/ >Made with ❤ </a><a target=_blank href=https://github.com/the1812/Bilibili-Evolved/blob/master/donate.md>Buy me a coffee ☕</a></p><section class=authors><span class=title>Authors</span><a class=author target=_blank v-for="author of authors"v-bind:href=author.link>{{author.name}}</a></section><section class=contributors><span class=title>Contributors</span><a class=contributor target=_blank v-for="contributor of contributors"v-bind:href=contributor.link>{{contributor.name}}</a></section><section class=supporters><a class=title target=_blank href=https://github.com/the1812/Bilibili-Evolved/blob/preview/donate.md#历史>View Supporters</a></section><section class=participants><span class=title>Community Power</span><span class=fetching v-if=fetching></span><a class=participant target=_blank v-for="participant of participants"v-bind:href=participant.link>{{participant.name}}</a></section><section class=websites><span class=title>Websites</span><a class=website target=_blank v-for="website of websites"v-bind:href=website.link>{{website.name}}</a></section><section class=components><span class=title>Components</span><a class=component target=_blank v-for="component of components"v-bind:href=component.link>{{component.name}}</a></section></div></div>
|
||||
<div class=bilibili-evolved-about><div class=about-header><i class="mdi mdi-information-outline mdi-24px"></i><span class=about-title>关于</span></div><div class=about-content><p v-if=branch class="name light"v-html=logoImage></p><p v-if=branch class="name dark"v-html=logoImageDark></p><p class=version>v{{version}} · {{clientType}}</p><p class=love><a target=_blank href=https://github.com/the1812/Bilibili-Evolved/ >Made with ❤ </a><a target=_blank href=https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/donate.md>Buy me a coffee ☕</a></p><section class=authors><span class=title>Authors</span><a class=author target=_blank v-for="author of authors"v-bind:href=author.link>{{author.name}}</a></section><section class=contributors><span class=title>Contributors</span><a class=contributor target=_blank v-for="contributor of contributors"v-bind:href=contributor.link>{{contributor.name}}</a></section><section class=supporters><a class=title target=_blank href=https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/donate.md#历史>View Supporters</a></section><section class=participants><span class=title>Community Power</span><span class=fetching v-if=fetching></span><a class=participant target=_blank v-for="participant of participants"v-bind:href=participant.link>{{participant.name}}</a></section><section class=websites><span class=title>Websites</span><a class=website target=_blank v-for="website of websites"v-bind:href=website.link>{{website.name}}</a></section><section class=components><span class=title>Components</span><a class=component target=_blank v-for="component of components"v-bind:href=component.link>{{component.name}}</a></section></div></div>
|
||||
@ -1,15 +1,15 @@
|
||||
{
|
||||
"about.min.css": "E868D1E0B96F68DB0AB9A4F2ACC63275F150A939640E687F044DA3CB6DDA1862",
|
||||
"about.min.html": "E44CC2091973A839E5A533B397EF8C78DD573DAB9AF0C4D19E63748DCB9450DB",
|
||||
"about.min.html": "A8C988A0C1082BB52F8F6AC599E7E234D88D75869C51AA6C15A8C75897DC4918",
|
||||
"about.min.js": "24BA69AE2E90CF016271065D73A21A4CC43CFE486EB23918B5394653005044FF",
|
||||
"activity-apis.min.js": "459D26DB0BB447FEFE6F1842541A119E67C63573A800E56AD7FEC71D20087CEF",
|
||||
"activity-image-saver.min.js": "737286593031A8539FD5A511A28CAD02F1D9ED5E23C05D917A05D9DDBA2BE9AB",
|
||||
"airborne-old.min.js": "6CED3BE1B69D3D7AC80B7755EECEA556F334E04435DFFD5E98934D1295B605BF",
|
||||
"airborne.min.css": "2224FDD07845BD008E193B5E575B14243B27F3E151B46DF3D5D66270154E8278",
|
||||
"airborne.min.js": "C100780643B398D9F1AFC00C3FF16E5EAC87C1690180AB38A35B03B87A996BDA",
|
||||
"airborne-old.min.js": "6CED3BE1B69D3D7AC80B7755EECEA556F334E04435DFFD5E98934D1295B605BF",
|
||||
"aria2-rpc.min.js": "C20AAC2FD922A7D348603C453A458CBD606E092ECDDB90C80C9D648A0EF6D6AE",
|
||||
"aria2-rpc-profile-item.vue.min.js": "54C7C1639F3A0AE5AFC5FFFED3C9F6D7AD6CE28344ABCF238147D18E8B8D50C6",
|
||||
"aria2-rpc-profiles.vue.min.js": "838FB51D5331B2D7979A363A65F36230669A738FFE0566AA86AD1F5D579FC190",
|
||||
"aria2-rpc.min.js": "C20AAC2FD922A7D348603C453A458CBD606E092ECDDB90C80C9D648A0EF6D6AE",
|
||||
"ass-utils.min.js": "6F5D6564F82FEEE4F1BA108F7283653AB8A3A704DB0CE8EDC741A761CCBDBC7B",
|
||||
"auto-continue.min.js": "8EF0A775E1520C5D1A6058A3289EB2E47D16681EF3E2B6043780E2FDAC919CAA",
|
||||
"auto-draw.min.js": "303469718E41C156C763AE085FC62B42AEFD654B7E6083DAF111C5D5EE4CA619",
|
||||
@ -30,10 +30,10 @@
|
||||
"collapse-live-side-bar.min.js": "9B4296F88C32FD081E4FD0DD48B4353C243A423446CF1CA047EB3B574D597F80",
|
||||
"column-image-exporter.min.js": "F6AEF899A858D0ACBAF86FA48285008A82FB684C7B4748DEFEF2BB914ABF5C3D",
|
||||
"combo-like.min.js": "E32FE23747479132F90C3D66CA6EB78031B4F7388F77CC56668E41B3F05FE954",
|
||||
"comment.min.css": "4EA879EF547129D0F11AC87F3010E295AA24AC8563DB4C8527AB0190FECD2707",
|
||||
"comment.min.js": "323C0E15A61B2114C2E9996CB0EF42738C440463FEB01EA799B922FB8B780B8D",
|
||||
"comment-apis.min.js": "D0E6EF724B5C068AD55EE9F740090A782447CE373080848FCA24879FC56E5E8B",
|
||||
"comment-dark.min.css": "E980508E86203743C36FEE4F7149BFF53961ECBC4EC140E8C162D18D395B940A",
|
||||
"comment.min.css": "4EA879EF547129D0F11AC87F3010E295AA24AC8563DB4C8527AB0190FECD2707",
|
||||
"comment.min.js": "323C0E15A61B2114C2E9996CB0EF42738C440463FEB01EA799B922FB8B780B8D",
|
||||
"comments-translate.min.js": "5B17DEBBFDC6081952CCB698FF2F822138248F7B47C52584E4F0851AD1D99A9A",
|
||||
"compact-layout.min.css": "CAC8B0DBA8E90B38D31F0811B7B469709052204AC36D5D3F20FE5D0899FDDCCB",
|
||||
"compact-layout.min.js": "CB183077272C81C9D9DD86B0AD67EA0297F4D6F22253B16DDC6C3394A441A6FF",
|
||||
@ -41,9 +41,6 @@
|
||||
"copy-feeds-link.min.js": "02AE851BC886EE2A93EF84295E67CA5CE0BF7EEF0B37AA5ED9D7FBFF3C1F422B",
|
||||
"custom-control-background.min.css": "1981FD2BF3B17ECF33F98D5DEDAF0D32ACBE9532A51FDB70822286991AB98EF3",
|
||||
"custom-control-background.min.js": "A2699D3CBCB0857C3D0E5F6744964DF705C35C740E59448AFEE62508B7EE8848",
|
||||
"custom-navbar.min.css": "5274E86C2DB9C62F3370DD2E762161E05687A18E70532258F1098E7E9C3A9488",
|
||||
"custom-navbar.min.html": "B063DEEFF36B29C115483DD0061EF6C62E83085F3D1D9320DE94010A039D8738",
|
||||
"custom-navbar.min.js": "A0C1A4E01C54DB8FE1AEC2EB090824119DE24CCC52AE131D928CB7758F2D354D",
|
||||
"custom-navbar-activities.min.js": "4AEB94FA06E543E3D0BA9E3337798DA3BC0AD194974A981710CE7CDAC9F6DD98",
|
||||
"custom-navbar-blank.min.js": "E8F08DA7CD2C67F9D064B959A64CFC6658103DBCBE2B9B58D978A1742E02D829",
|
||||
"custom-navbar-category.min.js": "A024B4418A6521EDDD9590F2F0FE5EB7FB0556A23468E8CBFF9609B935805348",
|
||||
@ -62,17 +59,22 @@
|
||||
"custom-navbar-user-info.min.js": "690E71DEF5B5BC4B0216780F6F7B7BFE5A05B2806CE6D68FC05A785C676A66B7",
|
||||
"custom-navbar-video-list.min.js": "A4D01957587605411A33DF9E27DB7FC5A8646540A1E6B14C0B60702853B1FBEB",
|
||||
"custom-navbar-watchlater-list.min.js": "FBF8695BF767D83BB780EBD8FADA0AB95D8F26E11FF1A8B58E5A774CE4191018",
|
||||
"custom-navbar.min.css": "5274E86C2DB9C62F3370DD2E762161E05687A18E70532258F1098E7E9C3A9488",
|
||||
"custom-navbar.min.html": "B063DEEFF36B29C115483DD0061EF6C62E83085F3D1D9320DE94010A039D8738",
|
||||
"custom-navbar.min.js": "A0C1A4E01C54DB8FE1AEC2EB090824119DE24CCC52AE131D928CB7758F2D354D",
|
||||
"danmaku-converter.min.js": "C54666E9910A927B54051EAB7C3DB6F93C1F6010A47614A619AFD7487C3F7183",
|
||||
"danmaku-segment.min.js": "43CC3236AFABA89BD0AE24D640809BE333772824E3994541AFC3CDDD9F881613",
|
||||
"danmaku-send-bar.min.css": "52149D46CF3A15CF6EB186CB49F298DE18B0723E52D8693228F66099847EDCCB",
|
||||
"danmaku-send-bar.min.js": "AC85BB5380504CAEA377CCCEEBB885C32EF74CA4D857B90D4DAE54637EAB1BD7",
|
||||
"dark.min.css": "D211329730870BE6799AABB87DCC2B9B1C329D75FDFC75D98F5549239DC993EC",
|
||||
"dark.user.css": "9A9113CFAA7C51AD08FCEACE1BA0EFDCA98A3ED576ABE3E02BE2B5EC1903AE3D",
|
||||
"dark-color-scheme.min.js": "C83A38770DCEC5842E49617B07FFF97BCD6691982AFE40788ADC6A449C6474CB",
|
||||
"dark-important.min.css": "5902E037E040A6C364391FE27885A118A8FD8B30A4B5E8C737C5FE5CFFB67F42",
|
||||
"dark-navbar.min.css": "7FAD547E326B768904B3739C978DF86FFDDD5E5064FB8F490710D197CCC3018B",
|
||||
"dark-schedule.min.js": "364DB7A5C21006669E38A60DF20166031EFC31CCAE0E74D1253995CC6EA4916F",
|
||||
"dark-slice-13.min.css": "836058CE0D02D20641D160DD9373D0F925298E6B2D003D29EAB79B21C98EC84D",
|
||||
"dark-slice-9.min.css": "543CD3BF652C7C9B3025639D5F97278B23926E4296C6EC4C1C9F41B7C8828087",
|
||||
"dark-styles.min.js": "7B38EBEA44F6707A1840FED261F50922797E07545F2EEACE3F44DF4C15C591E2",
|
||||
"dark.min.css": "B7255FABCBE29805E00882998E4FA20A73A1997FC880E75DF0F9E9CBAC603DFF",
|
||||
"dark.user.css": "34E77F4A8234BB74FAD57DB1DD59F61398525AD49FC4324234EE9D6D04AD83B4",
|
||||
"debounce.min.js": "E64A2AD8E8C063787466D50788E8D5D49B27DDCEF5D2B7EA534B4E6B606E9124",
|
||||
"default-danmaku-settings.min.css": "D9942B184FEDA7B08CFA0C34920E97D7A83B81762DCBF757642EBB60F95FF25D",
|
||||
"default-danmaku-settings.min.js": "901EA05F842932F436F0ABEAC99802D286575F9033CE078AA246FD1453B98998",
|
||||
@ -80,7 +82,7 @@
|
||||
"default-player-layout.min.js": "2F018C09DCCB9D0DD671ED4868A1EAC365D63CC51618EE076598C6624E3BEA7E",
|
||||
"default-player-mode.min.js": "AF238A2FE0748706B594208CFCB78E461DF04F0E89FF57952973603BCE5BD6D9",
|
||||
"default-video-quality.min.js": "20C0F41F683D685CCD22BD91F0EB4C2227146DD5586EB65388EE8FA97F46F7D2",
|
||||
"default-video-speed.min.js": "BF25CEE856CB252DAA1E044F717796FC6CB81B4C117D60E60AB5835F12CEA2D1",
|
||||
"default-video-speed.min.js": "720B588D410C267C1EE411927C9FC9FBBAE693A6938134416962E7B5A0682D25",
|
||||
"disable-feeds-details.min.js": "E23139E26EFCC1D4726D644C38241E1CB89D85B7509007EE2A76A4A0E399AB6E",
|
||||
"disable-profile-popup.min.js": "E76C14C9E3ADBD6E5F46651AA93D0BD05619CAB4AE9CA126F6C567F9B69A81A4",
|
||||
"double-click-fullscreen.min.js": "CBC72858267E1BC7CD6FC4333573899213F6A81ECCE51F85D00CFB5EEA9C42BC",
|
||||
@ -100,17 +102,17 @@
|
||||
"extend-feeds-live.min.js": "CACEC3C5DE877639BBD2DC6BC5A4C4FFDD160B32C338DA1824F68E1985139F83",
|
||||
"favorites-redirect.min.js": "9DB5FF294C7A49AD9341201C1FA0C8D7EBE7BFC1424DD74C4B796D1F0E24CFD1",
|
||||
"feeds-apis.min.js": "6F5194CFE98E6D30CB8D73F2580664E314538FABE2F24294DF945A5816685217",
|
||||
"feeds-filter.min.js": "CF558BFD3860AC3E11757FFFF6A8AABE70DF7DFA1D1077684A1BF08868C649DB",
|
||||
"feeds-filter-card.vue.min.js": "58DCE429394B462B73DD7819198EFC2B2D9DD58BAFEE4D70A49F8341473AAE76",
|
||||
"feeds-filter.min.js": "CF558BFD3860AC3E11757FFFF6A8AABE70DF7DFA1D1077684A1BF08868C649DB",
|
||||
"feeds-image-exporter.min.js": "97392AFED64DEB5115ACDAE01BF97D41C32A68E431154269E1ADF40F66FA9B4B",
|
||||
"feeds-translate-providers.min.js": "5F335096874B2A4A6893FB1D279757B2383D3B481FE7480C1CC28002A50F3CFF",
|
||||
"feeds-translate.min.css": "67A3A109C965509E2470B7403124E3F41F1EBB082DADDF06C37517AFB0A7C17C",
|
||||
"feeds-translate.min.js": "D94ECE12B5E72A08B36910A9C699E274ED7C60554136962F8B3BB7CAEDEA8EE8",
|
||||
"feeds-translate-providers.min.js": "5F335096874B2A4A6893FB1D279757B2383D3B481FE7480C1CC28002A50F3CFF",
|
||||
"ffmpeg-support.min.js": "16155341488FEA896B71CE5F221F12056F6A02C4583DFB52685FA5284E1ED1E4",
|
||||
"fill-with-comments.min.js": "67AFFFA2DA2D0DF4AAC34D85B20B903380C5EE6D6D2A72FF6E151CFD3455CF0D",
|
||||
"filter-type-switch.vue.min.js": "7DC5765516D1619E7E238338F479ADDA0CBA622C5C04DAB5658B4492A39B8CE2",
|
||||
"fixed-sidebars.min.js": "85BD15D3228CECD3E13EF3571C31F73EC71B9C6845E553E424634823F62ADCFB",
|
||||
"fix-fullscreen.min.js": "0C94A778CDAAECC0C97D36833C94B3AB87D562C5AAB23EFFE20241EB53FBA317",
|
||||
"fixed-sidebars.min.js": "85BD15D3228CECD3E13EF3571C31F73EC71B9C6845E553E424634823F62ADCFB",
|
||||
"fold-comment.min.css": "74DF4566EB80AD7078E65E8B68633E05FC41D3B4E47A20D6E415E8A743F35378",
|
||||
"fold-comment.min.js": "03AD6B9C8D1D52ECDB1A1D3F9750D31AAB6F8BBA241C741629978D374E087F4A",
|
||||
"frame-playback.min.css": "45AC8DEBA1DEE2708FB19F8ED72798294A96A341F4FAFAFAFDEAFB79CFB50368",
|
||||
@ -124,7 +126,7 @@
|
||||
"gbk.min.js": "0EDFCB94F519365A8CCA9BF3AECE57DC6DB273EF3F41545095B8F03625782F0D",
|
||||
"get-number.min.js": "CDA2DBF2FD2162220EC251333807C4C72A1DBDED51C6EA92B798BED89B08BB10",
|
||||
"gui-settings.min.css": "F5D09B1F2D6FB5C9923A87EA087BB50450F4B912360F6EF578D90F35D8D86D36",
|
||||
"gui-settings.min.html": "5C47AD1487F9289CDBD9BE37E49CA7CE2706EEF958D8E91BBE0E91CFB0F21CCC",
|
||||
"gui-settings.min.html": "88DE1172A865817E33EE5A7AB6E57E64A219FF2B89FB80ECF15C8FAF82C37340",
|
||||
"gui-settings.min.js": "7F7F9A6C1531D363E9BCEB734371F5B30CDCA9034A0AAF38B28BA3C47B8A2793",
|
||||
"haruna-scale.min.js": "7342274238E3012AD4FBCA753DA64DB8DA54F9E6860DF9689F20852DAEFD7CF8",
|
||||
"hide-bangumi-reviews.min.js": "0E8D100A27D523008041BAF95B7809855B505F4C02D4EE32CC62917528E46DBE",
|
||||
@ -155,7 +157,7 @@
|
||||
"image-viewer.min.css": "AD6A0C1A3A7BE65DDA25AC8DB77E574776F0B2998C808D6ACC09452EEA0FA7F7",
|
||||
"image-viewer.min.html": "5F1EEE9FBFD9D2EB2E2F73A57CB3DB2448A60E3D3480A297A7FC88038F60DF21",
|
||||
"index.min.html": "94B83D9EBB9005C1286A7E0759A7683932F8DADA20D07E5E9D8FF867B04D4B95",
|
||||
"keymap.min.js": "8F59AD9D7D9ECFCAD3C34D6539ACD779DBD356C0F481AAAF47EF2A4F1F7406E6",
|
||||
"keymap.min.js": "B6B530FE238CD4CC69CFFB7D32E9E0B1D0B649CDB8235BE52A70F32BB5F6E3C4",
|
||||
"live-pip.min.js": "48FF137D4CF1DEF16395184360981915FF716978455AAD6462C20EDE8A677819",
|
||||
"live-socket.min.js": "8AB690D1979FB64E7BA6126417700C0DD96C0E5C43712543590753B8344996C8",
|
||||
"magic-grid.min.js": "1CDDA7436511423934EBA3E9CCE3CD1BC913C9B8DAFE09C06939935B4F02DD3D",
|
||||
@ -163,18 +165,18 @@
|
||||
"medal-helper.min.css": "BFB833B7389BE97FE818968789BB13F6576B2023D75F20521E0F55567187EF69",
|
||||
"medal-helper.min.html": "5D7057259368BE97DED3375DD904695B245AA2BF338C5E18CB3CF61DD913617C",
|
||||
"medal-helper.min.js": "08D05F7BCF47F676A8A4AABF26E5CCF089511D0F6E846000AAE3C14E6B21C094",
|
||||
"minimal-home.vue.min.js": "DFA2E873F7948766950084DB5640A1299F63A6E45BAC943A3D1B9CB0E4A2E19F",
|
||||
"minimal-home-search.vue.min.js": "83ACE262CBA7CB68260746B25DD3009D12BA351220F5732BD74EF0B87CBB5D3A",
|
||||
"mini-player-touch-move.min.css": "0FD22BDFF784E19B8E053F243D5857DB95029BB3E48963A20321C8DC9A4B2E0B",
|
||||
"mini-player-touch-move.min.js": "1B578C130A3522260340D93F5384BE41F5D7899A3D5FAF25BFE26BEC840C471B",
|
||||
"minimal-home-search.vue.min.js": "83ACE262CBA7CB68260746B25DD3009D12BA351220F5732BD74EF0B87CBB5D3A",
|
||||
"minimal-home.vue.min.js": "DFA2E873F7948766950084DB5640A1299F63A6E45BAC943A3D1B9CB0E4A2E19F",
|
||||
"narrow-danmaku.min.js": "15AEE9158CDE411485CF2893EC6FD8950B0F1EB122604979DE3D94A99C361DDC",
|
||||
"new-styles.min.js": "32CCD2D03D8C41EE77D8FB21BFEAD20CAE24B30D4FAA1FF348C1FD4AA1798E10",
|
||||
"no-banner.min.css": "DA096F94E7FA26992F3F71245E704D69A1C222D0ADA6F1990FA5D948507CE15F",
|
||||
"no-live-autoplay.min.js": "77051D9BA32E5F91B358820533A5230FCA02D8CBB4134D37CC824D43083936BA",
|
||||
"no-mini-video-autoplay.min.js": "D0738ED56C685C3B02F39C0D1A0694ACE71A07397A59C6FE37CD9BC496592462",
|
||||
"notify-new-version.min.js": "D922DCE08CFD1729BB778885E5EFB905FBE23A2878437AE2E9CF2263C22E196B",
|
||||
"old.min.css": "4C8C918BEBE59E9EE19D5E383234767EE2A2F1DB72E86F0C9F9CE01F26DD193C",
|
||||
"old-tweets.min.js": "AAF995BE7F62E1B57C360246F43BCA8B9ADC850DD828190114F6DCADC9A54C06",
|
||||
"old.min.css": "4C8C918BEBE59E9EE19D5E383234767EE2A2F1DB72E86F0C9F9CE01F26DD193C",
|
||||
"online-info-row.vue.min.js": "48D42BADAD3F52BAFE20E2810567ED404A82DA78C8B7ECEB97C0D3E76CC61138",
|
||||
"outer-watchlater.min.css": "B40E94BADA1A9BC96422777B33150780330763098B539921DA05F9D3BA487424",
|
||||
"outer-watchlater.min.js": "D29860BA24F94DDAC33D057741BC140BA8DDA3364145FBC4EC7AF95F8F818C3E",
|
||||
@ -211,15 +213,15 @@
|
||||
"settings-tooltip.loader.min.js": "477DE4B69F477D67BCBC72CE33C91986EB2A5620D6F2D1D8367BBC388C5E3E5C",
|
||||
"settings-tooltip.min.css": "9691E4B469B33E5092E1BC4ABD8FDACBF46325F1F27B6DB1E8F0E1580D071E42",
|
||||
"settings-tooltip.min.js": "C7F9A79EB623BF58CB81DE4A9E74FC6C2EDB2613403EFE6D09B36FB460159A13",
|
||||
"settings-tooltip.zh-CN.min.js": "3BDECA9759A30C6C157139E8428A5A22BC9C1180A4887A94E9B04B445B3B51D1",
|
||||
"settings-tooltip.zh-CN.min.js": "BDCEDB950EA5DA2C8696EEFCDA418C9DC257C5AC827E15CB36402750AD7ABFDC",
|
||||
"show-cover-before-play.min.css": "E4050D66F8014029270CB5A4DEFDE2F847B095BA9ED4274BFED3E131B737B06D",
|
||||
"show-cover-before-play.min.js": "5614929DD8CEB3B11D184F037235D91B741AD167B08A4F5B7341C6A50A0838FF",
|
||||
"show-dead-video-title.min.js": "5B968442E71F947F70C57C9FDA083935200CBA9B1038131F1587E70A2B723798",
|
||||
"simple-home.vue.min.js": "EB32933DDE26F1D710BDACBFFA761AAF8DCF1B37971EE3B73B2953F75F913872",
|
||||
"simple-home-bangumi-category.vue.min.js": "5E0DBCA5694737CA6FFFEABB28B3FA29716C62355D8FBF14D86C4810BCF53E91",
|
||||
"simple-home-categories.vue.min.js": "CCBC179A4D21C20E603FAA14EA38A04CC643DCE42ECA27AB7860DA99BC632E02",
|
||||
"simple-home-feeds.vue.min.js": "7627DB92B042852B3DEA57123A93F710BF112CB539FFDE3E203358264D780AE7",
|
||||
"simple-home-normal-category.vue.min.js": "93A9E5E0D34FBE5BD2114D7C577EA86E05E7512BE5518127768F6B83B6A5EF70",
|
||||
"simple-home.vue.min.js": "EB32933DDE26F1D710BDACBFFA761AAF8DCF1B37971EE3B73B2953F75F913872",
|
||||
"simplify-home.min.css": "50F0FA046D61ECE5183409CF97C8DBECB4CF64918DF813CD2B39BF9FBD314B42",
|
||||
"simplify-home.min.js": "1E19F28B357C24B9B7F53ADC782DD6D4EEED6751EA879984D967C5FB4C925A9D",
|
||||
"simplify-home.vue.min.js": "F9356AA77904EA9F1BFA3F78373CA71ED7FFF5C218CE87CE44053661ECD5AFC4",
|
||||
@ -228,7 +230,7 @@
|
||||
"skip-charge-list.min.css": "D3C988CE131CEBFAC8A60360529C83EC4AE1B9EA122F9A6924F19963E25A4FE9",
|
||||
"skip-charge-list.min.js": "B689DB947BBEC53A9E5178DCE0D32A4C380000C3CE6788476EC262AA08AAF922",
|
||||
"slideshow-cards.vue.min.js": "CD468A7BAFB637AEB11EF190BE73CD3916D698B9AAB9D7FA62BF066F711AD95A",
|
||||
"slip.min.js": "407C046F6F04D990F4EFD59AB1A26FC995D8BE277CEA9E50C4621136D46D5875",
|
||||
"slip.min.js": "509F9090EC008296261F78BD4C6836E43100FDF6C67F26D8E41803A23B6DE66E",
|
||||
"style.min.css": "27223BD1ABBB5D8E529B13C009B5099F53F75B26AA713E4C660C205C1121495B",
|
||||
"subtitle-converter.min.js": "C3F5DE348DC8BD6AB8480D0F125BD3882565E7B3CEB5E58AA3492CB421A8D72F",
|
||||
"superchat-translate.min.css": "F4874FE716A750AE0D21DA44393F286E5AABFFA949476E2FA06CDBE2748CF095",
|
||||
@ -249,8 +251,8 @@
|
||||
"url-params-clean.min.js": "843D56915EE37352925D5F7F73A8521EB2744240A6441022C783A49EC8F1855C",
|
||||
"v-checkbox.vue.min.js": "D630823220562A011DDF7164A8D12E775548C6B81907EB6525B3211B822590B1",
|
||||
"v-dropdown.vue.min.js": "3D1D4DC0D8DD06C58C88A530A04DC1D5BEE6690119709B809CD3FA24C8C51C83",
|
||||
"video-card.vue.min.js": "091C518A804662EB00A471014F4A1A9407F04C0F7581C579350D659126C25144",
|
||||
"video-card-info.min.js": "D0738ED56C685C3B02F39C0D1A0694ACE71A07397A59C6FE37CD9BC496592462",
|
||||
"video-card.vue.min.js": "091C518A804662EB00A471014F4A1A9407F04C0F7581C579350D659126C25144",
|
||||
"video-danmaku.min.js": "225DDECB97C854DC57A857BB7AABE9C490D7EA464C81A4C67780E1684AC30CB1",
|
||||
"video-dash.min.js": "B731A15492D933AF1CDFBD9EAE09D9264D2B4BCAAE3F5FD2C522ADABD6F1F44B",
|
||||
"video-downloader-fragment.min.js": "D0738ED56C685C3B02F39C0D1A0694ACE71A07397A59C6FE37CD9BC496592462",
|
||||
@ -259,7 +261,7 @@
|
||||
"video-story.min.js": "DC3811422EE8696E12408E3CA6AD2E3D7068AAC1B0E3577A40C5613BAD5C6467",
|
||||
"view-cover.min.js": "436B4D6408F375E822BA12CE31FF82CA7ECDF565A2D74AD26FF39DDA342C2C13",
|
||||
"volume-overdrive.min.js": "10FDFBC393D785195039FD7A66E5E5D3E62BC0E7AC142DC8074CA84A226A48EE",
|
||||
"watchlater.min.js": "DEE59925875BEA641BA4C7376579B5FD4D14CB2EFC326A57273CF3CB5BC8B396",
|
||||
"watchlater-api.min.js": "8A5AEF38B88F16B74583B37C170F5A4F7879DFFD72F613C72A2D4A13EE7D041C",
|
||||
"watchlater-expire-warnings.min.js": "58CD05CCB0F3A0759DEBCDCB65CFCB7A074BA535CD396E6F1128D28CC4105091"
|
||||
"watchlater-expire-warnings.min.js": "58CD05CCB0F3A0759DEBCDCB65CFCB7A074BA535CD396E6F1128D28CC4105091",
|
||||
"watchlater.min.js": "DEE59925875BEA641BA4C7376579B5FD4D14CB2EFC326A57273CF3CB5BC8B396"
|
||||
}
|
||||
BIN
min/bundle.zip
BIN
min/bundle.zip
Binary file not shown.
2
min/custom-navbar.min.js
vendored
2
min/custom-navbar.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/dark.min.css
vendored
2
min/dark.min.css
vendored
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
2
min/default-video-speed.min.js
vendored
2
min/default-video-speed.min.js
vendored
@ -1 +1 @@
|
||||
(()=>(e,a)=>{const i=a=>{const i=parseFloat(e.defaultVideoSpeed);a.playbackRate=i;SpinQuery.condition((()=>a),(()=>a.playbackRate!==i),(()=>a.playbackRate=i))};Observer.videoChange((async()=>{const e=await SpinQuery.select(".bilibili-player-video video");i(e)}))})();
|
||||
(()=>(e,t)=>{function i(e,t,i){if(t in e){Object.defineProperty(e,t,{value:i,enumerable:true,configurable:true,writable:true})}else{e[t]=i}return e}class a{static getDefaultVideoSpeed(){return parseFloat(e.defaultVideoSpeed)}static formatSpeedText(e){if(e===1){return"倍数"}return Math.trunc(e)===e?`${e}.0x`:`${e}x`}static getSpeedFromSetting(){for(const[t,i]of Object.entries(e.rememberVideoSpeedList)){if(i.some((e=>e===unsafeWindow.aid))){return parseFloat(t)}}}static rememberSpeed(t,i,a=false){let s=-1;for(const t of Object.values(e.rememberVideoSpeedList)){s=t.indexOf(i);if(s!==-1){t.splice(s,1);break}}if(s===-1&&!a){return}if(!e.rememberVideoSpeedList[t]){e.rememberVideoSpeedList[t]=[]}e.rememberVideoSpeedList[t].push(i);e.rememberVideoSpeedList=e.rememberVideoSpeedList}constructor(e,t,s){i(this,"_containerElement",void 0);i(this,"_menuListElement",void 0);i(this,"_nameBtn",void 0);i(this,"_videoElement",void 0);i(this,"_nativeSpeedVal",1);this._containerElement=e;this._videoElement=t;this._nativeSpeedVal=s;this._nameBtn=this._containerElement.querySelector(`.${a.classNameMap.speedNameBtn}`);this._menuListElement=this._containerElement.querySelector(`.${a.classNameMap.speedMenuList}`)}get playbackRate(){return this._videoElement.playbackRate}get nativeSpeedVal(){return this._nativeSpeedVal}getSpeedMenuItem(e){if(e){return this._menuListElement.querySelector(`.${a.classNameMap.speedMenuItem}[data-value="${e}"]`)}return this._menuListElement.querySelector(`.${a.classNameMap.speedMenuItem}.${a.classNameMap.active}`)}observe(){Observer.all(this._menuListElement,(t=>{t.forEach((t=>{const i=t.target;if(!i.classList.contains(a.classNameMap.active)){return}const s=parseFloat(i.dataset.value||"1");this._containerElement.dispatchEvent(new CustomEvent("changed",{detail:{speed:s}}));if(a.nativeSupportedRates.includes(s)){this._nativeSpeedVal=s;this._containerElement.dispatchEvent(new CustomEvent("native-speed-changed",{detail:{speed:this._nativeSpeedVal}}))}if(e.extendVideoSpeed&&a.nativeSupportedRates.includes(s)){var n;(n=this._menuListElement.querySelector(`.${a.classNameMap.speedMenuItem}.extended.${a.classNameMap.active}`))===null||n===void 0?void 0:n.classList.remove(a.classNameMap.active)}if(!unsafeWindow.aid){throw"aid is undefined"}if(e.useDefaultVideoSpeed){if(e.rememberVideoSpeed){a.rememberSpeed(s,unsafeWindow.aid,s!==a.getDefaultVideoSpeed())}else{e.defaultVideoSpeed=s.toString()}}}))}))}extendMenuItem(){this._menuListElement.addEventListener("click",(e=>{const t=e.target;const i=parseFloat(t.dataset.value);if(e.target.classList.contains("extended")){this.setUnsafeVideoSpeed(i)}if(a.extendedSupportedRates.includes(this.playbackRate)&&this._nativeSpeedVal===i){this.forceUpdate(i)}}));for(const e of a.extendedSupportedRates){const t=document.createElement("li");t.innerText=a.formatSpeedText(e);t.classList.add(a.classNameMap.speedMenuItem,"extended");t.dataset.value=e.toString();this._menuListElement.prepend(t)}}reset(){this.setUnsafeVideoSpeed(1)}setVideoSpeed(e){if(a.supportedRates.includes(e)){this.getSpeedMenuItem(e).click()}}setUnsafeVideoSpeed(e){if(a.nativeSupportedRates.includes(e)){this.getSpeedMenuItem(e).click()}else{this.forceUpdate(e)}}forceUpdate(e){var t,i;(t=this._menuListElement.querySelector(`.${a.classNameMap.speedMenuItem}[data-value="${this.playbackRate}"]`))===null||t===void 0?void 0:t.classList.remove(a.classNameMap.active);(i=this._menuListElement.querySelector(`.${a.classNameMap.speedMenuItem}[data-value="${e}"]`))===null||i===void 0?void 0:i.classList.add(a.classNameMap.active);this._videoElement.playbackRate=e;this._containerElement.classList.remove(a.classNameMap.show);this._nameBtn.innerText=a.formatSpeedText(e)}}i(a,"classNameMap",{speedMenuList:"bilibili-player-video-btn-speed-menu",speedMenuItem:"bilibili-player-video-btn-speed-menu-list",speedNameBtn:"bilibili-player-video-btn-speed-name",speedContainer:"bilibili-player-video-btn-speed",active:"bilibili-player-active",show:"bilibili-player-speed-show",video:"bilibili-player-video"});i(a,"nativeSupportedRates",[.5,.75,1,1.25,1.5,2]);i(a,"extendedSupportedRates",[2.5,3]);i(a,"supportedRates",e.extendVideoSpeed?[...a.nativeSupportedRates,...a.extendedSupportedRates]:a.nativeSupportedRates);if(e.useDefaultVideoSpeed||e.extendVideoSpeed){let t=1;Observer.videoChange((async()=>{const i=await SpinQuery.select(`.${a.classNameMap.speedContainer}`);const s=await SpinQuery.select(`.${a.classNameMap.video} video`);if(!i){throw"speed container element not found!"}if(!s){throw"video element not found!"}const n=new a(i,s,t);n.observe();if(e.extendVideoSpeed){n.extendMenuItem();i.addEventListener("native-speed-changed",(e=>{t=e.detail.speed}))}setTimeout((()=>{e.useDefaultVideoSpeed&&n.setVideoSpeed(e.rememberVideoSpeed&&a.getSpeedFromSetting()||a.getDefaultVideoSpeed())}),100)}))}return{export:{VideoSpeedController:a}}})();
|
||||
File diff suppressed because one or more lines are too long
2
min/keymap.min.js
vendored
2
min/keymap.min.js
vendored
File diff suppressed because one or more lines are too long
2
min/settings-tooltip.zh-CN.min.js
vendored
2
min/settings-tooltip.zh-CN.min.js
vendored
File diff suppressed because one or more lines are too long
@ -1,6 +1,6 @@
|
||||
// ==UserScript==
|
||||
// @name Bilibili Evolved (Preview)
|
||||
// @version 1.11.7
|
||||
// @version 1.11.8
|
||||
// @description Bilibili Evolved 的预览版, 可以抢先体验新功能.
|
||||
// @author Grant Howard, Coulomb-G
|
||||
// @copyright 2020, Grant Howard (https://github.com/the1812) & Coulomb-G (https://github.com/Coulomb-G)
|
||||
|
||||
@ -681,12 +681,7 @@ Resource.manifest = {
|
||||
useDefaultVideoSpeed: {
|
||||
path: 'default-video-speed.min.js',
|
||||
displayNames: {
|
||||
useDefaultVideoSpeed: '使用默认播放速度',
|
||||
defaultVideoSpeed: '默认播放速度',
|
||||
},
|
||||
dropdown: {
|
||||
key: 'defaultVideoSpeed',
|
||||
items: ['0.5', '0.75', '1.0', '1.25', '1.5', '2.0'],
|
||||
useDefaultVideoSpeed: '记忆上次播放速度',
|
||||
}
|
||||
},
|
||||
seedsToCoins: {
|
||||
|
||||
@ -246,8 +246,11 @@ export const settings = {
|
||||
preferAvUrl: false,
|
||||
homeHidden: false,
|
||||
homeHiddenItems: [],
|
||||
favoritesListCurrentSelect: '',
|
||||
rememberVideoSpeedList: {},
|
||||
rememberVideoSpeed: false,
|
||||
extendVideoSpeed: true,
|
||||
cache: {},
|
||||
favoritesListCurrentSelect: ''
|
||||
}
|
||||
const fixedSettings = {
|
||||
useDefaultDanmakuSettings: false,
|
||||
|
||||
5
src/global.d.ts
vendored
5
src/global.d.ts
vendored
@ -520,6 +520,11 @@ declare global {
|
||||
favoritesListCurrentSelect: string,
|
||||
homeHidden: boolean,
|
||||
homeHiddenItems: string[],
|
||||
rememberVideoSpeedList: {
|
||||
[index: string]: string[]
|
||||
},
|
||||
rememberVideoSpeed: boolean,
|
||||
extendVideoSpeed: boolean,
|
||||
}
|
||||
const GM_info: MonkeyInfo
|
||||
function GM_xmlhttpRequest(details: MonkeyXhrDetails): { abort: () => void }
|
||||
|
||||
@ -147,6 +147,54 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.search-component {
|
||||
&:hover {
|
||||
@include theme-border-color();
|
||||
}
|
||||
&.search-component-focus {
|
||||
@include border-color("a");
|
||||
}
|
||||
.search-component-input input {
|
||||
@include background-color();
|
||||
@include color("e");
|
||||
}
|
||||
.icon-follow-search:hover {
|
||||
@include to-theme("blue");
|
||||
}
|
||||
}
|
||||
.follow-search-result {
|
||||
@include color("a");
|
||||
}
|
||||
}
|
||||
}
|
||||
.album-content {
|
||||
.album-list {
|
||||
&__title {
|
||||
@include color("e");
|
||||
}
|
||||
&__tabs {
|
||||
@include background-color("5");
|
||||
.album-list__tab {
|
||||
&-name {
|
||||
@include color("e");
|
||||
}
|
||||
}
|
||||
.album-list__tab--active {
|
||||
.album-list__tab-name {
|
||||
@include theme-color();
|
||||
}
|
||||
}
|
||||
}
|
||||
&__content {
|
||||
.album-card {
|
||||
&__title {
|
||||
@include color("e");
|
||||
&:hover {
|
||||
@include theme-color();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -828,6 +876,14 @@ html {
|
||||
.bb-comment .reply-notice .notice-item {
|
||||
@include theme-background-color();
|
||||
}
|
||||
.video-page-card .card-box .info .title:hover {
|
||||
@include theme-color();
|
||||
}
|
||||
.bilibili-player-video-interactive-list {
|
||||
.small.hover circle {
|
||||
@include set-theme-color("fill");
|
||||
}
|
||||
}
|
||||
.control-panel-ctnr {
|
||||
@include background-color("4");
|
||||
.chat-input-ctnr {
|
||||
@ -843,7 +899,35 @@ html {
|
||||
}
|
||||
}
|
||||
}
|
||||
.control-panel-icon-row .icon-item {
|
||||
&.danmu-block-icon {
|
||||
@include fill("e");
|
||||
}
|
||||
&.active,
|
||||
&:hover {
|
||||
@include theme-fill();
|
||||
}
|
||||
}
|
||||
}
|
||||
#control-panel-ctnr-box {
|
||||
@include no-image
|
||||
}
|
||||
}
|
||||
.live-web-player-controller {
|
||||
.vertical-slider-wrap,
|
||||
.horizontal-slider-wrap {
|
||||
.slider-handle,
|
||||
.slider-track {
|
||||
@include theme-background-color();
|
||||
}
|
||||
}
|
||||
.danmaku .handle {
|
||||
@include theme-background-color();
|
||||
}
|
||||
.quality-wrap .quality-it.selected {
|
||||
@include theme-color();
|
||||
}
|
||||
input[type='radio']:checked+label::before {
|
||||
@include theme-background-color();
|
||||
@include theme-border-color();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1241,6 +1241,7 @@ li.normal-item a:hover .uname,
|
||||
.play-list .rightside-content .batch-operation .all-checked,
|
||||
.player-auxiliary-playlist-item.player-auxiliary-playlist-item-active .player-auxiliary-playlist-item-title,
|
||||
.player-auxiliary-playlist-item-p-item:hover,
|
||||
.player-auxiliary-playlist-item-p-item.player-auxiliary-playlist-item-p-item-active,
|
||||
.container .left-container .play-options .play-options-ul li .blue,
|
||||
.favInfo-box .favInfo-details .fav-options .meta.selected,
|
||||
.play-list .leftside-content .upper-info .upper-name:hover,
|
||||
|
||||
@ -787,7 +787,6 @@ li.danmaku-info-row.bpui-selecting,
|
||||
.navbar-container .nav-items .nav-item.activated:before,
|
||||
.comic-info-component .page-normal .comic-info-con .comic-des .comic-operation .comic-view-btn,
|
||||
.interact-dialog .btn,
|
||||
.video-control-show .bilibili-player-video-interactive-list .check:hover .big-round,
|
||||
.replies-comment-input-wrapper .submit-comment,
|
||||
.comment .comment-selecotr .all-comments.active:before,
|
||||
.comment .comment-selecotr .sortByHot.active:before,
|
||||
|
||||
@ -1049,7 +1049,6 @@ $highlight-map: (
|
||||
}
|
||||
.interact-dialog .btn,
|
||||
.rookie-guide .close-button,
|
||||
.video-control-show .bilibili-player-video-interactive-list .check:hover .big-round,
|
||||
#biliAppHomeSetting button,
|
||||
.van-popover .btn-box .btn,
|
||||
.van-popper-history .view-all:hover,
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
<p class="version">v{{version}} · {{clientType}}</p>
|
||||
<p class="love">
|
||||
<a target="_blank" href="https://github.com/the1812/Bilibili-Evolved/">Made with ❤ </a>
|
||||
<a target="_blank" href="https://github.com/the1812/Bilibili-Evolved/blob/master/donate.md">
|
||||
<a target="_blank" href="https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/donate.md">
|
||||
Buy me a coffee ☕</a></p>
|
||||
<section class="authors">
|
||||
<span class="title">Authors</span>
|
||||
@ -21,7 +21,7 @@
|
||||
v-bind:href="contributor.link">{{contributor.name}}</a>
|
||||
</section>
|
||||
<section class="supporters">
|
||||
<a class="title" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/blob/preview/donate.md#历史">View
|
||||
<a class="title" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/donate.md#历史">View
|
||||
Supporters</a>
|
||||
<!-- <span class="supporter" v-for="supporter of supporters">{{supporter}}</span> -->
|
||||
</section>
|
||||
|
||||
@ -29,7 +29,7 @@
|
||||
<i class="mdi mdi-update"></i>
|
||||
更新日志
|
||||
</a>
|
||||
<a class="operation donate" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/blob/preview/donate.md">
|
||||
<a class="operation donate" target="_blank" href="https://github.com/the1812/Bilibili-Evolved/blob/preview/doc/donate.md">
|
||||
<i class="mdi mdi-heart-circle"></i>
|
||||
捐助
|
||||
</a>
|
||||
@ -54,7 +54,6 @@
|
||||
<!-- <checkbox indent="0" key="useDefaultVideoQuality" dependencies=""></checkbox>
|
||||
<dropdown indent="1" key="defaultVideoQuality" dependencies="useDefaultVideoQuality"></dropdown> -->
|
||||
<checkbox indent="0" key="useDefaultVideoSpeed" dependencies=""></checkbox>
|
||||
<dropdown indent="1" key="defaultVideoSpeed" dependencies="useDefaultVideoSpeed"></dropdown>
|
||||
<!-- <checkbox indent="0" key="useDefaultDanmakuSettings" dependencies=""></checkbox>
|
||||
<checkbox indent="1" key="enableDanmaku" dependencies="useDefaultDanmakuSettings"></checkbox>
|
||||
<checkbox indent="1" key="rememberDanmakuSettings" dependencies="useDefaultDanmakuSettings enableDanmaku">
|
||||
|
||||
@ -139,8 +139,7 @@ export const toolTips = new Map<keyof BilibiliEvolvedSettings, string>([
|
||||
['sideBarOffset', /*html*/`设定侧栏的垂直偏移量, 单位为百分比, 允许的范围为 -40% ~ 40%.`],
|
||||
['hideCategory', /*html*/`隐藏主站的分区栏, 分区仍然可以从顶栏的主站菜单中进入.`],
|
||||
['foldComment', /*html*/`动态里查看评论区时, 在底部添加一个<span>收起评论</span>按钮, 这样就不用再回到上面收起了.`],
|
||||
['useDefaultVideoSpeed', /*html*/`设置是否使用默认视频播放速度.`],
|
||||
['defaultVideoSpeed', /*html*/`设置默认的视频播放速度.`],
|
||||
['useDefaultVideoSpeed', /*html*/`设置是否记忆上次选择的视频播放速度.`],
|
||||
['seedsToCoins', /*html*/`在附加功能中添加<span>瓜子换硬币</span>的按钮, 点击可以将700银瓜子换成1个硬币, 每天限1次.`],
|
||||
['autoDraw', /*html*/`在当前直播间有抽奖活动时, 自动点击抽奖按钮. 注意只适用于少量抽奖, 那种99+限量抽奖可能跟不上其他人的手速(`],
|
||||
['keymap', /*html*/`为视频播放器启用更多的快捷键:
|
||||
|
||||
@ -1,13 +1,214 @@
|
||||
const setPlaybackRate = (video: HTMLVideoElement) => {
|
||||
const speed = parseFloat(settings.defaultVideoSpeed)
|
||||
video.playbackRate = speed
|
||||
SpinQuery.condition(
|
||||
() => video,
|
||||
() => video.playbackRate !== speed,
|
||||
() => video.playbackRate = speed
|
||||
)
|
||||
export class VideoSpeedController {
|
||||
static readonly classNameMap = {
|
||||
speedMenuList: "bilibili-player-video-btn-speed-menu",
|
||||
speedMenuItem: "bilibili-player-video-btn-speed-menu-list",
|
||||
speedNameBtn: "bilibili-player-video-btn-speed-name",
|
||||
speedContainer: "bilibili-player-video-btn-speed",
|
||||
active: "bilibili-player-active",
|
||||
show: "bilibili-player-speed-show",
|
||||
video: "bilibili-player-video"
|
||||
}
|
||||
static readonly nativeSupportedRates = [0.5, 0.75, 1.0, 1.25, 1.5, 2.0]
|
||||
static readonly extendedSupportedRates = [2.5, 3]
|
||||
// 扩展倍数不支持热重载
|
||||
static readonly supportedRates = (settings.extendVideoSpeed) ? [...VideoSpeedController.nativeSupportedRates, ...VideoSpeedController.extendedSupportedRates] : VideoSpeedController.nativeSupportedRates
|
||||
|
||||
static getDefaultVideoSpeed() {
|
||||
return parseFloat(settings.defaultVideoSpeed)
|
||||
}
|
||||
|
||||
static formatSpeedText(speed: number) {
|
||||
if (speed === 1) {
|
||||
return "倍数"
|
||||
}
|
||||
return Math.trunc(speed) === speed ? `${speed}.0x` : `${speed}x`
|
||||
}
|
||||
|
||||
static getSpeedFromSetting() {
|
||||
for (const [level, aids] of Object.entries(settings.rememberVideoSpeedList)) {
|
||||
if (aids.some(aid => aid === unsafeWindow.aid)) {
|
||||
return parseFloat(level)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static rememberSpeed(speed: number, aid: string, force = false) {
|
||||
let aidOldIndex = -1;
|
||||
// 如果原来设置中记忆了有关的 aid,就需要先移除它
|
||||
for (const aids of Object.values(settings.rememberVideoSpeedList)) {
|
||||
aidOldIndex = aids.indexOf(aid)
|
||||
if (aidOldIndex !== -1) {
|
||||
aids.splice(aidOldIndex, 1)
|
||||
break
|
||||
}
|
||||
}
|
||||
// 对于没有被记忆的 aid,并且 force 参数为假就直接返回
|
||||
if (aidOldIndex === -1 && !force) {
|
||||
return
|
||||
}
|
||||
// 为新的速度值初始化相应的 aid 数组
|
||||
if (!settings.rememberVideoSpeedList[speed]) {
|
||||
settings.rememberVideoSpeedList[speed] = []
|
||||
}
|
||||
// 追加记忆值
|
||||
settings.rememberVideoSpeedList[speed].push(aid)
|
||||
// 持久化
|
||||
settings.rememberVideoSpeedList = settings.rememberVideoSpeedList
|
||||
}
|
||||
|
||||
private _containerElement: HTMLElement
|
||||
private _menuListElement: HTMLElement
|
||||
private _nameBtn: HTMLButtonElement
|
||||
private _videoElement: HTMLVideoElement
|
||||
// 这个值模拟原生内部记录的速度倍数,它不应该被赋值成扩展倍数的值
|
||||
private _nativeSpeedVal = 1
|
||||
|
||||
constructor(containerElement: HTMLElement, videoElement: HTMLVideoElement, nativeSpeedVal: number) {
|
||||
this._containerElement = containerElement
|
||||
this._videoElement = videoElement
|
||||
this._nativeSpeedVal = nativeSpeedVal
|
||||
this._nameBtn = this._containerElement.querySelector(`.${VideoSpeedController.classNameMap.speedNameBtn}`) as HTMLButtonElement
|
||||
this._menuListElement = this._containerElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuList}`) as HTMLElement
|
||||
}
|
||||
|
||||
get playbackRate() {
|
||||
return this._videoElement.playbackRate
|
||||
}
|
||||
|
||||
get nativeSpeedVal() {
|
||||
return this._nativeSpeedVal
|
||||
}
|
||||
|
||||
getSpeedMenuItem(speed: number): HTMLElement;
|
||||
getSpeedMenuItem(speed?: number) {
|
||||
if (speed) {
|
||||
return this._menuListElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuItem}[data-value="${speed}"]`)
|
||||
}
|
||||
return this._menuListElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuItem}.${VideoSpeedController.classNameMap.active}`)
|
||||
}
|
||||
|
||||
// 观察倍数菜单,用于触发事件,记忆选定的倍数
|
||||
observe() {
|
||||
Observer.all(this._menuListElement, (mutations) => {
|
||||
mutations.forEach(mutation => {
|
||||
const selectedSpeedOption = mutation.target as HTMLLIElement
|
||||
// 不需要处理被移除 active 类的变化
|
||||
if (!selectedSpeedOption.classList.contains(VideoSpeedController.classNameMap.active)) {
|
||||
return
|
||||
}
|
||||
|
||||
const currentSpeed = parseFloat(selectedSpeedOption.dataset.value || '1')
|
||||
|
||||
this._containerElement.dispatchEvent(new CustomEvent("changed", { detail: { speed: currentSpeed } }))
|
||||
|
||||
if (VideoSpeedController.nativeSupportedRates.includes(currentSpeed)) {
|
||||
this._nativeSpeedVal = currentSpeed
|
||||
this._containerElement.dispatchEvent(new CustomEvent("native-speed-changed", { detail: { speed: this._nativeSpeedVal } }))
|
||||
}
|
||||
// 原生支持倍数的应用后,有必要清除扩展倍数选项上的样式
|
||||
if (settings.extendVideoSpeed && VideoSpeedController.nativeSupportedRates.includes(currentSpeed)) {
|
||||
this._menuListElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuItem}.extended.${VideoSpeedController.classNameMap.active}`)?.classList.remove(VideoSpeedController.classNameMap.active)
|
||||
}
|
||||
if (!unsafeWindow.aid) {
|
||||
throw "aid is undefined"
|
||||
}
|
||||
// 记忆
|
||||
// - `useDefaultVideoSpeed` 表示是否启用记忆
|
||||
// - `rememberVideoSpeed` 表示是否启用细化到视频级别的记忆
|
||||
if (settings.useDefaultVideoSpeed) {
|
||||
if (settings.rememberVideoSpeed) {
|
||||
VideoSpeedController.rememberSpeed(currentSpeed, unsafeWindow.aid, currentSpeed !== VideoSpeedController.getDefaultVideoSpeed())
|
||||
} else {
|
||||
settings.defaultVideoSpeed = currentSpeed.toString()
|
||||
}
|
||||
}
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
extendMenuItem() {
|
||||
// 如果开启了扩展倍数,存在一种场景使倍数设置会失效:
|
||||
// 1. 用户从原生支持的倍数切换到扩展倍数
|
||||
// 2. 用户从扩展倍数切换到之前选中的原生倍数
|
||||
// 这是因为播放器内部实现维护了一个速度值,但是在切换到扩展倍数时没法更新,因此切换回来的时候被判定没有发生变化
|
||||
// 为了解决这个问题,需要替官方更新元素,并为视频设置正确的倍数,并关闭菜单
|
||||
this._menuListElement.addEventListener("click", (ev) => {
|
||||
const option = (ev.target as HTMLElement)
|
||||
const value = parseFloat(option.dataset.value as string)
|
||||
if ((ev.target as HTMLElement).classList.contains("extended")) {
|
||||
this.setUnsafeVideoSpeed(value)
|
||||
}
|
||||
// 从扩展倍数切换到之前选中的原生倍数
|
||||
if (VideoSpeedController.extendedSupportedRates.includes(this.playbackRate) && this._nativeSpeedVal === value) {
|
||||
this.forceUpdate(value)
|
||||
}
|
||||
})
|
||||
// 添加扩展的倍数选项
|
||||
for (const rate of VideoSpeedController.extendedSupportedRates) {
|
||||
const li = document.createElement("li")
|
||||
li.innerText = VideoSpeedController.formatSpeedText(rate)
|
||||
li.classList.add(VideoSpeedController.classNameMap.speedMenuItem, "extended")
|
||||
li.dataset.value = rate.toString()
|
||||
this._menuListElement.prepend(li)
|
||||
}
|
||||
}
|
||||
|
||||
reset() {
|
||||
this.setUnsafeVideoSpeed(1)
|
||||
}
|
||||
|
||||
setVideoSpeed(speed: number) {
|
||||
if (VideoSpeedController.supportedRates.includes(speed)) {
|
||||
this.getSpeedMenuItem(speed).click()
|
||||
}
|
||||
}
|
||||
|
||||
private setUnsafeVideoSpeed(speed: number) {
|
||||
if (VideoSpeedController.nativeSupportedRates.includes(speed)) {
|
||||
this.getSpeedMenuItem(speed).click()
|
||||
} else {
|
||||
this.forceUpdate(speed)
|
||||
}
|
||||
}
|
||||
|
||||
private forceUpdate(value: number) {
|
||||
this._menuListElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuItem}[data-value="${this.playbackRate}"]`)?.classList.remove(VideoSpeedController.classNameMap.active);
|
||||
this._menuListElement.querySelector(`.${VideoSpeedController.classNameMap.speedMenuItem}[data-value="${value}"]`)?.classList.add(VideoSpeedController.classNameMap.active);
|
||||
this._videoElement.playbackRate = value
|
||||
this._containerElement.classList.remove(VideoSpeedController.classNameMap.show)
|
||||
this._nameBtn.innerText = VideoSpeedController.formatSpeedText(value)
|
||||
}
|
||||
}
|
||||
|
||||
if (settings.useDefaultVideoSpeed || settings.extendVideoSpeed) {
|
||||
// 分 P 切换时共享同一个倍数
|
||||
let nativeSpeedVal = 1
|
||||
|
||||
Observer.videoChange(async () => {
|
||||
const containerElement = await SpinQuery.select(`.${VideoSpeedController.classNameMap.speedContainer}`)
|
||||
const videoElement = await SpinQuery.select(`.${VideoSpeedController.classNameMap.video} video`)
|
||||
|
||||
if (!containerElement) {
|
||||
throw "speed container element not found!"
|
||||
}
|
||||
if (!videoElement) {
|
||||
throw "video element not found!"
|
||||
}
|
||||
// 有必要传递之前的 nativeSpeedVal,跨分 P 时原生倍数将保持一样
|
||||
const controller = new VideoSpeedController(containerElement, videoElement as HTMLVideoElement, nativeSpeedVal)
|
||||
|
||||
controller.observe()
|
||||
|
||||
if (settings.extendVideoSpeed) {
|
||||
controller.extendMenuItem()
|
||||
containerElement.addEventListener("native-speed-changed", (ev: CustomEvent) => {
|
||||
nativeSpeedVal = ev.detail.speed
|
||||
})
|
||||
}
|
||||
// 首次加载可能会遇到意外情况,导致内部强制更新失效,因此延时 100 ms 再触发速度设置
|
||||
setTimeout(() => {
|
||||
settings.useDefaultVideoSpeed &&
|
||||
controller.setVideoSpeed((settings.rememberVideoSpeed && VideoSpeedController.getSpeedFromSetting()) || VideoSpeedController.getDefaultVideoSpeed())
|
||||
}, 100)
|
||||
})
|
||||
}
|
||||
Observer.videoChange(async () => {
|
||||
const video = await SpinQuery.select('.bilibili-player-video video') as HTMLVideoElement
|
||||
setPlaybackRate(video)
|
||||
})
|
||||
@ -4,53 +4,57 @@ const supportedUrls = [
|
||||
'https://www.bilibili.com/watchlater/',
|
||||
'https://www.bilibili.com/medialist/play/',
|
||||
]
|
||||
let enabled = true
|
||||
if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
||||
const clickableKeymap = {
|
||||
f: '.bilibili-player-video-fullscreen', // 全屏
|
||||
w: '.bilibili-player-video-web-fullscreen', // 网页全屏
|
||||
t: '.bilibili-player-video-btn-widescreen', // 宽屏
|
||||
// r: '.bilibili-player-video-btn-repeat', // 切换循环模式
|
||||
m: '.bilibili-player-video-btn-volume .bilibili-player-iconfont-volume', // 切换静音
|
||||
p: '.bilibili-player-video-btn-pip', // 画中画
|
||||
// l: '.video-toolbar .like', // 点赞
|
||||
c: '.video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box, .play-options-ul > li:nth-child(2)', // 投币
|
||||
s: '.video-toolbar .collect, .video-toolbar-module .fav-box, .play-options-ul > li:nth-child(3)', // 收藏
|
||||
' ': '.bilibili-player-video-btn-start', // 砸瓦撸多
|
||||
} as { [key: string]: string }
|
||||
/** 长按`L`三连使用的记忆变量 */
|
||||
let likeClick = true
|
||||
/** 在稍后再看页面里, 记录当前视频是否赞过 */
|
||||
let liked = false
|
||||
const isWatchlater = document.URL.startsWith('https://www.bilibili.com/watchlater/')
|
||||
const isMediaList = document.URL.startsWith('https://www.bilibili.com/medialist/play/')
|
||||
if (isWatchlater) {
|
||||
Observer.videoChange(() => {
|
||||
Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/web-interface/archive/has/like?aid=${unsafeWindow.aid}`).then(json => {
|
||||
liked = Boolean(json.data)
|
||||
let enabled = true;
|
||||
|
||||
(async () => {
|
||||
const { VideoSpeedController } = await import("../video/default-video-speed")
|
||||
|
||||
if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
||||
const clickableKeymap = {
|
||||
f: '.bilibili-player-video-fullscreen', // 全屏
|
||||
w: '.bilibili-player-video-web-fullscreen', // 网页全屏
|
||||
t: '.bilibili-player-video-btn-widescreen', // 宽屏
|
||||
// r: '.bilibili-player-video-btn-repeat', // 切换循环模式
|
||||
m: '.bilibili-player-video-btn-volume .bilibili-player-iconfont-volume', // 切换静音
|
||||
p: '.bilibili-player-video-btn-pip', // 画中画
|
||||
// l: '.video-toolbar .like', // 点赞
|
||||
c: '.video-toolbar .coin,.tool-bar .coin-info, .video-toolbar-module .coin-box, .play-options-ul > li:nth-child(2)', // 投币
|
||||
s: '.video-toolbar .collect, .video-toolbar-module .fav-box, .play-options-ul > li:nth-child(3)', // 收藏
|
||||
' ': '.bilibili-player-video-btn-start', // 砸瓦撸多
|
||||
} as { [key: string]: string }
|
||||
/** 长按`L`三连使用的记忆变量 */
|
||||
let likeClick = true
|
||||
/** 在稍后再看页面里, 记录当前视频是否赞过 */
|
||||
let liked = false
|
||||
const isWatchlater = document.URL.startsWith('https://www.bilibili.com/watchlater/')
|
||||
const isMediaList = document.URL.startsWith('https://www.bilibili.com/medialist/play/')
|
||||
if (isWatchlater) {
|
||||
Observer.videoChange(() => {
|
||||
Ajax.getJsonWithCredentials(`https://api.bilibili.com/x/web-interface/archive/has/like?aid=${unsafeWindow.aid}`).then(json => {
|
||||
liked = Boolean(json.data)
|
||||
})
|
||||
})
|
||||
})
|
||||
}
|
||||
/** 播放速度提示框用的`setTimeout`句柄 */
|
||||
let showPlaybackTipOldTimeout: number
|
||||
/**
|
||||
* 显示播放速度提示框
|
||||
* @param speed 播放速度
|
||||
*/
|
||||
const showPlaybackTip = (speed: number) => {
|
||||
let tip = dq('.keymap-playback-tip') as HTMLDivElement
|
||||
if (!tip) {
|
||||
const player = dq('.bilibili-player-video-wrap')
|
||||
if (!player) {
|
||||
return
|
||||
}
|
||||
player.insertAdjacentHTML('afterbegin', /*html*/`
|
||||
}
|
||||
/** 播放速度提示框用的`setTimeout`句柄 */
|
||||
let showPlaybackTipOldTimeout: number
|
||||
/**
|
||||
* 显示播放速度提示框
|
||||
* @param speed 播放速度
|
||||
*/
|
||||
const showPlaybackTip = (speed: number) => {
|
||||
let tip = dq('.keymap-playback-tip') as HTMLDivElement
|
||||
if (!tip) {
|
||||
const player = dq('.bilibili-player-video-wrap')
|
||||
if (!player) {
|
||||
return
|
||||
}
|
||||
player.insertAdjacentHTML('afterbegin', /*html*/`
|
||||
<div class="keymap-playback-tip-container">
|
||||
<i class="mdi mdi-fast-forward"></i>
|
||||
<div class="keymap-playback-tip"></div>x
|
||||
</div>
|
||||
`)
|
||||
resources.applyStyleFromText(`
|
||||
resources.applyStyleFromText(`
|
||||
.keymap-playback-tip-container {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
@ -77,147 +81,151 @@ if (supportedUrls.some(url => document.URL.startsWith(url))) {
|
||||
font-size: 18pt;
|
||||
}
|
||||
`, 'keymapStyle')
|
||||
tip = dq('.keymap-playback-tip') as HTMLDivElement
|
||||
tip = dq('.keymap-playback-tip') as HTMLDivElement
|
||||
}
|
||||
tip.innerHTML = speed.toString()
|
||||
if (showPlaybackTipOldTimeout) {
|
||||
clearTimeout(showPlaybackTipOldTimeout)
|
||||
}
|
||||
(dq('.keymap-playback-tip-container') as HTMLDivElement).classList.add('show')
|
||||
showPlaybackTipOldTimeout = window.setTimeout(() => {
|
||||
(dq('.keymap-playback-tip-container') as HTMLDivElement).classList.remove('show')
|
||||
}, 2000)
|
||||
}
|
||||
tip.innerHTML = speed.toString()
|
||||
if (showPlaybackTipOldTimeout) {
|
||||
clearTimeout(showPlaybackTipOldTimeout)
|
||||
}
|
||||
(dq('.keymap-playback-tip-container') as HTMLDivElement).classList.add('show')
|
||||
showPlaybackTipOldTimeout = window.setTimeout(() => {
|
||||
(dq('.keymap-playback-tip-container') as HTMLDivElement).classList.remove('show')
|
||||
}, 2000)
|
||||
}
|
||||
document.body.addEventListener('keydown', e => {
|
||||
if (!enabled) {
|
||||
return
|
||||
}
|
||||
if (isWatchlater && document.URL.endsWith('list')) {
|
||||
return
|
||||
}
|
||||
if (document.activeElement && isTyping()) {
|
||||
return
|
||||
}
|
||||
const key = e.key.toLowerCase()
|
||||
const panoramaControl = dq('.bilibili-player-sphere-control') as HTMLElement
|
||||
if (panoramaControl !== null && panoramaControl.style.display !== 'none' && ['w', 'a', 's', 'd'].includes(key)) {
|
||||
return
|
||||
}
|
||||
const noModifyKeys = !e.shiftKey && !e.altKey && !e.ctrlKey && !e.metaKey
|
||||
if (key in clickableKeymap && noModifyKeys) {
|
||||
const element = dq(clickableKeymap[key]) as HTMLElement
|
||||
if (!element) {
|
||||
document.body.addEventListener('keydown', async e => {
|
||||
if (!enabled) {
|
||||
return
|
||||
}
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
element.click()
|
||||
} else if (key === 'd' && noModifyKeys) { // 切换弹幕开关
|
||||
const checkbox = dq('.bilibili-player-video-danmaku-switch input') as HTMLInputElement
|
||||
if (!checkbox) {
|
||||
if (isWatchlater && document.URL.endsWith('list')) {
|
||||
return
|
||||
}
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
checkbox.checked = !checkbox.checked
|
||||
raiseEvent(checkbox, 'change')
|
||||
} else if (key === 'j' && noModifyKeys) { // 绯红之王
|
||||
const video = dq('.bilibili-player-video video') as HTMLVideoElement
|
||||
video.currentTime += settings.keymapJumpSeconds
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
} else if (key === 'l' && noModifyKeys) {
|
||||
if (isWatchlater) {
|
||||
const formData = {
|
||||
aid: unsafeWindow.aid,
|
||||
/** `1`点赞; `2`取消赞 */
|
||||
like: liked ? 2 : 1,
|
||||
csrf: getCsrf(),
|
||||
}
|
||||
Ajax.postTextWithCredentials(`https://api.bilibili.com/x/web-interface/archive/like`, Object.entries(formData).map(([k, v]) => `${k}=${v}`).join('&')).then(() => {
|
||||
liked = !liked
|
||||
if (liked) {
|
||||
Toast.success(`已点赞`, `快捷键扩展`, 1000)
|
||||
} else {
|
||||
Toast.success(`已取消点赞`, `快捷键扩展`, 1000)
|
||||
}
|
||||
})
|
||||
} else if (isMediaList) {
|
||||
const likeButton = dq('.play-options-ul > li:first-child') as HTMLLIElement
|
||||
if (likeButton) {
|
||||
likeButton.click()
|
||||
}
|
||||
} else {
|
||||
const likeButton = dq('.video-toolbar .like') as HTMLSpanElement
|
||||
e.preventDefault()
|
||||
const fireEvent = (name: string, args: Event) => {
|
||||
const event = new CustomEvent(name, args)
|
||||
likeButton.dispatchEvent(event)
|
||||
}
|
||||
likeClick = true
|
||||
setTimeout(() => likeClick = false, 200)
|
||||
fireEvent('mousedown', e)
|
||||
document.body.addEventListener('keyup', e => {
|
||||
e.preventDefault()
|
||||
fireEvent('mouseup', e)
|
||||
if (likeClick) {
|
||||
fireEvent('click', e)
|
||||
}
|
||||
}, { once: true })
|
||||
}
|
||||
} else if (key === '`' && noModifyKeys) {
|
||||
// menu size: 386.6 x 311 (2020-03-29)
|
||||
// menu size: 176.65 x 194 (2020-06-09)
|
||||
const player = dq('.bilibili-player-video-wrap') as HTMLElement
|
||||
const rect = player.getBoundingClientRect()
|
||||
player.dispatchEvent(new MouseEvent('contextmenu', {
|
||||
bubbles: true,
|
||||
cancelable: false,
|
||||
view: unsafeWindow,
|
||||
button: 2,
|
||||
buttons: 0,
|
||||
clientX: rect.x + rect.width / 2 - 176.65 / 2,
|
||||
clientY: rect.y + rect.height / 2 - 194 / 2
|
||||
}))
|
||||
} else if (e.shiftKey) {
|
||||
const video = dq('.bilibili-player-video video') as HTMLVideoElement
|
||||
if (video === null) {
|
||||
if (document.activeElement && isTyping()) {
|
||||
return
|
||||
}
|
||||
const playbackRates = [0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 2.5, 3.0]
|
||||
let preventDefault = true
|
||||
if (key === '>' || key === 'ArrowUp'.toLowerCase()) { // 天堂制造
|
||||
video.playbackRate = playbackRates.find(it => it > video.playbackRate) || playbackRates[playbackRates.length - 1]
|
||||
showPlaybackTip(video.playbackRate)
|
||||
} else if (key === '<' || key === 'ArrowDown'.toLowerCase()) { // 时间减速
|
||||
video.playbackRate = [...playbackRates].reverse().find(it => it < video.playbackRate) || playbackRates[0]
|
||||
showPlaybackTip(video.playbackRate)
|
||||
} else if (key === '?') { // 重置速度
|
||||
video.playbackRate = 1
|
||||
showPlaybackTip(video.playbackRate)
|
||||
} else if (key === 'w') { // 稍后再看
|
||||
const watchlater = dq('.video-toolbar .ops .watchlater, .more-ops-list .ops-watch-later, .video-toolbar-module .see-later-box') as HTMLElement
|
||||
if (watchlater !== null) {
|
||||
watchlater.click()
|
||||
}
|
||||
} else if (key === 'j') { // 败者食尘
|
||||
video.currentTime -= settings.keymapJumpSeconds
|
||||
} else if (key === 's') { // 快速收藏
|
||||
const quickFavorite = dq('.quick-favorite') as HTMLElement
|
||||
if (quickFavorite) {
|
||||
quickFavorite.click()
|
||||
}
|
||||
} else {
|
||||
preventDefault = false
|
||||
const key = e.key.toLowerCase()
|
||||
const panoramaControl = dq('.bilibili-player-sphere-control') as HTMLElement
|
||||
if (panoramaControl !== null && panoramaControl.style.display !== 'none' && ['w', 'a', 's', 'd'].includes(key)) {
|
||||
return
|
||||
}
|
||||
|
||||
if (preventDefault) {
|
||||
const noModifyKeys = !e.shiftKey && !e.altKey && !e.ctrlKey && !e.metaKey
|
||||
if (key in clickableKeymap && noModifyKeys) {
|
||||
const element = dq(clickableKeymap[key]) as HTMLElement
|
||||
if (!element) {
|
||||
return
|
||||
}
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
element.click()
|
||||
} else if (key === 'd' && noModifyKeys) { // 切换弹幕开关
|
||||
const checkbox = dq('.bilibili-player-video-danmaku-switch input') as HTMLInputElement
|
||||
if (!checkbox) {
|
||||
return
|
||||
}
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
checkbox.checked = !checkbox.checked
|
||||
raiseEvent(checkbox, 'change')
|
||||
} else if (key === 'j' && noModifyKeys) { // 绯红之王
|
||||
const video = dq('.bilibili-player-video video') as HTMLVideoElement
|
||||
video.currentTime += settings.keymapJumpSeconds
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
} else if (key === 'l' && noModifyKeys) {
|
||||
if (isWatchlater) {
|
||||
const formData = {
|
||||
aid: unsafeWindow.aid,
|
||||
/** `1`点赞; `2`取消赞 */
|
||||
like: liked ? 2 : 1,
|
||||
csrf: getCsrf(),
|
||||
}
|
||||
Ajax.postTextWithCredentials(`https://api.bilibili.com/x/web-interface/archive/like`, Object.entries(formData).map(([k, v]) => `${k}=${v}`).join('&')).then(() => {
|
||||
liked = !liked
|
||||
if (liked) {
|
||||
Toast.success(`已点赞`, `快捷键扩展`, 1000)
|
||||
} else {
|
||||
Toast.success(`已取消点赞`, `快捷键扩展`, 1000)
|
||||
}
|
||||
})
|
||||
} else if (isMediaList) {
|
||||
const likeButton = dq('.play-options-ul > li:first-child') as HTMLLIElement
|
||||
if (likeButton) {
|
||||
likeButton.click()
|
||||
}
|
||||
} else {
|
||||
const likeButton = dq('.video-toolbar .like') as HTMLSpanElement
|
||||
e.preventDefault()
|
||||
const fireEvent = (name: string, args: Event) => {
|
||||
const event = new CustomEvent(name, args)
|
||||
likeButton.dispatchEvent(event)
|
||||
}
|
||||
likeClick = true
|
||||
setTimeout(() => likeClick = false, 200)
|
||||
fireEvent('mousedown', e)
|
||||
document.body.addEventListener('keyup', e => {
|
||||
e.preventDefault()
|
||||
fireEvent('mouseup', e)
|
||||
if (likeClick) {
|
||||
fireEvent('click', e)
|
||||
}
|
||||
}, { once: true })
|
||||
}
|
||||
} else if (key === '`' && noModifyKeys) {
|
||||
// menu size: 386.6 x 311 (2020-03-29)
|
||||
// menu size: 176.65 x 194 (2020-06-09)
|
||||
const player = dq('.bilibili-player-video-wrap') as HTMLElement
|
||||
const rect = player.getBoundingClientRect()
|
||||
player.dispatchEvent(new MouseEvent('contextmenu', {
|
||||
bubbles: true,
|
||||
cancelable: false,
|
||||
view: unsafeWindow,
|
||||
button: 2,
|
||||
buttons: 0,
|
||||
clientX: rect.x + rect.width / 2 - 176.65 / 2,
|
||||
clientY: rect.y + rect.height / 2 - 194 / 2
|
||||
}))
|
||||
} else if (e.shiftKey) {
|
||||
const containerElement = await SpinQuery.select(`.${VideoSpeedController.classNameMap.speedContainer}`) as HTMLElement
|
||||
const videoElement = await SpinQuery.select(`.${VideoSpeedController.classNameMap.video} video`) as HTMLVideoElement
|
||||
|
||||
const controller = new VideoSpeedController(containerElement, videoElement, 1)
|
||||
|
||||
const playbackRates = VideoSpeedController.supportedRates
|
||||
|
||||
let preventDefault = true
|
||||
if (key === '>' || key === 'ArrowUp'.toLowerCase()) { // 天堂制造
|
||||
controller.setVideoSpeed(playbackRates.find(it => it > controller.playbackRate) || playbackRates[playbackRates.length - 1])
|
||||
showPlaybackTip(controller.playbackRate)
|
||||
} else if (key === '<' || key === 'ArrowDown'.toLowerCase()) { // 时间减速
|
||||
controller.setVideoSpeed([...playbackRates].reverse().find(it => it < controller.playbackRate) || playbackRates[0])
|
||||
showPlaybackTip(controller.playbackRate)
|
||||
} else if (key === '?') { // 重置速度
|
||||
controller.reset()
|
||||
showPlaybackTip(controller.playbackRate)
|
||||
} else if (key === 'w') { // 稍后再看
|
||||
const watchlater = dq('.video-toolbar .ops .watchlater, .more-ops-list .ops-watch-later, .video-toolbar-module .see-later-box') as HTMLElement
|
||||
if (watchlater !== null) {
|
||||
watchlater.click()
|
||||
}
|
||||
} else if (key === 'j') { // 败者食尘
|
||||
videoElement.currentTime -= settings.keymapJumpSeconds
|
||||
} else if (key === 's') { // 快速收藏
|
||||
const quickFavorite = dq('.quick-favorite') as HTMLElement
|
||||
if (quickFavorite) {
|
||||
quickFavorite.click()
|
||||
}
|
||||
} else {
|
||||
preventDefault = false
|
||||
}
|
||||
|
||||
if (preventDefault) {
|
||||
e.stopPropagation()
|
||||
e.preventDefault()
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
})()
|
||||
|
||||
export default {
|
||||
reload: () => enabled = true,
|
||||
unload: () => enabled = false,
|
||||
|
||||
@ -1 +1 @@
|
||||
1.11.7
|
||||
1.11.8
|
||||
Loading…
Reference in New Issue
Block a user