6369
редагувань
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 288: | Рядок 288: | ||
$content.data('loaded', true); | $content.data('loaded', true); | ||
setTimeout(function () { | setTimeout(function () { | ||
var $table = $content.find('table').first(); | var $table = $content.find('table').first(); | ||
| Рядок 298: | Рядок 297: | ||
applyRolePills($content); | applyRolePills($content); | ||
wrapWideTables($content); | wrapWideTables($content); | ||
// Inject filters directly at top of content | |||
if (!$content.find('.mcc-games-filters').length) { | |||
buildGamesFilters($content, $table); | |||
} | |||
$(document).trigger('mcc:content-loaded'); | $(document).trigger('mcc:content-loaded'); | ||
}, | }, 100); | ||
}, | }, | ||
error: function () { | error: function () { | ||
| Рядок 321: | Рядок 324: | ||
// ============================================================ | // ============================================================ | ||
// 7. ФІЛЬТРИ НАД ТАБЛИЦЕЮ ІГОР | // 7. ФІЛЬТРИ НАД ТАБЛИЦЕЮ ІГОР | ||
// ============================================================ | |||
// 7b. BUILD GAMES FILTERS — простий надійний варіант | |||
// Завжди вставляє фільтри на початок $container | |||
// ============================================================ | |||
function buildGamesFilters($container, $table) { | |||
// Collect events | |||
var events = []; | |||
if ($table && $table.length) { | |||
$table.find('tbody tr').each(function () { | |||
var ev = $(this).find('td').eq(0).text().trim(); | |||
if (ev && events.indexOf(ev) === -1) events.push(ev); | |||
}); | |||
} | |||
var opts = '<option value="">Всі події</option>'; | |||
events.forEach(function (e) { | |||
opts += '<option value="' + e + '">' + e + '</option>'; | |||
}); | |||
// Build filter bar and PREPEND to container | |||
var $bar = $([ | |||
'<div class="mcc-games-filters" style="display:flex">', | |||
'<div class="mcc-filter-group">', | |||
' <span class="mcc-filter-label">Подія</span>', | |||
' <select class="mcc-filter-select mcc-fe">' + opts + '</select>', | |||
'</div>', | |||
'<div class="mcc-filter-group">', | |||
' <span class="mcc-filter-label">Роль</span>', | |||
' <select class="mcc-filter-select mcc-fr">', | |||
' <option value="">Всі ролі</option>', | |||
' <option value="Мир">Мирний</option>', | |||
' <option value="Шер">Шериф</option>', | |||
' <option value="Маф">Мафія</option>', | |||
' <option value="Дон">Дон</option>', | |||
' </select>', | |||
'</div>', | |||
'<div class="mcc-filter-group">', | |||
' <span class="mcc-filter-label">Результат</span>', | |||
' <select class="mcc-filter-select mcc-frr">', | |||
' <option value="">Всі</option>', | |||
' <option value="В">Перемога</option>', | |||
' <option value="П">Поразка</option>', | |||
' </select>', | |||
'</div>', | |||
'<div class="mcc-filter-group mcc-duration-group">', | |||
' <span class="mcc-filter-label">Макс. тривалість</span>', | |||
' <div class="mcc-slider-wrap">', | |||
' <input type="range" class="mcc-duration-range mcc-dur-rng" min="20" max="75" value="75" step="1">', | |||
' <span class="mcc-slider-val mcc-dur-v">75:00</span>', | |||
' </div>', | |||
'</div>', | |||
'<span class="mcc-filter-count mcc-fcnt"></span>', | |||
'</div>' | |||
].join('')); | |||
// Prepend to tab content (always visible, before any table) | |||
$container.prepend($bar); | |||
if (!$table || !$table.length) return; | |||
function toMins(s) { | |||
s = (s || '').trim(); | |||
var m1 = s.match(/^(\d+):(\d+)$/); if (m1) return +m1[1] + +m1[2]/60; | |||
var m2 = s.match(/(\d+)\s*хв\s*(\d+)/); if (m2) return +m2[1] + +m2[2]/60; | |||
return 999; | |||
} | |||
function doFilter() { | |||
var ev = $bar.find('.mcc-fe').val(); | |||
var rol = $bar.find('.mcc-fr').val(); | |||
var res = $bar.find('.mcc-frr').val(); | |||
var dur = +$bar.find('.mcc-dur-rng').val(); | |||
var n = 0; | |||
$table.find('tbody tr').each(function () { | |||
var td = $(this).find('td'); | |||
var show = (!ev || td.eq(0).text().trim().indexOf(ev) !== -1) | |||
&& (!rol || td.eq(1).text().trim().indexOf(rol) !== -1) | |||
&& (!res || td.eq(3).text().trim().indexOf(res) !== -1) | |||
&& toMins(td.eq(2).text()) <= dur; | |||
$(this).toggle(show); | |||
if (show) n++; | |||
}); | |||
$bar.find('.mcc-fcnt').text(n + '\u00a0ігор'); | |||
} | |||
$bar.find('.mcc-dur-rng').on('input', function () { | |||
var v = +$(this).val(); | |||
$bar.find('.mcc-dur-v').text(v + ':00'); | |||
$(this).css('background-size', ((v - 20) / 55 * 100) + '% 100%'); | |||
doFilter(); | |||
}); | |||
$bar.find('select').on('change', doFilter); | |||
$bar.find('.mcc-fcnt').text($table.find('tbody tr').length + '\u00a0ігор'); | |||
$bar.find('.mcc-dur-rng').css('background-size', '100% 100%'); | |||
} | |||
// ============================================================ | // ============================================================ | ||
function injectGamesFilters($container, $table) { | function injectGamesFilters($container, $table) { | ||
| Рядок 542: | Рядок 641: | ||
$(function () { | $(function () { | ||
function setRboxTop() { | function setRboxTop() { | ||
var | var $hdr = $('.header-container.header-chrome'); | ||
var h = $hdr.length ? $hdr[0].getBoundingClientRect().bottom : 64; | |||
h = Math.max(h, 56); | |||
$('.r-box, .tournament-box, .series-box').css('top', h + 'px'); | $('.r-box, .tournament-box, .series-box').css('top', h + 'px'); | ||
} | } | ||
setRboxTop | // Run after full paint | ||
setTimeout(setRboxTop, 0); | |||
$(window).on('resize', setRboxTop); | $(window).on('resize', setRboxTop); | ||
}); | }); | ||