From 2da649d1ae930c1a671c62d080a7304d8b4d39e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B4=D1=80=D0=B5=D0=B9=20=D0=91=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=80=D0=B5=D0=B2?= Date: Fri, 22 May 2026 02:38:09 +0300 Subject: [PATCH] fix(keenetic): open KeenDNS edit instead of detail modal Card-level onclick fired even when KeenDNS was clicked. Use delegated handlers so the edit form toggles reliably and card clicks skip buttons. Co-authored-by: Cursor --- server/static/css/style.css | 30 ++++++++++++++-- server/static/js/app.js | 62 ++++++++++++++++++++++++++------- server/templates/dashboard.html | 2 +- 3 files changed, 78 insertions(+), 16 deletions(-) diff --git a/server/static/css/style.css b/server/static/css/style.css index d47f2f2..2074638 100644 --- a/server/static/css/style.css +++ b/server/static/css/style.css @@ -435,12 +435,36 @@ main { .keenetic-url-edit { margin-top: 10px; - padding-top: 10px; - border-top: 1px solid var(--border); + padding: 12px; + border: 1px solid var(--border); + border-radius: 8px; + background: color-mix(in srgb, var(--accent) 8%, var(--card-bg)); +} + +.keenetic-url-edit.is-open { + border-color: var(--accent); + box-shadow: 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent); +} + +.keenetic-url-edit-title { + font-size: 13px; + font-weight: 600; + margin-bottom: 8px; + color: var(--accent); } .keenetic-url-edit .form-group input { - font-size: 12px; + font-size: 13px; + width: 100%; +} + +.server-card-actions .keenetic-url-btn.active { + border-color: var(--accent); + color: var(--accent); +} + +.keenetic-card-open { + cursor: pointer; } .server-card-actions { diff --git a/server/static/js/app.js b/server/static/js/app.js index 510886a..93d2be3 100644 --- a/server/static/js/app.js +++ b/server/static/js/app.js @@ -40,6 +40,28 @@ document.addEventListener('click', function(e) { e.stopPropagation(); e.preventDefault(); toggleMuteDevice(bell); + return; + } + + const keenDnsBtn = e.target.closest('.keenetic-url-btn'); + if (keenDnsBtn) { + e.stopPropagation(); + e.preventDefault(); + toggleKeeneticUrlEdit(keenDnsBtn.dataset.name); + return; + } + + const keenSaveBtn = e.target.closest('.keenetic-url-save'); + if (keenSaveBtn) { + e.stopPropagation(); + e.preventDefault(); + saveKeeneticUrl(keenSaveBtn.dataset.name); + return; + } + + const keenCard = e.target.closest('.server-card[data-keen]'); + if (keenCard && !e.target.closest('.mute-bell, .server-card-actions, .keenetic-url-edit, .keenetic-links, a, button, input, label')) { + showKeeneticDetail(keenCard.dataset.keen); } }); @@ -1230,11 +1252,11 @@ function renderKeenetic() { const urlValue = escHtml(keeneticWebUrl(dev)); return ` -
+
${bellHtml('keenetic', dev.name)} -
+
-
📡 ${dev.name}
+
📡 ${escHtml(dev.name)}
${hostParts.join(' • ')}
@@ -1262,18 +1284,19 @@ function renderKeenetic() { ${uptime ? ' • ⏱ ' + uptime : ''}
` : `
${error ? '⚠️ ' + error : 'Нет данных — нажмите 🔄'}
`} - `; }).join(''); @@ -1555,11 +1578,26 @@ function keeneticUrlEditId(name) { function toggleKeeneticUrlEdit(name) { const block = document.getElementById(keeneticUrlEditId(name)); if (!block) return; - const show = block.style.display === 'none'; + const show = block.style.display === 'none' || !block.classList.contains('is-open'); block.style.display = show ? 'block' : 'none'; + block.classList.toggle('is-open', show); + const card = document.querySelector(`.server-card[data-keen="${CSS.escape(name)}"]`); + if (card) { + card.querySelectorAll('.keenetic-url-edit.is-open').forEach(el => { + if (el !== block) { + el.style.display = 'none'; + el.classList.remove('is-open'); + } + }); + card.querySelector('.keenetic-url-btn')?.classList.toggle('active', show); + } if (show) { const input = document.getElementById(keeneticUrlEditId(name) + '-input'); - if (input) input.focus(); + if (input) { + input.focus(); + input.select(); + } + block.scrollIntoView({block: 'nearest', behavior: 'smooth'}); } } diff --git a/server/templates/dashboard.html b/server/templates/dashboard.html index 887062d..3529ae7 100644 --- a/server/templates/dashboard.html +++ b/server/templates/dashboard.html @@ -601,6 +601,6 @@ loftliliana https://loftliliana.netcraze.pro 1020687391" style="width:100%;font- - +