Skip to content

Commit

Permalink
Merge pull request #117 from festoney8/dev
Browse files Browse the repository at this point in the history
merge dev to main, v3.10.2
  • Loading branch information
festoney8 authored Aug 5, 2024
2 parents 5d91994 + 4588dd8 commit 9a7767a
Show file tree
Hide file tree
Showing 18 changed files with 95 additions and 66 deletions.
19 changes: 13 additions & 6 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# CHANGELOG

## 3.10.2

- 新增:空间页 用户主页自动跳转到投稿
- 修复:正则表达式构建问题
- 优化:更名频道页为分区页以消除歧义
- 优化:正则模式由 iv 降级为 iu 模式,减少浏览器适配报错

## 3.10.1

- 新增:直播页隐藏水印
Expand All @@ -11,7 +18,7 @@

- 重构:过滤器模块,优化项目结构,提升过滤性能
- 新增:隐藏播放器迷你弹窗
- 新增:首页、频道页视频过滤支持发布日期过滤
- 新增:首页、分区页视频过滤支持发布日期过滤

## 3.9.3

Expand All @@ -38,7 +45,7 @@

- 新增:播放页新版评论区 净化优化 适配测试
- 新增:播放页新版评论区 评论过滤 适配测试
- 更新:对播放页/首页/热门页/频道页默认开启UP主过滤
- 更新:对播放页/首页/热门页/分区页默认开启UP主过滤

## 3.8.2

Expand Down Expand Up @@ -250,7 +257,7 @@

## 3.3.0

- 新增:UP主昵称关键词过滤(首页、热门页、播放页、频道页、搜索页)
- 新增:UP主昵称关键词过滤(首页、热门页、播放页、分区页、搜索页)
- 新增:UP主昵称关键词黑名单
- 新增:播放页隐藏接下来播放
- 更新:净化分享适配新版标题
Expand Down Expand Up @@ -299,14 +306,14 @@

## 3.1.7

- 新增:视频过滤支持频道页
- 新增:视频过滤支持分区页
- 新增:首页恢复原始动态按钮
- 更新:README

## 3.1.6

- 新增:页面净化支持频道页
- 新增:首页、频道页 调节页面两侧宽度
- 新增:页面净化支持分区页
- 新增:首页、分区页 调节页面两侧宽度

## 3.1.5

Expand Down
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@
> [!IMPORTANT]
>
> - **重要:下列页面均有独立菜单,不同页面菜单不同**,按下图打开菜单进行设置,实时生效
> - **页面净化:「首页、播放页、影视番剧播放页、直播间、搜索页、动态页、热门页、频道页**
> - **视频过滤:「首页、播放页、搜索页、热门页、频道页、空间页」**
> - **页面净化:「首页、播放页、影视番剧播放页、直播间、搜索页、动态页、热门页、分区页**
> - **视频过滤:「首页、播放页、搜索页、热门页、分区页、空间页」**
> - **评论过滤:「播放页、影视番剧播放页、动态页、空间页」**
> - **动态过滤:「动态页」**
Expand Down Expand Up @@ -71,7 +71,7 @@
- **白名单权限高于黑名单,命中白名单的视频不会被隐藏**
- 启用 UP 主过滤后,右键单击 UP 主即可屏蔽
- 启用 BV 号过滤后,右键单击视频标题即可屏蔽
- 「标题关键词过滤」和「标题关键词白名单」大小写不敏感。均支持正则,正则用 `/ ... /` 括起来,如:`/abc|\d+/`,无需flag(一律默认`iv`模式,大小写不敏感)
- 「标题关键词过滤」和「标题关键词白名单」大小写不敏感。均支持正则,正则用 `/ ... /` 括起来,如:`/abc|\d+/`,无需flag(一律默认`iu`模式,大小写不敏感)
- 已知问题:视频过滤在带`index.html`后缀的首页不生效,请使用无后缀首页 `https://www.bilibili.com/`

> [!NOTE]
Expand All @@ -88,7 +88,7 @@
### 3. 评论过滤

- 启用用户名过滤后,在评论区右键单击用户名即可屏蔽
- 关键词黑名单大小写不敏感。支持正则,语法:`/abc|\d+/`,无需flag(一律默认`iv`模式,大小写不敏感)
- 关键词黑名单大小写不敏感。支持正则,语法:`/abc|\d+/`,无需flag(一律默认`iu`模式,大小写不敏感)
- **白名单权限高于黑名单,命中白名单的评论不会被隐藏**
- **关键词不宜过于简单**,会误伤很多评论
- **编写正则要慎重**,可能造成大量评论屏蔽和频繁载入
Expand Down
5 changes: 3 additions & 2 deletions src/components/item.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ interface IItem {
* itemID item的唯一ID, 与GM database中的Key对应, 使用相同ID可共享item状态
* description item的功能介绍, 显示在panel内, \n可用来换行
* defaultStatus item默认开启状态, 第一次安装时使用, 对于所有用户均开启的项目给true
* itemFunc 功能函数
* enableFunc 启用功能函数
* enableFuncRunAt 启用功能函数运行时机 (立即执行,DOMContentLoaded, load)
* disableFunc 禁用功能函数
* itemCSS item的CSS
* callback 回调函数, 用于在关掉开关时触发外部事务
*/
interface ICheckboxItemOption {
itemID: string
Expand Down
2 changes: 1 addition & 1 deletion src/filters/comment/dynAndSpace.ts
Original file line number Diff line number Diff line change
Expand Up @@ -500,7 +500,7 @@ if (isPageDynamic() || isPageSpace()) {
new WordList(
GM_KEYS.black.content.valueKey,
'评论关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
commentContentFilter.setParam(values)
check(true)
Expand Down
2 changes: 1 addition & 1 deletion src/filters/comment/video.ts
Original file line number Diff line number Diff line change
Expand Up @@ -579,7 +579,7 @@ if (isPageVideo() || isPageBangumi() || isPagePlaylist()) {
new WordList(
GM_KEYS.black.content.valueKey,
'评论关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
commentContentFilter.setParam(values)
check(true)
Expand Down
16 changes: 12 additions & 4 deletions src/filters/core/subFilters/keywordFilter.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { ISubFilter, SelectorFn } from '../core'
export class KeywordFilter implements ISubFilter {
isEnable = false
private keywordSet = new Set<string>()
private mergedRegExp = new RegExp('', 'iv')
private mergedRegExp: RegExp | undefined = undefined

enable(): void {
this.isEnable = true
Expand All @@ -16,18 +16,26 @@ export class KeywordFilter implements ISubFilter {
private buildRegExp(): void {
const validParts = []
for (let word of this.keywordSet) {
word = word.trim()
if (word === '' || word === '//') {
continue
}
if (word.startsWith('/') && word.endsWith('/')) {
word = word.slice(1, -1)
} else {
word = word.replace(/[*+?^${}().|[\]\\]/g, '\\$&') // 转义
}
try {
new RegExp(word, 'iv')
new RegExp(word, 'iu')
validParts.push(word)
} catch {}
}
try {
this.mergedRegExp = new RegExp(validParts.join('|'), 'iv')
if (validParts.length) {
this.mergedRegExp = new RegExp(validParts.join('|'), 'iu')
} else {
this.mergedRegExp = undefined
}
} catch (err) {
error('keyword filter build RegExp error', err)
}
Expand All @@ -52,7 +60,7 @@ export class KeywordFilter implements ISubFilter {
resolve()
return
}
this.mergedRegExp.test(value.trim()) ? reject() : resolve()
this.mergedRegExp?.test(value.trim()) ? reject() : resolve()
})
}
}
2 changes: 1 addition & 1 deletion src/filters/dyn/dyn.ts
Original file line number Diff line number Diff line change
Expand Up @@ -269,7 +269,7 @@ if (isPageDynamic() || isPageSpace()) {
new WordList(
GM_KEYS.black.title.valueKey,
'标题关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
dynVideoTitleFilter.setParam(values)
check(true)
Expand Down
26 changes: 13 additions & 13 deletions src/filters/video/channel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ if (isPageChannel()) {

// UI组件, 时长过滤
const durationItems = [
// 启用 频道页时长过滤
// 启用 分区页时长过滤
new CheckboxItem({
itemID: GM_KEYS.black.duration.statusKey,
description: '启用 时长过滤',
Expand Down Expand Up @@ -315,11 +315,11 @@ if (isPageChannel()) {
},
}),
]
channelPageVideoFilterGroupList.push(new Group('channel-duration-filter-group', '频道页 时长过滤', durationItems))
channelPageVideoFilterGroupList.push(new Group('channel-duration-filter-group', '分区页 时长过滤', durationItems))

// UI组件, UP主过滤
const uploaderItems = [
// 启用 频道页UP主过滤, 默认开启
// 启用 分区页UP主过滤, 默认开启
new CheckboxItem({
itemID: GM_KEYS.black.uploader.statusKey,
description: '启用 UP主过滤 (右键单击UP主)',
Expand Down Expand Up @@ -377,7 +377,7 @@ if (isPageChannel()) {
new WordList(
GM_KEYS.black.uploaderKeyword.valueKey,
'UP主昵称关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoUploaderKeywordFilter.setParam(values)
check(true)
Expand All @@ -386,11 +386,11 @@ if (isPageChannel()) {
},
}),
]
channelPageVideoFilterGroupList.push(new Group('channel-uploader-filter-group', '频道页 UP主过滤', uploaderItems))
channelPageVideoFilterGroupList.push(new Group('channel-uploader-filter-group', '分区页 UP主过滤', uploaderItems))

// UI组件, 标题关键词过滤
const titleItems = [
// 启用 频道页关键词过滤
// 启用 分区页关键词过滤
new CheckboxItem({
itemID: GM_KEYS.black.title.statusKey,
description: '启用 标题关键词过滤',
Expand All @@ -413,7 +413,7 @@ if (isPageChannel()) {
new WordList(
GM_KEYS.black.title.valueKey,
'标题关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleFilter.setParam(values)
check(true)
Expand All @@ -423,12 +423,12 @@ if (isPageChannel()) {
}),
]
channelPageVideoFilterGroupList.push(
new Group('channel-title-keyword-filter-group', '频道页 标题关键词过滤', titleItems),
new Group('channel-title-keyword-filter-group', '分区页 标题关键词过滤', titleItems),
)

// UI组件, bvid过滤
const bvidItems = [
// 启用 频道页 BV号过滤
// 启用 分区页 BV号过滤
new CheckboxItem({
itemID: GM_KEYS.black.bvid.statusKey,
description: '启用 BV号过滤 (右键单击标题)',
Expand Down Expand Up @@ -465,7 +465,7 @@ if (isPageChannel()) {
},
}),
]
channelPageVideoFilterGroupList.push(new Group('channel-bvid-filter-group', '频道页 BV号过滤', bvidItems))
channelPageVideoFilterGroupList.push(new Group('channel-bvid-filter-group', '分区页 BV号过滤', bvidItems))

// UI组件, 发布日期过滤
const pubdateItems = [
Expand Down Expand Up @@ -497,7 +497,7 @@ if (isPageChannel()) {
},
}),
]
channelPageVideoFilterGroupList.push(new Group('channel-pubdate-filter-group', '频道页 发布日期过滤', pubdateItems))
channelPageVideoFilterGroupList.push(new Group('channel-pubdate-filter-group', '分区页 发布日期过滤', pubdateItems))

// UI组件, 免过滤和白名单
const whitelistItems = [
Expand Down Expand Up @@ -555,7 +555,7 @@ if (isPageChannel()) {
new WordList(
GM_KEYS.white.title.valueKey,
'标题关键词 白名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleWhiteFilter.setParam(values)
check(true)
Expand All @@ -565,7 +565,7 @@ if (isPageChannel()) {
}),
]
channelPageVideoFilterGroupList.push(
new Group('channel-whitelist-filter-group', '频道页 白名单设定 (免过滤)', whitelistItems),
new Group('channel-whitelist-filter-group', '分区页 白名单设定 (免过滤)', whitelistItems),
)
}

Expand Down
6 changes: 3 additions & 3 deletions src/filters/video/homepage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -419,7 +419,7 @@ if (isPageHomepage()) {
new WordList(
GM_KEYS.black.uploaderKeyword.valueKey,
'UP主昵称关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoUploaderKeywordFilter.setParam(values)
check(true)
Expand Down Expand Up @@ -455,7 +455,7 @@ if (isPageHomepage()) {
new WordList(
GM_KEYS.black.title.valueKey,
'标题关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleFilter.setParam(values)
check(true)
Expand Down Expand Up @@ -611,7 +611,7 @@ if (isPageHomepage()) {
new WordList(
GM_KEYS.white.title.valueKey,
'标题关键词 白名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleWhiteFilter.setParam(values)
check(true)
Expand Down
6 changes: 3 additions & 3 deletions src/filters/video/popular.ts
Original file line number Diff line number Diff line change
Expand Up @@ -535,7 +535,7 @@ if (isPagePopular()) {
new WordList(
GM_KEYS.black.uploaderKeyword.valueKey,
'UP主昵称关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoUploaderKeywordFilter.setParam(values)
check(true).then().catch()
Expand Down Expand Up @@ -571,7 +571,7 @@ if (isPagePopular()) {
new WordList(
GM_KEYS.black.title.valueKey,
'标题关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleFilter.setParam(values)
check(true).then().catch()
Expand Down Expand Up @@ -681,7 +681,7 @@ if (isPagePopular()) {
new WordList(
GM_KEYS.white.title.valueKey,
'标题关键词 白名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleWhiteFilter.setParam(values)
check(true).then().catch()
Expand Down
6 changes: 3 additions & 3 deletions src/filters/video/search.ts
Original file line number Diff line number Diff line change
Expand Up @@ -382,7 +382,7 @@ if (isPageSearch()) {
new WordList(
GM_KEYS.black.uploaderKeyword.valueKey,
'UP主昵称关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoUploaderKeywordFilter.setParam(values)
check(true)
Expand Down Expand Up @@ -418,7 +418,7 @@ if (isPageSearch()) {
new WordList(
GM_KEYS.black.title.valueKey,
'标题关键词 黑名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleFilter.setParam(values)
check(true)
Expand Down Expand Up @@ -543,7 +543,7 @@ if (isPageSearch()) {
new WordList(
GM_KEYS.white.title.valueKey,
'标题关键词 白名单',
`每行一个关键词或正则,不区分大小写\n正则默认iv模式,无需flag,语法:/abc|\\d+/`,
`每行一个关键词或正则,不区分大小写\n正则默认iu模式,无需flag,语法:/abc|\\d+/`,
(values: string[]) => {
videoTitleWhiteFilter.setParam(values)
check(true)
Expand Down
Loading

0 comments on commit 9a7767a

Please sign in to comment.