diff options
author | Jo-Philipp Wich <jo@mein.io> | 2020-01-19 15:50:33 +0100 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2020-01-19 16:15:22 +0100 |
commit | 4c52718deac9d9259bbf2850bea743d9f3b727f3 (patch) | |
tree | 18a618c43878228eeeb68ab53d9780c6530de257 | |
parent | 5da676b44e571f4f70e5e1dbe59a01f92de4b6eb (diff) |
luci-base: ui.js: properly handle rich choices in Dropdowns, DynLists
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r-- | modules/luci-base/htdocs/luci-static/resources/ui.js | 32 |
1 files changed, 26 insertions, 6 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/ui.js b/modules/luci-base/htdocs/luci-static/resources/ui.js index 774d4a6654..75563c11cb 100644 --- a/modules/luci-base/htdocs/luci-static/resources/ui.js +++ b/modules/luci-base/htdocs/luci-static/resources/ui.js @@ -442,11 +442,17 @@ var UIDropdown = UIElement.extend({ if (!this.choices.hasOwnProperty(this.values[i])) keys.push(this.values[i]); - for (var i = 0; i < keys.length; i++) + for (var i = 0; i < keys.length; i++) { + var label = this.choices[keys[i]]; + + if (L.dom.elem(label)) + label = label.cloneNode(true); + sb.lastElementChild.appendChild(E('li', { 'data-value': keys[i], 'selected': (this.values.indexOf(keys[i]) > -1) ? '' : null - }, this.choices[keys[i]] || keys[i])); + }, [ label || keys[i] ])); + } if (this.options.create) { var createEl = E('input', { @@ -1339,9 +1345,14 @@ var UIDynamicList = UIElement.extend({ true, this.options.validate, 'blur', 'keyup'); } - for (var i = 0; i < this.values.length; i++) - this.addItem(dl, this.values[i], - this.choices ? this.choices[this.values[i]] : null); + for (var i = 0; i < this.values.length; i++) { + var label = this.choices ? this.choices[this.values[i]] : null; + + if (L.dom.elem(label)) + label = label.cloneNode(true); + + this.addItem(dl, this.values[i], label); + } return this.bind(dl); }, @@ -1458,7 +1469,16 @@ var UIDynamicList = UIElement.extend({ sbVal.element.setAttribute('dynlistcustom', ''); } - this.addItem(dl, sbVal.value, sbVal.text, true); + var label = sbVal.text; + + if (sbVal.element) { + label = E([]); + + for (var i = 0; i < sbVal.element.childNodes.length; i++) + label.appendChild(sbVal.element.childNodes[i].cloneNode(true)); + } + + this.addItem(dl, sbVal.value, label, true); }, handleKeydown: function(ev) { |