Bilibili-Evolved/registry/lib/components/live/danmaku-sendbar/index.ts
2023-02-04 17:45:03 +08:00

43 lines
1.5 KiB
TypeScript

import { defineComponentMetadata } from '@/components/define'
import { waitForControlBar } from '@/components/live/live-control-bar'
import { getUID } from '@/core/utils'
import { liveUrls } from '@/core/utils/urls'
import { leftControllerSelector } from './original-elements'
import type DanmakuSendBar from './DanmakuSendbar.vue'
const entry = async () => {
if (!getUID()) {
return
}
let danmakuSendBarElement: Element | undefined
waitForControlBar({
callback: async controlBar => {
const leftController = dq(controlBar, leftControllerSelector) as HTMLDivElement
if (!leftController) {
throw new Error('[danmakuSendBar] leftController not found')
}
if (dq(controlBar, '.danmaku-send-bar')) {
return
}
if (!danmakuSendBarElement) {
const { mountVueComponent } = await import('@/core/utils')
danmakuSendBarElement = mountVueComponent(await import('./DanmakuSendbar.vue'))[0]
}
leftController.insertAdjacentElement('afterend', danmakuSendBarElement)
},
})
}
export const component = defineComponentMetadata({
name: 'liveDanmakuSendbar',
displayName: '直播弹幕发送栏',
tags: [componentsTags.live],
description: {
'zh-CN': '在直播的网页全屏和全屏模式状态下, 在底部显示弹幕栏.',
},
entry,
reload: () => document.body.classList.remove('danmaku-send-bar-unloaded'),
unload: () => document.body.classList.add('danmaku-send-bar-unloaded'),
urlInclude: liveUrls,
})