From: Christian Korber Date: Fri, 22 May 2026 10:00:27 +0000 (+0200) Subject: luci-base: keep not yet rendered clone elements X-Git-Url: http://git.99rst.org/?a=commitdiff_plain;h=ec54122a48da50503b62362950ae191f416599b2;p=openwrt-luci.git luci-base: keep not yet rendered clone elements `handleClone` triggers `checkDepends` and also `parse` on `this.map.save` which in turn also removes not yet rendered elements like clones. This is not wanted and therefore guarded against. Signed-off-by: Christian Korber --- diff --git a/modules/luci-base/htdocs/luci-static/resources/form.js b/modules/luci-base/htdocs/luci-static/resources/form.js index 54fca6930d..7e5c4a2569 100644 --- a/modules/luci-base/htdocs/luci-static/resources/form.js +++ b/modules/luci-base/htdocs/luci-static/resources/form.js @@ -1309,6 +1309,12 @@ const CBIAbstractSection = CBIAbstractElement.extend(/** @lends LuCI.form.Abstra const sids = this.cfgsections(); for (let i = 0, sid = sids[0]; (sid = sids[i]) != null; i++) { + /* + * do not remove elements that are not rendered yet + */ + if (!this.map.findElement('data-section-id', sid)) + continue; + for (let j = 0, o = this.children[0]; (o = this.children[j]) != null; j++) { let isActive = o.isActive(sid); const isSatisfied = o.checkDepends(sid); @@ -2155,7 +2161,11 @@ const CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.Abstract } } else if (this.forcewrite || !isEqual(cval, fval)) { - return Promise.resolve(this.write(section_id, fval)); + /* + * do not remove elements that are not rendered yet + */ + if (this.map.findElement('data-field', this.cbid(section_id)) != null) + return Promise.resolve(this.write(section_id, fval)); } } else if (!this.retain) {