Skip to content

Commit

Permalink
Merge branch 'preview'
Browse files Browse the repository at this point in the history
  • Loading branch information
the1812 committed Aug 28, 2018
2 parents 2eaa9b6 + 9aadc51 commit fa545c7
Show file tree
Hide file tree
Showing 38 changed files with 966 additions and 341 deletions.
118 changes: 63 additions & 55 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,39 @@

内置所有依赖项以提高加载速度,体积较大,可以不受GitHub服务器不稳定的影响. 由于任何依赖项更新后此脚本也需更新,所以更新频率会高于正式版.

# 设置
脚本启用后,在网页左侧中央会有一个齿轮图标,点击即可打开设置.

**设置保存后,需要刷新网页才能生效.**
![设置](images/gui-settings.png)
## 默认值
### 样式
- 新样式: `开启`
- 自定义颜色: `浅蓝色(#00A0D8)`
- 顶栏(对横幅)不透明度: `0.382`
- 夜间模式: `关闭`
- 搜索栏位置调整: `开启`
- 显示顶部横幅: `开启`
### 工具
- 自动展开弹幕列表: `开启`
- 删除广告: `开启`
- 稍后再看重定向: `开启`
- 隐藏搜索推荐: `关闭`
- 全屏修复: `关闭`
- 展开动态标题: `开启`
### 直播间
- 缩放看板娘: `开启`
- 删除直播水印: `开启`
### 触摸
- 顶栏触摸优化: `关闭`
- 播放器触摸支持: `关闭`
- 启用实验性动画效果: `关闭`
> 因为部分浏览器对包含实验性效果的动画没有优化会很卡, 所以开放此选项.
# 功能概览
为保证最佳体验,设备分辨率建议在1080P及以上,并且已登录哔哩哔哩账户.
## 新样式
改变顶栏的样式,并有一些界面微调,适用于主站,新版播放器和直播间.暂不支持相簿.
改变顶栏的样式,并有一些界面微调.
### 效果
![主站](images/new-navbar.png)
![播放](images/new-navbar-stardust.png)
Expand All @@ -43,6 +72,8 @@
- 消息中心
- 搜索
- 直播间
- 相簿查看
- 新番时间表

之后会陆续添加其他页面,不支持推广板块(会被`删除广告`功能去除的部分).
#### 启用前
Expand All @@ -61,32 +92,11 @@
![不移除](images/override-navbar.png)
#### 启用后
![移除](images/no-banner.png)
## 触摸支持
### 顶栏
删除顶栏右侧的一级链接(从`大会员``历史`),以方便触屏设备快速预览信息.被删除的链接可从各预览中的`查看更多`进入.
### 播放器
#### 启用触摸控制
- 左右滑动可调整进度
- 上下滑动可调整音量
- 进度调整可在左上角和右上角取消
- 在不同位置滑动,可以使用3档不同的灵敏度.

![进度调整](images/adjust-playback.png)
![音量调整](images/adjust-volume.png)

已知问题: 滑动调整的音量不会保存,下次打开视频将恢复原音量.
#### 外置网页全屏
因为触屏设备很难做出"鼠标悬停",`网页全屏`将从`全屏`的鼠标悬停菜单中移动到外部.

(只对旧版播放器生效,新版播放器已经默认外置)
#### 放大按钮
增大控制栏的按钮间距,使触摸操作更准确.
##### 启用前
![放大前](images/player-buttons-original.png)
##### 启用后
![放大后](images/player-buttons-large.png)
## 自动展开弹幕列表
新版播放页面中,弹幕列表默认收起以显示推荐的其他视频.启用此功能可在每次加载视频时自动展开弹幕列表.
## 查看封面
在视频播放页面/直播间中,`设置``视频`/`直播间`下会出现查看封面按钮,点击可以查看或保存封面.
## 删除广告
删除嵌于页面中的推广横幅.
### 删除前
Expand All @@ -95,12 +105,12 @@
![删除后](images/remove-ads-after.png)
## 稍后再看重定向
将稍后再看的链接重定向为普通播放网址,以使用新版播放页面.
## 隐藏热搜词
将搜索框的热搜词替换为`搜索`.
## 隐藏搜索推荐
将搜索框的推荐词替换为`搜索`.
## 全屏修复
修复点击全屏按钮无响应的问题.
修复Chrome中点击全屏按钮无响应的问题.

点击全屏时, b站的源代码中会检查浏览器是否为`Chrome XX.X.XXX5.1``window.Element`是否包含`ALLOW_KEYBOARD_INPUT`属性, 然后向`requsetFullscreen`传递不同的参数. 而部分浏览器不允许向此API传参数, 全屏操作就会失败.
点击全屏时, b站的源代码中会检查浏览器是否为`Chrome XX.X.XXX5.1``window.Element`是否包含`ALLOW_KEYBOARD_INPUT`属性, 然后向`requsetFullscreen`传递不同的参数. 而Chrome不允许向此API传参数, 全屏操作就会失败.

附:视频全屏代码
```js
Expand Down Expand Up @@ -133,44 +143,42 @@ b.request = function(b) {
}
}
```
### 展开动态标题
在顶栏的动态预览框中:
- 关闭时, 长名称的后半部分会用`...`代替.
- 启用时, 不管名称多长, 总是完全展开up主和视频的标题.

## 直播间
### 缩放看板娘
根据屏幕DPI缩放看板娘的大小以提高像素的清晰度.
### 删除直播水印
删除观看直播时角落的水印.

# 设置
脚本启用后,在网页左侧中央会有一个齿轮图标,点击即可打开设置.
## 触摸支持
### 顶栏
删除顶栏右侧的一级链接(从`大会员``历史`),以方便触屏设备快速预览信息.被删除的链接可从各预览中的`查看更多`进入.
### 播放器
#### 启用触摸控制
- 左右滑动可调整进度
- 上下滑动可调整音量
- 进度调整可在左上角和右上角取消
- 在不同位置滑动,可以使用3档不同的灵敏度.

**设置保存后,需要刷新网页才能生效.**
![设置](images/gui-settings.png)
## 默认值
### 样式
- 新样式: `开启`
- 自定义颜色: `浅蓝色(#00A0D8)`
- 顶栏(对横幅)不透明度: `0.382`
- 夜间模式: `关闭`
- 搜索栏位置调整: `开启`
- 显示顶部横幅: `开启`
### 工具
- 自动展开弹幕列表: `开启`
- 删除广告: `开启`
- 稍后再看重定向: `开启`
- 隐藏热搜词: `关闭`
- 全屏修复: `关闭`
### 直播间
- 缩放看板娘: `开启`
- 删除直播水印: `开启`
### 触摸
- 顶栏触摸优化: `关闭`
- 播放器触摸支持: `关闭`
- 启用实验性动画效果: `关闭`
> 因为部分浏览器对包含实验性效果的动画没有优化会很卡, 所以开放此选项.
![进度调整](images/adjust-playback.png)
![音量调整](images/adjust-volume.png)

已知问题: 滑动调整的音量不会保存,下次打开视频将恢复原音量.
#### 放大按钮
增大控制栏的按钮间距,使触摸操作更准确.
##### 启用前
![放大前](images/player-buttons-original.png)
##### 启用后
![放大后](images/player-buttons-large.png)

# 关于新版播放器
目前新版播放器不是默认开启的,可在旧版播放页面右侧找到入口.

如果没有找到入口,也可以手动在浏览器开发者工具(快捷键通常为`F12`)中的控制台运行[脚本](utils/enable-new-player.js)开启.
如果没有找到入口,也可以手动在浏览器开发者工具(快捷键通常为`F12`)中的控制台运行[脚本](video/enable-new-player.js)开启.

# 兼容性
## ![Chrome:兼容](https://img.shields.io/badge/Chrome-兼容-brightgreen.svg?style=flat-square&colorB=009688)
Expand Down
175 changes: 115 additions & 60 deletions bilibili-evolved.offline.user.js

Large diffs are not rendered by default.

82 changes: 59 additions & 23 deletions bilibili-evolved.preview.user.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// ==UserScript==
// @name Bilibili Evolved (Preview)
// @version 1.2.3
// @version 1.3.0
// @description 增强哔哩哔哩Web端体验. (预览版分支)
// @author Grant Howard
// @match *://*.bilibili.com/*
Expand All @@ -20,6 +20,7 @@
{
const $ = unsafeWindow.$ || self$;
const settings = {
fullTweetsTitle: false,
fixFullscreen: false,
removeLiveWatermark: true,
harunaScale: true,
Expand All @@ -44,6 +45,7 @@
settings[key] = GM_getValue(key, settings[key]);
}
settings.guiSettings = true;
settings.viewCover = true;
}
function saveSettings(newSettings)
{
Expand Down Expand Up @@ -336,7 +338,7 @@
{
return html
.replace(/<category>([^\0]*?)<\/category>/g, `
<li class="indent-center">
<li class="indent-center category">
<span class="settings-category">$1</span>
</li>
`).replace(/<checkbox\s*indent="(.+)"\s*key="(.+)"\s*dependencies="(.*)">([^\0]*?)<\/checkbox>/g, `
Expand Down Expand Up @@ -396,21 +398,25 @@
}
});
}
getStyle(id)
{
const style = this.text;
if (!style)
{
console.error("Attempt to get style which is not downloaded.");
}
let attributes = `id='${id}'`;
if (this.priority !== undefined)
{
attributes += ` priority='${this.priority}'`;
}
return `<style ${attributes}>${style}</style>`;
}
applyStyle(id)
{
if ($(`#${id}`).length === 0)
{
const style = this.text;
if (!style)
{
console.error("Attempt to get style which is not downloaded.");
}
let attributes = `id='${id}'`;
if (this.priority !== undefined)
{
attributes += ` priority='${this.priority}'`;
}
const element = `<style ${attributes}>${style}</style>`;
const element = this.getStyle(id);
if (this.priority !== undefined)
{
let insertPosition = this.priority - 1;
Expand Down Expand Up @@ -440,28 +446,35 @@
Resource.all = {
style: new Resource("style/style.min.scss", 1),
oldStyle: new Resource("style/style-old.min.scss", 1),
scrollbarStyle: new Resource("style/style-scrollbar.min.css", 1),
darkStyleSlice1: new Resource("style/style-dark-slice-1.min.scss", 2),
darkStyleSlice2: new Resource("style/style-dark-slice-2.min.scss", 2),
darkStyleImportant: new Resource("style/style-dark-important.min.scss"),
touchPlayerStyle: new Resource("style/style-touch-player.min.scss", 3),
navbarOverrideStyle: new Resource("style/style-navbar-override.min.css", 4),
noBannerStyle: new Resource("style/style-no-banner.min.css", 5),
removeAdsStyle: new Resource("style/style-remove-promotions.min.css", 6),
guiSettingsStyle: new Resource("style/style-gui-settings.min.scss", 0),
fullTweetsTitleStyle: new Resource("style/style-full-tweets-title.min.css", 7),
imageViewerStyle: new Resource("style/style-image-viewer.min.scss", 8),

guiSettingsDom: new Resource("utils/gui-settings.html"),
imageViewerDom: new Resource("utils/image-viewer.html"),

guiSettings: new Resource("utils/gui-settings.min.js"),
useDarkStyle: new Resource("style/dark-styles.min.js"),
useNewStyle: new Resource("style/new-styles.min.js"),
touchNavBar: new Resource("touch/touch-navbar.min.js"),
touchVideoPlayer: new Resource("touch/touch-player.min.js"),
expandDanmakuList: new Resource("utils/expand-danmaku.min.js"),
expandDanmakuList: new Resource("video/expand-danmaku.min.js"),
removeAds: new Resource("utils/remove-promotions.min.js"),
watchLaterRedirect: new Resource("utils/watchlater.min.js"),
hideTopSearch: new Resource("utils/hide-top-search.min.js"),
harunaScale: new Resource("live/haruna-scale.min.js"),
removeLiveWatermark: new Resource("live/remove-watermark.min.js"),
fixFullscreen: new Resource("utils/fix-fullscreen.min.js")
fixFullscreen: new Resource("video/fix-fullscreen.min.js"),
fullTweetsTitle: new Resource("utils/full-tweets-title.min.js"),
viewCover: new Resource("video/view-cover.min.js")
};
(function ()
{
Expand All @@ -471,20 +484,29 @@
];
this.useDarkStyle.dependencies = [
this.darkStyleSlice1,
this.darkStyleSlice2
this.darkStyleSlice2,
this.darkStyleImportant
];
this.useNewStyle.dependencies = [
this.style,
this.oldStyle,
this.navbarOverrideStyle,
this.noBannerStyle
this.noBannerStyle,
this.scrollbarStyle
];
this.touchVideoPlayer.dependencies = [
this.touchPlayerStyle
];
this.removeAds.dependencies = [
this.removeAdsStyle
];
this.fullTweetsTitle.dependencies = [
this.fullTweetsTitleStyle
];
this.viewCover.dependencies = [
this.imageViewerDom,
this.imageViewerStyle
];
}).apply(Resource.all);
class ResourceManager
{
Expand Down Expand Up @@ -523,16 +545,26 @@
const func = eval(text);
if (func)
{
const attribute = func(settings, this);
this.attributes[key] = attribute;
if (attribute.ajaxReload)
try
{
$(document).ajaxComplete(() =>
const attribute = func(settings, this);
this.attributes[key] = attribute;
if (attribute.ajaxReload)
{
func(settings, this);
});
$(document).ajaxComplete(() =>
{
func(settings, this);
});
}
}
catch (error) // execution error
{
console.error(`Failed to apply feature "${key}": ${error}`);
}
}
}).catch(reason =>
{ // download error
console.error(`Download error, XHR status: ${reason}`);
});
promises.push(promise);
}
Expand All @@ -544,6 +576,10 @@
{
Resource.all[key].applyStyle(id);
}
getStyle(key, id)
{
return Resource.all[key].getStyle(id);
}
}

loadSettings();
Expand Down
Loading

0 comments on commit fa545c7

Please sign in to comment.