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

Материал из Музыкально-фольклорный депозитарий
Нет описания правки
Нет описания правки
 
(не показана 1 промежуточная версия этого же участника)
Строка 1: Строка 1:
console.log('Сайт-скрипт успешно загружен!');
/* Бронебойный скрипт для SVG-баннеров с ИНДИВИДУАЛЬНЫМИ размерами (Timeless) */
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
mw.loader.using('mediawiki.util').then(function () {
/* Превращаем текстовые ссылки на SVG в сайдбаре в кликабельные картинки */
     mw.hook('wikipage.content').add(function () {
mw.hook('wikipage.content').add(function() {
        $('#mw-site-navigation a, #mw-related-navigation a, .sidebar-chunk a, .mw-portlet a').each(function () {
     // Ищем блок БАННЕРЫ (Timeless генерирует ID 'p-БАННЕРЫ' или 'p-BANNERS')
            var $link = $(this);
    // Если блок называется иначе, посмотри его точный ID через F12 (Инспектор кода)
            var rawText = $link.text().trim();
    var $bannerBlock = $('#p-БАННЕРЫ .sidebar-chunk, #p-BANNERS .sidebar-chunk').add('#p-БАННЕРЫ ul, #p-BANNERS ul');


    if ($bannerBlock.length) {
            // Разделяем текст по символу "|", чтобы отделить имя файла от размера
        $bannerBlock.find('li a').each(function() {
            var parts = rawText.split('|');
             var $link = $(this);
            var fileName = parts[0].trim();
             var linkText = $link.text().trim();
            // Если размер указан — берем его, если нет — ставим 100%
             var customWidth = parts[1] ? parts[1].trim() : '100%';  
 
             if (fileName.match(/\.svg$/i)) {
                var imgSrc = mw.util.getUrl('Special:FilePath/' + fileName);


            // Проверяем, оканчивается ли текст ссылки на .svg
            if (linkText.match(/\.svg$/i)) {
                // Строим URL к файлу.
                // В MediaWiki путь к картинке можно получить через Special:FilePath
                var imgSrc = mw.util.getUrl('Special:FilePath/' + linkText);
               
                // Создаем тег картинки и заменяем им текст внутри ссылки
                 var $img = $('<img>', {
                 var $img = $('<img>', {
                     src: imgSrc,
                     src: imgSrc,
                     alt: 'Баннер',
                     alt: 'Баннер',
                     css: {
                     css: {
                         'max-width': '100%',
                        'width': customWidth, // Применяем индивидуальный размер!
                         'max-width': '100%', // Защита от вылезания за пределы сайдбара
                         'height': 'auto',
                         'height': 'auto',
                         'display': 'block',
                         'display': 'block',
                         'margin': '5px auto'
                         'margin': '5px auto',
                        'border-radius': '4px',
                        'transition': 'transform 0.2s'
                     }
                     }
                 });
                 });
                $img.hover(
                    function() { $(this).css('transform', 'scale(1.03)'); },
                    function() { $(this).css('transform', 'scale(1)'); }
                );
                $link.closest('li').css({'list-style': 'none', 'margin-bottom': '10px'});
                $link.closest('ul').css({'padding-left': '0', 'list-style': 'none'});
                 $link.empty().append($img);
                 $link.empty().append($img);
             }
             }
         });
         });
     }
     });
});
});

Текущая версия от 12:54, 8 апреля 2026

/* Бронебойный скрипт для SVG-баннеров с ИНДИВИДУАЛЬНЫМИ размерами (Timeless) */
mw.loader.using('mediawiki.util').then(function () {
    mw.hook('wikipage.content').add(function () {
        $('#mw-site-navigation a, #mw-related-navigation a, .sidebar-chunk a, .mw-portlet a').each(function () {
            var $link = $(this);
            var rawText = $link.text().trim();

            // Разделяем текст по символу "|", чтобы отделить имя файла от размера
            var parts = rawText.split('|');
            var fileName = parts[0].trim();
            // Если размер указан — берем его, если нет — ставим 100%
            var customWidth = parts[1] ? parts[1].trim() : '100%'; 

            if (fileName.match(/\.svg$/i)) {
                var imgSrc = mw.util.getUrl('Special:FilePath/' + fileName);

                var $img = $('<img>', {
                    src: imgSrc,
                    alt: 'Баннер',
                    css: {
                        'width': customWidth, // Применяем индивидуальный размер!
                        'max-width': '100%',  // Защита от вылезания за пределы сайдбара
                        'height': 'auto',
                        'display': 'block',
                        'margin': '5px auto',
                        'border-radius': '4px',
                        'transition': 'transform 0.2s'
                    }
                });

                $img.hover(
                    function() { $(this).css('transform', 'scale(1.03)'); },
                    function() { $(this).css('transform', 'scale(1)'); }
                );

                $link.closest('li').css({'list-style': 'none', 'margin-bottom': '10px'});
                $link.closest('ul').css({'padding-left': '0', 'list-style': 'none'});

                $link.empty().append($img);
            }
        });
    });
});