MediaWiki:Common.js: различия между версиями
Mei Day (обсуждение | вклад) Нет описания правки |
Mei Day (обсуждение | вклад) Нет описания правки |
||
| Строка 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 | 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 { | ||
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); | ||
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);
});
});
});