diff --git a/packages/ui-default/backendlib/markdown-it-media.ts b/packages/ui-default/backendlib/markdown-it-media.ts index fcd8be461..1ffc746f3 100644 --- a/packages/ui-default/backendlib/markdown-it-media.ts +++ b/packages/ui-default/backendlib/markdown-it-media.ts @@ -38,14 +38,9 @@ function extractVideoParameters(url: string) { } return parameterMap; } -function resourceUrl(service: string, src: string, url: string, options) { +function resourceUrl(service: string, src: string, url: string) { if (service === 'youtube') { const parameters = extractVideoParameters(url); - if (options.youtube.parameters) { - Object.keys(options.youtube.parameters).forEach((key) => { - parameters.set(key, options.youtube.parameters[key]); - }); - } const timeParameter = parameters.get('t'); if (timeParameter !== undefined) { let startTime = 0; @@ -63,14 +58,19 @@ function resourceUrl(service: string, src: string, url: string, options) { parameters.delete('origin'); const parameterArray = Array.from(parameters, (p) => p.join('=')); const parameterPos = src.indexOf('?'); - let finalUrl = 'https://www.youtube'; - if (options.youtube.nocookie || url.indexOf('youtube-nocookie.com') > -1) finalUrl += '-nocookie'; - finalUrl += `.com/embed/${parameterPos > -1 ? src.substr(0, parameterPos) : src}`; + let finalUrl = `https://www.youtube.com/embed/${parameterPos > -1 ? src.substring(0, parameterPos) : src}`; if (parameterArray.length > 0) finalUrl += `?${parameterArray.join('&')}`; return finalUrl; } + if (service === 'bilibili') { + if (src.startsWith('http')) src = src.split('/').pop(); + if (src.toLowerCase().startsWith('av')) src = src.toLowerCase().split('av')[1]; + src = src.split('?')[0]; + return `//player.bilibili.com/player.html?${src.startsWith('BV') ? 'bvid' : 'aid'}=${src}&autoplay=0`; + } + if (service === 'youku') return `https://player.youku.com/embed/${src}`; if (service === 'vimeo') return `https://player.vimeo.com/video/${src}`; - if (service === 'vine') return `https://vine.co/v/${src}/embed/${options.vine.embed}`; + if (service === 'vine') return `https://vine.co/v/${src}/embed/simple`; if (service === 'prezi') { return `https://prezi.com/embed/${src}/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0&` + 'landing_data=bHVZZmNaNDBIWnNjdEVENDRhZDFNZGNIUE43MHdLNWpsdFJLb2ZHanI5N1lQVHkxSHFxazZ0UUNCRHloSXZROHh3PT0&' @@ -80,27 +80,10 @@ function resourceUrl(service: string, src: string, url: string, options) { } export function Media(md: MarkdownIt) { - const options = { - url: resourceUrl, - video: resourceUrl, - youtube: { width: 640, height: 390, nocookie: false }, - vimeo: { width: 500, height: 281 }, - vine: { width: 600, height: 600, embed: 'simple' }, - prezi: { width: 550, height: 400 }, - pdf: resourceUrl, - }; + const supported = ['youtube', 'vimeo', 'vine', 'prezi', 'bilibili', 'youku']; md.renderer.rules.video = function tokenizeReturn(tokens, idx) { let src = md.utils.escapeHtml(tokens[idx].attrGet('src')); const service = md.utils.escapeHtml(tokens[idx].attrGet('service')).toLowerCase(); - if (service === 'bilibili') { - if (src.startsWith('http')) src = src.split('/').pop(); - if (src.toLowerCase().startsWith('av')) src = src.toLowerCase().split('av')[1]; - src = src.split('?')[0]; - return `\ - - `; - } if (service === 'msoffice') { return `\ `; } - if (options[service]?.width) { - return ` - `; + if (supported.includes(service)) { + return `\ + `; } return `${md.utils.escapeHtml(src)}`; };