From aeb89dbded1f54eb99b099dfd37cf12faf2d0ff0 Mon Sep 17 00:00:00 2001 From: ayurishchev Date: Sun, 27 Sep 2026 18:01:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D1=87=D0=B0=20040:=20?= =?UTF-8?q?=D0=BD=D0=B0=D0=B7=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B2=20UI?= =?UTF-8?q?=20=E2=80=94=20=C2=ABIPAM=20Manager=C2=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit В web/app.js три вхождения «ipam_manager» (шапка, экран входа и шаг 2FA) заменены на «IPAM Manager». Атомарная правка отдельным коммитом. Co-Authored-By: Claude Opus 5.5 --- README.md | 1 + docs/changes/040-brand-name/PLAN.md | 11 +++++++++++ docs/changes/040-brand-name/SUMMARY.md | 8 ++++++++ web/app.js | 6 +++--- 4 files changed, 23 insertions(+), 3 deletions(-) create mode 100644 docs/changes/040-brand-name/PLAN.md create mode 100644 docs/changes/040-brand-name/SUMMARY.md diff --git a/README.md b/README.md index 6b12a7d..d841a07 100644 --- a/README.md +++ b/README.md @@ -205,6 +205,7 @@ docker compose -p ipam_control_006 up -d --build && venv/bin/python -m pytest -q | 036 | Меню пользователя в шапке: логин с выпадающим списком | [план](docs/changes/036-user-menu/PLAN.md) · [итог](docs/changes/036-user-menu/SUMMARY.md) | | 037 | Двухфакторная аутентификация TOTP, по выбору пользователя | [план](docs/changes/037-totp-2fa/PLAN.md) · [итог](docs/changes/037-totp-2fa/SUMMARY.md) | | 038 | Тёмная тема UI | [план](docs/changes/038-dark-theme/PLAN.md) · [итог](docs/changes/038-dark-theme/SUMMARY.md) | +| 040 | Название в UI: «IPAM Manager» | [план](docs/changes/040-brand-name/PLAN.md) · [итог](docs/changes/040-brand-name/SUMMARY.md) | ## Отчёты ревью - [Ревью кодовой базы](docs/reviews/2026-09-26-codebase-review.md) (находки → изменения 011–023) diff --git a/docs/changes/040-brand-name/PLAN.md b/docs/changes/040-brand-name/PLAN.md new file mode 100644 index 0000000..ca9e5df --- /dev/null +++ b/docs/changes/040-brand-name/PLAN.md @@ -0,0 +1,11 @@ +# Название в UI: «IPAM Manager» (изменение 040) + +## Context +В `web/app.js` название приложения выводится как `ipam_manager` — в шапке и на экране входа (шаг пароля и шаг 2FA), всего 3 строки. +Нужно «IPAM Manager», как в ``, README и issuer TOTP. Атомарная правка, отдельный коммит. + +## Изменения +- `web/app.js`: `ipam_manager` → `IPAM Manager` во всех трёх местах; в `web/` и `app/` других вхождений нет. + +## Проверка +- `grep -c ipam_manager web/app.js` → 0; `node --check`; стенд отдаёт новый `app.js`. diff --git a/docs/changes/040-brand-name/SUMMARY.md b/docs/changes/040-brand-name/SUMMARY.md new file mode 100644 index 0000000..429285f --- /dev/null +++ b/docs/changes/040-brand-name/SUMMARY.md @@ -0,0 +1,8 @@ +# Итог: название в UI — «IPAM Manager» (изменение 040) + +План: `PLAN.md`. В `web/app.js` три вхождения `ipam_manager` (шапка, экран входа — шаг пароля и шаг 2FA) заменены на «IPAM Manager». +Других вхождений в `web/` и `app/` не было. + +## Проверки +- `grep -c ipam_manager web/app.js` → 0; `node --check web/app.js` — чисто. +- На стенде появится при ближайшей пересборке (вместе с изменением 039). diff --git a/web/app.js b/web/app.js index 92f5732..bcfdc94 100644 --- a/web/app.js +++ b/web/app.js @@ -160,7 +160,7 @@ function shell(active, content) { { label: "Светлая", value: "light", cls: curTheme === "light" ? "sel" : "" }, { label: "Тёмная", value: "dark", cls: curTheme === "dark" ? "sel" : "" }, ], "row-pop")}</span>`; - return `<div class="appbar"><div class="brand"><span class="brand-logo">${I.globe()}</span>ipam_manager</div> + return `<div class="appbar"><div class="brand"><span class="brand-logo">${I.globe()}</span>IPAM Manager</div> <nav class="nav">${nav.map(([k, l]) => `<a href="#/${k}" class="${k === active ? "active" : ""}">${l}</a>`).join("")}</nav> <div class="grow"></div><span style="display:flex;align-items:center;gap:8px">${themeBtn}${userMenu}</span></div> <div class="page">${content}</div>`; @@ -872,13 +872,13 @@ ${fInput("code", "Код из приложения или код восстан // ---- login function loginScreen(err = "") { if (pendingMfa) { - return `<div class="card login"><div class="brand"><span class="brand-logo">${I.globe()}</span>ipam_manager</div><h1>Вход</h1> + return `<div class="card login"><div class="brand"><span class="brand-logo">${I.globe()}</span>IPAM Manager</div><h1>Вход</h1> <form id="mfa-form"><div class="err-banner" style="margin-top:12px" ${err ? "" : "hidden"}>${esc(err)}</div> <label class="field"><span>Код из приложения или код восстановления</span><input class="input mono" name="code" autocomplete="one-time-code" autofocus></label> <button class="btn primary" type="submit">Подтвердить</button> <button class="btn ghost" type="button" data-action="mfa-back" style="margin-top:8px;width:100%">Назад</button></form></div>`; } - return `<div class="card login"><div class="brand"><span class="brand-logo">${I.globe()}</span>ipam_manager</div><h1>Вход</h1> + return `<div class="card login"><div class="brand"><span class="brand-logo">${I.globe()}</span>IPAM Manager</div><h1>Вход</h1> <form id="login-form"><div class="err-banner" style="margin-top:12px" ${err ? "" : "hidden"}>${esc(err)}</div> <label class="field"><span>Логин</span><input class="input" name="username" autocomplete="username" autofocus></label> <label class="field"><span>Пароль</span><input class="input" type="password" name="password" autocomplete="current-password"></label>