access logs + audio
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
import Quill from "quill";
|
||||
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
const BlockEmbed = Quill.import("blots/block/embed") as any;
|
||||
|
||||
interface VideoData {
|
||||
url: string;
|
||||
width?: string;
|
||||
height?: string;
|
||||
}
|
||||
|
||||
class VideoBlot extends BlockEmbed {
|
||||
static blotName = "video";
|
||||
static tagName = "div";
|
||||
static className = "ql-video-wrapper";
|
||||
|
||||
static create(value: VideoData) {
|
||||
const node = super.create();
|
||||
node.classList.add("ql-video-wrapper");
|
||||
|
||||
const iframe = document.createElement("iframe");
|
||||
iframe.setAttribute("src", value.url);
|
||||
iframe.setAttribute("width", value.width || "100%");
|
||||
iframe.setAttribute("height", value.height || "315");
|
||||
iframe.setAttribute("frameborder", "0");
|
||||
iframe.setAttribute("allowfullscreen", "true");
|
||||
iframe.style.maxWidth = "100%";
|
||||
iframe.style.borderRadius = "8px";
|
||||
|
||||
node.appendChild(iframe);
|
||||
return node;
|
||||
}
|
||||
|
||||
static value(node: HTMLElement) {
|
||||
const iframe = node.querySelector("iframe");
|
||||
if (!iframe) return null;
|
||||
|
||||
return {
|
||||
url: iframe.getAttribute("src") || "",
|
||||
width: iframe.getAttribute("width") || "100%",
|
||||
height: iframe.getAttribute("height") || "315",
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
// تابع برای تشخیص و تبدیل URL های ویدیو
|
||||
export const getEmbedUrl = (url: string): string | null => {
|
||||
// YouTube
|
||||
const youtubeRegex = /(?:youtube\.com\/(?:[^/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^"&?/\s]{11})/;
|
||||
const youtubeMatch = url.match(youtubeRegex);
|
||||
if (youtubeMatch) {
|
||||
return `https://www.youtube.com/embed/${youtubeMatch[1]}`;
|
||||
}
|
||||
|
||||
// Aparat
|
||||
const aparatRegex = /aparat\.com\/v\/([a-zA-Z0-9]+)/;
|
||||
const aparatMatch = url.match(aparatRegex);
|
||||
if (aparatMatch) {
|
||||
return `https://www.aparat.com/video/video/embed/videohash/${aparatMatch[1]}/vt/frame`;
|
||||
}
|
||||
|
||||
// اگر قبلاً embed URL است
|
||||
if (
|
||||
url.includes("youtube.com/embed/") ||
|
||||
url.includes("aparat.com/video/video/embed/")
|
||||
) {
|
||||
return url;
|
||||
}
|
||||
|
||||
return null;
|
||||
};
|
||||
|
||||
export default VideoBlot;
|
||||
Reference in New Issue
Block a user