commentary:
поправил отображение колонок для левого спортсмена в сезон/карьера и добавил галочки отображения нужных колонок
This commit is contained in:
128
get_data.py
128
get_data.py
@@ -4177,6 +4177,11 @@ async def commentary():
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<title>Комментаторский дашборд</title>
|
<title>Комментаторский дашборд</title>
|
||||||
<style>
|
<style>
|
||||||
|
.cmp-head th {{
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: middle;
|
||||||
|
white-space: nowrap;
|
||||||
|
}}
|
||||||
/* подсветка ячеек PTS/Foul при обновлении (5 секунд) */
|
/* подсветка ячеек PTS/Foul при обновлении (5 секунд) */
|
||||||
.cell-updated {{
|
.cell-updated {{
|
||||||
background-color: #00ff00 !important;
|
background-color: #00ff00 !important;
|
||||||
@@ -4965,29 +4970,39 @@ function renderPlayerHeader(p) {{
|
|||||||
html += renderPlayerHeader(rightP || {{}});
|
html += renderPlayerHeader(rightP || {{}});
|
||||||
html += "</div>";
|
html += "</div>";
|
||||||
|
|
||||||
|
html += "<div class='compare-cols-controls' style='margin:8px 0 10px;display:flex;flex-wrap:wrap;gap:12px;align-items:center;'>";
|
||||||
|
html += " <span style='color:#bbb;'>Колонки:</span>";
|
||||||
|
html += " <label><input type='checkbox' class='cmp-col-toggle' data-col='cTot'> Карьера тотал</label>";
|
||||||
|
html += " <label><input type='checkbox' class='cmp-col-toggle' data-col='cAvg'> Карьера сред.</label>";
|
||||||
|
html += " <label><input type='checkbox' class='cmp-col-toggle' data-col='sTot'> Сезон тотал</label>";
|
||||||
|
html += " <label><input type='checkbox' class='cmp-col-toggle' data-col='sAvg'> Сезон сред.</label>";
|
||||||
|
html += "</div>";
|
||||||
|
|
||||||
// --- СТАРАЯ таблица: 4 колонки слева + 4 справа ---
|
// --- СТАРАЯ таблица: 4 колонки слева + 4 справа ---
|
||||||
html += "<table class='details-wide-table' style='width:100%;border-collapse:collapse;'>";
|
html += "<table class='details-wide-table' style='width:100%;border-collapse:collapse;'>";
|
||||||
|
|
||||||
// шапка таблицы
|
// шапка таблицы
|
||||||
html += "<thead>";
|
html += "<thead class='cmp-head'>";
|
||||||
html += "<tr>";
|
html += "<tr>";
|
||||||
html += "<th colspan='4' style='text-align:center;border-bottom:2px solid #333;'>Левый игрок</th>";
|
html += "<th id='cmp-left-title' colspan='4' style='text-align:center;border-bottom:2px solid #333;'>Левый игрок</th>";
|
||||||
html += "<th></th>";
|
html += "<th></th>";
|
||||||
html += "<th colspan='4' style='text-align:center;border-bottom:2px solid #333;'>Правый игрок</th>";
|
html += "<th id='cmp-right-title' colspan='4' style='text-align:center;border-bottom:2px solid #333;'>Правый игрок</th>";
|
||||||
html += "</tr>";
|
html += "</tr>";
|
||||||
|
|
||||||
html += "<tr>";
|
html += "<tr>";
|
||||||
html += "<th>Сезон (сред.)</th>";
|
// ЛЕВЫЙ (порядок: Карьера тотал, Карьера сред, Сезон тотал, Сезон сред)
|
||||||
html += "<th>Сезон (тотал)</th>";
|
html += "<th class='cmp-col col-cTot'>Карьера (тотал)</th>";
|
||||||
html += "<th>Карьера (сред.)</th>";
|
html += "<th class='cmp-col col-cAvg'>Карьера (сред.)</th>";
|
||||||
html += "<th>Карьера (тотал)</th>";
|
html += "<th class='cmp-col col-sTot'>Сезон (тотал)</th>";
|
||||||
|
html += "<th class='cmp-col col-sAvg'>Сезон (сред.)</th>";
|
||||||
|
|
||||||
html += "<th>Показатель</th>";
|
html += "<th>Показатель</th>";
|
||||||
|
|
||||||
html += "<th>Сезон (сред.)</th>";
|
// ПРАВЫЙ (можешь оставить свой порядок или сделать такой же — не важно для скрытия)
|
||||||
html += "<th>Сезон (тотал)</th>";
|
html += "<th class='cmp-col col-sAvg'>Сезон (сред.)</th>";
|
||||||
html += "<th>Карьера (сред.)</th>";
|
html += "<th class='cmp-col col-sTot'>Сезон (тотал)</th>";
|
||||||
html += "<th>Карьера (тотал)</th>";
|
html += "<th class='cmp-col col-cAvg'>Карьера (сред.)</th>";
|
||||||
|
html += "<th class='cmp-col col-cTot'>Карьера (тотал)</th>";
|
||||||
html += "</tr>";
|
html += "</tr>";
|
||||||
html += "</thead>";
|
html += "</thead>";
|
||||||
|
|
||||||
@@ -5000,20 +5015,21 @@ function renderPlayerHeader(p) {{
|
|||||||
|
|
||||||
html += "<tr>";
|
html += "<tr>";
|
||||||
|
|
||||||
// левый
|
// левый (тот же порядок что в шапке)
|
||||||
html += "<td style='text-align:center;'>" + safe(L.sAvg) + "</td>";
|
html += "<td class='cmp-col col-cTot' style='text-align:center;'>" + safe(L.cTot) + "</td>";
|
||||||
html += "<td style='text-align:center;'>" + safe(L.sTot) + "</td>";
|
html += "<td class='cmp-col col-cAvg' style='text-align:center;'>" + safe(L.cAvg) + "</td>";
|
||||||
html += "<td style='text-align:center;'>" + safe(L.cAvg) + "</td>";
|
html += "<td class='cmp-col col-sTot' style='text-align:center;'>" + safe(L.sTot) + "</td>";
|
||||||
html += "<td style='text-align:center;'>" + safe(L.cTot) + "</td>";
|
html += "<td class='cmp-col col-sAvg' style='text-align:center;'>" + safe(L.sAvg) + "</td>";
|
||||||
|
|
||||||
// показатель
|
// показатель
|
||||||
html += "<td style='text-align:center;font-weight:600;'>" + safe(base[i].label || "") + "</td>";
|
html += "<td style='text-align:center;font-weight:600;'>" + safe(base[i].label || "") + "</td>";
|
||||||
|
|
||||||
// правый
|
// правый (как у тебя было)
|
||||||
html += "<td style='text-align:center;'>" + safe(R.sAvg) + "</td>";
|
html += "<td class='cmp-col col-sAvg' style='text-align:center;'>" + safe(R.sAvg) + "</td>";
|
||||||
html += "<td style='text-align:center;'>" + safe(R.sTot) + "</td>";
|
html += "<td class='cmp-col col-sTot' style='text-align:center;'>" + safe(R.sTot) + "</td>";
|
||||||
html += "<td style='text-align:center;'>" + safe(R.cAvg) + "</td>";
|
html += "<td class='cmp-col col-cAvg' style='text-align:center;'>" + safe(R.cAvg) + "</td>";
|
||||||
html += "<td style='text-align:center;'>" + safe(R.cTot) + "</td>";
|
html += "<td class='cmp-col col-cTot' style='text-align:center;'>" + safe(R.cTot) + "</td>";
|
||||||
|
|
||||||
|
|
||||||
html += "</tr>";
|
html += "</tr>";
|
||||||
}}
|
}}
|
||||||
@@ -5029,10 +5045,80 @@ function renderPlayerHeader(p) {{
|
|||||||
// Всегда рисуем вертикальную сравнительную таблицу.
|
// Всегда рисуем вертикальную сравнительную таблицу.
|
||||||
// Если один из игроков не выбран — его половина будет пустой.
|
// Если один из игроков не выбран — его половина будет пустой.
|
||||||
details.innerHTML = renderPlayersComparison(selectedLeft, selectedRight);
|
details.innerHTML = renderPlayersComparison(selectedLeft, selectedRight);
|
||||||
|
if (window.applyCompareColsUI) window.applyCompareColsUI();
|
||||||
}} else {{
|
}} else {{
|
||||||
details.innerHTML = '<div class="meta">Кликни по фамилии игрока, чтобы показать сезон/карьеру.</div>';
|
details.innerHTML = '<div class="meta">Кликни по фамилии игрока, чтобы показать сезон/карьеру.</div>';
|
||||||
}}
|
}}
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
function getCompareColsState() {{
|
||||||
|
// по умолчанию все включены
|
||||||
|
var def = {{ cTot: true, cAvg: true, sTot: true, sAvg: true }};
|
||||||
|
try {{
|
||||||
|
var raw = localStorage.getItem("commentary_compare_cols");
|
||||||
|
if (!raw) return def;
|
||||||
|
var obj = JSON.parse(raw);
|
||||||
|
return Object.assign(def, obj || {{}});
|
||||||
|
}} catch (e) {{
|
||||||
|
return def;
|
||||||
|
}}
|
||||||
|
}}
|
||||||
|
|
||||||
|
function saveCompareColsState(state) {{
|
||||||
|
localStorage.setItem("commentary_compare_cols", JSON.stringify(state || {{}}));
|
||||||
|
}}
|
||||||
|
|
||||||
|
function applyCompareColsUI() {{
|
||||||
|
// навешиваем чекбоксы и применяем видимость колонок
|
||||||
|
var state = getCompareColsState();
|
||||||
|
|
||||||
|
// синхронизируем чекбоксы
|
||||||
|
var toggles = document.querySelectorAll(".cmp-col-toggle");
|
||||||
|
for (var i = 0; i < toggles.length; i++) {{
|
||||||
|
var cb = toggles[i];
|
||||||
|
var key = cb.getAttribute("data-col");
|
||||||
|
cb.checked = !!state[key];
|
||||||
|
cb.onchange = function () {{
|
||||||
|
var k = this.getAttribute("data-col");
|
||||||
|
var s = getCompareColsState();
|
||||||
|
s[k] = !!this.checked;
|
||||||
|
saveCompareColsState(s);
|
||||||
|
applyCompareColsVisibility(s);
|
||||||
|
}};
|
||||||
|
}}
|
||||||
|
|
||||||
|
applyCompareColsVisibility(state);
|
||||||
|
}}
|
||||||
|
|
||||||
|
function applyCompareColsVisibility(state) {{
|
||||||
|
state = state || getCompareColsState();
|
||||||
|
|
||||||
|
// 1) скрыть/показать сами th/td
|
||||||
|
["cTot","cAvg","sTot","sAvg"].forEach(function (k) {{
|
||||||
|
var show = !!state[k];
|
||||||
|
var els = document.querySelectorAll(".cmp-col.col-" + k);
|
||||||
|
for (var i = 0; i < els.length; i++) {{
|
||||||
|
els[i].style.display = show ? "table-cell" : "none";
|
||||||
|
}}
|
||||||
|
}});
|
||||||
|
|
||||||
|
// 2) поправить colspan у "Левый/Правый"
|
||||||
|
var visibleCount = ["cTot","cAvg","sTot","sAvg"].reduce(function (acc, k) {{
|
||||||
|
return acc + (state[k] ? 1 : 0);
|
||||||
|
}}, 0);
|
||||||
|
|
||||||
|
// чтобы совсем не схлопывалось, если всё сняли
|
||||||
|
if (visibleCount < 1) visibleCount = 1;
|
||||||
|
|
||||||
|
var leftTitle = document.getElementById("cmp-left-title");
|
||||||
|
var rightTitle = document.getElementById("cmp-right-title");
|
||||||
|
if (leftTitle) leftTitle.colSpan = visibleCount;
|
||||||
|
if (rightTitle) rightTitle.colSpan = visibleCount;
|
||||||
|
}}
|
||||||
|
|
||||||
|
// чтобы можно было вызвать после перерендера
|
||||||
|
window.applyCompareColsUI = applyCompareColsUI;
|
||||||
|
|
||||||
|
|
||||||
// выбор/снятие выбора игрока
|
// выбор/снятие выбора игрока
|
||||||
function selectPlayer(teamKey, pid, noScroll, noSave) {{
|
function selectPlayer(teamKey, pid, noScroll, noSave) {{
|
||||||
|
|||||||
Reference in New Issue
Block a user