mirror of
https://github.com/openwrt/luci.git
synced 2026-04-15 19:01:56 +00:00
3 lines
76 KiB
HTML
3 lines
76 KiB
HTML
<!DOCTYPE html><html lang="en" style="font-size:16px"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="icon" href="themes/luci-theme-bootstrap/htdocs/luci-static/bootstrap/logo.svg"><link type="text/css" rel="stylesheet" href="extra.css"><title>Class: DynamicList</title><!--[if lt IE 9]>
|
|
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
|
|
<![endif]--><script src="scripts/third-party/hljs.js" defer="defer"></script><script src="scripts/third-party/hljs-line-num.js" defer="defer"></script><script src="scripts/third-party/popper.js" defer="defer"></script><script src="scripts/third-party/tippy.js" defer="defer"></script><script src="scripts/third-party/tocbot.min.js"></script><script>var baseURL="/",locationPathname="";baseURL=(locationPathname=document.location.pathname).substr(0,locationPathname.lastIndexOf("/")+1)</script><link rel="stylesheet" href="styles/clean-jsdoc-theme.min.css"><svg aria-hidden="true" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="display:none"><defs><symbol id="copy-icon" viewbox="0 0 488.3 488.3"><g><path d="M314.25,85.4h-227c-21.3,0-38.6,17.3-38.6,38.6v325.7c0,21.3,17.3,38.6,38.6,38.6h227c21.3,0,38.6-17.3,38.6-38.6V124 C352.75,102.7,335.45,85.4,314.25,85.4z M325.75,449.6c0,6.4-5.2,11.6-11.6,11.6h-227c-6.4,0-11.6-5.2-11.6-11.6V124 c0-6.4,5.2-11.6,11.6-11.6h227c6.4,0,11.6,5.2,11.6,11.6V449.6z"/><path d="M401.05,0h-227c-21.3,0-38.6,17.3-38.6,38.6c0,7.5,6,13.5,13.5,13.5s13.5-6,13.5-13.5c0-6.4,5.2-11.6,11.6-11.6h227 c6.4,0,11.6,5.2,11.6,11.6v325.7c0,6.4-5.2,11.6-11.6,11.6c-7.5,0-13.5,6-13.5,13.5s6,13.5,13.5,13.5c21.3,0,38.6-17.3,38.6-38.6 V38.6C439.65,17.3,422.35,0,401.05,0z"/></g></symbol><symbol id="search-icon" viewBox="0 0 512 512"><g><g><path d="M225.474,0C101.151,0,0,101.151,0,225.474c0,124.33,101.151,225.474,225.474,225.474 c124.33,0,225.474-101.144,225.474-225.474C450.948,101.151,349.804,0,225.474,0z M225.474,409.323 c-101.373,0-183.848-82.475-183.848-183.848S124.101,41.626,225.474,41.626s183.848,82.475,183.848,183.848 S326.847,409.323,225.474,409.323z"/></g></g><g><g><path d="M505.902,476.472L386.574,357.144c-8.131-8.131-21.299-8.131-29.43,0c-8.131,8.124-8.131,21.306,0,29.43l119.328,119.328 c4.065,4.065,9.387,6.098,14.715,6.098c5.321,0,10.649-2.033,14.715-6.098C514.033,497.778,514.033,484.596,505.902,476.472z"/></g></g></symbol><symbol id="font-size-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11.246 15H4.754l-2 5H.6L7 4h2l6.4 16h-2.154l-2-5zm-.8-2L8 6.885 5.554 13h4.892zM21 12.535V12h2v8h-2v-.535a4 4 0 1 1 0-6.93zM19 18a2 2 0 1 0 0-4 2 2 0 0 0 0 4z"/></symbol><symbol id="add-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M11 11V5h2v6h6v2h-6v6h-2v-6H5v-2z"/></symbol><symbol id="minus-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M5 11h14v2H5z"/></symbol><symbol id="dark-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10 7a7 7 0 0 0 12 4.9v.1c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2h.1A6.979 6.979 0 0 0 10 7zm-6 5a8 8 0 0 0 15.062 3.762A9 9 0 0 1 8.238 4.938 7.999 7.999 0 0 0 4 12z"/></symbol><symbol id="light-theme-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 18a6 6 0 1 1 0-12 6 6 0 0 1 0 12zm0-2a4 4 0 1 0 0-8 4 4 0 0 0 0 8zM11 1h2v3h-2V1zm0 19h2v3h-2v-3zM3.515 4.929l1.414-1.414L7.05 5.636 5.636 7.05 3.515 4.93zM16.95 18.364l1.414-1.414 2.121 2.121-1.414 1.414-2.121-2.121zm2.121-14.85l1.414 1.415-2.121 2.121-1.414-1.414 2.121-2.121zM5.636 16.95l1.414 1.414-2.121 2.121-1.414-1.414 2.121-2.121zM23 11v2h-3v-2h3zM4 11v2H1v-2h3z"/></symbol><symbol id="reset-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.537 19.567A9.961 9.961 0 0 1 12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10c0 2.136-.67 4.116-1.81 5.74L17 12h3a8 8 0 1 0-2.46 5.772l.997 1.795z"/></symbol><symbol id="down-icon" viewBox="0 0 16 16"><path fill-rule="evenodd" clip-rule="evenodd" d="M12.7803 6.21967C13.0732 6.51256 13.0732 6.98744 12.7803 7.28033L8.53033 11.5303C8.23744 11.8232 7.76256 11.8232 7.46967 11.5303L3.21967 7.28033C2.92678 6.98744 2.92678 6.51256 3.21967 6.21967C3.51256 5.92678 3.98744 5.92678 4.28033 6.21967L8 9.93934L11.7197 6.21967C12.0126 5.92678 12.4874 5.92678 12.7803 6.21967Z"></path></symbol><symbol id="codepen-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M16.5 13.202L13 15.535v3.596L19.197 15 16.5 13.202zM14.697 12L12 10.202 9.303 12 12 13.798 14.697 12zM20 10.869L18.303 12 20 13.131V10.87zM19.197 9L13 4.869v3.596l3.5 2.333L19.197 9zM7.5 10.798L11 8.465V4.869L4.803 9 7.5 10.798zM4.803 15L11 19.131v-3.596l-3.5-2.333L4.803 15zM4 13.131L5.697 12 4 10.869v2.262zM2 9a1 1 0 0 1 .445-.832l9-6a1 1 0 0 1 1.11 0l9 6A1 1 0 0 1 22 9v6a1 1 0 0 1-.445.832l-9 6a1 1 0 0 1-1.11 0l-9-6A1 1 0 0 1 2 15V9z"/></symbol><symbol id="close-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 10.586l4.95-4.95 1.414 1.414-4.95 4.95 4.95 4.95-1.414 1.414-4.95-4.95-4.95 4.95-1.414-1.414 4.95-4.95-4.95-4.95L7.05 5.636z"/></symbol><symbol id="menu-icon" viewBox="0 0 24 24"><path fill="none" d="M0 0h24v24H0z"/><path d="M3 4h18v2H3V4zm0 7h18v2H3v-2zm0 7h18v2H3v-2z"/></symbol></defs></svg></head><body data-theme="fallback-dark"><div class="sidebar-container"><div class="sidebar" id="sidebar"><a href="/" class="sidebar-title sidebar-title-anchor">LuCI Documentation</a><div class="sidebar-items-container"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-JsonRpcHowTo.html">Using JSON RPC daemon</a></div><div class="sidebar-section-children"><a href="tutorial-Modules.html">Modules</a></div><div class="sidebar-section-children"><a href="tutorial-ThemesHowTo.html">Making Themes</a></div><div class="sidebar-section-children"><a href="tutorial-i18n.html">Internationalisation - i18n</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.module_cbi.html">cbi</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.html">LuCI</a></div><div class="sidebar-section-children"><a href="LuCI.baseclass.html">baseclass</a></div><div class="sidebar-section-children"><a href="LuCI.dom.html">dom</a></div><div class="sidebar-section-children"><a href="LuCI.form.html">form</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractSection.html">AbstractSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractValue.html">AbstractValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Button.html">Button</a></div><div class="sidebar-section-children"><a href="LuCI.form.DirectoryPicker.html">DirectoryPicker</a></div><div class="sidebar-section-children"><a href="LuCI.form.DummyValue.html">DummyValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.form.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.form.Flag.html">Flag</a></div><div class="sidebar-section-children"><a href="LuCI.form.GridSection.html">GridSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.HiddenValue.html">HiddenValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.JSONMap.html">JSONMap</a></div><div class="sidebar-section-children"><a href="LuCI.form.ListValue.html">ListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Map.html">Map</a></div><div class="sidebar-section-children"><a href="LuCI.form.MultiValue.html">MultiValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.NamedSection.html">NamedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.RangeSliderValue.html">RangeSliderValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.RichListValue.html">RichListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.SectionValue.html">SectionValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TableSection.html">TableSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.TextValue.html">TextValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TypedSection.html">TypedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.Value.html">Value</a></div><div class="sidebar-section-children"><a href="LuCI.fs.html">fs</a></div><div class="sidebar-section-children"><a href="LuCI.headers.html">headers</a></div><div class="sidebar-section-children"><a href="LuCI.network.html">network</a></div><div class="sidebar-section-children"><a href="LuCI.network.Device.html">Device</a></div><div class="sidebar-section-children"><a href="LuCI.network.Hosts.html">Hosts</a></div><div class="sidebar-section-children"><a href="LuCI.network.Protocol.html">Protocol</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiDevice.html">WifiDevice</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiNetwork.html">WifiNetwork</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiVlan.html">WifiVlan</a></div><div class="sidebar-section-children"><a href="LuCI.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.request.html">request</a></div><div class="sidebar-section-children"><a href="LuCI.request.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.response.html">response</a></div><div class="sidebar-section-children"><a href="LuCI.rpc.html">rpc</a></div><div class="sidebar-section-children"><a href="LuCI.session.html">session</a></div><div class="sidebar-section-children"><a href="LuCI.uci.html">uci</a></div><div class="sidebar-section-children"><a href="LuCI.ui.html">ui</a></div><div class="sidebar-section-children"><a href="LuCI.ui.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Checkbox.html">Checkbox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.ComboButton.html">ComboButton</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Combobox.html">Combobox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Dropdown.html">Dropdown</a></div><div class="sidebar-section-children"><a href="LuCI.ui.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.ui.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Hiddenfield.html">Hiddenfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.RangeSlider.html">RangeSlider</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Select.html">Select</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textarea.html">Textarea</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textfield.html">Textfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.changes.html">changes</a></div><div class="sidebar-section-children"><a href="LuCI.ui.menu.html">menu</a></div><div class="sidebar-section-children"><a href="LuCI.ui.tabs.html">tabs</a></div><div class="sidebar-section-children"><a href="LuCI.validation.html">validation</a></div><div class="sidebar-section-children"><a href="LuCI.validation.Validator.html">Validator</a></div><div class="sidebar-section-children"><a href="LuCI.validation.ValidatorFactory.html">ValidatorFactory</a></div><div class="sidebar-section-children"><a href="LuCI.view.html">view</a></div><div class="sidebar-section-children"><a href="LuCI.xhr.html">xhr</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-String.html">String</a></div></div></div></div></div><div class="navbar-container" id="VuAckcnZhf"><nav class="navbar"><div class="navbar-left-items"><div class="github-home navbar-item"><a id="" href="https://github.com/openwrt/luci" target="">GitHub Project Page</a></div></div><div class="navbar-right-items"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div><nav></nav></nav></div><div class="toc-container"><div class="toc-content"><span class="bold">On this page</span><div id="eed4d2a0bfd64539bb9df78095dec881"></div></div></div><div class="body-wrapper"><div class="main-content"><div class="main-wrapper"><section><header><h1 id="DynamicList-title" class="has-anchor"><span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.form.html">.form</a>.</span> DynamicList</h1><div class="class-description"><p>The <code>DynamicList</code> class represents a multi-value widget allowing the user to enter multiple unique values, optionally selected from a set of predefined choices. It builds upon the <a href="LuCI.ui.DynamicList.html"><code>LuCI.ui.DynamicList</code></a> widget.</p></div></header><article><div class="container-overview"><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line4538">line 4538</a></li></ul></dd></div></dl></div><h2 id="Extends" class="subsection-title has-anchor">Extends</h2><ul><li><a href="LuCI.form.Value.html">LuCI.form.Value</a></li></ul><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="allowduplicates"><span class="type-signature"></span>allowduplicates<span class="type-signature"> :boolean</span></h3><div class="description"><p>Allows the underlying form controls to have multiple identical values.</p><p>Default is <code>null</code>. If <code>true</code>, the underlying form value will not be checked for duplication.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line4573">line 4573</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="datatype"><span class="type-signature"></span>datatype<span class="type-signature"> :string</span></h3><div class="description"><p>Specifies a datatype constraint expression to validate input values against. Refer to <a href="LuCI.validation.html"><code>LuCI.validation</code></a> for details on the format.</p><p>If the user entered input does not match the datatype validation, the option element is marked as invalid.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#datatype">LuCI.form.AbstractValue#datatype</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1471">line 1471</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="default"><span class="type-signature"></span>default<span class="type-signature"> :*</span></h3><div class="description"><p>Sets a default value to use when the underlying UCI option is not set.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">*</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#default">LuCI.form.AbstractValue#default</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1463">line 1463</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="editable"><span class="type-signature"></span>editable<span class="type-signature"> :boolean</span></h3><div class="description"><p>Mark the grid section option element as editable.</p><p>Options which are displayed in the table portion of a <a href="LuCI.form.GridSection.html"><code>GridSection</code></a> instance are rendered as readonly text by default. By setting the <code>editable</code> property of a child option element to <code>true</code>, that element is rendered as a full input widget within its cell instead of a text only preview.</p><p>This property has no effect on options that are not children of grid section elements.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#editable">LuCI.form.AbstractValue#editable</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">false</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1537">line 1537</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="modalonly"><span class="type-signature"></span>modalonly<span class="type-signature"> :boolean</span></h3><div class="description"><p>Move the grid section option element into the table, the modal popup or both.</p><p>If this property is <code>null</code> (the default), the option element is displayed in both the table preview area and the per-section instance modal popup of a grid section. When it is set to <code>false</code> the option is only shown in the table but not the modal popup. When set to <code>true</code>, the option is only visible in the modal popup but not the table.</p><p>This property has no effect on options that are not children of grid section elements.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#modalonly">LuCI.form.AbstractValue#modalonly</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1554">line 1554</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="onchange"><span class="type-signature"></span>onchange<span class="type-signature"> :function</span></h3><div class="description"><p>Register a custom value change handler.</p><p>If this property is set to a function, it is invoked whenever the value of the underlying UI input element changes.</p><p>The invoked handler function will receive the DOM click element as first and the underlying configuration section ID as well as the input value as second and third argument respectively.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">function</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#onchange">LuCI.form.AbstractValue#onchange</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1600">line 1600</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="optional"><span class="type-signature"></span>optional<span class="type-signature"> :boolean</span></h3><div class="description"><p>If set to <code>true</code>, the underlying ui input widget is allowed to be empty, otherwise the option element is marked invalid when no value is entered or selected by the user.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#optional">LuCI.form.AbstractValue#optional</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">false</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1442">line 1442</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="password"><span class="type-signature"></span>password<span class="type-signature"> :boolean</span></h3><div class="description"><p>If set to <code>true</code>, the field is rendered as a password input, otherwise as a plain text input.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.Value.html#password">LuCI.form.Value#password</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">false</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line4339">line 4339</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="placeholder"><span class="type-signature"></span>placeholder<span class="type-signature"> :string</span></h3><div class="description"><p>Set a placeholder string to use when the input field is empty.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.Value.html#placeholder">LuCI.form.Value#placeholder</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line4349">line 4349</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="readonly"><span class="type-signature"></span>readonly<span class="type-signature"> :boolean</span></h3><div class="description"><p>Make option element readonly.</p><p>This property defaults to the readonly state of the parent form element. When set to <code>true</code>, the underlying widget is rendered in disabled state, meaning its contents cannot be changed and the widget cannot be interacted with.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#readonly">LuCI.form.AbstractValue#readonly</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">false</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1571">line 1571</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="retain"><span class="type-signature"></span>retain<span class="type-signature"> :boolean</span></h3><div class="description"><p>If set to <code>true</code>, the underlying ui input widget value is not cleared from the configuration on unsatisfied dependencies. The default behavior is to remove the values of all options whose dependencies are not fulfilled.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#retain">LuCI.form.AbstractValue#retain</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">false</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1452">line 1452</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="rmempty"><span class="type-signature"></span>rmempty<span class="type-signature"> :boolean</span></h3><div class="description"><p>If set to <code>false</code>, the underlying option value is retained upon saving the form when the option element is disabled due to unsatisfied dependency constraints.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">boolean</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#rmempty">LuCI.form.AbstractValue#rmempty</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">true</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1432">line 1432</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="uciconfig"><span class="type-signature"></span>uciconfig<span class="type-signature"> :string</span></h3><div class="description"><p>Override the UCI configuration name to read the option value from.</p><p>By default, the configuration name is inherited from the parent Map. By setting this property, a deviating configuration may be specified.</p><p>The default of null means inherit from the parent form.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#uciconfig">LuCI.form.AbstractValue#uciconfig</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1497">line 1497</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="ucioption"><span class="type-signature"></span>ucioption<span class="type-signature"> :string</span></h3><div class="description"><p>Override the UCI option name to read the value from.</p><p>By default, the elements name, which is passed as the third argument to the constructor, is used as the UCI option name. By setting this property, a deviating UCI option may be specified.</p><p>The default of null means use the option element name.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#ucioption">LuCI.form.AbstractValue#ucioption</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1523">line 1523</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="ucisection"><span class="type-signature"></span>ucisection<span class="type-signature"> :string</span></h3><div class="description"><p>Override the UCI section name to read the option value from.</p><p>By default, the section ID is inherited from the parent section element. By setting this property, a deviating section may be specified.</p><p>The default of null means inherit from the parent section.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">string</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#ucisection">LuCI.form.AbstractValue#ucisection</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1510">line 1510</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="validate"><span class="type-signature"></span>validate<span class="type-signature"> :function</span></h3><div class="description"><p>Specifies a custom validation function to test the user input for validity. The validation function must return <code>true</code> to accept the value. Any other return value type is converted to a string and displayed to the user as a validation error message.</p><p>If the user entered input does not pass the validation function, the option element is marked as invalid.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">function</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#validate">LuCI.form.AbstractValue#validate</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1483">line 1483</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="width"><span class="type-signature"></span>width<span class="type-signature"> :number|string</span></h3><div class="description"><p>Override the cell width of a table or grid section child option.</p><p>If the property is set to a numeric value, it is treated as pixel width which is set on the containing cell element of the option, essentially forcing a certain column width. When the property is set to a string value, it is applied as-is to the CSS <code>width</code> property.</p><p>This property has no effect on options that are not children of grid or table section elements.</p></div><div class="member-item-container flex"><strong>Type:</strong><ul><li><span class="param-type">number</span> |<wbr> <span class="param-type">string</span></li></ul></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#width">LuCI.form.AbstractValue#width</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-default bold">Default Value</dt><dd class="tag-default"><ul><li data-skip-pre-process="true">null</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1584">line 1584</a></li></ul></dd></div></dl><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="append"><span class="type-signature"></span>append<span class="signature">(obj)</span></h3><div class="description"><p>Add another form element as children to this element.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>obj</code></td><td class="type"><span class="param-type">AbstractElement</span></td><td class="description last"><p>The form element to add.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractElement.html#append">LuCI.form.AbstractElement#append</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line219">line 219</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="cbid"><span class="type-signature"></span>cbid<span class="signature">(section_id)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Obtain the internal ID ("cbid") of the element instance.</p><p>Since each form section element may map multiple underlying configuration sections, the configuration section ID is required to form a fully qualified ID pointing to the specific element instance within the given specific section.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#cbid">LuCI.form.AbstractValue#cbid</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1840">line 1840</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws a <code>TypeError</code> exception when no <code>section_id</code> was specified.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">TypeError</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the element ID.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="cfgvalue"><span class="type-signature"></span>cfgvalue<span class="signature">(section_id, set_value)</span><span class="type-signature"> → {*}</span></h3><div class="description"><p>Query the underlying configuration value.</p><p>The default implementation of this method returns the cached return value of <a href="LuCI.form.AbstractValue.html#load"><code>load()</code></a>. It may be overridden by user code to obtain the configuration value in a different way.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr><tr><td class="name"><code>set_value</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The value to assign</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#cfgvalue">LuCI.form.AbstractValue#cfgvalue</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1917">line 1917</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws a <code>TypeError</code> exception when no <code>section_id</code> was specified.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">TypeError</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the configuration value.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">*</span></dd></dl></div><h3 class="name has-anchor" id="depends"><span class="type-signature"></span>depends<span class="signature">(field, value<span class="signature-attributes">opt</span>)</span></h3><div class="description"><p>Add a dependency constraint to the option.</p><p>Dependency constraints allow making the presence of option elements dependent on the current values of certain other options within the same form. An option element with unsatisfied dependencies will be hidden from the view and its current value omitted when saving.</p><p>Multiple constraints (that is, multiple calls to <code>depends()</code>) are treated as alternatives, forming a logical "or" expression.</p><p>By passing an object of name => value pairs as the first argument, it is possible to depend on multiple options simultaneously, forming a logical "and" expression.</p><p>Option names may be given in "dot notation" which allows referencing option elements outside the current form section. If a name without a dot is specified, it refers to an option within the same configuration section. If specified as <code>configname.sectionid.optionname</code>, options anywhere within the same form may be specified.</p><p>The object notation also allows for a number of special keys which are not treated as option names but as modifiers to influence the dependency constraint evaluation. The associated value of these special "tag" keys is ignored. The recognized tags are:</p><ul><li><code>!reverse</code><br>Invert the dependency, instead of requiring another option to be equal to the dependency value, that option should <em>not</em> be equal.</li><li><code>!contains</code><br>Instead of requiring an exact match, the dependency is considered satisfied when the dependency value is contained within the option value.</li><li><code>!default</code><br>The dependency is always satisfied</li></ul><p>Examples:</p><ul><li><code>opt.depends("foo", "test")</code><br>Require the value of `foo` to be `test`.</li><li><code>opt.depends({ foo: "test" })</code><br>Equivalent to the previous example.</li><li><code>opt.depends({ foo: /test/ })</code><br>Require the value of `foo` to match the regular expression `/test/`.</li><li><code>opt.depends({ foo: "test", bar: "qrx" })</code><br>Require the value of `foo` to be `test` and the value of `bar` to be `qrx`.</li><li><code>opt.depends({ foo: "test" })<br>opt.depends({ bar: "qrx" })</code><br>Require either <code>foo</code> to be set to <code>test</code>, <em>or</em> the <code>bar</code> option to be <code>qrx</code>.</li><li><code>opt.depends("test.section1.foo", "bar")</code><br>Require the "foo" form option within the "section1" section to be set to "bar".</li><li><code>opt.depends({ foo: "test", "!contains": true })</code><br>Require the "foo" option value to contain the substring "test".</li></ul></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>field</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Object.<string, (string|RegExp)></span></td><td class="attributes"></td><td class="description last"><p>The name of the option to depend on or an object describing multiple dependencies which must be satisfied (a logical "and" expression).</p></td></tr><tr><td class="name"><code>value</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">RegExp</span></td><td class="attributes"><optional><br></td><td class="description last"><p>When invoked with a plain option name as the first argument, this parameter specifies the expected value. In case an object is passed as the first argument, this parameter is ignored.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#depends">LuCI.form.AbstractValue#depends</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1706">line 1706</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="formvalue"><span class="type-signature"></span>formvalue<span class="signature">(section_id)</span><span class="type-signature"> → {*}</span></h3><div class="description"><p>Query the current form input value.</p><p>The default implementation of this method returns the current input value of the underlying <a href="LuCI.ui.AbstractElement.html"><code>LuCI.ui</code></a> widget. It may be overridden by user code to handle input values differently.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#formvalue">LuCI.form.AbstractValue#formvalue</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1945">line 1945</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws a <code>TypeError</code> exception when no <code>section_id</code> was specified.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">TypeError</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the current input value.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">*</span></dd></dl></div><h3 class="name has-anchor" id="getUIElement"><span class="type-signature"></span>getUIElement<span class="signature">(section_id)</span><span class="type-signature"> → {<a href="LuCI.ui.AbstractElement.html">LuCI.ui.AbstractElement</a>|null}</span></h3><div class="description"><p>Obtain the underlying <code>LuCI.ui</code> element instance.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#getUIElement">LuCI.form.AbstractValue#getUIElement</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1891">line 1891</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws a <code>TypeError</code> exception when no <code>section_id</code> was specified.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">TypeError</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the <code>LuCI.ui</code> element instance or <code>null</code> in case the form option implementation does not use <code>LuCI.ui</code> widgets.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type"><a href="LuCI.ui.AbstractElement.html">LuCI.<wbr>ui.<wbr>AbstractElement</a></span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="getValidationError"><span class="type-signature"></span>getValidationError<span class="signature">(section_id)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Returns the current validation error for this input.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#getValidationError">LuCI.form.AbstractValue#getValidationError</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line2063">line 2063</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The validation error at this time</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="isActive"><span class="type-signature"></span>isActive<span class="signature">(section_id)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Test whether the option element is currently active.</p><p>An element is active when it is not hidden due to unsatisfied dependency constraints.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#isActive">LuCI.form.AbstractValue#isActive</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line2081">line 2081</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns <code>true</code> if the option element currently is active, otherwise it returns <code>false</code>.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="isValid"><span class="type-signature"></span>isValid<span class="signature">(section_id)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Test whether the input value is currently valid.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#isValid">LuCI.form.AbstractValue#isValid</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line2049">line 2049</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns <code>true</code> if the input value currently is valid, otherwise it returns <code>false</code>.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span></dd></dl></div><h3 class="name has-anchor" id="load"><span class="type-signature"></span>load<span class="signature">(section_id)</span><span class="type-signature"> → {*|Promise.<*>}</span></h3><div class="description"><p>Load the underlying configuration value.</p><p>The default implementation of this method reads and returns the underlying UCI option value (or the related JavaScript property for <a href="LuCI.form.JSONMap.html"><code>JSONMap</code></a> instances). It may be overridden by user code to load data from non-standard sources.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#load">LuCI.form.AbstractValue#load</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1868">line 1868</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws a <code>TypeError</code> exception when no <code>section_id</code> was specified.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">TypeError</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the configuration value to initialize the option element with. The return value of this function is filtered through <code>Promise.resolve()</code> so it may return promises if overridden by user code.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">*</span> |<wbr> <span class="param-type">Promise.<*></span></dd></dl></div><h3 class="name has-anchor" id="parse"><span class="type-signature"></span>parse<span class="signature">(section_id)</span><span class="type-signature"> → {Promise.<void>}</span></h3><div class="description"><p>Parse the option element input.</p><p>The function is invoked when the <code>parse()</code> method has been invoked on the parent form and triggers input value reading and validation.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#parse">LuCI.form.AbstractValue#parse</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line2131">line 2131</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a promise resolving once the input value has been read and validated or rejecting in case the input value does not meet the validation constraints.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<void></span></dd></dl></div><h3 class="name has-anchor" id="remove"><span class="type-signature"></span>remove<span class="signature">(section_id)</span></h3><div class="description"><p>Remove the corresponding value from the configuration.</p><p>This function is invoked upon saving the parent form when the option element has been hidden due to unsatisfied dependencies or when the user cleared the input value and the option is marked optional.</p><p>The default implementation simply removes the associated option from the UCI configuration (or the associated JavaScript object property in case of <a href="LuCI.form.JSONMap.html"><code>JSONMap</code></a> forms). It may be overridden by user code to implement alternative removal logic, e.g. to retain the original value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#remove">LuCI.form.AbstractValue#remove</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line2214">line 2214</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="stripTags"><span class="type-signature"></span>stripTags<span class="signature">(s)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Strip any HTML tags from the given input string, and decode HTML entities.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>s</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The input string to clean.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractElement.html#stripTags">LuCI.form.AbstractElement#stripTags</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line305">line 305</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The cleaned input string with HTML tags removed, and HTML entities decoded.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="textvalue"><span class="type-signature"></span>textvalue<span class="signature">(section_id)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Obtain a textual input representation.</p><p>The default implementation of this method returns the HTML-escaped current input value of the underlying <a href="LuCI.ui.AbstractElement.html"><code>LuCI.ui</code></a> widget. User code or specific option element implementations may override this function to apply a different logic, e.g. to return <code>Yes</code> or <code>No</code> depending on the checked state of checkbox elements.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#textvalue">LuCI.form.AbstractValue#textvalue</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line1969">line 1969</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws a <code>TypeError</code> exception when no <code>section_id</code> was specified.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">TypeError</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the text representation of the current input value.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h3 class="name has-anchor" id="titleFn"><span class="type-signature"></span>titleFn<span class="signature">(attr, …args)</span><span class="type-signature"> → {string|null}</span></h3><div class="description"><p>Format the given named property as a title string.</p><p>This function looks up the given named property and formats its value suitable for use as an element caption or description string. It also strips any HTML tags from the result.</p><p>If the property value is a string, it is passed to <code>String.format()</code> along with any additional parameters passed to <code>titleFn()</code>.</p><p>If the property value is a function, it is invoked with any additional <code>titleFn()</code> parameters as arguments, and the obtained return value is converted to a string.</p><p>In all other cases, <code>null</code> is returned.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>attr</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>(property) The name of the element property to use.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><repeatable><br></td><td class="description last"><p>(fmt_args) Extra values to format the title string with.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractElement.html#titleFn">LuCI.form.AbstractElement#titleFn</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line344">line 344</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>The formatted title string or <code>null</code> if the property did not exist or was neither a string nor a function.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="value"><span class="type-signature"></span>value<span class="signature">(key, val)</span></h3><div class="description"><p>Add a predefined choice to the form option. By adding one or more choices, the plain text input field is turned into a combobox widget which prompts the user to select a predefined choice, or to enter a custom value.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>key</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The choice value to add.</p></td></tr><tr><td class="name"><code>val</code></td><td class="type"><span class="param-type">Node</span> |<wbr> <span class="param-type">string</span></td><td class="description last"><p>The caption for the choice value. May be a DOM node, a document fragment or a plain text string. If omitted, the <code>key</code> value is used as a caption.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.Value.html#value">LuCI.form.Value#value</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line4371">line 4371</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="write"><span class="type-signature"></span>write<span class="signature">(section_id, formvalue)</span><span class="type-signature"> → {null}</span></h3><div class="description"><p>Write the current input value into the configuration.</p><p>This function is invoked upon saving the parent form when the option element is valid and when its input value has been changed compared to the initial value returned by <a href="LuCI.form.AbstractValue.html#cfgvalue"><code>cfgvalue()</code></a>.</p><p>The default implementation simply sets the given input value in the UCI configuration (or the associated JavaScript object property in case of <a href="LuCI.form.JSONMap.html"><code>JSONMap</code></a> forms). It may be overridden by user code to implement alternative save logic, e.g. to transform the input value before it is written.</p></div><div class="method-member-container flex flex-col w-100 overflow-auto mt-20"><strong>Parameters:</strong><table class="params"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The configuration section ID</p></td></tr><tr><td class="name"><code>formvalue</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">Array.<string></span></td><td class="description last"><p>The input value to write.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="inherited-from bold">Inherited From</dt><dd class="inherited-from"><ul><li><a href="LuCI.form.AbstractValue.html#write">LuCI.form.AbstractValue#write</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="form.js.html">form.js</a>, <a href="form.js.html#line2190">line 2190</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">null</span></dd></dl></div></article></section></div></div></div><div class="search-container" id="PkfLWpAbet" style="display:none"><div class="wrapper" id="iCxFxjkHbP"><button class="icon-button search-close-button" id="VjLlGakifb" aria-label="close search"><svg><use xlink:href="#close-icon"></use></svg></button><div class="search-box-c"><svg><use xlink:href="#search-icon"></use></svg> <input type="text" id="vpcKVYIppa" class="search-input" placeholder="Search..." autofocus></div><div class="search-result-c" id="fWwVHRuDuN"><span class="search-result-c-text">Type anything to view search result</span></div></div></div><div class="mobile-menu-icon-container"><button class="icon-button" id="mobile-menu" data-isopen="false" aria-label="menu"><svg><use xlink:href="#menu-icon"></use></svg></button></div><div id="mobile-sidebar" class="mobile-sidebar-container"><div class="mobile-sidebar-wrapper"><a href="/" class="sidebar-title sidebar-title-anchor">LuCI Documentation</a><div class="mobile-nav-links"><div class="github-home navbar-item"><a id="" href="https://github.com/openwrt/luci" target="">GitHub Project Page</a></div></div><div class="mobile-sidebar-items-c"><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-tutorials"><div>Tutorials</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="tutorial-JsonRpcHowTo.html">Using JSON RPC daemon</a></div><div class="sidebar-section-children"><a href="tutorial-Modules.html">Modules</a></div><div class="sidebar-section-children"><a href="tutorial-ThemesHowTo.html">Making Themes</a></div><div class="sidebar-section-children"><a href="tutorial-i18n.html">Internationalisation - i18n</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-modules"><div>Modules</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.module_cbi.html">cbi</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-classes"><div>Classes</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="LuCI.html">LuCI</a></div><div class="sidebar-section-children"><a href="LuCI.baseclass.html">baseclass</a></div><div class="sidebar-section-children"><a href="LuCI.dom.html">dom</a></div><div class="sidebar-section-children"><a href="LuCI.form.html">form</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractSection.html">AbstractSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.AbstractValue.html">AbstractValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Button.html">Button</a></div><div class="sidebar-section-children"><a href="LuCI.form.DirectoryPicker.html">DirectoryPicker</a></div><div class="sidebar-section-children"><a href="LuCI.form.DummyValue.html">DummyValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.form.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.form.Flag.html">Flag</a></div><div class="sidebar-section-children"><a href="LuCI.form.GridSection.html">GridSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.HiddenValue.html">HiddenValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.JSONMap.html">JSONMap</a></div><div class="sidebar-section-children"><a href="LuCI.form.ListValue.html">ListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.Map.html">Map</a></div><div class="sidebar-section-children"><a href="LuCI.form.MultiValue.html">MultiValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.NamedSection.html">NamedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.RangeSliderValue.html">RangeSliderValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.RichListValue.html">RichListValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.SectionValue.html">SectionValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TableSection.html">TableSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.TextValue.html">TextValue</a></div><div class="sidebar-section-children"><a href="LuCI.form.TypedSection.html">TypedSection</a></div><div class="sidebar-section-children"><a href="LuCI.form.Value.html">Value</a></div><div class="sidebar-section-children"><a href="LuCI.fs.html">fs</a></div><div class="sidebar-section-children"><a href="LuCI.headers.html">headers</a></div><div class="sidebar-section-children"><a href="LuCI.network.html">network</a></div><div class="sidebar-section-children"><a href="LuCI.network.Device.html">Device</a></div><div class="sidebar-section-children"><a href="LuCI.network.Hosts.html">Hosts</a></div><div class="sidebar-section-children"><a href="LuCI.network.Protocol.html">Protocol</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiDevice.html">WifiDevice</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiNetwork.html">WifiNetwork</a></div><div class="sidebar-section-children"><a href="LuCI.network.WifiVlan.html">WifiVlan</a></div><div class="sidebar-section-children"><a href="LuCI.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.request.html">request</a></div><div class="sidebar-section-children"><a href="LuCI.request.poll.html">poll</a></div><div class="sidebar-section-children"><a href="LuCI.response.html">response</a></div><div class="sidebar-section-children"><a href="LuCI.rpc.html">rpc</a></div><div class="sidebar-section-children"><a href="LuCI.session.html">session</a></div><div class="sidebar-section-children"><a href="LuCI.uci.html">uci</a></div><div class="sidebar-section-children"><a href="LuCI.ui.html">ui</a></div><div class="sidebar-section-children"><a href="LuCI.ui.AbstractElement.html">AbstractElement</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Checkbox.html">Checkbox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.ComboButton.html">ComboButton</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Combobox.html">Combobox</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Dropdown.html">Dropdown</a></div><div class="sidebar-section-children"><a href="LuCI.ui.DynamicList.html">DynamicList</a></div><div class="sidebar-section-children"><a href="LuCI.ui.FileUpload.html">FileUpload</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Hiddenfield.html">Hiddenfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.RangeSlider.html">RangeSlider</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Select.html">Select</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textarea.html">Textarea</a></div><div class="sidebar-section-children"><a href="LuCI.ui.Textfield.html">Textfield</a></div><div class="sidebar-section-children"><a href="LuCI.ui.changes.html">changes</a></div><div class="sidebar-section-children"><a href="LuCI.ui.menu.html">menu</a></div><div class="sidebar-section-children"><a href="LuCI.ui.tabs.html">tabs</a></div><div class="sidebar-section-children"><a href="LuCI.validation.html">validation</a></div><div class="sidebar-section-children"><a href="LuCI.validation.Validator.html">Validator</a></div><div class="sidebar-section-children"><a href="LuCI.validation.ValidatorFactory.html">ValidatorFactory</a></div><div class="sidebar-section-children"><a href="LuCI.view.html">view</a></div><div class="sidebar-section-children"><a href="LuCI.xhr.html">xhr</a></div></div><div class="sidebar-section-title with-arrow" data-isopen="false" id="sidebar-externals"><div>Externals</div><svg><use xlink:href="#down-icon"></use></svg></div><div class="sidebar-section-children-container"><div class="sidebar-section-children"><a href="external-String.html">String</a></div></div></div><div class="mobile-navbar-actions"><div class="navbar-right-item"><button class="icon-button search-button" aria-label="open-search"><svg><use xlink:href="#search-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button theme-toggle" aria-label="toggle-theme"><svg><use class="theme-svg-use" xlink:href="#dark-theme-icon"></use></svg></button></div><div class="navbar-right-item"><button class="icon-button font-size" aria-label="change-font-size"><svg><use xlink:href="#font-size-icon"></use></svg></button></div></div></div></div><script type="text/javascript" src="scripts/core.min.js"></script><script src="scripts/search.min.js" defer="defer"></script><script src="scripts/third-party/fuse.js" defer="defer"></script><script type="text/javascript">var tocbotInstance=tocbot.init({tocSelector:"#eed4d2a0bfd64539bb9df78095dec881",contentSelector:".main-content",headingSelector:"h1, h2, h3",hasInnerContainers:!0,scrollContainer:".main-content",headingsOffset:130,onClick:bringLinkToView})</script></body></html> |