mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
Merge branch 'component-option-types' into preview-features
This commit is contained in:
commit
fb81b76e66
@ -1,8 +1,8 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { getNumberValidator, getUID, none } from '@/core/utils'
|
import { getNumberValidator, getUID, none } from '@/core/utils'
|
||||||
import { autoMatchMedal } from './auto-match'
|
import { autoMatchMedal } from './auto-match'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'badgeHelper',
|
name: 'badgeHelper',
|
||||||
displayName: '直播勋章快速更换',
|
displayName: '直播勋章快速更换',
|
||||||
description: {
|
description: {
|
||||||
@ -37,4 +37,4 @@ export const component: ComponentMetadata = {
|
|||||||
urlInclude: [
|
urlInclude: [
|
||||||
'//live.bilibili.com',
|
'//live.bilibili.com',
|
||||||
],
|
],
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { waitForControlBar } from '@/components/live/live-control-bar'
|
import { waitForControlBar } from '@/components/live/live-control-bar'
|
||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { getUID } from '@/core/utils'
|
import { getUID } from '@/core/utils'
|
||||||
import { liveUrls } from '@/core/utils/urls'
|
import { liveUrls } from '@/core/utils/urls'
|
||||||
import { leftControllerSelector } from './original-elements'
|
import { leftControllerSelector } from './original-elements'
|
||||||
@ -27,7 +27,7 @@ const entry = async () => {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'liveDanmakuSendbar',
|
name: 'liveDanmakuSendbar',
|
||||||
displayName: '直播弹幕发送栏',
|
displayName: '直播弹幕发送栏',
|
||||||
tags: [
|
tags: [
|
||||||
@ -40,4 +40,4 @@ export const component: ComponentMetadata = {
|
|||||||
reload: () => document.body.classList.remove('danmaku-send-bar-unloaded'),
|
reload: () => document.body.classList.remove('danmaku-send-bar-unloaded'),
|
||||||
unload: () => document.body.classList.add('danmaku-send-bar-unloaded'),
|
unload: () => document.body.classList.add('danmaku-send-bar-unloaded'),
|
||||||
urlInclude: liveUrls,
|
urlInclude: liveUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'downloadLiveRecords',
|
name: 'downloadLiveRecords',
|
||||||
displayName: '直播录像下载',
|
displayName: '直播录像下载',
|
||||||
description: {
|
description: {
|
||||||
@ -16,4 +16,4 @@ export const component: ComponentMetadata = {
|
|||||||
urlInclude: [
|
urlInclude: [
|
||||||
/^https:\/\/live\.bilibili\.com\/record\/(.+)/,
|
/^https:\/\/live\.bilibili\.com\/record\/(.+)/,
|
||||||
],
|
],
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
import { waitForControlBar } from '@/components/live/live-control-bar'
|
import { waitForControlBar } from '@/components/live/live-control-bar'
|
||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { select as spinSelect } from '@/core/spin-query'
|
import { select as spinSelect } from '@/core/spin-query'
|
||||||
import { addStyle, removeStyle } from '@/core/style'
|
import { addStyle, removeStyle } from '@/core/style'
|
||||||
import { liveUrls } from '@/core/utils/urls'
|
import { liveUrls } from '@/core/utils/urls'
|
||||||
@ -220,7 +220,7 @@ function unload() {
|
|||||||
removeStyle(componentName)
|
removeStyle(componentName)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: componentName,
|
name: componentName,
|
||||||
displayName: '直播全屏包裹',
|
displayName: '直播全屏包裹',
|
||||||
description: {
|
description: {
|
||||||
@ -231,4 +231,4 @@ export const component: ComponentMetadata = {
|
|||||||
entry,
|
entry,
|
||||||
reload,
|
reload,
|
||||||
unload,
|
unload,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,9 +1,9 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { addComponentListener } from '@/core/settings'
|
import { addComponentListener } from '@/core/settings'
|
||||||
import { addStyle, removeStyle } from '@/core/style'
|
import { addStyle, removeStyle } from '@/core/style'
|
||||||
|
|
||||||
const liveHome = /^https:\/\/live\.bilibili\.com\/(index\.html)?$/
|
const liveHome = /^https:\/\/live\.bilibili\.com\/(index\.html)?$/
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'liveHomeMute',
|
name: 'liveHomeMute',
|
||||||
displayName: '直播首页静音',
|
displayName: '直播首页静音',
|
||||||
tags: [
|
tags: [
|
||||||
@ -47,4 +47,4 @@ export const component: ComponentMetadata = {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { toggleStyle } from '@/components/styled-component'
|
import { toggleStyle } from '@/components/styled-component'
|
||||||
import { liveUrls } from '@/core/utils/urls'
|
import { liveUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
...toggleStyle('removeLiveWatermark', () => import('./remove-watermark.scss')),
|
...toggleStyle('removeLiveWatermark', () => import('./remove-watermark.scss')),
|
||||||
displayName: '删除直播水印',
|
displayName: '删除直播水印',
|
||||||
tags: [
|
tags: [
|
||||||
@ -13,4 +13,4 @@ export const component: ComponentMetadata = {
|
|||||||
'zh-CN': '删除观看直播时角落的水印.',
|
'zh-CN': '删除观看直播时角落的水印.',
|
||||||
},
|
},
|
||||||
urlInclude: liveUrls,
|
urlInclude: liveUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { liveUrls } from '@/core/utils/urls'
|
import { liveUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
const id = 'dpi-live-showgirl'
|
const id = 'dpi-live-showgirl'
|
||||||
@ -14,7 +14,7 @@ const entry = async () => {
|
|||||||
`, id)
|
`, id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'dpiLiveShowgirl',
|
name: 'dpiLiveShowgirl',
|
||||||
displayName: '直播看板娘高 DPI 适配',
|
displayName: '直播看板娘高 DPI 适配',
|
||||||
enabledByDefault: window.devicePixelRatio > 1,
|
enabledByDefault: window.devicePixelRatio > 1,
|
||||||
@ -31,4 +31,4 @@ export const component: ComponentMetadata = {
|
|||||||
document.getElementById(id)?.remove()
|
document.getElementById(id)?.remove()
|
||||||
},
|
},
|
||||||
urlInclude: liveUrls,
|
urlInclude: liveUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { liveUrls } from '@/core/utils/urls'
|
import { liveUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'collapseLiveSideBar',
|
name: 'collapseLiveSideBar',
|
||||||
entry: none,
|
entry: none,
|
||||||
instantStyles: [
|
instantStyles: [
|
||||||
@ -17,4 +17,4 @@ export const component: ComponentMetadata = {
|
|||||||
componentsTags.style,
|
componentsTags.style,
|
||||||
],
|
],
|
||||||
urlInclude: liveUrls,
|
urlInclude: liveUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,11 +1,11 @@
|
|||||||
import { toggleStyle } from '@/components/styled-component'
|
import { toggleStyle } from '@/components/styled-component'
|
||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
...toggleStyle('alwaysShowDuration', () => import('./always-show-duration.scss')),
|
...toggleStyle('alwaysShowDuration', () => import('./always-show-duration.scss')),
|
||||||
displayName: '总是显示视频时长',
|
displayName: '总是显示视频时长',
|
||||||
description: {
|
description: {
|
||||||
'zh-CN': '使脚本展示的各种视频卡片中的时长无需鼠标经过也能一直显示.',
|
'zh-CN': '使脚本展示的各种视频卡片中的时长无需鼠标经过也能一直显示.',
|
||||||
},
|
},
|
||||||
tags: [componentsTags.video, componentsTags.style],
|
tags: [componentsTags.video, componentsTags.style],
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { addComponentListener } from '@/core/settings'
|
import { addComponentListener } from '@/core/settings'
|
||||||
import { getNumberValidator } from '@/core/utils'
|
import { getNumberValidator } from '@/core/utils'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'autoHideSidebar',
|
name: 'autoHideSidebar',
|
||||||
entry: () => {
|
entry: () => {
|
||||||
addComponentListener('autoHideSidebar.triggerWidth', (value: number) => {
|
addComponentListener('autoHideSidebar.triggerWidth', (value: number) => {
|
||||||
@ -28,4 +28,4 @@ export const component: ComponentMetadata = {
|
|||||||
description: {
|
description: {
|
||||||
'zh-CN': '自动隐藏脚本的侧栏 (功能和设置图标). 设置面板停靠在右侧时不建议使用, 因为网页的滚动条会占用右边缘的触发区域.',
|
'zh-CN': '自动隐藏脚本的侧栏 (功能和设置图标). 设置面板停靠在右侧时不建议使用, 因为网页的滚动条会占用右边缘的触发区域.',
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { LaunchBarActionProvider } from '@/components/launch-bar/launch-bar-action'
|
import { LaunchBarActionProvider } from '@/components/launch-bar/launch-bar-action'
|
||||||
import { urlInclude, urlExclude } from './urls'
|
import { urlInclude, urlExclude } from './urls'
|
||||||
import { entry } from './entry'
|
import { entry } from './entry'
|
||||||
|
|
||||||
const styleID = 'custom-navbar-style'
|
const styleID = 'custom-navbar-style'
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'customNavbar',
|
name: 'customNavbar',
|
||||||
displayName: '自定义顶栏',
|
displayName: '自定义顶栏',
|
||||||
description: `
|
description: `
|
||||||
@ -121,4 +121,4 @@ export const component: ComponentMetadata = {
|
|||||||
})
|
})
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { darkExcludes } from './dark-urls'
|
import { darkExcludes } from './dark-urls'
|
||||||
|
|
||||||
const changeDelay = 200
|
const changeDelay = 200
|
||||||
@ -27,7 +27,7 @@ const remove = async () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'darkMode',
|
name: 'darkMode',
|
||||||
displayName: '夜间模式',
|
displayName: '夜间模式',
|
||||||
entry: () => {
|
entry: () => {
|
||||||
@ -73,4 +73,4 @@ export const component: ComponentMetadata = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
urlExclude: darkExcludes,
|
urlExclude: darkExcludes,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { toggleStyle } from '@/components/styled-component'
|
import { toggleStyle } from '@/components/styled-component'
|
||||||
import { bangumiUrls } from '@/core/utils/urls'
|
import { bangumiUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
displayName: '隐藏番剧点评',
|
displayName: '隐藏番剧点评',
|
||||||
tags: [
|
tags: [
|
||||||
componentsTags.style,
|
componentsTags.style,
|
||||||
@ -12,4 +12,4 @@ export const component: ComponentMetadata = {
|
|||||||
description: {
|
description: {
|
||||||
'zh-CN': '隐藏番剧播放页面里的点评板块.',
|
'zh-CN': '隐藏番剧播放页面里的点评板块.',
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { toggleStyle } from '@/components/styled-component'
|
import { toggleStyle } from '@/components/styled-component'
|
||||||
import { bangumiUrls } from '@/core/utils/urls'
|
import { bangumiUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
displayName: '隐藏番剧承包',
|
displayName: '隐藏番剧承包',
|
||||||
tags: [
|
tags: [
|
||||||
componentsTags.style,
|
componentsTags.style,
|
||||||
@ -12,4 +12,4 @@ export const component: ComponentMetadata = {
|
|||||||
description: {
|
description: {
|
||||||
'zh-CN': '隐藏番剧页面下方的承包榜, 以及右边的承包按钮.',
|
'zh-CN': '隐藏番剧页面下方的承包榜, 以及右边的承包按钮.',
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { mainSiteUrls } from '@/core/utils/urls'
|
import { mainSiteUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'hideBanner',
|
name: 'hideBanner',
|
||||||
entry: none,
|
entry: none,
|
||||||
displayName: '隐藏顶部横幅',
|
displayName: '隐藏顶部横幅',
|
||||||
@ -16,4 +16,4 @@ export const component: ComponentMetadata = {
|
|||||||
'zh-CN': '隐藏首页顶部横幅.',
|
'zh-CN': '隐藏首页顶部横幅.',
|
||||||
},
|
},
|
||||||
urlInclude: mainSiteUrls,
|
urlInclude: mainSiteUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { videoUrls } from '@/core/utils/urls'
|
import { videoUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'hideRecommendedLive',
|
name: 'hideRecommendedLive',
|
||||||
entry: none,
|
entry: none,
|
||||||
instantStyles: [
|
instantStyles: [
|
||||||
@ -19,4 +19,4 @@ export const component: ComponentMetadata = {
|
|||||||
'zh-CN': '隐藏视频页面右侧下方的直播推荐.',
|
'zh-CN': '隐藏视频页面右侧下方的直播推荐.',
|
||||||
},
|
},
|
||||||
urlInclude: videoUrls,
|
urlInclude: videoUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { videoAndBangumiUrls } from '@/core/utils/urls'
|
import { videoAndBangumiUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'hideRelatedVideos',
|
name: 'hideRelatedVideos',
|
||||||
displayName: '隐藏视频推荐',
|
displayName: '隐藏视频推荐',
|
||||||
entry: none,
|
entry: none,
|
||||||
@ -19,4 +19,4 @@ export const component: ComponentMetadata = {
|
|||||||
'zh-CN': '隐藏番剧和视频页面右侧的推荐视频列表. 注意: 如果你想关闭 b 站的自动连播 (自动播放下一个推荐视频) 功能, 需要先取消隐藏视频推荐才能看到开关.',
|
'zh-CN': '隐藏番剧和视频页面右侧的推荐视频列表. 注意: 如果你想关闭 b 站的自动连播 (自动播放下一个推荐视频) 功能, 需要先取消隐藏视频推荐才能看到开关.',
|
||||||
},
|
},
|
||||||
urlInclude: videoAndBangumiUrls,
|
urlInclude: videoAndBangumiUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { toggleStyle } from '@/components/styled-component'
|
import { toggleStyle } from '@/components/styled-component'
|
||||||
import { playerUrls } from '@/core/utils/urls'
|
import { playerUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
displayName: '隐藏视频标题层',
|
displayName: '隐藏视频标题层',
|
||||||
...toggleStyle('hideVideoTopMask', () => import('./top-mask.scss')),
|
...toggleStyle('hideVideoTopMask', () => import('./top-mask.scss')),
|
||||||
tags: [
|
tags: [
|
||||||
@ -12,4 +12,4 @@ export const component: ComponentMetadata = {
|
|||||||
'zh-CN': '隐藏视频里鼠标经过时出现在右上角的覆盖层.',
|
'zh-CN': '隐藏视频里鼠标经过时出现在右上角的覆盖层.',
|
||||||
},
|
},
|
||||||
urlInclude: playerUrls,
|
urlInclude: playerUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,10 +1,10 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { contentLoaded } from '@/core/life-cycle'
|
import { contentLoaded } from '@/core/life-cycle'
|
||||||
import { addComponentListener } from '@/core/settings'
|
import { addComponentListener } from '@/core/settings'
|
||||||
import { getNumberValidator, mountVueComponent } from '@/core/utils'
|
import { getNumberValidator, mountVueComponent } from '@/core/utils'
|
||||||
import { homeUrls } from '../urls'
|
import { homeUrls } from '../urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'freshHome',
|
name: 'freshHome',
|
||||||
displayName: '清爽首页',
|
displayName: '清爽首页',
|
||||||
urlInclude: homeUrls,
|
urlInclude: homeUrls,
|
||||||
@ -56,4 +56,4 @@ export const component: ComponentMetadata = {
|
|||||||
style: () => import('../hide-original.scss'),
|
style: () => import('../hide-original.scss'),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'playerOnTop',
|
name: 'playerOnTop',
|
||||||
displayName: '播放器置顶',
|
displayName: '播放器置顶',
|
||||||
description: {
|
description: {
|
||||||
@ -14,4 +14,4 @@ export const component: ComponentMetadata = {
|
|||||||
],
|
],
|
||||||
tags: [componentsTags.style, componentsTags.video],
|
tags: [componentsTags.style, componentsTags.video],
|
||||||
entry: none,
|
entry: none,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { allVideoUrls } from '@/core/utils/urls'
|
import { allVideoUrls } from '@/core/utils/urls'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'playerShadow',
|
name: 'playerShadow',
|
||||||
displayName: '播放器投影',
|
displayName: '播放器投影',
|
||||||
entry: none,
|
entry: none,
|
||||||
@ -19,4 +19,4 @@ export const component: ComponentMetadata = {
|
|||||||
'zh-CN': '为播放器添加主题色投影.',
|
'zh-CN': '为播放器添加主题色投影.',
|
||||||
},
|
},
|
||||||
urlInclude: allVideoUrls,
|
urlInclude: allVideoUrls,
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'elegantScrollbar',
|
name: 'elegantScrollbar',
|
||||||
entry: none,
|
entry: none,
|
||||||
displayName: '使用细滚动条',
|
displayName: '使用细滚动条',
|
||||||
@ -15,4 +15,4 @@ export const component: ComponentMetadata = {
|
|||||||
style: () => import('./scrollbar.scss'),
|
style: () => import('./scrollbar.scss'),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
import { addComponentListener } from '@/core/settings'
|
import { addComponentListener } from '@/core/settings'
|
||||||
import { getNumberValidator } from '@/core/utils'
|
import { getNumberValidator } from '@/core/utils'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'sidebarOffset',
|
name: 'sidebarOffset',
|
||||||
displayName: '侧栏垂直偏移',
|
displayName: '侧栏垂直偏移',
|
||||||
tags: [componentsTags.style],
|
tags: [componentsTags.style],
|
||||||
@ -27,4 +27,4 @@ export const component: ComponentMetadata = {
|
|||||||
validator: getNumberValidator(-40, 40),
|
validator: getNumberValidator(-40, 40),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
|
|
||||||
const name = 'simplifyComments'
|
const name = 'simplifyComments'
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name,
|
name,
|
||||||
entry: async ({ metadata }) => {
|
entry: async ({ metadata }) => {
|
||||||
const { addComponentListener } = await import('@/core/settings')
|
const { addComponentListener } = await import('@/core/settings')
|
||||||
@ -32,4 +32,4 @@ export const component: ComponentMetadata = {
|
|||||||
tags: [
|
tags: [
|
||||||
componentsTags.style,
|
componentsTags.style,
|
||||||
],
|
],
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,16 +1,31 @@
|
|||||||
import { ComponentEntry, ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata, defineOptionsMetadata, OptionsOfMetadata } from '@/components/define'
|
||||||
|
import { ComponentEntry } from '@/components/types'
|
||||||
import { toggleStyle } from '@/components/styled-component'
|
import { toggleStyle } from '@/components/styled-component'
|
||||||
import { playerUrls } from '@/core/utils/urls'
|
import { playerUrls } from '@/core/utils/urls'
|
||||||
import { addComponentListener } from '@/core/settings'
|
import { addComponentListener } from '@/core/settings'
|
||||||
|
|
||||||
const entry: ComponentEntry = ({ metadata, settings: { options } }) => {
|
const options = defineOptionsMetadata({
|
||||||
Object.keys(options).forEach(disableType => {
|
highlight: {
|
||||||
|
displayName: '禁用高赞弹幕',
|
||||||
|
defaultValue: true,
|
||||||
|
},
|
||||||
|
up: {
|
||||||
|
displayName: '禁用UP主弹幕',
|
||||||
|
defaultValue: true,
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
type Options = OptionsOfMetadata<typeof options>
|
||||||
|
|
||||||
|
const entry: ComponentEntry<Options> = ({ metadata, settings }) => {
|
||||||
|
Object.keys(settings.options).forEach(disableType => {
|
||||||
addComponentListener(`${metadata.name}.${disableType}`, (value: boolean) => {
|
addComponentListener(`${metadata.name}.${disableType}`, (value: boolean) => {
|
||||||
document.body.classList.toggle(`disable-${disableType}-danmaku-style`, value)
|
document.body.classList.toggle(`disable-${disableType}-danmaku-style`, value)
|
||||||
}, true)
|
}, true)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
export const component: ComponentMetadata = {
|
|
||||||
|
export const component = defineComponentMetadata({
|
||||||
displayName: '禁用特殊弹幕样式',
|
displayName: '禁用特殊弹幕样式',
|
||||||
tags: [
|
tags: [
|
||||||
componentsTags.style,
|
componentsTags.style,
|
||||||
@ -20,14 +35,5 @@ export const component: ComponentMetadata = {
|
|||||||
description: {
|
description: {
|
||||||
'zh-CN': '移除高赞弹幕或 UP 主弹幕的特殊样式, 弹幕内容不会移除.',
|
'zh-CN': '移除高赞弹幕或 UP 主弹幕的特殊样式, 弹幕内容不会移除.',
|
||||||
},
|
},
|
||||||
options: {
|
options,
|
||||||
highlight: {
|
})
|
||||||
displayName: '禁用高赞弹幕',
|
|
||||||
defaultValue: true,
|
|
||||||
},
|
|
||||||
up: {
|
|
||||||
displayName: '禁用UP主弹幕',
|
|
||||||
defaultValue: true,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
import { ComponentMetadata } from '@/components/types'
|
import { defineComponentMetadata } from '@/components/define'
|
||||||
|
|
||||||
export const component: ComponentMetadata = {
|
export const component = defineComponentMetadata({
|
||||||
name: 'v1PanelStyle',
|
name: 'v1PanelStyle',
|
||||||
displayName: 'v1 风格设置面板',
|
displayName: 'v1 风格设置面板',
|
||||||
tags: [componentsTags.style],
|
tags: [componentsTags.style],
|
||||||
@ -12,4 +12,4 @@ export const component: ComponentMetadata = {
|
|||||||
name: 'v1PanelStyle',
|
name: 'v1PanelStyle',
|
||||||
style: () => import('./v1-panel.scss'),
|
style: () => import('./v1-panel.scss'),
|
||||||
}],
|
}],
|
||||||
}
|
})
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
import { defineComponentMetadata, defineOptionsMetadata } from '@/components/define'
|
import {
|
||||||
|
defineComponentMetadata, defineOptionsMetadata, OptionsOfMetadata,
|
||||||
|
} from '@/components/define'
|
||||||
import { ComponentEntry } from '@/components/types'
|
import { ComponentEntry } from '@/components/types'
|
||||||
import { matchUrlPattern } from '@/core/utils'
|
import { matchUrlPattern } from '@/core/utils'
|
||||||
import { videoUrls, watchlaterUrls } from '@/core/utils/urls'
|
import { videoUrls, watchlaterUrls } from '@/core/utils/urls'
|
||||||
@ -10,7 +12,10 @@ const options = defineOptionsMetadata({
|
|||||||
displayName: '在稍后再看页面中仍然显示',
|
displayName: '在稍后再看页面中仍然显示',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
const entry: ComponentEntry<typeof options> = async ({ settings }) => {
|
|
||||||
|
type Options = OptionsOfMetadata<typeof options>
|
||||||
|
|
||||||
|
const entry: ComponentEntry<Options> = async ({ settings }) => {
|
||||||
if (watchlaterUrls.some(matchUrlPattern) && !settings.options.showInWatchlaterPages) {
|
if (watchlaterUrls.some(matchUrlPattern) && !settings.options.showInWatchlaterPages) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -278,8 +278,12 @@ export class ExtendSpeedComponent extends EntrySpeedComponent<Options> {
|
|||||||
protected unpatch: TeardownLogic
|
protected unpatch: TeardownLogic
|
||||||
|
|
||||||
protected migrate() {
|
protected migrate() {
|
||||||
|
type MixedRememberSpeedOptions = Partial<RememberSpeedOptions> & {
|
||||||
|
extendList?: number[]
|
||||||
|
extend?: unknown
|
||||||
|
}
|
||||||
const { options } = this.settings
|
const { options } = this.settings
|
||||||
const { options: rememberSpeedOptions } = getComponentSettings('rememberVideoSpeed') as ComponentSettings<RememberSpeedOptions>
|
const { options: rememberSpeedOptions } = getComponentSettings('rememberVideoSpeed') as ComponentSettings<MixedRememberSpeedOptions>
|
||||||
if (rememberSpeedOptions.extendList) {
|
if (rememberSpeedOptions.extendList) {
|
||||||
options.extendSpeedList = Array.from(rememberSpeedOptions.extendList as number[])
|
options.extendSpeedList = Array.from(rememberSpeedOptions.extendList as number[])
|
||||||
delete rememberSpeedOptions.extendList
|
delete rememberSpeedOptions.extendList
|
||||||
|
|||||||
@ -62,7 +62,12 @@ export class RememberSpeedComponent extends EntrySpeedComponent<Options> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected migrate() {
|
protected migrate() {
|
||||||
const { options } = this.settings
|
type MinedOptions = Partial<Options> & {
|
||||||
|
speed?: number
|
||||||
|
individualRememberList?: Record<string, (number | string)[]>
|
||||||
|
remember?: boolean
|
||||||
|
}
|
||||||
|
const { options }: { options: MinedOptions } = this.settings
|
||||||
let flag = false
|
let flag = false
|
||||||
if (options.speed) {
|
if (options.speed) {
|
||||||
options.globalSpeed = +options.speed || 1
|
options.globalSpeed = +options.speed || 1
|
||||||
@ -72,7 +77,7 @@ export class RememberSpeedComponent extends EntrySpeedComponent<Options> {
|
|||||||
if (options.individualRememberList) {
|
if (options.individualRememberList) {
|
||||||
options.individualRememberRecord = lodash.cloneDeep(
|
options.individualRememberRecord = lodash.cloneDeep(
|
||||||
options.individualRememberList,
|
options.individualRememberList,
|
||||||
) as Record<string, (number | string)[]>
|
)
|
||||||
delete options.individualRememberList
|
delete options.individualRememberList
|
||||||
flag = true
|
flag = true
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,6 @@
|
|||||||
import { defineComponentMetadata, defineOptionsMetadata } from '@/components/define'
|
import {
|
||||||
|
defineComponentMetadata, defineOptionsMetadata, OptionsOfMetadata,
|
||||||
|
} from '@/components/define'
|
||||||
import { ComponentEntry } from '@/components/types'
|
import { ComponentEntry } from '@/components/types'
|
||||||
import { matchUrlPattern } from '@/core/utils'
|
import { matchUrlPattern } from '@/core/utils'
|
||||||
import { favoriteListUrls, videoUrls } from '@/core/utils/urls'
|
import { favoriteListUrls, videoUrls } from '@/core/utils/urls'
|
||||||
@ -15,7 +17,10 @@ const options = defineOptionsMetadata({
|
|||||||
displayName: '在收藏夹播放页面仍然显示',
|
displayName: '在收藏夹播放页面仍然显示',
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
const entry: ComponentEntry<typeof options> = async ({ settings }) => {
|
|
||||||
|
type Options = OptionsOfMetadata<typeof options>
|
||||||
|
|
||||||
|
const entry: ComponentEntry<Options> = async ({ settings }) => {
|
||||||
if (favoriteListUrls.some(matchUrlPattern) && !settings.options.showInFavoritePages) {
|
if (favoriteListUrls.some(matchUrlPattern) && !settings.options.showInFavoritePages) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,6 +1,11 @@
|
|||||||
import { PluginMetadata } from '@/plugins/plugin'
|
import { PluginMetadata } from '@/plugins/plugin'
|
||||||
import { TagFilter } from '@/components/settings-panel/tag-filter'
|
import { TagFilter } from '@/components/settings-panel/tag-filter'
|
||||||
import { ComponentMetadata } from '@/components/types'
|
import { ComponentMetadata } from '@/components/types'
|
||||||
|
import type { Options as SettingPanelOptions } from '@/components/settings-panel'
|
||||||
|
|
||||||
|
type ExtendedOptions = SettingPanelOptions & {
|
||||||
|
recentComponents?: Record<string, number>
|
||||||
|
}
|
||||||
|
|
||||||
export const plugin: PluginMetadata = {
|
export const plugin: PluginMetadata = {
|
||||||
name: 'settingsPanel.tagFilters.recentComponents',
|
name: 'settingsPanel.tagFilters.recentComponents',
|
||||||
@ -9,7 +14,7 @@ export const plugin: PluginMetadata = {
|
|||||||
setup: ({ addData, addHook }) => {
|
setup: ({ addData, addHook }) => {
|
||||||
const getRecentComponents = async () => {
|
const getRecentComponents = async () => {
|
||||||
const { getGeneralSettings } = await import('@/core/settings')
|
const { getGeneralSettings } = await import('@/core/settings')
|
||||||
const generalSettings = getGeneralSettings()
|
const generalSettings: ExtendedOptions = getGeneralSettings()
|
||||||
if (!generalSettings.recentComponents) {
|
if (!generalSettings.recentComponents) {
|
||||||
generalSettings.recentComponents = {}
|
generalSettings.recentComponents = {}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,7 +62,9 @@ const optionsMetadata = defineOptionsMetadata({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
const entry: ComponentEntry<typeof optionsMetadata> = async ({
|
type Options = OptionsOfMetadata<typeof optionsMetadata>
|
||||||
|
|
||||||
|
const entry: ComponentEntry<Options> = async ({
|
||||||
settings: { options: opt },
|
settings: { options: opt },
|
||||||
}) => {
|
}) => {
|
||||||
if (isIframe()) {
|
if (isIframe()) {
|
||||||
|
|||||||
@ -1,6 +1,5 @@
|
|||||||
import {
|
import {
|
||||||
ComponentMetadata,
|
ComponentMetadata, EmptyOptions,
|
||||||
OptionalOptionsMetadata,
|
|
||||||
OptionMetadata,
|
OptionMetadata,
|
||||||
OptionsMetadata,
|
OptionsMetadata,
|
||||||
UnknownOptions,
|
UnknownOptions,
|
||||||
@ -23,5 +22,5 @@ export const defineOptionsMetadata = <
|
|||||||
|
|
||||||
/** 定义组件 */
|
/** 定义组件 */
|
||||||
export const defineComponentMetadata = <
|
export const defineComponentMetadata = <
|
||||||
Om extends OptionalOptionsMetadata
|
O extends UnknownOptions = EmptyOptions
|
||||||
>(m: ComponentMetadata<Om>): ComponentMetadata<Om> => m
|
>(m: ComponentMetadata<O>): ComponentMetadata<O> => m
|
||||||
|
|||||||
@ -71,7 +71,7 @@ const options = defineOptionsMetadata({
|
|||||||
|
|
||||||
export type Options = OptionsOfMetadata<typeof options>
|
export type Options = OptionsOfMetadata<typeof options>
|
||||||
|
|
||||||
const entry: ComponentEntry<typeof options> = async ({ metadata }) => {
|
const entry: ComponentEntry<Options> = async ({ metadata }) => {
|
||||||
const { isIframe } = await import('@/core/utils')
|
const { isIframe } = await import('@/core/utils')
|
||||||
if (isIframe()) {
|
if (isIframe()) {
|
||||||
return
|
return
|
||||||
|
|||||||
@ -154,41 +154,32 @@ export const componentsTags = {
|
|||||||
} as ComponentTag,
|
} as ComponentTag,
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 从 OptionalOptionsMetadata 中获取 Options 信息。
|
|
||||||
* 当其为 undefined 时,返回类型 EmptyOptions。
|
|
||||||
*/
|
|
||||||
export type OptionsFromOptionalMetadata<M extends OptionalOptionsMetadata> = (
|
|
||||||
M extends undefined | Record<string, never> ? EmptyOptions :
|
|
||||||
M extends OptionsMetadata<infer O> ? O : never
|
|
||||||
)
|
|
||||||
|
|
||||||
/** 组件入口函数的参数 */
|
/** 组件入口函数的参数 */
|
||||||
export interface ComponentEntryContext<
|
export interface ComponentEntryContext<
|
||||||
Om extends OptionalOptionsMetadata = OptionalOptionsMetadata
|
O extends UnknownOptions = UnknownOptions
|
||||||
> {
|
> {
|
||||||
/** 当前组件的设置 */
|
/** 当前组件的设置 */
|
||||||
settings: ComponentSettings<OptionsFromOptionalMetadata<Om>>
|
settings: ComponentSettings<O>
|
||||||
/** 当前组件的信息 */
|
/** 当前组件的信息 */
|
||||||
metadata: ComponentMetadata<Om>
|
metadata: ComponentMetadata<O>
|
||||||
/** 核心 API */
|
/** 核心 API */
|
||||||
coreApis: CoreApis
|
coreApis: CoreApis
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 组件入口函数 */
|
/** 组件入口函数 */
|
||||||
export type ComponentEntry<
|
export type ComponentEntry<
|
||||||
Om extends OptionalOptionsMetadata = OptionalOptionsMetadata,
|
O extends UnknownOptions = UnknownOptions,
|
||||||
T = unknown
|
T = unknown
|
||||||
> = (
|
> = (
|
||||||
context: ComponentEntryContext<Om>
|
context: ComponentEntryContext<O>
|
||||||
) => T | Promise<T>
|
) => T | Promise<T>
|
||||||
|
|
||||||
/** 带有函数/复杂对象的组件信息 */
|
/** 带有函数/复杂对象的组件信息 */
|
||||||
export interface FunctionalMetadata<
|
export interface FunctionalMetadata<
|
||||||
Om extends OptionalOptionsMetadata = OptionalOptionsMetadata
|
O extends UnknownOptions = UnknownOptions
|
||||||
> {
|
> {
|
||||||
/** 主入口, 重新开启时不会再运行 */
|
/** 主入口, 重新开启时不会再运行 */
|
||||||
entry: ComponentEntry<Om>
|
entry: ComponentEntry<O>
|
||||||
/** 导出小组件 */
|
/** 导出小组件 */
|
||||||
widget?: Omit<Widget, 'name'>
|
widget?: Omit<Widget, 'name'>
|
||||||
/** 首屏样式, 会尽快注入 (before DCL) */
|
/** 首屏样式, 会尽快注入 (before DCL) */
|
||||||
@ -216,15 +207,10 @@ export interface FunctionalMetadata<
|
|||||||
i18n?: Record<string, LanguagePack | Executable<LanguagePack>>
|
i18n?: Record<string, LanguagePack | Executable<LanguagePack>>
|
||||||
}
|
}
|
||||||
|
|
||||||
/** ComponentMetadata 的类型参数,用于表达其可选参数 options 的类型 */
|
|
||||||
export type OptionalOptionsMetadata<O extends UnknownOptions = UnknownOptions> = (
|
|
||||||
OptionsMetadata<O> | undefined
|
|
||||||
)
|
|
||||||
|
|
||||||
/** 组件基本信息 */
|
/** 组件基本信息 */
|
||||||
export interface ComponentMetadata<
|
export interface ComponentMetadata<
|
||||||
Om extends OptionalOptionsMetadata = OptionalOptionsMetadata
|
O extends UnknownOptions = UnknownOptions
|
||||||
> extends FeatureBase, FunctionalMetadata<Om> {
|
> extends FeatureBase, FunctionalMetadata<O> {
|
||||||
/** 组件名称 */
|
/** 组件名称 */
|
||||||
name: string
|
name: string
|
||||||
/** 显示名称 */
|
/** 显示名称 */
|
||||||
@ -238,7 +224,7 @@ export interface ComponentMetadata<
|
|||||||
/** 是否在设置界面中隐藏 (代码仍可操作) */
|
/** 是否在设置界面中隐藏 (代码仍可操作) */
|
||||||
hidden?: boolean
|
hidden?: boolean
|
||||||
/** 组件子选项 */
|
/** 组件子选项 */
|
||||||
options?: Om
|
options?: OptionsMetadata<O>
|
||||||
/** 是否支持热重载 */
|
/** 是否支持热重载 */
|
||||||
// allowHotReload?: boolean
|
// allowHotReload?: boolean
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
import {
|
import {
|
||||||
ComponentMetadata,
|
ComponentMetadata,
|
||||||
componentsMap,
|
componentsMap,
|
||||||
OptionalOptionsMetadata,
|
|
||||||
OptionsFromOptionalMetadata,
|
|
||||||
OptionsMetadata,
|
OptionsMetadata,
|
||||||
UnknownOptions,
|
UnknownOptions,
|
||||||
} from '@/components/component'
|
} from '@/components/component'
|
||||||
@ -24,9 +22,9 @@ export const metadataToOptions = <O extends UnknownOptions>(
|
|||||||
* 生成组件设置
|
* 生成组件设置
|
||||||
* @param component 组件定义
|
* @param component 组件定义
|
||||||
*/
|
*/
|
||||||
export const componentToSettings = <Om extends OptionalOptionsMetadata>(
|
export const componentToSettings = <O extends UnknownOptions>(
|
||||||
component: ComponentMetadata<Om>,
|
component: ComponentMetadata<O>,
|
||||||
): ComponentSettings<OptionsFromOptionalMetadata<Om>> => {
|
): ComponentSettings<O> => {
|
||||||
const { options: meta } = component
|
const { options: meta } = component
|
||||||
return {
|
return {
|
||||||
enabled: component.enabledByDefault ?? true,
|
enabled: component.enabledByDefault ?? true,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user