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

Страница интерфейса MediaWiki
мНет описания правки
Метка: отменено
мНет описания правки
 
(не показано 19 промежуточных версий этого же участника)
Строка 1: Строка 1:
// MediaWiki:Common.js
/* Размещённый здесь код JavaScript будет загружаться пользователям при обращении к каждой странице */
 
// console.log("Привет");
/*_____________________*/
mw.loader.using('jquery').then(function() {
mw.loader.using('jquery').then(function() {
   $(function() {
   $(document).ready(function() {
     if (window.matchMedia("(max-width: 768px)").matches) {
     // Удаляем старые элементы
      // Создаем кнопку меню
    $('.citizen-header__custom-bottom, .citizen-panel-overlay').remove();
      var $toggleButton = $('<button>')
   
        .addClass('citizen-mobile-menu-toggle')
    // Создаем новую панель
        .html('☰ Меню')
    const $panel = $('<div>')
        .css({
      .addClass('citizen-header__custom-bottom')
          'background': 'transparent',
      .hide();
          'border': 'none',
   
          'color': '#fff',
    // Создаем оверлей
          'cursor': 'pointer',
    const $overlay = $('<div>')
          'padding': '10px'
      .addClass('citizen-panel-overlay')
        });
      .hide();


      // Вставляем кнопку в нужное место
    // Добавляем элементы на страницу
      var $headerTools = $('.citizen-header__tools');
    $('body').append($overlay, $panel);
       if ($headerTools.length) {
 
         $headerTools.prepend($toggleButton);
    // Контент панели
       } else {
    const items = [
         $('.citizen-header__end').prepend($toggleButton);
       {
        src: 'https://wiki.ss220.club/resources/assets/logo.png',
         link: 'https://wiki.ss220.club',
        width: '40px'
       },
      {
         src: 'https://bs.ss220.club/resources/assets/logo.png',
        link: 'https://bs.ss220.club',
        width: '40px'
       }
       }
    ];


      // Находим целевое меню
    // Заполняем панель
       var $targetMenu = $('.citizen-header__menu');
    $panel.append(
       items.map(item =>
        $('<a>')
          .attr('href', item.link)
          .append(
            $('<img>')
              .attr('src', item.src)
              .css('width', item.width)
          )
          .css({
            display: 'block',
            transition: '0.2s transform'
          })
          .hover(
            () => $(this).css('transform', 'scale(1.1)'),
            () => $(this).css('transform', 'none')
          )
      )
    );


      // Обработчик клика
    // Управление видимостью
       $toggleButton.on('click', function() {
    function togglePanel(show) {
        $targetMenu.toggleClass('is-visible');
       $panel.toggle(show);
      });
      $overlay.toggle(show);
      $('body').toggleClass('citizen-panel-active', show);
     }
     }
  });
});


    // Открытие/закрытие
    $overlay.click(() => togglePanel(false));
    $(document).on('keyup', e => e.key === 'Escape' && togglePanel(false));


window.toggleTheme = function() {
    // Инициализация
     document.body.classList.toggle('dark-theme');
     togglePanel(true); // Для теста - сразу показать панель
    localStorage.setItem('theme', document.body.classList.contains('dark-theme') ? 'dark' : 'light');
  });
};
 
document.addEventListener('DOMContentLoaded', function() {
    var savedTheme = localStorage.getItem('theme');
    if (savedTheme === 'dark') document.body.classList.add('dark-theme');
});
});
mw.hook('citizen.load').add(function() {
    var button = document.createElement('button');
    button.textContent = '🌓 Тема';
    button.style.cssText = 'margin: 0 10px; padding: 8px 12px; cursor: pointer;';
    button.onclick = toggleTheme;
    var headerTools = document.querySelector('.citizen-header__tools');
    if (headerTools) {
        headerTools.insertBefore(button, headerTools.firstChild);
    }
});
// Отключаем регистрацию Service Worker
if ('serviceWorker' in navigator) {
    navigator.serviceWorker.getRegistrations().then(function(registrations) {
        for (var i = 0; i < registrations.length; i++) { // Исправлено: ES5-совместимый цикл
            registrations[i].unregister();
        }
    });
}

Текущая версия от 06:47, 2 апреля 2025

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

// console.log("Привет");
/*_____________________*/
mw.loader.using('jquery').then(function() {
  $(document).ready(function() {
    // Удаляем старые элементы
    $('.citizen-header__custom-bottom, .citizen-panel-overlay').remove();
    
    // Создаем новую панель
    const $panel = $('<div>')
      .addClass('citizen-header__custom-bottom')
      .hide();
    
    // Создаем оверлей
    const $overlay = $('<div>')
      .addClass('citizen-panel-overlay')
      .hide();

    // Добавляем элементы на страницу
    $('body').append($overlay, $panel);

    // Контент панели
    const items = [
      {
        src: 'https://wiki.ss220.club/resources/assets/logo.png',
        link: 'https://wiki.ss220.club',
        width: '40px'
      },
      {
        src: 'https://bs.ss220.club/resources/assets/logo.png',
        link: 'https://bs.ss220.club',
        width: '40px'
      }
    ];

    // Заполняем панель
    $panel.append(
      items.map(item => 
        $('<a>')
          .attr('href', item.link)
          .append(
            $('<img>')
              .attr('src', item.src)
              .css('width', item.width)
          )
          .css({
            display: 'block',
            transition: '0.2s transform'
          })
          .hover(
            () => $(this).css('transform', 'scale(1.1)'),
            () => $(this).css('transform', 'none')
          )
      )
    );

    // Управление видимостью
    function togglePanel(show) {
      $panel.toggle(show);
      $overlay.toggle(show);
      $('body').toggleClass('citizen-panel-active', show);
    }

    // Открытие/закрытие
    $overlay.click(() => togglePanel(false));
    $(document).on('keyup', e => e.key === 'Escape' && togglePanel(false));

    // Инициализация
    togglePanel(true); // Для теста - сразу показать панель
  });
});