UNPKG

@paperbits/core

Version:
42 lines (32 loc) 1.53 kB
import { IContentDropHandler, IContentDescriptor, IDataTransfer, IWidgetHandler } from "@paperbits/common/editing"; import { YoutubePlayerModel } from "./youtubePlayerModel"; export class YoutubeHandlers implements IWidgetHandler<YoutubePlayerModel>, IContentDropHandler { public async getWidgetModel(): Promise<YoutubePlayerModel> { return new YoutubePlayerModel(); } public getContentDescriptorFromDataTransfer(dataTransfer: IDataTransfer): IContentDescriptor { const videoId = this.getVideoId(dataTransfer); if (!videoId) { return undefined; } const getThumbnailPromise = () => Promise.resolve(`https://img.youtube.com/vi/${videoId}/0.jpg`); const descriptor: IContentDescriptor = { title: "Youtube player", description: "", getPreviewUrl: getThumbnailPromise, getThumbnailUrl: getThumbnailPromise }; return descriptor; } private getVideoId(dataTransfer: IDataTransfer): string { const source = dataTransfer.source; if (source && typeof source === "string") { const lower = source.toLowerCase(); if (lower.startsWith("https://www.youtube.com") || lower.startsWith("http://www.youtube.com")) { const videoId = new RegExp("[?&](?:v=)(.*?)(?:$|&)").exec(source); return videoId ? videoId[1] : undefined; } } return undefined; } }