From ecc461a53b98a04e0063e7acc377a75bb4007a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=AE=D1=80=D0=B8=D0=B9=20=D0=A7=D0=B5=D1=80=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BA=D0=BE?= Date: Thu, 27 Aug 2026 10:44:05 +0300 Subject: [PATCH] =?UTF-8?q?BUILD127=20=E2=80=94=20=D0=BD=D0=BE=D0=B2=D1=8B?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=BE=D1=80=D1=8F=D0=B4=D0=BE=D0=BA=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=85=D0=BD=D0=B8=D1=85=20=D0=B2=D0=BA=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BE=D0=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app.py | 2 +- ui_builder/static/app.js | 27 ++++++++++++++++++--------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app.py b/app.py index a9094de..d06deed 100644 --- a/app.py +++ b/app.py @@ -29,7 +29,7 @@ from ui_builder import install_ui_builder from khl_site.khl_data_center import APP as khl_site_app BASE_DIR = Path(__file__).resolve().parent -BUILD_VERSION = "2026.08.27.2" +BUILD_VERSION = "2026.08.27.3" # compatibility: BUILD_VERSION = "2026.08.26.1" # compatibility: BUILD_VERSION = "2026.08.25.1" # compatibility: BUILD_VERSION = "2026.08.24.15" diff --git a/ui_builder/static/app.js b/ui_builder/static/app.js index 9af7586..b2c6745 100644 --- a/ui_builder/static/app.js +++ b/ui_builder/static/app.js @@ -783,7 +783,7 @@ project_name: "Хоккей — назначения удалений", data_source: "vmix_demo", canvas: { ...state.config.canvas, width: 1440, height: 760, background: "#060d17", show_grid: true, snap_enabled: true }, - tabs: [{ id: "main", label: "Игра" }, { id: "shootout", label: "Буллиты" }, { id: "referees", label: "Судьи" }, { id: "statistics", label: "Статистика" }, { id: "schedule", label: "Расписание" }, { id: "standings", label: "Турнирная таблица" }], + tabs: [{ id: "main", label: "Игра" }, { id: "lines", label: "Пятёрки" }, { id: "referees", label: "Судьи" }, { id: "statistics", label: "Статистика" }, { id: "standings", label: "Турнирная таблица" }, { id: "shootout", label: "Буллиты" }, { id: "prepared_titles", label: "Заготовки" }], components: [gameTimer, board, shootout, referees, statistics, schedule, standings], triggers: [] }; @@ -2594,14 +2594,23 @@ function startCustomTooltips() { state.config.tabs = (Array.isArray(state.config.tabs) ? state.config.tabs : []).filter((tab) => tab?.id !== "prematch"); state.config.components = components.filter((component) => component?.type !== "hockey_prematch_panel" && component?.action_id !== "hockey_prematch_panel"); if (!state.config.tabs.length) state.config.tabs = [{ id: "main", label: "Игра" }]; - // BUILD86: "Заготовки" is always the final top-level runtime tab. - // Reorder it on every config normalisation as older published configs may - // already contain the tab near "Игра" from BUILD84/85. - state.config.tabs = state.config.tabs.filter((tab) => !["lines", "prepared_titles"].includes(tab?.id)); - // BUILD122: line/five sorting is a first-class operator workspace. - state.config.tabs.push({ id: "lines", label: "Пятёрки" }); - state.config.tabs.push({ id: "prepared_titles", label: "Заготовки" }); - if (state.activeTab === "prematch") state.activeTab = state.config.tabs.find((tab) => tab.id === "main")?.id || state.config.tabs[0].id; + // BUILD127: canonical top-level hockey tab order. + // Keep the underlying schedule component/data intact, but do not expose the + // legacy Schedule tab in the operator top navigation. + const hockeyTopTabs = [ + { id: "main", label: "Игра" }, + { id: "lines", label: "Пятёрки" }, + { id: "referees", label: "Судьи" }, + { id: "statistics", label: "Статистика" }, + { id: "standings", label: "Турнирная таблица" }, + { id: "shootout", label: "Буллиты" }, + { id: "prepared_titles", label: "Заготовки" }, + ]; + const existingTabsById = new Map(state.config.tabs.map((tab) => [String(tab?.id || ""), tab])); + state.config.tabs = hockeyTopTabs.map((tab) => ({ ...(existingTabsById.get(tab.id) || {}), ...tab })); + if (!state.config.tabs.some((tab) => tab.id === state.activeTab)) { + state.activeTab = state.config.tabs.find((tab) => tab.id === "main")?.id || state.config.tabs[0].id; + } } function ensureConfig() {