mirror of
https://github.com/openwrt/luci.git
synced 2026-04-15 19:01:56 +00:00
3 lines
75 KiB
HTML
3 lines
75 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: LuCI</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="LuCI-title" class="has-anchor">LuCI</h1></header><article><div class="container-overview"><h3 class="name has-anchor" id="LuCI"><span class="type-signature"></span>new LuCI<span class="signature">(window, document, undefined)</span></h3><div class="description"><p>This is the LuCI base class. It is automatically instantiated and accessible using the global <code>L</code> variable.</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>window</code></td><td class="type"><span class="param-type">Window</span></td><td class="description last"><p>The browser global <code>window</code> object.</p></td></tr><tr><td class="name"><code>document</code></td><td class="type"><span class="param-type">Document</span></td><td class="description last"><p>The DOM <code>document</code> root for the current page.</p></td></tr><tr><td class="name"><code>undefined</code></td><td class="type"><span class="param-type">undefined</span></td><td class="description last"><p>Local <code>undefined</code> slot (prevents shadowing and ensures <code>undefined</code> is the real undefined value).</p></td></tr></tbody></table></div><b class="subsection-title">Properties</b><div class="allow-overflow"><table class="props"><thead><tr><th>Name</th><th>Type</th><th class="last">Description</th></tr></thead><tbody><tr><td class="name"><code>env</code></td><td class="type"><span class="param-type">object</span></td><td class="description last"><p>The environment settings to use for the LuCI runtime.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line1">line 1</a></li></ul></dd></div></dl></div><h2 id="classes" class="subsection-title has-anchor">Classes</h2><dl><dt><a href="LuCI.baseclass.html">baseclass</a></dt><dd></dd><dt><a href="LuCI.dom.html">dom</a></dt><dd></dd><dt><a href="LuCI.form.html">form</a></dt><dd></dd><dt><a href="LuCI.fs.html">fs</a></dt><dd></dd><dt><a href="LuCI.headers.html">headers</a></dt><dd></dd><dt><a href="LuCI.network.html">network</a></dt><dd></dd><dt><a href="LuCI.poll.html">poll</a></dt><dd></dd><dt><a href="LuCI.request.html">request</a></dt><dd></dd><dt><a href="LuCI.response.html">response</a></dt><dd></dd><dt><a href="LuCI.rpc.html">rpc</a></dt><dd></dd><dt><a href="LuCI.session.html">session</a></dt><dd></dd><dt><a href="LuCI.uci.html">uci</a></dt><dd></dd><dt><a href="LuCI.ui.html">ui</a></dt><dd></dd><dt><a href="LuCI.validation.html">validation</a></dt><dd></dd><dt><a href="LuCI.view.html">view</a></dt><dd></dd><dt><a href="LuCI.xhr.html">xhr</a></dt><dd></dd></dl><h2 id="namespaces" class="subsection-title has-anchor">Namespaces</h2><dl><dt><a href="LuCI.validation.html">validation</a></dt><dd></dd></dl><h2 id="members" class="subsection-title has-anchor">Members</h2><h3 class="name has-anchor" id="Class"><span class="type-signature"></span>Class<span class="type-signature"></span></h3><div class="description"><p>Legacy <code>L.Class</code> class alias. New view code should use <code>'require baseclass';</code> to request the <code>LuCI.baseclass</code> class.</p></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3356">line 3356</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="Poll"><span class="type-signature"></span>Poll<span class="type-signature"></span></h3><div class="description"><p>Legacy <code>L.Poll</code> class alias. New view code should use <code>'require poll';</code> to request the <code>LuCI.poll</code> class.</p></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3336">line 3336</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="Request"><span class="type-signature"></span>Request<span class="type-signature"></span></h3><div class="description"><p>Legacy <code>L.Request</code> class alias. New view code should use <code>'require request';</code> to request the <code>LuCI.request</code> class.</p></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3346">line 3346</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="dom"><span class="type-signature"></span>dom<span class="type-signature"></span></h3><div class="description"><p>Legacy <code>L.dom</code> class alias. New view code should use <code>'require dom';</code> to request the <code>LuCI.dom</code> class.</p></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3316">line 3316</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="env"><span class="type-signature"></span>env<span class="type-signature"></span></h3><div class="description"><p>The <code>env</code> object holds environment settings used by LuCI, such as request timeouts, base URLs, etc.</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2779">line 2779</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="naturalCompare"><span class="type-signature"></span>naturalCompare<span class="type-signature"> :function</span></h3><div class="description"><p>Compares two values numerically and returns -1, 0, or 1 depending on whether the first value is smaller, equal to, or larger than the second one respectively.</p><p>This function is meant to be used as a comparator function for Array.sort().</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="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3041">line 3041</a></li></ul></dd></div></dl><h3 class="name has-anchor" id="view"><span class="type-signature"></span>view<span class="type-signature"></span></h3><div class="description"><p>Legacy <code>L.view</code> class alias. New view code should use <code>'require view';</code> to request the <code>LuCI.view</code> class.</p></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3326">line 3326</a></li></ul></dd></div></dl><h2 id="methods" class="subsection-title has-anchor">Methods</h2><h3 class="name has-anchor" id="bind"><span class="type-signature"></span>bind<span class="signature">(fn, self, …args<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {function}</span></h3><div class="description"><p>Return a bound function using the given <code>self</code> as <code>this</code> context and any further arguments as parameters to the bound function.</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>fn</code></td><td class="type"><span class="param-type">function</span></td><td class="attributes"></td><td class="description last"><p>The function to bind.</p></td></tr><tr><td class="name"><code>self</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes"></td><td class="description last"><p>The value to bind as <code>this</code> context to the specified function.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>Zero or more variable arguments which are bound to the function as parameters.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2415">line 2415</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the bound function.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="error"><span class="type-signature"></span>error<span class="signature">(type<span class="signature-attributes">opt</span>, fmt<span class="signature-attributes">opt</span>, …args<span class="signature-attributes">opt</span>)</span></h3><div class="description"><p>A wrapper around <a href="LuCI.html#raise"><code>raise()</code></a> which also renders the error either as modal overlay when <code>ui.js</code> is already loaded or directly into the view body.</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>type</code></td><td class="type"><span class="param-type">Error</span> |<wbr> <span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">Error</td><td class="description last"><p>Either a string specifying the type of the error to throw or an existing <code>Error</code> instance to copy.</p></td></tr><tr><td class="name"><code>fmt</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">Unspecified error</td><td class="description last"><p>A format string which is used to form the error message, together with all subsequent optional arguments.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="default"></td><td class="description last"><p>Zero or more variable arguments to the supplied format string.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2374">line 2374</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws the created error object with the captured stack trace appended to the message and the type set to the given type argument or copied from the given error instance.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">Error</span></dd></dl></dt><dd></dd></dl></div><h3 class="name has-anchor" id="fspath"><span class="type-signature"></span>fspath<span class="signature">(…parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Construct an absolute filesystem path relative to the server document root.</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>parts</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>An array of parts to join into a path.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2794">line 2794</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return the joined path.</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="get"><span class="type-signature"></span>get<span class="signature">(url, args<span class="signature-attributes">opt</span>, cb)</span><span class="type-signature"> → {Promise.<null>}</span></h3><div class="description"><p>Issues a GET request to the given url and invokes the specified callback function. The function is a wrapper around <a href="LuCI.request.html#request"><code>Request.request()</code></a>.</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>url</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The URL to request.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">Object.<string, string></span></td><td class="attributes"><optional><br></td><td class="description last"><p>Additional query string arguments to append to the URL.</p></td></tr><tr><td class="name"><code>cb</code></td><td class="type"><span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.<wbr>requestCallbackFn</a></span></td><td class="attributes"></td><td class="description last"><p>The callback function to invoke when the request finishes.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3158">line 3158</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 <code>null</code> when concluded.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<null></span></dd></dl></div><h3 class="name has-anchor" id="halt"><span class="type-signature"></span>halt<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Deprecated wrapper around <code>Poll.stop()</code>.</p></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3293">line 3293</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> when the polling loop has been stopped or <code>false</code> when it didn't run to begin with.</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="hasSystemFeature"><span class="type-signature"></span>hasSystemFeature<span class="signature">(feature, subfeature<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean|null}</span></h3><div class="description"><p>Test whether a particular system feature is available, such as hostapd SAE support or an installed firewall. The features are queried once at the beginning of the LuCI session and cached in <code>SessionStorage</code> throughout the lifetime of the associated tab or browser window.</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>feature</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The feature to test. For a detailed list of known feature flags, see <code>/modules/luci-base/root/usr/share/rpcd/ucode/luci</code>.</p></td></tr><tr><td class="name"><code>subfeature</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Some feature classes like <code>hostapd</code> provide sub-feature flags, such as <code>sae</code> or <code>11w</code> support. The <code>subfeature</code> argument can be used to query these.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2674">line 2674</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return <code>true</code> if the queried feature (and sub-feature) is available or <code>false</code> if the requested feature isn't present or known. Return <code>null</code> when a sub-feature was queried for a feature which has no sub-features.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="hasViewPermission"><span class="type-signature"></span>hasViewPermission<span class="signature">()</span><span class="type-signature"> → {boolean|null}</span></h3><div class="description"><p>Check whether a view has sufficient permissions.</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3259">line 3259</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns <code>null</code> if the current session has no permission at all to load resources required by the view. Returns <code>false</code> if readonly permissions are granted or <code>true</code> if at least one required ACL group is granted with write permissions.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">boolean</span> |<wbr> <span class="param-type">null</span></dd></dl></div><h3 class="name has-anchor" id="isArguments"><span class="type-signature"></span>isArguments<span class="signature">(val<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Tests whether the passed argument is a function arguments object.</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>val</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes"><optional><br></td><td class="description last"><p>The value to test</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2969">line 2969</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 given value is a function arguments object, else 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="isObject"><span class="type-signature"></span>isObject<span class="signature">(val<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Tests whether the passed argument is a JavaScript object. This function is meant to be an object counterpart to the standard <code>Array.isArray()</code> function.</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>val</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes"><optional><br></td><td class="description last"><p>The value to test</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2952">line 2952</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 given value is of a type object and not <code>null</code>, else 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="location"><span class="type-signature"></span>location<span class="signature">()</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Return the complete URL path to the current view.</p></div><dl class="details"><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line2932">line 2932</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the URL path to the current view.</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="media"><span class="type-signature"></span>media<span class="signature">(…parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Construct a URL path relative to the media resource path of the LuCI ui (usually <code>/luci-static/$theme_name</code>).</p><p>The resulting URL is guaranteed to contain only the characters <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, <code>.</code>, <code>%</code>, <code>,</code>, <code>;</code>, and <code>-</code> as well as <code>/</code> for the path separator. Suffixing '?x=y&foo=bar' URI parameters also limited to the aforementioned characters is permissible.</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>parts</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>An array of parts to join into a URL path. Parts may contain slashes and any of the other characters mentioned above.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2919">line 2919</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the resulting URL path.</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="path"><span class="type-signature"></span>path<span class="signature">(prefix<span class="signature-attributes">opt</span>, …parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Construct a relative URL path from the given prefix and parts. The resulting URL is guaranteed to contain only the characters <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, <code>.</code>, <code>%</code>, <code>,</code>, <code>;</code>, and <code>-</code> as well as <code>/</code> for the path separator. Suffixing '?x=y&foo=bar' URI parameters also limited to the aforementioned characters is permissible.</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>prefix</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="description last"><p>The prefix to join the given parts with. If the <code>prefix</code> is omitted, it defaults to an empty string.</p></td></tr><tr><td class="name"><code>parts</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>An array of parts to join into a URL path. Parts may contain slashes and any of the other characters mentioned above.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2833">line 2833</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Return the joined URL path.</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="poll"><span class="type-signature"></span>poll<span class="signature">(interval, url, args<span class="signature-attributes">opt</span>, cb, post<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {function}</span></h3><div class="description"><p>Register a polling HTTP request that invokes the specified callback function. The function is a wrapper around <a href="LuCI.request.poll.html#add"><code>Request.poll.add()</code></a>.</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>interval</code></td><td class="type"><span class="param-type">number</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The poll interval to use. If set to a value less than or equal to <code>0</code>, it will default to the global poll interval configured in <code>LuCI.env.pollinterval</code>.</p></td></tr><tr><td class="name"><code>url</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The URL to request.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">Object.<string, string></span></td><td class="attributes"><optional><br></td><td class="default"></td><td class="description last"><p>Specifies additional arguments for the request. For GET requests, the arguments are appended to the URL as query string, for POST requests, they'll be added to the request body.</p></td></tr><tr><td class="name"><code>cb</code></td><td class="type"><span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.<wbr>requestCallbackFn</a></span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The callback function to invoke whenever a request finishes.</p></td></tr><tr><td class="name"><code>post</code></td><td class="type"><span class="param-type">boolean</span></td><td class="attributes"><optional><br></td><td class="default">false</td><td class="description last"><p>When set to <code>false</code> or not specified, poll requests will be made using the GET method. When set to <code>true</code>, POST requests will be issued. In the case of POST requests, the request body will contain an argument <code>token</code> with the current value of <code>LuCI.env.token</code> by default, regardless of the parameters specified with <code>args</code>.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3228">line 3228</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the internally created function that has been passed to <a href="LuCI.request.poll.html#add"><code>Request.poll.add()</code></a>. This value can be passed to <code>Poll.remove()</code> to remove the polling request.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">function</span></dd></dl></div><h3 class="name has-anchor" id="post"><span class="type-signature"></span>post<span class="signature">(url, args<span class="signature-attributes">opt</span>, cb)</span><span class="type-signature"> → {Promise.<null>}</span></h3><div class="description"><p>Issues a POST request to the given url and invokes the specified callback function. The function is a wrapper around <a href="LuCI.request.html#request"><code>Request.request()</code></a>. The request is sent using <code>application/x-www-form-urlencoded</code> encoding and will contain a field <code>token</code> with the current value of <code>LuCI.env.token</code> by default.</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>url</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="description last"><p>The URL to request.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">Object.<string, string></span></td><td class="attributes"><optional><br></td><td class="description last"><p>Additional post arguments to append to the request body.</p></td></tr><tr><td class="name"><code>cb</code></td><td class="type"><span class="param-type"><a href="LuCI.html#.requestCallbackFn">LuCI.<wbr>requestCallbackFn</a></span></td><td class="attributes"></td><td class="description last"><p>The callback function to invoke when the request finishes.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3186">line 3186</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 <code>null</code> when concluded.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<null></span></dd></dl></div><h3 class="name has-anchor" id="raise"><span class="type-signature"></span>raise<span class="signature">(type<span class="signature-attributes">opt</span>, fmt<span class="signature-attributes">opt</span>, …args<span class="signature-attributes">opt</span>)</span></h3><div class="description"><p>Captures the current stack trace and throws an error of the specified type as a new exception. Also logs the exception as an error to the debug console if it is available.</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>type</code></td><td class="type"><span class="param-type">Error</span> |<wbr> <span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">Error</td><td class="description last"><p>Either a string specifying the type of the error to throw or an existing <code>Error</code> instance to copy.</p></td></tr><tr><td class="name"><code>fmt</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br></td><td class="default">Unspecified error</td><td class="description last"><p>A format string which is used to form the error message, together with all subsequent optional arguments.</p></td></tr><tr><td class="name"><code>args</code></td><td class="type"><span class="param-type">*</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="default"></td><td class="description last"><p>Zero or more variable arguments to the supplied format string.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2308">line 2308</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><dl><dt><div class="param-desc"><p>Throws the created error object with the captured stack trace appended to the message and the type set to the given type argument or copied from the given error instance.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">Error</span></dd></dl></dt><dd></dd></dl></div><h3 class="name has-anchor" id="require"><span class="type-signature"></span>require<span class="signature">(name, from<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Promise.<<a href="LuCI.baseclass.html">LuCI.baseclass</a>>}</span></h3><div class="description"><p>Load an additional LuCI JavaScript class and its dependencies, instantiate it and return the resulting class instance. Each class is only loaded once. Subsequent attempts to load the same class will return the already instantiated class.</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>name</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"></td><td class="default"></td><td class="description last"><p>The name of the class to load in dotted notation. Dots will be replaced by spaces and joined with the runtime-determined base URL of LuCI.js to form an absolute URL to load the class file from.</p></td></tr><tr><td class="name"><code>from</code></td><td class="type"><span class="param-type">Array.<string></span></td><td class="attributes"><optional><br></td><td class="default">[]</td><td class="description last"><p>Optional dependency chain used during dependency resolution. This array contains the sequence of class names already being resolved (the caller stack). It is used to detect circular dependencies — if <code>name</code> appears in <code>from</code> a <code>DependencyError</code> is thrown.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2458">line 2458</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Throws:</strong><ul><li><dl><dt><div class="param-desc"><p>Throws a <code>DependencyError</code> when the class to load includes circular dependencies.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">DependencyError</span></dd></dl></dt><dd></dd></dl></li><li><dl><dt><div class="param-desc"><p>Throws <code>NetworkError</code> when the underlying <a href="LuCI.request.html"><code>LuCI.request</code></a> call failed.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">NetworkError</span></dd></dl></dt><dd></dd></dl></li><li><dl><dt><div class="param-desc"><p>Throws <code>SyntaxError</code> when the loaded class file code cannot be interpreted by <code>eval</code>.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">SyntaxError</span></dd></dl></dt><dd></dd></dl></li><li><dl><dt><div class="param-desc"><p>Throws <code>TypeError</code> when the class file could be loaded and interpreted, but when invoking its code did not yield a valid class instance.</p></div></dt><dd></dd><dt><dl><dt>Type</dt><dd><span class="param-type">TypeError</span></dd></dl></dt><dd></dd></dl></li></ul></div><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the instantiated class.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<<a href="LuCI.baseclass.html">LuCI.baseclass</a>></span></dd></dl></div><h3 class="name has-anchor" id="resolveDefault"><span class="type-signature"></span>resolveDefault<span class="signature">(value, defvalue)</span><span class="type-signature"> → {Promise.<*>}</span></h3><div class="description"><p>Returns a promise resolving with either the given value or with the given default in case the input value is a rejecting promise.</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>value</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>The value to resolve the promise with.</p></td></tr><tr><td class="name"><code>defvalue</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>The default value to resolve the promise with in case the given input value is a rejecting promise.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line3113">line 3113</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns a new promise resolving either to the given input value or to the given default value on error.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Promise.<*></span></dd></dl></div><h3 class="name has-anchor" id="resource"><span class="type-signature"></span>resource<span class="signature">(…parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Construct a URL path relative to the global static resource path of the LuCI ui (usually <code>/luci-static/resources</code>).</p><p>The resulting URL is guaranteed to contain only the characters <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, <code>.</code>, <code>%</code>, <code>,</code>, <code>;</code>, and <code>-</code> as well as <code>/</code> for the path separator. Suffixing '?x=y&foo=bar' URI parameters also limited to the aforementioned characters is permissible.</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>parts</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>An array of parts to join into a URL path. Parts may contain slashes and any of the other characters mentioned above.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2895">line 2895</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the resulting URL path.</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="run"><span class="type-signature"></span>run<span class="signature">()</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Deprecated wrapper around <code>Poll.start()</code>.</p></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3306">line 3306</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> when the polling loop has been started or <code>false</code> when it was already running.</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="sortedArray"><span class="type-signature"></span>sortedArray<span class="signature">(val)</span><span class="type-signature"> → {Array.<*>}</span></h3><div class="description"><p>Converts the given value to an array using toArray() if needed, performs a numerical sort using naturalCompare() and returns the result. If the input already is an array, no copy is being made and the sorting is performed in-place.</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>val</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>The input value to sort (and convert to an array if needed).</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line3058">line 3058</a></li></ul></dd></div><div class="details-item-container"><dt class="tag-see bold">See</dt><dd class="tag-see"><ul><li>toArray</li><li>naturalCompare</li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the resulting, numerically sorted array.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array.<*></span></dd></dl></div><h3 class="name has-anchor" id="sortedKeys"><span class="type-signature"></span>sortedKeys<span class="signature">(obj, key<span class="signature-attributes">opt</span>, sortmode<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {Array.<string>}</span></h3><div class="description"><p>Return an array of sorted object keys, optionally sorted by a different key or a different sorting mode.</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>obj</code></td><td class="type"><span class="param-type">object</span></td><td class="attributes"></td><td class="description last"><p>The object to extract the keys from. If the given value is not an object, the function will return an empty array.</p></td></tr><tr><td class="name"><code>key</code></td><td class="type"><span class="param-type">string</span> |<wbr> <span class="param-type">null</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Specifies the key to order by. This is mainly useful for nested objects of objects or objects of arrays when sorting shall not be performed by the primary object keys but by some other key pointing to a value within the nested values.</p></td></tr><tr><td class="name"><code>sortmode</code></td><td class="type"><span class="param-type">"addr"</span> |<wbr> <span class="param-type">"num"</span></td><td class="attributes"><optional><br></td><td class="description last"><p>Can be either <code>addr</code> or <code>num</code> to override the natural lexicographic sorting with a sorting suitable for IP/MAC style addresses or numeric values respectively.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2998">line 2998</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns an array containing the sorted keys of the given object.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array.<string></span></dd></dl></div><h3 class="name has-anchor" id="stop"><span class="type-signature"></span>stop<span class="signature">(entry)</span><span class="type-signature"> → {boolean}</span></h3><div class="description"><p>Deprecated wrapper around <code>Poll.remove()</code>.</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>entry</code></td><td class="type"><span class="param-type">function</span></td><td class="description last"><p>The polling function to remove.</p></td></tr></tbody></table></div><dl class="details"><div class="details-item-container"><dt class="important tag-deprecated bold">Deprecated</dt><dd class="tag-deprecated"><ul><li>Yes</li></ul></dd></div><div class="details-item-container"><dt class="tag-source bold">Source</dt><dd class="tag-source"><ul><li><a href="luci.js.html">luci.js</a>, <a href="luci.js.html#line3280">line 3280</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> when the function has been removed or <code>false</code> if it could not be found.</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="toArray"><span class="type-signature"></span>toArray<span class="signature">(val)</span><span class="type-signature"> → {Array.<*>}</span></h3><div class="description"><p>Converts the given value to an array. If the given value is of type array, it is returned as-is, values of a type object are returned as one-element array containing the object, empty strings and <code>null</code> values are returned as an empty array, all other values are converted using <code>String()</code>, trimmed, split on white space and returned as an array.</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>val</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>The value to convert into an array.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line3079">line 3079</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the resulting array.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">Array.<*></span></dd></dl></div><h3 class="name has-anchor" id="url"><span class="type-signature"></span>url<span class="signature">(…parts<span class="signature-attributes">opt</span>)</span><span class="type-signature"> → {string}</span></h3><div class="description"><p>Construct a URL with a path relative to the script path of the server side LuCI application (usually <code>/cgi-bin/luci</code>).</p><p>The resulting URL is guaranteed to contain only the characters <code>a-z</code>, <code>A-Z</code>, <code>0-9</code>, <code>_</code>, <code>.</code>, <code>%</code>, <code>,</code>, <code>;</code>, and <code>-</code> as well as <code>/</code> for the path separator. Suffixing '?x=y&foo=bar' URI parameters also limited to the aforementioned characters is permissible.</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>parts</code></td><td class="type"><span class="param-type">string</span></td><td class="attributes"><optional><br><repeatable><br></td><td class="description last"><p>An array of parts to join into a URL path. Parts may contain slashes and any of the other characters mentioned above.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line2871">line 2871</a></li></ul></dd></div></dl><div class="method-member-container mt-20"><strong>Returns:</strong><div class="param-desc"><p>Returns the resulting URL path.</p></div><dl class="param-type"><dt>Type: </dt><dd><span class="param-type">string</span></dd></dl></div><h2 id="type-definitions" class="subsection-title has-anchor">Type Definitions</h2><h3 class="name has-anchor" id=".requestCallbackFn"><span class="type-signature"></span>requestCallbackFn<span class="signature">(xhr, data, duration)</span></h3><div class="description"><p>The request callback function is invoked whenever an HTTP reply to a request made using the <code>L.get()</code>, <code>L.post()</code> or <code>L.poll()</code> function is timed out or received successfully.</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>xhr</code></td><td class="type"><span class="param-type">XMLHTTPRequest</span></td><td class="description last"><p>The XMLHTTPRequest instance used to make the request.</p></td></tr><tr><td class="name"><code>data</code></td><td class="type"><span class="param-type">*</span></td><td class="description last"><p>The response JSON if the response could be parsed as such, else <code>null</code>.</p></td></tr><tr><td class="name"><code>duration</code></td><td class="type"><span class="param-type">number</span></td><td class="description last"><p>The total duration of the request in milliseconds.</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="luci.js.html">luci.js</a>, <a href="luci.js.html#line3117">line 3117</a></li></ul></dd></div></dl></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> |