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 <jo@mein.io>
(cherry picked from commit 2072c66c5a
)
This commit is contained in:
parent
e7a9d9e4bd
commit
220f5006af
1 changed files with 27 additions and 17 deletions
|
@ -145,24 +145,9 @@ function deviceWrite(section_id, formvalue) {
|
||||||
}
|
}
|
||||||
|
|
||||||
function deviceRemove(section_id) {
|
function deviceRemove(section_id) {
|
||||||
var ds = lookupDevSection(this.section, section_id, false),
|
var ds = lookupDevSection(this.section, section_id, false);
|
||||||
sv = ds ? uci.get('network', ds) : null;
|
|
||||||
|
|
||||||
if (sv) {
|
uci.unset('network', ds, this.option);
|
||||||
var empty = true;
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.migrate)
|
if (this.migrate)
|
||||||
uci.unset('network', section_id, this.option);
|
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({
|
var cbiTagValue = form.Value.extend({
|
||||||
renderWidget: function(section_id, option_index, cfgvalue) {
|
renderWidget: function(section_id, option_index, cfgvalue) {
|
||||||
|
@ -387,6 +394,9 @@ return baseclass.extend({
|
||||||
o, ss;
|
o, ss;
|
||||||
|
|
||||||
if (isIface) {
|
if (isIface) {
|
||||||
|
if (!s.hasOwnProperty('parse'))
|
||||||
|
s.parse = sectionParse;
|
||||||
|
|
||||||
var type;
|
var type;
|
||||||
|
|
||||||
/* If an externally configured br-xxx interface already exists,
|
/* If an externally configured br-xxx interface already exists,
|
||||||
|
|
Loading…
Reference in a new issue