Поддержка RuTube
This commit is contained in:
		
							
								
								
									
										65
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								index.js
									
									
									
									
									
								
							@@ -19,6 +19,7 @@ const getVKPlayer = () => {
 | 
				
			|||||||
const playVideo = (slide) => {
 | 
					const playVideo = (slide) => {
 | 
				
			||||||
    const youtube = slide.querySelector('.advdominion-lg__video_youtube');
 | 
					    const youtube = slide.querySelector('.advdominion-lg__video_youtube');
 | 
				
			||||||
    const vk = slide.querySelector('.advdominion-lg__video_vk');
 | 
					    const vk = slide.querySelector('.advdominion-lg__video_vk');
 | 
				
			||||||
 | 
					    const rt = slide.querySelector('.advdominion-lg__video_rt');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (youtube) {
 | 
					    if (youtube) {
 | 
				
			||||||
        if (slide.YTPlayer) {
 | 
					        if (slide.YTPlayer) {
 | 
				
			||||||
@@ -64,17 +65,44 @@ const playVideo = (slide) => {
 | 
				
			|||||||
                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 pauseVideo = (slide) => {
 | 
				
			||||||
    const youtube = slide.querySelector('.advdominion-lg__video_youtube');
 | 
					    const youtube = slide.querySelector('.advdominion-lg__video_youtube');
 | 
				
			||||||
    const vk = slide.querySelector('.advdominion-lg__video_vk');
 | 
					    const vk = slide.querySelector('.advdominion-lg__video_vk');
 | 
				
			||||||
 | 
					    const rt = slide.querySelector('.advdominion-lg__video_rt');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (youtube && slide.YTPlayer) {
 | 
					    if (youtube && slide.YTPlayer) {
 | 
				
			||||||
        slide.YTPlayer.pauseVideo();
 | 
					        slide.YTPlayer.pauseVideo();
 | 
				
			||||||
    } else if (vk && slide.VKPlayer) {
 | 
					    } else if (vk && slide.VKPlayer) {
 | 
				
			||||||
        slide.VKPlayer.pause();
 | 
					        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;
 | 
					    }).finished;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    gallery.remove();
 | 
					    gallery.remove();
 | 
				
			||||||
 | 
					    delete window.GalleryRTPlayer;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    document.body.style = `
 | 
					    document.body.style = `
 | 
				
			||||||
        overflow: '';
 | 
					        overflow: '';
 | 
				
			||||||
@@ -136,6 +165,7 @@ const init = async (items = [], options = {}, index = 0) => {
 | 
				
			|||||||
    const isVideoInGallery = {
 | 
					    const isVideoInGallery = {
 | 
				
			||||||
        yt: false,
 | 
					        yt: false,
 | 
				
			||||||
        vk: false,
 | 
					        vk: false,
 | 
				
			||||||
 | 
					        rt: false,
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
    items = items.map((item) => {
 | 
					    items = items.map((item) => {
 | 
				
			||||||
        if (/youtube\.com\/watch\?v=/.test(item)) {
 | 
					        if (/youtube\.com\/watch\?v=/.test(item)) {
 | 
				
			||||||
@@ -168,7 +198,28 @@ const init = async (items = [], options = {}, index = 0) => {
 | 
				
			|||||||
            return `
 | 
					            return `
 | 
				
			||||||
                <div class="advdominion-lg__item advdominion-lg__item_video swiper-slide">
 | 
					                <div class="advdominion-lg__item advdominion-lg__item_video swiper-slide">
 | 
				
			||||||
                    <div class="advdominion-lg__video-wrapper">
 | 
					                    <div class="advdominion-lg__video-wrapper">
 | 
				
			||||||
                        <iframe class="advdominion-lg__video advdominion-lg__video_vk" src="https://vkvideo.ru/video_ext.php?oid=${videoId[1]}&id=${videoId[2]}&hd=4&js_api=1" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;" allowfullscreen></iframe>
 | 
					                        <iframe class="advdominion-lg__video advdominion-lg__video_vk" src="https://vkvideo.ru/video_ext.php?oid=${videoId[1]}&id=${videoId[2]}&hd=4&js_api=1" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;"></iframe>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            `;
 | 
				
			||||||
 | 
					        } else if (/rutube\.ru/.test(item)) {
 | 
				
			||||||
 | 
					            isVideoInGallery.rt = true;
 | 
				
			||||||
 | 
					            const videoId = /video\/(\w+)/.exec(item);
 | 
				
			||||||
 | 
					            if (videoId === null) {
 | 
				
			||||||
 | 
					                return `
 | 
				
			||||||
 | 
					                    <div class="advdominion-lg__item advdominion-lg__item_video swiper-slide">
 | 
				
			||||||
 | 
					                        <div class="advdominion-lg__video-wrapper">
 | 
				
			||||||
 | 
					                            <div class="advdominion-lg__video advdominion-lg__video_rt">
 | 
				
			||||||
 | 
					                                Ошибка при загрузке RuTube-плеера
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                `;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return `
 | 
				
			||||||
 | 
					                <div class="advdominion-lg__item advdominion-lg__item_video swiper-slide">
 | 
				
			||||||
 | 
					                    <div class="advdominion-lg__video-wrapper">
 | 
				
			||||||
 | 
					                        <iframe class="advdominion-lg__video advdominion-lg__video_rt" src="https://rutube.ru/play/embed/${videoId[1]}" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;"></iframe>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            `;
 | 
					            `;
 | 
				
			||||||
@@ -229,6 +280,18 @@ const init = async (items = [], options = {}, index = 0) => {
 | 
				
			|||||||
        }, 100);
 | 
					        }, 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(
 | 
					    document.body.insertAdjacentHTML(
 | 
				
			||||||
        'beforeend',
 | 
					        'beforeend',
 | 
				
			||||||
        `
 | 
					        `
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user