Немає опису редагування
Мітка: Скасовано
Немає опису редагування
Мітка: Скасовано
Рядок 104: Рядок 104:




// Умный перехватчик, который не мешает MediaViewer
// Ждем полной загрузки MediaViewer
document.addEventListener('click', function(e) {
mw.loader.using('mmv').then(function() {
    var target = e.target;
    // MediaViewer загружен, теперь активируем перехватчик
    var linkElement = target.closest('a');
    initImageInterceptor();
   
});
    // Если это не ссылка на изображение - пропускаем
 
    if (!linkElement || !linkElement.href) return;
function initImageInterceptor() {
   
    document.addEventListener('click', function(e) {
    var href = linkElement.href;
        var link = e.target.closest('a');
    var isImageLink = href.match(/\.(jpg|jpeg|png|gif|bmp|webp)$/i) ||
        if (!link || !link.href) return;
                    href.includes('/wiki/File:');
       
   
        var href = link.href;
    if (!isImageLink) return;
        if (!href.match(/\.(jpg|jpeg|png|gif|bmp|webp)$/i) &&
   
            !href.includes('/wiki/File:')) return;
    // Проверяем, не находится ли ссылка внутри MediaViewer
       
    if (linkElement.closest('.mw-mmv-wrapper')) {
         // Пропускаем, если это уже обрабатывается MediaViewer
         return; // Пропускаем клики внутри MediaViewer
        if (e.defaultPrevented) return;
    }
       
   
        e.preventDefault();
    // Проверяем, не активирован ли уже MediaViewer
        e.stopImmediatePropagation();
    if (window.mw && window.mw.mmv && window.mw.mmv.viewer &&
       
        window.mw.mmv.viewer.isOpen) {
         // Используем стандартный метод MediaViewer
        return; // MediaViewer уже открыт, пропускаем
         if (window.mw && window.mw.mmv && window.mw.mmv.bootstrap) {
    }
             mw.mmv.bootstrap.openImageLink(link);
   
    e.preventDefault();
    e.stopPropagation();
   
    // Даем время MediaViewer обработать клик самостоятельно
    setTimeout(function() {
         // Если MediaViewer не открыл изображение сам, помогаем ему
         if (window.mw && window.mw.mmv && window.mw.mmv.viewer &&
            !window.mw.mmv.viewer.isOpen) {
              
            try {
                var fileTitle = getFileTitleForMediaViewer(linkElement, href);
                if (fileTitle) {
                    window.mw.mmv.viewer.openImage(fileTitle);
                }
            } catch (error) {
                // Тихий fallback - ничего не делаем
            }
         }
         }
     }, 50);
     }, true);
}, true);
 
// Упрощенная функция получения названия файла
function getFileTitleForMediaViewer(linkElement, href) {
    // Пробуем получить из data-атрибутов
    if (linkElement.dataset.title) {
        return linkElement.dataset.title;
    }
   
    // Пробуем получить из атрибута title
    if (linkElement.title && linkElement.title.startsWith('File:')) {
        return linkElement.title;
    }
   
    // Извлекаем из URL
    if (href.includes('/wiki/File:')) {
        var match = href.match(/\/wiki\/File:([^?]+)/i);
        if (match) return 'File:' + decodeURIComponent(match[1]);
    }
   
    // Из имени файла в URL
    var filename = href.split('/').pop().split('?')[0];
    if (filename.match(/\.(jpg|jpeg|png|gif|bmp|webp)/i)) {
        return 'File:' + decodeURIComponent(filename);
    }
   
    return null;
}
}