|
|
| Строка 122: |
Строка 122: |
|
| |
|
| /* Функция для вставки Rutube-видео на страницу для шаблона Rutube, простая версия */ | | /* Функция для вставки Rutube-видео на страницу для шаблона Rutube, простая версия */ |
| mw.loader.using('mediawiki.util').then(function() {
| | document.addEventListener('DOMContentLoaded', function() { |
| function initRutubePlayers() { | | var players = document.querySelectorAll('.rutube-player'); |
| var players = document.querySelectorAll('.rutube-player');
| | |
|
| | players.forEach(function(player) { |
| if (players.length === 0) return;
| | var videoId = player.getAttribute('data-video-id'); |
| | var width = player.getAttribute('data-width') || '560'; |
| | var height = player.getAttribute('data-height') || '315'; |
| | | |
| var script = document.createElement('script'); | | if (videoId) { |
| script.src = 'https://rutube.ru/static/api/api.js';
| | var iframe = document.createElement('iframe'); |
| script.onload = function() {
| | iframe.src = 'https://rutube.ru/play/embed/' + videoId; |
| initializePlayers(players); | | iframe.width = width; |
| };
| | iframe.height = height; |
| document.head.appendChild(script);
| | iframe.frameBorder = '0'; |
| }
| | iframe.allow = 'autoplay; fullscreen; picture-in-picture'; |
|
| | iframe.allowFullscreen = true; |
| function initializePlayers(players) {
| | iframe.style.border = 'none'; |
| players.forEach(function(player) {
| | iframe.style.display = 'block'; |
| var videoId = player.getAttribute('data-video-id');
| |
| var width = player.getAttribute('data-width') || '560'; | |
| var height = player.getAttribute('data-height') || '315'; | |
| | | |
| if (videoId && window.Rutube) { | | player.appendChild(iframe); |
| var playerContainer = document.createElement('div');
| | } |
| playerContainer.id = 'rutube-player-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9);
| |
|
| |
| player.innerHTML = '';
| |
| player.appendChild(playerContainer);
| |
|
| |
| try {
| |
| window.Rutube.init(playerContainer.id, {
| |
| video: videoId,
| |
| width: width,
| |
| height: height,
| |
| parent: window.location.hostname
| |
| });
| |
| } catch (e) {
| |
| console.error('Error initializing Rutube player:', e);
| |
| fallbackEmbed(player, videoId, width, height);
| |
| }
| |
| } else if (videoId) {
| |
| // Fallback если API не загрузилось
| |
| fallbackEmbed(player, videoId, width, height);
| |
| }
| |
| });
| |
| }
| |
|
| |
| // Fallback метод через iframe
| |
| function fallbackEmbed(player, videoId, width, height) {
| |
| var iframe = document.createElement('iframe');
| |
| iframe.src = 'https://rutube.ru/play/embed/' + videoId;
| |
| iframe.width = width;
| |
| iframe.height = height;
| |
| iframe.frameBorder = '0';
| |
| iframe.allow = 'autoplay; fullscreen; picture-in-picture';
| |
| iframe.allowFullscreen = true;
| |
| iframe.style.border = 'none';
| |
| iframe.style.display = 'block';
| |
| | |
| player.innerHTML = '';
| |
| player.appendChild(iframe);
| |
| }
| |
|
| |
| // Инициализируем при загрузке страницы
| |
| mw.hook('wikipage.content').add(function($content) {
| |
| initRutubePlayers();
| |
| }); | | }); |
|
| |
| // Инициализируем существующие плееры
| |
| if (document.readyState === 'loading') {
| |
| document.addEventListener('DOMContentLoaded', initRutubePlayers);
| |
| } else {
| |
| initRutubePlayers();
| |
| }
| |
| }); | | }); |