From 2072c66c5a4b755a6ed16bb6486afb956a475be9 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Mon, 29 Mar 2021 22:33:35 +0200 Subject: luci-mod-network: fix device section cleanup Ensure that device sections are only automatically removed after all related options have been parsed, to avoid prematurely deleting sections. Signed-off-by: Jo-Philipp Wich --- .../htdocs/luci-static/resources/tools/network.js | 44 +++++++++++++--------- 1 file changed, 27 insertions(+), 17 deletions(-) (limited to 'modules/luci-mod-network/htdocs/luci-static') diff --git a/modules/luci-mod-network/htdocs/luci-static/resources/tools/network.js b/modules/luci-mod-network/htdocs/luci-static/resources/tools/network.js index 3df72940aa..5ed55e24fc 100644 --- a/modules/luci-mod-network/htdocs/luci-static/resources/tools/network.js +++ b/modules/luci-mod-network/htdocs/luci-static/resources/tools/network.js @@ -145,24 +145,9 @@ function deviceWrite(section_id, formvalue) { } function deviceRemove(section_id) { - var ds = lookupDevSection(this.section, section_id, false), - sv = ds ? uci.get('network', ds) : null; - - if (sv) { - var empty = true; + var ds = lookupDevSection(this.section, section_id, false); - for (var opt in sv) { - if (opt.charAt(0) == '.' || opt == 'name' || opt == this.option) - continue; - - empty = false; - } - - if (empty) - uci.remove('network', ds); - else - uci.unset('network', ds, this.option); - } + uci.unset('network', ds, this.option); if (this.migrate) uci.unset('network', section_id, this.option); @@ -188,6 +173,28 @@ function deviceRefresh(section_id) { } } +function sectionParse() { + var ds = lookupDevSection(this, this.section, false); + + return form.NamedSection.prototype.parse.apply(this).then(function() { + var sv = ds ? uci.get('network', ds) : null; + + if (sv) { + var empty = true; + + for (var opt in sv) { + if (opt.charAt(0) == '.' || opt == 'name') + continue; + + empty = false; + } + + if (empty) + uci.remove('network', ds); + } + }); +} + var cbiTagValue = form.Value.extend({ renderWidget: function(section_id, option_index, cfgvalue) { @@ -387,6 +394,9 @@ return baseclass.extend({ o, ss; if (isIface) { + if (!s.hasOwnProperty('parse')) + s.parse = sectionParse; + var type; /* If an externally configured br-xxx interface already exists, -- cgit v1.2.3