|
|
| Рядок 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;
| |
| } | | } |