From c8eaef0e1a170fbcab529511b7ab38c5c8bf3d31 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Sat, 9 May 2026 07:02:10 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=B4=D1=83=D0=B1=D0=BB=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=B9=20env=20vars=20+=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=B4=D1=81=D0=B2=D0=B5=D1=82=D0=BA=D0=B0=20=D0=BA=D1=80?= =?UTF-8?q?=D0=B0=D1=81=D0=BD=D1=8B=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- console/deploy/console.yaml | 2 +- console/ui/index.html | 4 ++-- console/ui/js/functions.js | 22 ++++++++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/console/deploy/console.yaml b/console/deploy/console.yaml index 76deac0..8498192 100644 --- a/console/deploy/console.yaml +++ b/console/deploy/console.yaml @@ -55,7 +55,7 @@ spec: serviceAccountName: fission-console containers: - name: console - image: naeel/fission-console:v1.3.73 + image: naeel/fission-console:v1.3.74 imagePullPolicy: Always ports: - containerPort: 8090 diff --git a/console/ui/index.html b/console/ui/index.html index 9f009b1..acf8570 100644 --- a/console/ui/index.html +++ b/console/ui/index.html @@ -102,7 +102,7 @@
NUBES
FISSION CONSOLE
-
v1.3.73
+
v1.3.74
@@ -509,7 +509,7 @@
- v1.3.73 + v1.3.74
diff --git a/console/ui/js/functions.js b/console/ui/js/functions.js index dbed988..c907dab 100644 --- a/console/ui/js/functions.js +++ b/console/ui/js/functions.js @@ -248,6 +248,12 @@ async function submitEdit() { var isTfFn = /^tf-/.test(name); if (!isTfFn) { var envVars = collectEnvVars('e'); + // Проверка на дубли ключей + var keys = envVars.map(function(e) { return e.name; }); + var dupes = keys.filter(function(k, i) { return keys.indexOf(k) !== i; }); + if (dupes.length > 0) { + throw new Error('Дублирующиеся ключи переменных: ' + dupes.join(', ')); + } await requestJSON(API_BASE + '/functions/' + encodeURIComponent(name) + '/envvars', 'PUT', { env_vars: envVars }); @@ -311,6 +317,8 @@ function makeEnvVarRow(prefix, key, val, readOnly, idx) { kInput.disabled = readOnly; kInput.style.cssText = 'flex:1; font-size:12px; font-family:monospace;'; kInput.dataset.envKey = '1'; + // Подсветка дублей при изменении ключа + kInput.addEventListener('input', function() { highlightDupeKeys(prefix); }); var vInput = document.createElement('input'); vInput.placeholder = 'value'; @@ -340,6 +348,20 @@ function makeEnvVarRow(prefix, key, val, readOnly, idx) { return row; } +// highlightDupeKeys подсвечивает красным все поля KEY с одинаковыми именами +function highlightDupeKeys(prefix) { + var list = document.getElementById(prefix + '-envvars-list'); + if (!list) return; + var inputs = list.querySelectorAll('[data-env-key]'); + var keys = Array.from(inputs).map(function(i) { return i.value.trim(); }); + inputs.forEach(function(inp) { + var k = inp.value.trim(); + var isDupe = k !== '' && keys.filter(function(x) { return x === k; }).length > 1; + inp.style.outline = isDupe ? '2px solid #f44' : ''; + inp.title = isDupe ? 'Дублирующийся ключ!' : ''; + }); +} + // addEnvVarRow добавляет пустую строку в список env vars function addEnvVarRow(prefix) { var list = document.getElementById(prefix + '-envvars-list');