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

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

Материал из Horny Jail WIKI
Нет описания правки
Нет описания правки
Строка 8: Строка 8:


     if (!$buttons.length || !$blocks.length) return;
     if (!$buttons.length || !$blocks.length) return;
    // Жёсткая мапа цветов под режимы
    var COLORS = {
      overview: '#2f3b4d',
      calm:    '#234526',
      medium:  '#5c4716',
      high:    '#5c1f1f'
    };


     function darken(rgb, k) {
     function darken(rgb, k) {
Строка 18: Строка 26:


     function applyColors($btn, $block) {
     function applyColors($btn, $block) {
       var bg = getComputedStyle($btn[0]).backgroundColor;
       var key = $btn.data('chaos');
      var bg  = COLORS[key] || '#2f3b4d';


       // Фон блока = фон вкладки
       // Фон блока = цвет режима
       $block.css('background-color', bg);
       $block.css('background-color', bg);
       $container[0].style.setProperty('--hj-chaos-block-bg', bg);
       $container[0].style.setProperty('--hj-chaos-block-bg', bg);


       // Рамка = тот же цвет
       // Рамка того же цвета
       $container[0].style.setProperty('--hj-chaos-border', bg);
       $container[0].style.setProperty('--hj-chaos-border', bg);


       // Карточки — чуточку темнее
       // Карточки — чуть темнее
       var cardBg = darken(bg, 0.18);
       var cardBg = darken(bg, 0.18);
       $block.find('.hj-rule-card').css('background-color', cardBg);
       $block.find('.hj-rule-card').css('background-color', cardBg);
Строка 37: Строка 46:


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


       applyColors($btn, $blk);
       applyColors($btn, $blk);
Строка 47: Строка 59:
       activate($activeBtn.data('chaos'), $activeBtn);
       activate($activeBtn.data('chaos'), $activeBtn);
     } else {
     } else {
       activate($buttons.first().data('chaos'), $buttons.first());
       var $first = $buttons.first();
      activate($first.data('chaos'), $first);
     }
     }


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

Версия от 23:34, 15 ноября 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;

    // Жёсткая мапа цветов под режимы
    var COLORS = {
      overview: '#2f3b4d',
      calm:     '#234526',
      medium:   '#5c4716',
      high:     '#5c1f1f'
    };

    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 key = $btn.data('chaos');
      var bg  = COLORS[key] || '#2f3b4d';

      // Фон блока = цвет режима
      $block.css('background-color', bg);
      $container[0].style.setProperty('--hj-chaos-block-bg', bg);

      // Рамка того же цвета
      $container[0].style.setProperty('--hj-chaos-border', 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 {
      var $first = $buttons.first();
      activate($first.data('chaos'), $first);
    }

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