From b934b2ec41fe62715a664d60e7c9c4364adb6d7c Mon Sep 17 00:00:00 2001 From: Valentin Silytuin Date: Thu, 24 Apr 2025 23:13:11 +0400 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20RuTube?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.js | 65 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 64 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index ecdc9ca..1f428f9 100644 --- a/index.js +++ b/index.js @@ -19,6 +19,7 @@ const getVKPlayer = () => { const playVideo = (slide) => { const youtube = slide.querySelector('.advdominion-lg__video_youtube'); const vk = slide.querySelector('.advdominion-lg__video_vk'); + const rt = slide.querySelector('.advdominion-lg__video_rt'); if (youtube) { if (slide.YTPlayer) { @@ -64,17 +65,44 @@ const playVideo = (slide) => { playVideo(slide); }); } + } else if (rt) { + const videoId = /embed\/(\w+)/.exec(rt.getAttribute('src'))?.[1]; + const checkInterval = setInterval(() => { + if (window.GalleryRTPlayer) { + if (window.GalleryRTPlayer.has(videoId)) { + clearInterval(checkInterval); + rt.contentWindow.postMessage( + JSON.stringify({ + type: 'player:play', + data: {}, + }), + '*', + ); + } + } else { + clearInterval(checkInterval); + } + }, 100); } }; const pauseVideo = (slide) => { const youtube = slide.querySelector('.advdominion-lg__video_youtube'); const vk = slide.querySelector('.advdominion-lg__video_vk'); + const rt = slide.querySelector('.advdominion-lg__video_rt'); if (youtube && slide.YTPlayer) { slide.YTPlayer.pauseVideo(); } else if (vk && slide.VKPlayer) { slide.VKPlayer.pause(); + } else if (rt) { + rt.contentWindow.postMessage( + JSON.stringify({ + type: 'player:pause', + data: {}, + }), + '*', + ); } }; @@ -106,6 +134,7 @@ const hide = async (duration = 500, easing = 'linear') => { }).finished; gallery.remove(); + delete window.GalleryRTPlayer; document.body.style = ` overflow: ''; @@ -136,6 +165,7 @@ const init = async (items = [], options = {}, index = 0) => { const isVideoInGallery = { yt: false, vk: false, + rt: false, }; items = items.map((item) => { if (/youtube\.com\/watch\?v=/.test(item)) { @@ -168,7 +198,28 @@ const init = async (items = [], options = {}, index = 0) => { return `
- + +
+
+ `; + } else if (/rutube\.ru/.test(item)) { + isVideoInGallery.rt = true; + const videoId = /video\/(\w+)/.exec(item); + if (videoId === null) { + return ` +
+
+
+ Ошибка при загрузке RuTube-плеера +
+
+
+ `; + } + return ` +
+
+
`; @@ -229,6 +280,18 @@ const init = async (items = [], options = {}, index = 0) => { }, 100); } + if (isVideoInGallery.rt) { + window.GalleryRTPlayer = new Set(); + window.addEventListener('message', (event) => { + if (event.origin.includes('rutube.ru') && typeof event.data === 'string') { + const message = JSON.parse(event.data); + if (message.type === 'player:ready') { + window.GalleryRTPlayer.add(message.data.videoId); + } + } + }); + } + document.body.insertAdjacentHTML( 'beforeend', `