MediaWiki:Common.js: відмінності між версіями
Wiki (обговорення | внесок) Немає опису редагування Мітка: Скасовано |
Wiki (обговорення | внесок) Немає опису редагування Мітка: Скасовано |
||
| Рядок 104: | Рядок 104: | ||
// | // Умный перехватчик, который не мешает MediaViewer | ||
document.addEventListener('click', function(e) { | document.addEventListener('click', function(e) { | ||
var target = e.target; | var target = e.target; | ||
var | var linkElement = target.closest('a'); | ||
if (! | // Если это не ссылка на изображение - пропускаем | ||
if (!linkElement || !linkElement.href) return; | |||
var href = | var href = linkElement.href; | ||
if (! | var isImageLink = href.match(/\.(jpg|jpeg|png|gif|bmp|webp)$/i) || | ||
href.includes('/wiki/File:'); | |||
if (!isImageLink) return; | |||
// Проверяем, не находится ли ссылка внутри MediaViewer | |||
if (linkElement.closest('.mw-mmv-wrapper')) { | |||
return; // Пропускаем клики внутри MediaViewer | |||
} | |||
// Проверяем, не активирован ли уже MediaViewer | |||
if (window.mw && window.mw.mmv && window.mw.mmv.viewer && | |||
window.mw.mmv.viewer.isOpen) { | |||
return; // MediaViewer уже открыт, пропускаем | |||
} | |||
e.preventDefault(); | |||
e.stopPropagation(); | |||
// Даем время MediaViewer обработать клик самостоятельно | |||
setTimeout(function() { | |||
// Если MediaViewer не открыл изображение сам, помогаем ему | |||
if (window.mw && window.mw.mmv && window.mw.mmv.viewer && | |||
// | !window.mw.mmv.viewer.isOpen) { | ||
if (window.mw && window.mw.mmv && window.mw.mmv.viewer) { | |||
try { | |||
var fileTitle = getFileTitleForMediaViewer(linkElement, href); | |||
if (fileTitle) { | |||
window.mw.mmv.viewer.openImage(fileTitle); | |||
} | } | ||
} | } catch (error) { | ||
// Тихий fallback - ничего не делаем | |||
} | |||
} | } | ||
} | }, 50); | ||
}, true); | }, true); | ||
function | // Упрощенная функция получения названия файла | ||
function getFileTitleForMediaViewer(linkElement, href) { | |||
var filename = | // Пробуем получить из 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; | return null; | ||
} | } | ||