6369
редагувань
Admin (обговорення | внесок) Немає опису редагування |
Admin (обговорення | внесок) Немає опису редагування |
||
| Рядок 317: | Рядок 317: | ||
// ============================================================ | // ============================================================ | ||
function injectGamesFilters($container, $table) { | function injectGamesFilters($container, $table) { | ||
if (!$table.length) return; | // Robust table search | ||
if ($container.find('.mcc-games-filters').length) return; | if (!$table || !$table.length) { | ||
$table = $container.find('table').first(); | |||
} | |||
if (!$table.length) { return; } | |||
// Don't add twice | |||
if ($container.find('.mcc-games-filters').length) { return; } | |||
// Collect unique events from column 0 | |||
var events = []; | var events = []; | ||
$table.find('tbody tr').each(function () { | $table.find('tbody tr').each(function () { | ||
| Рядок 327: | Рядок 334: | ||
var opts = '<option value="">Всі події</option>'; | var opts = '<option value="">Всі події</option>'; | ||
events.forEach(function (e) { opts += '<option value="' + e + '">' + e + '</option>'; }); | events.slice(0, 60).forEach(function (e) { | ||
opts += '<option value="' + e + '">' + e + '</option>'; | |||
}); | |||
var $filters = $('<div class="mcc-games-filters">' | |||
var $ | |||
+ '<div class="mcc-filter-group"><span class="mcc-filter-label">Подія</span>' | + '<div class="mcc-filter-group"><span class="mcc-filter-label">Подія</span>' | ||
+ '<select class="mcc-filter-select | + '<select class="mcc-filter-select mcc-fe">' + opts + '</select></div>' | ||
+ '<div class="mcc-filter-group"><span class="mcc-filter-label">Роль</span>' | + '<div class="mcc-filter-group"><span class="mcc-filter-label">Роль</span>' | ||
+ '<select class="mcc-filter-select | + '<select class="mcc-filter-select mcc-fr">' | ||
+ '<option value="">Всі ролі</option><option value="Мир">Мирний</option>' | + '<option value="">Всі ролі</option><option value="Мир">Мирний</option>' | ||
+ '<option value="Шер">Шериф</option><option value="Маф">Мафія</option>' | + '<option value="Шер">Шериф</option><option value="Маф">Мафія</option>' | ||
+ '<option value="Дон">Дон</option></select></div>' | + '<option value="Дон">Дон</option></select></div>' | ||
+ '<div class="mcc-filter-group"><span class="mcc-filter-label">Результат</span>' | + '<div class="mcc-filter-group"><span class="mcc-filter-label">Результат</span>' | ||
+ '<select class="mcc-filter-select | + '<select class="mcc-filter-select mcc-frr">' | ||
+ '<option value="">Всі</option><option value="В">Перемога</option>' | + '<option value="">Всі</option>' | ||
+ '<option value="В">Перемога</option>' | |||
+ '<option value="П">Поразка</option></select></div>' | + '<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 | + '<input type="range" class="mcc-duration-range mcc-dur-range" min="20" max="75" value="75" step="1">' | ||
+ '<span class="mcc-slider-val | + '<span class="mcc-slider-val mcc-dur-val">75:00</span>' | ||
+ '</div></div>' | + '</div></div>' | ||
+ '<span class="mcc-filter-count | + '<span class="mcc-filter-count mcc-fcount"></span>' | ||
+ '</div>' | + '</div>'); | ||
); | |||
// Insert: before scroll-outer wrapper if exists, else before table | |||
var $wrap = $table.closest('.mcc-scroll-outer'); | |||
($wrap.length ? $wrap : $table).before($filters); | |||
function toMins(s) { | function toMins(s) { | ||
s = (s || '').trim(); | s = (s || '').trim(); | ||
var m1 = s.match(/^(\d+):(\d+)$/); | 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; | |||
var m2 = s.match(/(\d+)\s*хв\s*(\d+)/); | |||
return 999; | return 999; | ||
} | } | ||
function | function doFilter() { | ||
var ev = $ | var ev = $filters.find('.mcc-fe').val(); | ||
var rol = $ | var rol = $filters.find('.mcc-fr').val(); | ||
var res = $ | var res = $filters.find('.mcc-frr').val(); | ||
var dur = +$ | var dur = +$filters.find('.mcc-dur-range').val(); | ||
var n = 0; | var n = 0; | ||
$table.find('tbody tr').each(function () { | $table.find('tbody tr').each(function () { | ||
var td = $(this).find('td'); | var td = $(this).find('td'); | ||
var show = (!ev || td.eq(0).text().trim().indexOf(ev) !== -1) | var show = (!ev || td.eq(0).text().trim().indexOf(ev) !== -1) | ||
&& (!rol || td.eq(1).text().trim().indexOf(rol) !== -1) | && (!rol || td.eq(1).text().trim().indexOf(rol) !== -1) | ||
| Рядок 379: | Рядок 386: | ||
if (show) n++; | if (show) n++; | ||
}); | }); | ||
$ | $filters.find('.mcc-fcount').text(n + '\u00a0ігор'); | ||
} | } | ||
$ | $filters.find('.mcc-dur-range').on('input', function () { | ||
var v = +$(this).val(); | var v = +$(this).val(); | ||
$ | $filters.find('.mcc-dur-val').text(v + ':00'); | ||
$(this).css('background-size', ((v - 20) / | $(this).css('background-size', ((v - 20) / 55 * 100) + '% 100%'); | ||
doFilter(); | |||
}); | }); | ||
$ | $filters.find('select').on('change', doFilter); | ||
$filters.find('.mcc-fcount').text($table.find('tbody tr').length + '\u00a0ігор'); | |||
$filters.find('.mcc-dur-range').css('background-size', '100% 100%'); | |||
$ | |||
} | } | ||