36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
/**
|
|
* @[acfun](acid)
|
|
*/
|
|
import type { PluginWithOptions } from 'markdown-it'
|
|
import type { AcFunTokenMeta } from '../../../shared/index.js'
|
|
import { parseRect } from '../../utils/parseRect.js'
|
|
import { resolveAttrs } from '../../utils/resolveAttrs.js'
|
|
import { stringifyAttrs } from '../../utils/stringifyAttrs.js'
|
|
import { createEmbedRuleBlock } from '../createEmbedRuleBlock.js'
|
|
|
|
const AC_FUN_LINK = 'https://www.acfun.cn/player'
|
|
|
|
export const acfunPlugin: PluginWithOptions<never> = (md) => {
|
|
createEmbedRuleBlock<AcFunTokenMeta>(md, {
|
|
type: 'acfun',
|
|
name: 'video_acfun',
|
|
syntaxPattern: /^@\[acfun([^\]]*)\]\(([^)]*)\)/,
|
|
meta([, info, id]) {
|
|
const { attrs } = resolveAttrs(info)
|
|
|
|
return {
|
|
id,
|
|
title: attrs.title || 'AcFun',
|
|
width: attrs.width ? parseRect(attrs.width) : '100%',
|
|
height: attrs.height ? parseRect(attrs.height) : undefined,
|
|
ratio: attrs.ratio ?? '16:10',
|
|
}
|
|
},
|
|
content(meta) {
|
|
const { id, width, height, ratio, title } = meta
|
|
const src = `${AC_FUN_LINK}/${id}`
|
|
return `<VPVideoEmbed${stringifyAttrs({ src, width, height, ratio, title, type: 'acfun' })} />`
|
|
},
|
|
})
|
|
}
|