From a077c816e2932b1a04dca24fd9ed144c828e8adb Mon Sep 17 00:00:00 2001 From: arabcoders Date: Thu, 22 May 2025 23:20:19 +0300 Subject: [PATCH] minor embedable content update --- .vscode/settings.json | 1 + ui/utils/embedable.js | 54 +++++++++++++++++++++++++------------------ 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 1df8c357..37e48719 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -37,6 +37,7 @@ "libcurl", "libx", "matroska", + "mbed", "Microformat", "microformats", "mkvtoolsnix", diff --git a/ui/utils/embedable.js b/ui/utils/embedable.js index 7ec45a5f..6873b9f7 100644 --- a/ui/utils/embedable.js +++ b/ui/utils/embedable.js @@ -2,57 +2,62 @@ const sources = [ { name: 'youtube', url: 'https://www.youtube-nocookie.com/embed/', - regex: /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:shorts\/|[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)([a-zA-Z0-9_-]{11})/, + regex: /(?:https?:\/\/)?(?:www\.)?(?:youtube\.com\/(?:shorts\/|[^\/\n\s]+\/\S+\/|(?:v|e(?:mbed)?)\/|\S*?[?&]v=)|youtu\.be\/)(?[a-zA-Z0-9_-]{11})/, }, { - name: "instagram", + name: "instagram_post", url: "https://www.instagram.com/p/", - regex: /https?:\/\/(?:www\.)?instagram\.com\/p\/([^/?#&]+)/, + regex: /https?:\/\/(?:www\.)?instagram\.com\/p\/(?[^/?#&]+)/, + }, + { + name: "instagram_story", + url: "https://www.instagram.com/stories/highlights/", + regex: /https?:\/\/(?:www\.)?instagram\.com\/stories\/highlights\/(?[^/?#&]+)/, }, { name: "twitter", url: "https://twitter.com/i/status/", - regex: /https?:\/\/(?:www\.)?twitter\.com\/i\/status\/([^/?#&]+)/, + regex: /https?:\/\/(?:www\.)?(twitter\.com|x\.com)\/.+?\/status\/(?[^/?#&]+)/, }, { name: "facebook", url: "https://www.facebook.com/plugins/post.php?href=", - regex: /https?:\/\/(?:www\.)?facebook\.com\/(?:[^/?#&]+)\/posts\/([^/?#&]+)/, + regex: /https?:\/\/(?:www\.)?facebook\.com\/(?:[^/?#&]+)\/posts\/(?[^/?#&]+)/, }, { name: "tiktok", url: "https://www.tiktok.com/embed/", - regex: /https?:\/\/(?:www\.)?tiktok\.com\/(?:[^/?#&]+)\/video\/([^/?#&]+)/, + regex: /https?:\/\/(?:www\.)?tiktok\.com\/(?:[^/?#&]+)\/video\/(?[^/?#&]+)/, }, { name: "vimeo", url: "https://player.vimeo.com/video/", - regex: /https?:\/\/(?:www\.)?vimeo\.com\/(?:[^/?#&]+)\/([^/?#&]+)/, - }, - { - name: "soundcloud", - url: "https://w.soundcloud.com/player/?url=", - regex: /https?:\/\/(?:www\.)?soundcloud\.com\/(?:[^/?#&]+)\/([^/?#&]+)/, + regex: /https?:\/\/(?:www\.)?vimeo\.com(?:\/[^/?#&]+)?\/(?[^/?#&]+)/, }, { name: "spotify", url: "https://open.spotify.com/embed/", - regex: /https?:\/\/(?:open\.)?spotify\.com\/(?:[^/?#&]+)\/([^/?#&]+)/, + regex: /https?:\/\/(?:open\.)?spotify\.com\/(?:[^/?#&]+)\/(?[^/?#&]+)/, }, { - name: "twitch", - url: "https://player.twitch.tv/?channel=", - regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?:[^/?#&]+)\/([^/?#&]+)/, + name: "twitch_vod", + url: "https://player.twitch.tv/?parent={origin}&video=", + regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?:[^/?#&]+)\/(?[^/?#&]+)/, }, { - name: "mixcloud", - url: "https://www.mixcloud.com/widget/iframe/", - regex: /https?:\/\/(?:www\.)?mixcloud\.com\/(?:[^/?#&]+)\/([^/?#&]+)/, + name: "twitch_clip", + url: "https://clips.twitch.tv/embed?parent={origin}&clip=", + regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?:[^/?#&]+)\/clip\/(?[^/?#&]+)/, + }, + { + name: "twitch_channel", + url: "https://player.twitch.tv/?parent={origin}&channel=", + regex: /https?:\/\/(?:www\.)?twitch\.tv\/(?[^/?#&]+)/, }, { name: "dailymotion", url: "https://www.dailymotion.com/embed/video/", - regex: /https?:\/\/(?:www\.)?dailymotion\.com\/(?:[^/?#&]+)\/video\/([^/?#&]+)/, + regex: /^.+dailymotion.com\/(video|hub)\/(?[^_]+)[^#]*(#video=([^_&]+))?/, }, ] @@ -62,8 +67,13 @@ const isEmbedable = url => { const getEmbedable = url => { const source = sources.find(source => source.regex.test(url)); - const id = source.regex.exec(url)[1]; - return source.url + id; + if (!source) { + return null; + } + + source.url.replace(/\{origin\}/g, window.location.origin); + + return source.url + source.regex.exec(url)['groups'].id; } export { isEmbedable, getEmbedable };