Files
luci/jsapi/LuCI.form.JSONMap.html
2026-02-22 16:19:14 +00:00

3 lines
51 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="favicon.png"><link type="text/css" rel="stylesheet" href="extra.css"><title>Class: JSONMap</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="JSONMap-title" class="has-anchor"><span class="ancestors"><a href="LuCI.html">LuCI</a><a href="LuCI.form.html">.form</a>.</span> JSONMap</h1><div class="class-description"><p>A <code>JSONMap</code> class functions similar to <a href="LuCI.form.Map.html"><code>LuCI.form.Map</code></a> but uses a multidimensional JavaScript object instead of UCI configuration as a data source.</p></div></header><article><div class="container-overview"><h2 id="constructor" class="has-anchor">Constructor</h2><h3 class="name has-anchor" id="JSONMap"><span class="type-signature"></span>new JSONMap<span class="signature">(data, title<span class="signature-attributes">opt</span>, description<span class="signature-attributes">opt</span>)</span></h3><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>data</code></td><td class="type"><span class="param-type">Object.&lt;string, (Object.&lt;string, *>|Array.&lt;Object.&lt;string, *>>)></span></td><td class="attributes"></td><td class="description last"><p>The JavaScript object to use as a data source. Internally, the object is converted into an UCI-like format. Its top-level keys are treated like UCI section types while the object or array-of-object values are treated as section contents.</p></td></tr><tr><td class="name"><code>title</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The title caption of the form. A form title is usually rendered as a separate headline element before the actual form contents. If omitted, the corresponding headline element will not be rendered.</p></td></tr><tr><td class="name"><code>description</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The description text of the form which is usually rendered as a text paragraph below the form title and before the actual form contents. If omitted, the corresponding paragraph element will not be rendered.</p></td></tr></tbody></table></div><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#line814">line 814</a></li></ul></dd></div></dl></div><h2 id="Extends" class="subsection-title has-anchor">Extends</h2><ul><li><a href="LuCI.form.Map.html">LuCI.form.Map</a></li></ul><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="readonly"><span class="type-signature"></span>readonly<span class="type-signature"> :boolean</span></h3><div class="description"><p>Toggle readonly state of the form.</p><p>If set to <code>true</code>, the Map instance is marked readonly and any form option elements added to it will inherit the readonly state.</p><p>If left unset, the Map will test the access permission of the primary uci configuration upon loading and mark the form readonly if no write permissions are granted.</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.Map.html#readonly">LuCI.form.Map#readonly</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#line397">line 397</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="chain"><span class="type-signature"></span>chain<span class="signature">(config)</span></h3><div class="description"><p>Tie another UCI configuration to the map.</p><p>By default, a map instance will only load the UCI configuration file specified in the constructor, but sometimes access to values from further configuration files is required. This function allows for such use cases by registering further UCI configuration files which are needed by the map.</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>config</code></td><td class="type"><span class="param-type">string</span></td><td class="description last"><p>The additional UCI configuration file to tie to the map. If the given config is in the list of required files already, it will be 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.Map.html#chain">LuCI.form.Map#chain</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#line506">line 506</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="findElement"><span class="type-signature"></span>findElement<span class="signature">(&hellip;args, selector_or_attrname, attrvalue<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Node|null}</span></h3><div class="description"><p>Return the first DOM node within this Map which matches the given search parameters. This function is essentially a convenience wrapper around <code>findElements()</code> which only returns the first found node.</p><p>This function is sensitive to the amount of arguments passed to it; if only one argument is specified, it is used as selector-expression as-is. When two arguments are passed, the first argument is treated as an attribute name, the second one as an attribute value to match.</p><p>As an example, <code>map.findElement('input')</code> would find the first <code>&lt;input&gt;</code> node while <code>map.findElement('type', 'text')</code> would find the first DOM node with a <code>type=&quot;text&quot;</code> attribute.</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>args</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes">&lt;repeatable><br></td><td class="description last"><p>argument array</p></td></tr><tr><td class="name"><code>selector_or_attrname</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>If invoked with only one parameter, this argument is a <code>querySelector()</code> compatible selector expression. If invoked with two parameters, this argument is the attribute name to filter for.</p></td></tr><tr><td class="name"><code>attrvalue</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>In case the function is invoked with two parameters, this argument specifies the attribute value to match.</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.Map.html#findElement">LuCI.form.Map#findElement</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#line488">line 488</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws an <code>InternalError</code> if more than two function parameters are passed.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">InternalError</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 first found DOM node or <code>null</code> if no element matched.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Node</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="findElements"><span class="type-signature"></span>findElements<span class="signature">(&hellip;args, selector_or_attrname, attrvalue<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {NodeList}</span></h3><div class="description"><p>Return all DOM nodes within this Map which match the given search parameters. This function is essentially a convenience wrapper around <code>querySelectorAll()</code>.</p><p>This function is sensitive to the amount of arguments passed to it; if only one argument is specified, it is used as selector-expression as-is. When two arguments are passed, the first argument is treated as an attribute name, the second one as an attribute value to match.</p><p>As an example, <code>map.findElements('input')</code> would find all <code>&lt;input&gt;</code> nodes while <code>map.findElements('type', 'text')</code> would find any DOM node with a <code>type=&quot;text&quot;</code> attribute.</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>args</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes">&lt;repeatable><br></td><td class="description last"><p>argument array</p></td></tr><tr><td class="name"><code>selector_or_attrname</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>If invoked with only one parameter, this argument is a <code>querySelectorAll()</code> compatible selector expression. If invoked with two parameters, this argument is the attribute name to filter for.</p></td></tr><tr><td class="name"><code>attrvalue</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>In case the function is invoked with two parameters, this argument specifies the attribute value to match.</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.Map.html#findElements">LuCI.form.Map#findElements</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#line443">line 443</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws an <code>InternalError</code> if more than two function parameters are passed.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">InternalError</span></dd></dl></dt><dd></dd></dl></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a (possibly empty) DOM <code>NodeList</code> containing the found DOM nodes.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">NodeList</span></dd></dl></div><h3 class="name has-anchor" id="load"><span class="type-signature"></span>load<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;void>}</span></h3><div class="description"><p>Load the configuration covered by this map.</p><p>The <code>load()</code> function first loads all referenced UCI configurations, then it recursively walks the form element tree and invokes the load function of each child element.</p></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.Map.html#load">LuCI.form.Map#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#line560">line 560</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 entire form completed loading all data. The promise may reject with an error if any configuration failed to load or if any of the child elements' load functions reject with an error.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;void></span></dd></dl></div><h3 class="name has-anchor" id="lookupOption"><span class="type-signature"></span>lookupOption<span class="signature">(name, section_id<span class="signature-attributes">opt</span>, config_name<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Array.&lt;<a href="LuCI.form.AbstractValue.html">LuCI.form.AbstractValue</a>, string>|null}</span></h3><div class="description"><p>Find a form option 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>Attributes</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The name or the full ID of the option element to look up.</p></td></tr><tr><td class="name"><code>section_id</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The ID of the UCI section that contains the option to look up. May be omitted if a full ID is passed as the first argument.</p></td></tr><tr><td class="name"><code>config_name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;optional><br></td><td class="description last"><p>The name of the UCI configuration the option instance belongs to. Defaults to the main UCI configuration of the map if omitted.</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.Map.html#lookupOption">LuCI.form.Map#lookupOption</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#line732">line 732</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a two-element array containing the form option instance as the first item and the corresponding UCI section ID as the second item. Returns <code>null</code> if the option could not be found.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Array.&lt;<a href="LuCI.form.AbstractValue.html">LuCI.form.AbstractValue</a>, string></span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="parse"><span class="type-signature"></span>parse<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;void>}</span></h3><div class="description"><p>Parse the form input values.</p><p>The <code>parse()</code> function recursively walks the form element tree and triggers input value reading and validation for each child element.</p><p>Elements which are hidden due to unsatisfied dependencies are skipped.</p></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.Map.html#parse">LuCI.form.Map#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#line590">line 590</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 entire form completed parsing all input values. The returned promise is rejected if any parsed values do not meet the validation constraints of their respective elements.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;void></span></dd></dl></div><h3 class="name has-anchor" id="render"><span class="type-signature"></span>render<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;Node>}</span></h3><div class="description"><p>Render the form markup.</p></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.Map.html#render">LuCI.form.Map#render</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#line661">line 661</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 to the top-level form DOM node once the rendering is complete.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;Node></span></dd></dl></div><h3 class="name has-anchor" id="reset"><span class="type-signature"></span>reset<span class="signature">()</span><span class="type-signature"> &rarr; {Promise.&lt;Node>}</span></h3><div class="description"><p>Reset the form by re-rendering its contents. This will revert all unsaved user inputs to their initial form state.</p></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.Map.html#reset">LuCI.form.Map#reset</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#line650">line 650</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 to the top-level form DOM node once the re-rendering is complete.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;Node></span></dd></dl></div><h3 class="name has-anchor" id="save"><span class="type-signature"></span>save<span class="signature">(cb<span class="signature-attributes">opt</span>, silent<span class="signature-attributes">opt</span>)</span><span class="type-signature"> &rarr; {Promise.&lt;void>}</span></h3><div class="description"><p>Save the form input values.</p><p>This function parses the current form, saves the resulting UCI changes, reloads the UCI configuration data and redraws the form 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>Attributes</th><th>Default</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>cb</code></td><td class="type"><span class="param-type">function</span></td><td class="attributes">&lt;optional><br></td><td class="default"></td><td class="description last"><p>An optional callback function that is invoked after the form is parsed but before the changed UCI data is saved. This is useful to perform additional data manipulation steps before saving the changes.</p></td></tr><tr><td class="name"><code>silent</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes">&lt;optional><br></td><td class="default">false</td><td class="description last"><p>If set to <code>true</code>, trigger an alert message to the user in case saving the form data fails. Otherwise fail silently.</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.Map.html#save">LuCI.form.Map#save</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#line620">line 620</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 entire save operation is complete. The returned promise is rejected if any step of the save operation failed.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type">Promise.&lt;void></span></dd></dl></div><h3 class="name has-anchor" id="section"><span class="type-signature"></span>section<span class="signature">(cbiClass, &hellip;args)</span><span class="type-signature"> &rarr; {<a href="LuCI.form.AbstractSection.html">LuCI.form.AbstractSection</a>}</span></h3><div class="description"><p>Add a configuration section to the map.</p><p>LuCI forms follow the structure of the underlying UCI configurations. This means that a map, which represents a single UCI configuration, is divided into multiple sections which in turn contain an arbitrary number of options.</p><p>While UCI itself only knows two kinds of sections - named and anonymous ones - the form class offers various flavors of form section elements to present configuration sections in different ways. Refer to the documentation of the different section classes for details.</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>cbiClass</code></td><td class="type"><span class="param-type"><a href="LuCI.form.AbstractSection.html">LuCI.<wbr>form.<wbr>AbstractSection</a></span></td><td class="attributes"></td><td class="description last"><p>(sectionclass) The section class to use for rendering the configuration section. Note that this value must be the class itself, not a class instance obtained from calling <code>new</code>. It must also be a class derived from <a href="LuCI.form.AbstractSection.html"><code>AbstractSection</code></a>.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes">&lt;repeatable><br></td><td class="description last"><p>(classargs) Additional arguments which are passed as-is to the constructor of the given section class. Refer to the class specific constructor documentation for details.</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.Map.html#section">LuCI.form.Map#section</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#line538">line 538</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the instantiated section class instance.</p></div><dl class="param-type"><dt>Type:&nbsp;</dt><dd><span class="param-type"><a href="LuCI.form.AbstractSection.html">LuCI.<wbr>form.<wbr>AbstractSection</a></span></dd></dl></div><h3 class="name has-anchor" id="stripTags"><span class="type-signature"></span>stripTags<span class="signature">(s)</span><span class="type-signature"> &rarr; {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:&nbsp;</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, &hellip;args)</span><span class="type-signature"> &rarr; {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">&lt;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:&nbsp;</dt><dd><span class="param-type">string</span> |<wbr> <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>