webui: consistent settingsMax check

remove leftover manual template merge, idForContainer() should just use template-id data key
group add event now checks that instead, raising alert when number is greater than max

ref. #2610
This commit is contained in:
Maxim Prokhorov
2024-06-24 22:15:41 +03:00
parent d6c758f099
commit 4f520a8798
5 changed files with 26 additions and 60 deletions

View File

@@ -2,29 +2,13 @@ import {
addSimpleEnumerables,
fromSchema,
groupSettingsOnAdd,
idForContainer,
variableListeners,
} from './settings.mjs';
import {
fillTemplateLineFromCfg,
loadConfigTemplate,
mergeTemplate,
} from './template.mjs';
import { addFromTemplate } from './template.mjs';
function addNode(cfg) {
let container = document.getElementById("leds");
let id = idForContainer(container);
if (id < 0) {
return;
}
let line = loadConfigTemplate("led-config");
line.querySelector("span").textContent = id;
fillTemplateLineFromCfg(line, id, cfg);
mergeTemplate(container, line);
addFromTemplate(document.getElementById("leds"), "led-config", cfg);
}
function listeners() {

View File

@@ -174,9 +174,26 @@ function onGroupSettingsEventDel(event) {
// 'button-add-settings-group' will trigger update on the specified 'data-settings-group' element id, which
// needs to have 'settings-group-add' event handler attached to it.
function groupSettingsCheckMax(event) {
const max = event.target.dataset["settingsMax"];
const val = 1 + event.target.children.length;
if ((max !== undefined) && (parseInt(max, 10) < val)) {
alert(`Max number of ${event.target.id} has been reached (${val} out of ${max})`);
return false;
}
return true;
}
export function groupSettingsOnAdd(elementId, listener) {
document.getElementById(elementId)
.addEventListener("settings-group-add", (event) => {
event.stopPropagation();
if (!groupSettingsCheckMax(event)) {
return;
}
listener(event);
onGroupSettingsEventAdd(event);
});
@@ -592,23 +609,6 @@ export function initGenericKeyValueElement(key, value) {
setOriginalsFromValues(inputs);
}
export function idForContainer(container) {
let id = container.childElementCount;
let settingsMax = container.dataset["settingsMax"];
if (settingsMax === undefined) {
return id;
}
let max = parseInt(settingsMax, 10);
if (id < max) {
return id;
}
alert(`Max number of ${container.id} has been reached (${id} out of ${max})`);
return -1;
}
const Settings = new SettingsBase();
export function onElementChange(event) {

View File

@@ -1,7 +1,7 @@
<template id="template-led-config" >
<div class="pure-form pure-form-aligned">
<fieldset>
<legend>LED #<span></span></legend>
<legend>LED #<span data-key="template-id"></span></legend>
<div class="pure-control-group">
<label>GPIO</label>
<select class="pure-input-2-3 enumerable enumerable-gpio-hardware" name="ledGpio" data-action="reboot"></select>

View File

@@ -1,7 +1,7 @@
<template id="template-network-config">
<div>
<div class="pure-control-group">
<label>SSID</label>
<label>SSID #<span data-key="template-id"></span></label>
<input name="ssid" type="text" value="" data-action="reconnect" required autocomplete="off">
<button type="button" class="pure-button button-more-parent">...</button>
</div>

View File

@@ -1,38 +1,20 @@
import {
fromSchema,
groupSettingsOnAdd,
idForContainer,
variableListeners,
} from './settings.mjs';
import {
fillTemplateLineFromCfg,
loadConfigTemplate,
mergeTemplate,
} from './template.mjs';
import { addFromTemplate } from './template.mjs';
import { moreElem } from './core.mjs';
import { sendAction } from './connection.mjs';
function addNode(cfg, showMore) {
let container = document.getElementById("networks");
const container = document.getElementById("networks");
addFromTemplate(container, "network-config", cfg);
let id = idForContainer(container);
if (id < 0) {
return;
if ((showMore === undefined) || showMore) {
moreElem(container.lastChild)
}
if (showMore === undefined) {
showMore = true;
}
let line = loadConfigTemplate("network-config");
fillTemplateLineFromCfg(line, id, cfg);
if (showMore) {
moreElem(line);
}
mergeTemplate(container, line);
}
function scanResult(values) {