luci-base: form.js: implement AbstractValue.getUIElement()

Introduce a new method `getUIElement()` which simplifies obtaining the
underlying per-section UI widget class instance for a from option object.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
This commit is contained in:
Jo-Philipp Wich 2019-12-30 14:40:57 +01:00
parent b0836b037e
commit 9e25917432

View file

@ -765,6 +765,12 @@ var CBIAbstractValue = CBINode.extend({
this.ucioption || this.option); this.ucioption || this.option);
}, },
getUIElement: function(section_id) {
var node = this.map.findElement('id', this.cbid(section_id)),
inst = node ? L.dom.findClassInstance(node) : null;
return (inst instanceof ui.AbstractElement) ? inst : null;
},
cfgvalue: function(section_id, set_value) { cfgvalue: function(section_id, set_value) {
if (section_id == null) if (section_id == null)
L.error('TypeError', 'Section ID required'); L.error('TypeError', 'Section ID required');
@ -778,8 +784,8 @@ var CBIAbstractValue = CBINode.extend({
}, },
formvalue: function(section_id) { formvalue: function(section_id) {
var node = this.map.findElement('id', this.cbid(section_id)); var elem = this.getUIElement(section_id);
return node ? L.dom.callClassMethod(node, 'getValue') : null; return elem ? elem.getValue() : null;
}, },
textvalue: function(section_id) { textvalue: function(section_id) {
@ -796,8 +802,8 @@ var CBIAbstractValue = CBINode.extend({
}, },
isValid: function(section_id) { isValid: function(section_id) {
var node = this.map.findElement('id', this.cbid(section_id)); var elem = this.getUIElement(section_id);
return node ? L.dom.callClassMethod(node, 'isValid') : true; return elem ? elem.isValid() : true;
}, },
isActive: function(section_id) { isActive: function(section_id) {
@ -817,8 +823,8 @@ var CBIAbstractValue = CBINode.extend({
}, },
triggerValidation: function(section_id) { triggerValidation: function(section_id) {
var node = this.map.findElement('id', this.cbid(section_id)); var elem = this.getUIElement(section_id);
return node ? L.dom.callClassMethod(node, 'triggerValidation') : true; return elem ? elem.triggerValidation() : true;
}, },
parse: function(section_id) { parse: function(section_id) {
@ -1742,9 +1748,8 @@ var CBIFlagValue = CBIValue.extend({
}, },
formvalue: function(section_id) { formvalue: function(section_id) {
var node = this.map.findElement('id', this.cbid(section_id)), var elem = this.getUIElement(section_id),
checked = node ? L.dom.callClassMethod(node, 'isChecked') : false; checked = elem ? elem.isChecked() : false;
return checked ? this.enabled : this.disabled; return checked ? this.enabled : this.disabled;
}, },