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