MediaWiki:Common.js: различия между версиями

Нет описания правки
Не работает, зараза, а если так, урезать по максимуму?
Строка 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();
    }
});
});