@paperbits/core
Version:
Paperbits core components.
42 lines (32 loc) • 1.53 kB
text/typescript
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;
}
}