6369
редагувань
Admin (обговорення | внесок) Немає опису редагування Мітка: Ручний відкіт |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 317: | Рядок 317: | ||
// ============================================================ | // ============================================================ | ||
function injectGamesFilters($container, $table) { | function injectGamesFilters($container, $table) { | ||
if (!$table || !$table.length) return; | |||
// Шукаємо таблицю якщо передали контейнер без таблиці | |||
if (!$table.is('table')) { | |||
$table = $container.find('table.wikitable, table.sortable').first(); | |||
} | |||
if (!$table.length) return; | if (!$table.length) return; | ||
// Не додаємо двічі | |||
if ($container.find('.mcc-games-filters').length) return; | if ($container.find('.mcc-games-filters').length) return; | ||
// Збираємо події з першої колонки | |||
var events = []; | var events = []; | ||
$table.find('tbody tr').each(function () { | $table.find('tbody tr:visible, tbody tr').each(function () { | ||
var ev = $(this).find('td').eq(0).text().trim(); | var ev = $(this).find('td').eq(0).text().trim(); | ||
if (ev && events.indexOf(ev) === -1) events.push(ev); | if (ev && events.indexOf(ev) === -1) events.push(ev); | ||
}); | }); | ||
var opts = '<option value="">Всі події</option>'; | var opts = '<option value="">Всі події</option>'; | ||
events.forEach(function (e) { opts += '<option value="' + e + '">' + e + '</option>'; }); | events.slice(0, 30).forEach(function (e) { | ||
opts += '<option value="' + $('<div>').text(e).html() + '">' + $('<div>').text(e).html() + '</option>'; | |||
}); | |||
var filtersHtml = | |||
'<div class="mcc-games-filters">' | '<div class="mcc-games-filters">' | ||
+ '<div class="mcc-filter-group"><span class="mcc-filter-label">Подія</span>' | + '<div class="mcc-filter-group">' | ||
+ '<select class="mcc-filter-select" id="mcc-f-event">' + opts + '</select></div>' | + '<span class="mcc-filter-label">Подія</span>' | ||
+ '<div class="mcc-filter-group"><span class="mcc-filter-label">Роль</span>' | + '<select class="mcc-filter-select" id="mcc-f-event">' + opts + '</select>' | ||
+ '</div>' | |||
+ '<div class="mcc-filter-group">' | |||
+ '<span class="mcc-filter-label">Роль</span>' | |||
+ '<select class="mcc-filter-select" id="mcc-f-role">' | + '<select class="mcc-filter-select" id="mcc-f-role">' | ||
+ | + '<option value="">Всі ролі</option>' | ||
+ | + '<option value="Мир">Мирний</option>' | ||
+ | + '<option value="Шер">Шериф</option>' | ||
+ '<div class="mcc-filter-group"><span class="mcc-filter-label">Результат</span>' | + '<option value="Маф">Мафія</option>' | ||
+ '<option value="Дон">Дон</option>' | |||
+ '</select>' | |||
+ '</div>' | |||
+ '<div class="mcc-filter-group">' | |||
+ '<span class="mcc-filter-label">Результат</span>' | |||
+ '<select class="mcc-filter-select" id="mcc-f-result">' | + '<select class="mcc-filter-select" id="mcc-f-result">' | ||
+ | + '<option value="">Всі</option>' | ||
+ | + '<option value="В">Перемога</option>' | ||
+ '<option value="П">Поразка</option>' | |||
+ '</select>' | |||
+ '</div>' | |||
+ '<div class="mcc-filter-group mcc-duration-group">' | + '<div class="mcc-filter-group mcc-duration-group">' | ||
+ '<span class="mcc-filter-label">Макс. тривалість</span>' | + '<span class="mcc-filter-label">Макс. тривалість</span>' | ||
+ '<div class="mcc-slider-wrap">' | + '<div class="mcc-slider-wrap">' | ||
+ '<input type="range" class="mcc-duration-range" id="mcc-f-dur" min="20" max=" | + '<input type="range" class="mcc-duration-range" id="mcc-f-dur" min="20" max="75" value="75" step="1">' | ||
+ '<span class="mcc-slider-val" id="mcc-dur-val"> | + '<span class="mcc-slider-val" id="mcc-dur-val">75:00</span>' | ||
+ '</div></div>' | + '</div>' | ||
+ '</div>' | |||
+ '<span class="mcc-filter-count" id="mcc-games-count"></span>' | + '<span class="mcc-filter-count" id="mcc-games-count"></span>' | ||
+ '</div>' | + '</div>'; | ||
); | |||
// Вставляємо ПЕРЕД таблицею (або перед mcc-scroll-outer якщо вже загорнута) | |||
var $scrollOuter = $table.closest('.mcc-scroll-outer'); | |||
if ($scrollOuter.length) { | |||
$scrollOuter.before(filtersHtml); | |||
} else { | |||
$table.before(filtersHtml); | |||
} | |||
// ── Логіка фільтрації ── | |||
function toMins(s) { | function toMins(s) { | ||
s = (s || '').trim(); | s = (s || '').trim(); | ||
| Рядок 360: | Рядок 392: | ||
return 999; | return 999; | ||
} | } | ||
function | function applyFilters() { | ||
var ev = $('#mcc-f-event').val(); | var ev = $('#mcc-f-event').val(); | ||
var rol = $('#mcc-f-role').val(); | var rol = $('#mcc-f-role').val(); | ||
var res = $('#mcc-f-result').val(); | var res = $('#mcc-f-result').val(); | ||
var dur = +$('#mcc-f-dur').val(); | var dur = +$('#mcc-f-dur').val(); | ||
var n = 0; | var n = 0; | ||
$table.find('tbody tr').each(function () { | $table.find('tbody tr').each(function () { | ||
var | var $tds = $(this).find('td'); | ||
var | var evVal = $tds.eq(0).text().trim(); | ||
&& (!rol || | var roleVal = $tds.eq(1).text().trim(); | ||
&& (!res || | var timeVal = $tds.eq(2).text().trim(); | ||
&& toMins( | var resVal = $tds.eq(3).text().trim(); | ||
var show = (!ev || evVal.indexOf(ev) !== -1) | |||
&& (!rol || roleVal.indexOf(rol) !== -1) | |||
&& (!res || resVal.indexOf(res) !== -1) | |||
&& toMins(timeVal) <= dur; | |||
$(this).toggle(show); | $(this).toggle(show); | ||
if (show) n++; | if (show) n++; | ||
}); | }); | ||
$('#mcc-games-count').text(n + ' ігор'); | $('#mcc-games-count').text(n + ' ігор'); | ||
} | } | ||
// Slider | |||
$('#mcc-f-dur').on('input', function () { | $('#mcc-f-dur').on('input', function () { | ||
var v = +$(this).val(); | var v = +$(this).val(); | ||
$('#mcc-dur-val').text(v + ':00'); | $('#mcc-dur-val').text(v + ':00'); | ||
$(this).css('background-size', ((v - 20) / | $(this).css('background-size', ((v - 20) / 55 * 100) + '% 100%'); | ||
applyFilters(); | |||
}); | }); | ||
$ | // Dropdowns | ||
$(document).on('change', '#mcc-f-event, #mcc-f-role, #mcc-f-result', applyFilters); | |||
// Початковий стан | |||
var total = $table.find('tbody tr').length; | var total = $table.find('tbody tr').length; | ||
$('#mcc-games-count').text(total + ' ігор'); | $('#mcc-games-count').text(total + ' ігор'); | ||
$('#mcc-f-dur').css('background-size', '100% 100%'); | $('#mcc-f-dur').css('background-size', '100% 100%'); | ||
} | } | ||
// ============================================================ | // ============================================================ | ||
// 8. ROLE PILLS | // 8. ROLE PILLS | ||