Bilibili-Evolved/registry/lib/components/utils/black-list/vm.ts
2022-10-12 23:27:58 +08:00

84 lines
2.3 KiB
TypeScript

import { getComponentSettings } from '@/core/settings'
import { mountVueComponent } from '@/core/utils'
import { addData, getData } from '@/plugins/data'
import { BlackListDataKey } from './common'
type SettingsVmType = Vue & {
toggle: () => void
triggerElement: HTMLElement
list: string[]
save: (items: string[]) => void
titleName: string
}
let nameSettingsVM: SettingsVmType
let regexSettingsVm: SettingsVmType
const blackListOptions = getComponentSettings('blackList').options as {
up: string[]
upRegex: string[]
}
export const setNameProps = (element: HTMLElement) => {
if (!nameSettingsVM) {
return
}
nameSettingsVM.triggerElement = element
const blackList = getData(BlackListDataKey)
nameSettingsVM.list = lodash.cloneDeep(blackList[0].up)
nameSettingsVM.save = (items: string[]) => {
addData(BlackListDataKey, data => {
data.up = items
})
blackListOptions.up = items
}
nameSettingsVM.titleName = '精确匹配'
}
export const setRegexProps = (element: HTMLElement) => {
if (!regexSettingsVm) {
return
}
regexSettingsVm.triggerElement = element
const blackList = getData(BlackListDataKey)
regexSettingsVm.list = lodash.cloneDeep(blackList[0].upRegex)
regexSettingsVm.save = (items: string[]) => {
addData(BlackListDataKey, data => {
data.upRegex = items
})
blackListOptions.upRegex = items
}
regexSettingsVm.titleName = '正则匹配'
}
export const loadNameSettings = async () => {
if (nameSettingsVM) {
return false
}
const blackListSettings = await import('./BlackListSettings.vue').then(m => m.default)
nameSettingsVM = mountVueComponent(blackListSettings)
document.body.insertAdjacentElement('beforeend', nameSettingsVM.$el)
return true
}
export const loadRegexSettings = async () => {
if (regexSettingsVm) {
return false
}
const blackListSettings = await import('./BlackListSettings.vue').then(m => m.default)
regexSettingsVm = mountVueComponent(blackListSettings)
document.body.insertAdjacentElement('beforeend', regexSettingsVm.$el)
return true
}
export const toggleNameSettings = async () => {
if (!nameSettingsVM) {
await loadNameSettings()
}
nameSettingsVM?.toggle()
}
export const toggleRegexSettings = async () => {
if (!regexSettingsVm) {
await loadRegexSettings()
}
regexSettingsVm?.toggle()
}