luci-base: form.js: rework stacked modal CBI map logic
Only stack a new modal CBI map on top of the currently displayed modal one if the related map or section differs. This prevents misbehavior when switching the protocol of interfaces. Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
parent
c40dd71b84
commit
f2fa59e89a
1 changed files with 12 additions and 7 deletions
|
@ -3149,6 +3149,7 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
|
|||
s = m.section(CBINamedSection, section_id, this.sectiontype);
|
||||
|
||||
m.parent = parent;
|
||||
m.section = section_id;
|
||||
m.readonly = parent.readonly;
|
||||
|
||||
s.tabs = this.tabs;
|
||||
|
@ -3188,20 +3189,24 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
|
|||
}
|
||||
|
||||
return Promise.resolve(this.addModalOptions(s, section_id, ev)).then(L.bind(m.render, m)).then(L.bind(function(nodes) {
|
||||
var modalMap = this.getActiveModalMap();
|
||||
var mapNode = this.getActiveModalMap(),
|
||||
activeMap = mapNode ? dom.findClassInstance(mapNode) : null;
|
||||
|
||||
if (modalMap) {
|
||||
modalMap.parentNode
|
||||
if (activeMap && (activeMap.parent !== parent || activeMap.section !== section_id)) {
|
||||
mapNode.parentNode
|
||||
.querySelector('h4')
|
||||
.appendChild(E('span', title ? ' » ' + title : ''));
|
||||
|
||||
modalMap.parentNode
|
||||
mapNode.parentNode
|
||||
.querySelector('div.right > button')
|
||||
.firstChild.data = _('Back');
|
||||
|
||||
modalMap.classList.add('hidden');
|
||||
modalMap.parentNode.insertBefore(nodes, modalMap.nextElementSibling);
|
||||
nodes.classList.add('flash');
|
||||
mapNode.classList.add('hidden');
|
||||
mapNode.parentNode.insertBefore(nodes, mapNode.nextElementSibling);
|
||||
|
||||
return activeMap.save(null, true).then(function() {
|
||||
nodes.classList.add('flash');
|
||||
}, function() {});
|
||||
}
|
||||
else {
|
||||
ui.showModal(title, [
|
||||
|
|
Loading…
Reference in a new issue