Перейти к содержанию

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

Материал из Horny Jail WIKI
Нет описания правки
Нет описания правки
Строка 1: Строка 1:
mw.hook('wikipage.content').add(function ($content) {
// Переключение вкладок + синхронизация фона и карточек.
   var $buttons = $content.find('.hj-chaos-tab-button');
// Работает по каждому .hj-chaos-container отдельно.
  var $blocks  = $content.find('.hj-chaos-block');
mw.hook('wikipage.content').add(function ($root) {
  var root    = $content.closest('.hj-chaos-container')[0];
   $root.find('.hj-chaos-container').each(function () {
    var $container = $(this);
    var $buttons  = $container.find('.hj-chaos-tab-button');
    var $blocks    = $container.find('.hj-chaos-block');


  if (!$buttons.length || !$blocks.length) return;
    if (!$buttons.length || !$blocks.length) return;


  function darken(rgb, k){
    function darken(rgb, k) {
    var m = rgb.match(/\d+/g) || [17,17,17];
      var m = (rgb || '').match(/\d+/g) || [17,17,17];
    var r = Math.round(m[0]*(1-k)), g = Math.round(m[1]*(1-k)), b = Math.round(m[2]*(1-k));
      var r = Math.round(m[0] * (1 - k));
    return 'rgb('+r+', '+g+', '+b+')';
      var g = Math.round(m[1] * (1 - k));
  }
      var b = Math.round(m[2] * (1 - k));
      return 'rgb(' + r + ', ' + g + ', ' + b + ')';
    }


  function applyPanelFrom($btn){
    function applyColors($btn, $block) {
    var c = getComputedStyle($btn[0]).backgroundColor;
      var bg = getComputedStyle($btn[0]).backgroundColor;
    root.style.setProperty('--panel-bg', c);
      // Панель
    root.style.setProperty('--card-bg', darken(c, 0.18));
      $block.css('background-color', bg);
  }
      // Карточки внутри активного блока — темнее панели
      var cardBg = darken(bg, 0.18);
      $block.find('.hj-rule-card').css('background-color', cardBg);
    }


  var $active = $buttons.filter('.active');
    function activate(key, $btn) {
  if ($active.length) applyPanelFrom($active);
      $buttons.removeClass('active');
      $btn.addClass('active');


  $buttons.off('click.hjChaos').on('click.hjChaos', function () {
      $blocks.removeClass('active').hide();
    var $btn = $(this);
      var $blk = $blocks.filter('[data-chaos="' + key + '"]').addClass('active').show();
    var key  = $btn.data('chaos');


    $buttons.removeClass('active');
      applyColors($btn, $blk);
     $btn.addClass('active');
     }


     $blocks.removeClass('active');
     // Инициализация
     $blocks.filter('[data-chaos="' + key + '"]').addClass('active');
    var $activeBtn = $buttons.filter('.active').first();
     if ($activeBtn.length) {
      activate($activeBtn.data('chaos'), $activeBtn);
    } else {
      activate($buttons.first().data('chaos'), $buttons.first());
    }


     applyPanelFrom($btn);
     // Клики
    $buttons.off('click.hjChaos').on('click.hjChaos', function () {
      var $btn = $(this);
      activate($btn.data('chaos'), $btn);
    });
   });
   });
});
});

Версия от 09:45, 12 ноября 2025

// Переключение вкладок + синхронизация фона и карточек.
// Работает по каждому .hj-chaos-container отдельно.
mw.hook('wikipage.content').add(function ($root) {
  $root.find('.hj-chaos-container').each(function () {
    var $container = $(this);
    var $buttons   = $container.find('.hj-chaos-tab-button');
    var $blocks    = $container.find('.hj-chaos-block');

    if (!$buttons.length || !$blocks.length) return;

    function darken(rgb, k) {
      var m = (rgb || '').match(/\d+/g) || [17,17,17];
      var r = Math.round(m[0] * (1 - k));
      var g = Math.round(m[1] * (1 - k));
      var b = Math.round(m[2] * (1 - k));
      return 'rgb(' + r + ', ' + g + ', ' + b + ')';
    }

    function applyColors($btn, $block) {
      var bg = getComputedStyle($btn[0]).backgroundColor;
      // Панель
      $block.css('background-color', bg);
      // Карточки внутри активного блока — темнее панели
      var cardBg = darken(bg, 0.18);
      $block.find('.hj-rule-card').css('background-color', cardBg);
    }

    function activate(key, $btn) {
      $buttons.removeClass('active');
      $btn.addClass('active');

      $blocks.removeClass('active').hide();
      var $blk = $blocks.filter('[data-chaos="' + key + '"]').addClass('active').show();

      applyColors($btn, $blk);
    }

    // Инициализация
    var $activeBtn = $buttons.filter('.active').first();
    if ($activeBtn.length) {
      activate($activeBtn.data('chaos'), $activeBtn);
    } else {
      activate($buttons.first().data('chaos'), $buttons.first());
    }

    // Клики
    $buttons.off('click.hjChaos').on('click.hjChaos', function () {
      var $btn = $(this);
      activate($btn.data('chaos'), $btn);
    });
  });
});