mirror of
https://github.com/openwrt/luci.git
synced 2026-01-06 21:10:26 +04:00
luci-base: form.js: consider aliased options in AbstractValue.remove()
If different options point to the same underlying uci option, we must only
remove the uci value if none of the other alias options is active in order
to prevent inactive options (due to unsatisfied depends) removing the uci
value of active once on save.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
(cherry picked from commit f3f74bd0fe)
This commit is contained in:
@@ -2035,10 +2035,32 @@ var CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.AbstractVa
|
||||
* The configuration section ID
|
||||
*/
|
||||
remove: function(section_id) {
|
||||
return this.map.data.unset(
|
||||
this.uciconfig || this.section.uciconfig || this.map.config,
|
||||
this.ucisection || section_id,
|
||||
this.ucioption || this.option);
|
||||
var this_cfg = this.uciconfig || this.section.uciconfig || this.map.config,
|
||||
this_sid = this.ucisection || section_id,
|
||||
this_opt = this.ucioption || this.option;
|
||||
|
||||
for (var i = 0; i < this.section.children.length; i++) {
|
||||
var sibling = this.section.children[i];
|
||||
|
||||
if (sibling === this || sibling.ucioption == null)
|
||||
continue;
|
||||
|
||||
var sibling_cfg = sibling.uciconfig || sibling.section.uciconfig || sibling.map.config,
|
||||
sibling_sid = sibling.ucisection || section_id,
|
||||
sibling_opt = sibling.ucioption || sibling.option;
|
||||
|
||||
if (this_cfg != sibling_cfg || this_sid != sibling_sid || this_opt != sibling_opt)
|
||||
continue;
|
||||
|
||||
if (!sibling.isActive(section_id))
|
||||
continue;
|
||||
|
||||
/* found another active option aliasing the same uci option name,
|
||||
* so we can't remove the value */
|
||||
return;
|
||||
}
|
||||
|
||||
this.map.data.unset(this_cfg, this_sid, this_opt);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user