Открыть меню
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

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

Страница интерфейса MediaWiki
Дополнительные действия
Нет описания правки
Метка: отменено
Нет описания правки
Метка: отменено
Строка 33: Строка 33:
});
});


function showPopup(title) {
function getPageImage(title, size = 200) {
     const popup = document.querySelector('.popup');
     return fetch(
    popup.innerHTML = `<div class="loading">Loading...</div>`; // можно вставить спиннер
        mw.util.wikiScript('api') +
 
        `?action=query&titles=${encodeURIComponent(title)}&prop=pageimages&piprop=thumbnail&pithumbsize=${size}&format=json`
     getPageImage(title).then(imgUrl => {
    )
         popup.innerHTML = `
     .then(res => res.json())
            <div class="popup-content">
    .then(data => {
                ${imgUrl ? `<img class="pageimage" src="${imgUrl}" alt="${title}">` : ''}
         const pages = data.query.pages;
                <div class="popup-title">${title}</div>
        const page = Object.values(pages)[0];
            </div>
        return page.thumbnail ? page.thumbnail.source : null;
        `;
     });
     });
}
}

Версия от 16:20, 11 августа 2025

/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */

mw.loader.using('mediawiki.util').then(function() {
    var isMobile = mw.config.get('skin') === 'minerva';

    if (isMobile) {
        // Мобильная версия
        $('.mobile-hide').hide();
    } else {
        // Десктопная версия
        $('.desktop-hide').hide();
    }
});

mw.hook('wikipage.content').add(function($content) {
    $content.find('.dropbtn').on('click', function(event) {
        event.preventDefault();
        var dropdown = $(this).closest('.dropdown');
        var content = dropdown.find('.dropdown-content');

        // Закрываем все открытые списки
        $('.dropdown').not(dropdown).removeClass('active').find('.dropdown-content').css('max-height', '0px');

        // Открываем/закрываем текущий список
        if (dropdown.hasClass('active')) {
            dropdown.removeClass('active');
            content.css('max-height', '0px');
        } else {
            dropdown.addClass('active');
            content.css('max-height', content[0].scrollHeight + 'px'); // Автоматическая высота
        }
    });
});

function getPageImage(title, size = 200) {
    return fetch(
        mw.util.wikiScript('api') + 
        `?action=query&titles=${encodeURIComponent(title)}&prop=pageimages&piprop=thumbnail&pithumbsize=${size}&format=json`
    )
    .then(res => res.json())
    .then(data => {
        const pages = data.query.pages;
        const page = Object.values(pages)[0];
        return page.thumbnail ? page.thumbnail.source : null;
    });
}

mw.hook('ext.popups.render').add(function(popup, data) {
    const title = data.title;
    getPageImage(title, 200).then(imgUrl => {
        if (imgUrl) {
            const imgElem = document.createElement('img');
            imgElem.className = 'pageimage';
            imgElem.src = imgUrl;
            popup.querySelector('.mwe-popups-container').prepend(imgElem);
        }
    });
});