Skip to content

Commit

Permalink
luci-base: add member duplicate to DynamicList
Browse files Browse the repository at this point in the history
Add member `duplicate` to `DynamicList` to allow duplicate
underlying form values.

`duplicate` defaults is `null`, `DynamicList` will keep the
same behavior as before.
If `true`, the underlying form value will not be checked
for duplication.

Signed-off-by: Anya Lin <[email protected]>
  • Loading branch information
muink committed Jan 11, 2025
1 parent 2520588 commit f74368a
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
12 changes: 12 additions & 0 deletions modules/luci-base/htdocs/luci-static/resources/form.js
Original file line number Diff line number Diff line change
Expand Up @@ -3863,6 +3863,17 @@ const CBIValue = CBIAbstractValue.extend(/** @lends LuCI.form.Value.prototype */
const CBIDynamicList = CBIValue.extend(/** @lends LuCI.form.DynamicList.prototype */ {
__name__: 'CBI.DynamicList',

/**
* Allows the underlying form controls to have repeated values.
*
* Default is `null`. If `true`, the underlying form value will
* not be checked for duplication.
*
* @name LuCI.form.DynamicList.prototype#duplicate
* @type boolean
* @default null
*/

/** @private */
renderWidget(section_id, option_index, cfgvalue) {
const value = (cfgvalue != null) ? cfgvalue : this.default;
Expand All @@ -3872,6 +3883,7 @@ const CBIDynamicList = CBIValue.extend(/** @lends LuCI.form.DynamicList.prototyp
const widget = new ui.DynamicList(items, choices, {
id: this.cbid(section_id),
sort: this.keylist,
duplicate: this.duplicate,
optional: this.optional || this.rmempty,
datatype: this.datatype,
placeholder: this.placeholder,
Expand Down
5 changes: 3 additions & 2 deletions modules/luci-base/htdocs/luci-static/resources/ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -2424,7 +2424,7 @@ const UIDynamicList = UIElement.extend(/** @lends LuCI.ui.DynamicList.prototype
exists = true;
});

if (!exists) {
if (this.options.duplicate || !exists) {
const ai = dl.querySelector('.add-item');
ai.parentNode.insertBefore(new_item, ai);
}
Expand Down Expand Up @@ -2505,7 +2505,8 @@ const UIDynamicList = UIElement.extend(/** @lends LuCI.ui.DynamicList.prototype
return;

sbIn.setValues(sbEl, null);
sbVal.element.setAttribute('unselectable', '');
if (!this.options.duplicate)
sbVal.element.setAttribute('unselectable', '');

if (sbVal.element.hasAttribute('created')) {
sbVal.element.removeAttribute('created');
Expand Down

0 comments on commit f74368a

Please sign in to comment.