f85b82b7c6793c51ce9be7ef4a2a61138e6e6ab5
[oweals/luci.git] / docs / jsapi / uci.js.html
1 <!DOCTYPE html>
2 <html>
3 <head>
4     <meta charset="utf-8">
5     <title>Source: uci.js</title>
6     
7     
8     <script src="scripts/prettify/prettify.js"></script>
9     <script src="scripts/prettify/lang-css.js"></script>
10     <script src="scripts/jquery.min.js"></script>
11     <!--[if lt IE 9]>
12       <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13     <![endif]-->
14     <link type="text/css" rel="stylesheet" href="styles/prettify-tomorrow.css">
15     <link type="text/css" rel="stylesheet" href="styles/bootstrap.min.css">
16     <link type="text/css" rel="stylesheet" href="styles/jaguar.css">
17     
18     
19     <script>
20     var config = {"monospaceLinks":true,"cleverLinks":true,"default":{"outputSourceFiles":true}};
21     </script>
22     
23
24     
25 </head>
26 <body>
27 <div id="wrap" class="clearfix">
28     
29 <div class="navigation">
30     <h3 class="applicationName"><a href="index.html"></a></h3>
31
32     <div class="search">
33         <input id="search" type="text" class="form-control input-sm" placeholder="Search Documentations">
34     </div>
35     <ul class="list">
36     
37         <li class="item" data-name="LuCI">
38             <span class="title">
39                 <a href="LuCI.html">LuCI</a>
40                 
41             </span>
42             <ul class="members itemMembers">
43             
44             <span class="subtitle">Members</span>
45             
46                 <li data-name="LuCI#Class"><a href="LuCI.html#Class">Class</a></li>
47             
48                 <li data-name="LuCI#dom"><a href="LuCI.html#dom">dom</a></li>
49             
50                 <li data-name="LuCI#env"><a href="LuCI.html#env">env</a></li>
51             
52                 <li data-name="LuCI#Poll"><a href="LuCI.html#Poll">Poll</a></li>
53             
54                 <li data-name="LuCI#Request"><a href="LuCI.html#Request">Request</a></li>
55             
56                 <li data-name="LuCI#view"><a href="LuCI.html#view">view</a></li>
57             
58             </ul>
59             <ul class="typedefs itemMembers">
60             
61             <span class="subtitle">Typedefs</span>
62             
63                 <li data-name="LuCI.requestCallbackFn"><a href="LuCI.html#.requestCallbackFn">requestCallbackFn</a></li>
64             
65             </ul>
66             <ul class="typedefs itemMembers">
67             
68             </ul>
69             <ul class="methods itemMembers">
70             
71             <span class="subtitle">Methods</span>
72             
73                 <li data-name="LuCI#bind"><a href="LuCI.html#bind">bind</a></li>
74             
75                 <li data-name="LuCI#error"><a href="LuCI.html#error">error</a></li>
76             
77                 <li data-name="LuCI#get"><a href="LuCI.html#get">get</a></li>
78             
79                 <li data-name="LuCI#halt"><a href="LuCI.html#halt">halt</a></li>
80             
81                 <li data-name="LuCI#hasSystemFeature"><a href="LuCI.html#hasSystemFeature">hasSystemFeature</a></li>
82             
83                 <li data-name="LuCI#isObject"><a href="LuCI.html#isObject">isObject</a></li>
84             
85                 <li data-name="LuCI#location"><a href="LuCI.html#location">location</a></li>
86             
87                 <li data-name="LuCI#media"><a href="LuCI.html#media">media</a></li>
88             
89                 <li data-name="LuCI#path"><a href="LuCI.html#path">path</a></li>
90             
91                 <li data-name="LuCI#poll"><a href="LuCI.html#poll">poll</a></li>
92             
93                 <li data-name="LuCI#post"><a href="LuCI.html#post">post</a></li>
94             
95                 <li data-name="LuCI#raise"><a href="LuCI.html#raise">raise</a></li>
96             
97                 <li data-name="LuCI#require"><a href="LuCI.html#require">require</a></li>
98             
99                 <li data-name="LuCI#resolveDefault"><a href="LuCI.html#resolveDefault">resolveDefault</a></li>
100             
101                 <li data-name="LuCI#resource"><a href="LuCI.html#resource">resource</a></li>
102             
103                 <li data-name="LuCI#run"><a href="LuCI.html#run">run</a></li>
104             
105                 <li data-name="LuCI#sortedKeys"><a href="LuCI.html#sortedKeys">sortedKeys</a></li>
106             
107                 <li data-name="LuCI#stop"><a href="LuCI.html#stop">stop</a></li>
108             
109                 <li data-name="LuCI#toArray"><a href="LuCI.html#toArray">toArray</a></li>
110             
111                 <li data-name="LuCI#url"><a href="LuCI.html#url">url</a></li>
112             
113             </ul>
114             <ul class="events itemMembers">
115             
116             </ul>
117         </li>
118     
119         <li class="item" data-name="LuCI.baseclass">
120             <span class="title">
121                 <a href="LuCI.baseclass.html">LuCI.baseclass</a>
122                 
123             </span>
124             <ul class="members itemMembers">
125             
126             </ul>
127             <ul class="typedefs itemMembers">
128             
129             </ul>
130             <ul class="typedefs itemMembers">
131             
132             </ul>
133             <ul class="methods itemMembers">
134             
135             <span class="subtitle">Methods</span>
136             
137                 <li data-name="LuCI.baseclass.extend"><a href="LuCI.baseclass.html#.extend">extend</a></li>
138             
139                 <li data-name="LuCI.baseclass.instantiate"><a href="LuCI.baseclass.html#.instantiate">instantiate</a></li>
140             
141                 <li data-name="LuCI.baseclass.isSubclass"><a href="LuCI.baseclass.html#.isSubclass">isSubclass</a></li>
142             
143                 <li data-name="LuCI.baseclass.singleton"><a href="LuCI.baseclass.html#.singleton">singleton</a></li>
144             
145                 <li data-name="LuCI.baseclass#super"><a href="LuCI.baseclass.html#super">super</a></li>
146             
147                 <li data-name="LuCI.baseclass#varargs"><a href="LuCI.baseclass.html#varargs">varargs</a></li>
148             
149             </ul>
150             <ul class="events itemMembers">
151             
152             </ul>
153         </li>
154     
155         <li class="item" data-name="LuCI.dom">
156             <span class="title">
157                 <a href="LuCI.dom.html">LuCI.dom</a>
158                 
159             </span>
160             <ul class="members itemMembers">
161             
162             </ul>
163             <ul class="typedefs itemMembers">
164             
165             <span class="subtitle">Typedefs</span>
166             
167                 <li data-name="LuCI.dom~ignoreCallbackFn"><a href="LuCI.dom.html#~ignoreCallbackFn">ignoreCallbackFn</a></li>
168             
169             </ul>
170             <ul class="typedefs itemMembers">
171             
172             </ul>
173             <ul class="methods itemMembers">
174             
175             <span class="subtitle">Methods</span>
176             
177                 <li data-name="LuCI.dom#append"><a href="LuCI.dom.html#append">append</a></li>
178             
179                 <li data-name="LuCI.dom#attr"><a href="LuCI.dom.html#attr">attr</a></li>
180             
181                 <li data-name="LuCI.dom#bindClassInstance"><a href="LuCI.dom.html#bindClassInstance">bindClassInstance</a></li>
182             
183                 <li data-name="LuCI.dom#callClassMethod"><a href="LuCI.dom.html#callClassMethod">callClassMethod</a></li>
184             
185                 <li data-name="LuCI.dom#content"><a href="LuCI.dom.html#content">content</a></li>
186             
187                 <li data-name="LuCI.dom#create"><a href="LuCI.dom.html#create">create</a></li>
188             
189                 <li data-name="LuCI.dom#data"><a href="LuCI.dom.html#data">data</a></li>
190             
191                 <li data-name="LuCI.dom#elem"><a href="LuCI.dom.html#elem">elem</a></li>
192             
193                 <li data-name="LuCI.dom#findClassInstance"><a href="LuCI.dom.html#findClassInstance">findClassInstance</a></li>
194             
195                 <li data-name="LuCI.dom#isEmpty"><a href="LuCI.dom.html#isEmpty">isEmpty</a></li>
196             
197                 <li data-name="LuCI.dom#matches"><a href="LuCI.dom.html#matches">matches</a></li>
198             
199                 <li data-name="LuCI.dom#parent"><a href="LuCI.dom.html#parent">parent</a></li>
200             
201                 <li data-name="LuCI.dom#parse"><a href="LuCI.dom.html#parse">parse</a></li>
202             
203             </ul>
204             <ul class="events itemMembers">
205             
206             </ul>
207         </li>
208     
209         <li class="item" data-name="LuCI.fs">
210             <span class="title">
211                 <a href="LuCI.fs.html">LuCI.fs</a>
212                 
213             </span>
214             <ul class="members itemMembers">
215             
216             </ul>
217             <ul class="typedefs itemMembers">
218             
219             <span class="subtitle">Typedefs</span>
220             
221                 <li data-name="LuCI.fs.FileExecResult"><a href="LuCI.fs.html#.FileExecResult">FileExecResult</a></li>
222             
223                 <li data-name="LuCI.fs.FileStatEntry"><a href="LuCI.fs.html#.FileStatEntry">FileStatEntry</a></li>
224             
225             </ul>
226             <ul class="typedefs itemMembers">
227             
228             </ul>
229             <ul class="methods itemMembers">
230             
231             <span class="subtitle">Methods</span>
232             
233                 <li data-name="LuCI.fs#exec"><a href="LuCI.fs.html#exec">exec</a></li>
234             
235                 <li data-name="LuCI.fs#exec_direct"><a href="LuCI.fs.html#exec_direct">exec_direct</a></li>
236             
237                 <li data-name="LuCI.fs#lines"><a href="LuCI.fs.html#lines">lines</a></li>
238             
239                 <li data-name="LuCI.fs#list"><a href="LuCI.fs.html#list">list</a></li>
240             
241                 <li data-name="LuCI.fs#read"><a href="LuCI.fs.html#read">read</a></li>
242             
243                 <li data-name="LuCI.fs#read_direct"><a href="LuCI.fs.html#read_direct">read_direct</a></li>
244             
245                 <li data-name="LuCI.fs#remove"><a href="LuCI.fs.html#remove">remove</a></li>
246             
247                 <li data-name="LuCI.fs#stat"><a href="LuCI.fs.html#stat">stat</a></li>
248             
249                 <li data-name="LuCI.fs#trimmed"><a href="LuCI.fs.html#trimmed">trimmed</a></li>
250             
251                 <li data-name="LuCI.fs#write"><a href="LuCI.fs.html#write">write</a></li>
252             
253             </ul>
254             <ul class="events itemMembers">
255             
256             </ul>
257         </li>
258     
259         <li class="item" data-name="LuCI.headers">
260             <span class="title">
261                 <a href="LuCI.headers.html">LuCI.headers</a>
262                 
263             </span>
264             <ul class="members itemMembers">
265             
266             </ul>
267             <ul class="typedefs itemMembers">
268             
269             </ul>
270             <ul class="typedefs itemMembers">
271             
272             </ul>
273             <ul class="methods itemMembers">
274             
275             <span class="subtitle">Methods</span>
276             
277                 <li data-name="LuCI.headers#get"><a href="LuCI.headers.html#get">get</a></li>
278             
279                 <li data-name="LuCI.headers#has"><a href="LuCI.headers.html#has">has</a></li>
280             
281             </ul>
282             <ul class="events itemMembers">
283             
284             </ul>
285         </li>
286     
287         <li class="item" data-name="LuCI.network">
288             <span class="title">
289                 <a href="LuCI.network.html">LuCI.network</a>
290                 
291             </span>
292             <ul class="members itemMembers">
293             
294             </ul>
295             <ul class="typedefs itemMembers">
296             
297             <span class="subtitle">Typedefs</span>
298             
299                 <li data-name="LuCI.network.SwitchTopology"><a href="LuCI.network.html#.SwitchTopology">SwitchTopology</a></li>
300             
301                 <li data-name="LuCI.network.WifiEncryption"><a href="LuCI.network.html#.WifiEncryption">WifiEncryption</a></li>
302             
303                 <li data-name="LuCI.network.WifiPeerEntry"><a href="LuCI.network.html#.WifiPeerEntry">WifiPeerEntry</a></li>
304             
305                 <li data-name="LuCI.network.WifiRateEntry"><a href="LuCI.network.html#.WifiRateEntry">WifiRateEntry</a></li>
306             
307                 <li data-name="LuCI.network.WifiScanResult"><a href="LuCI.network.html#.WifiScanResult">WifiScanResult</a></li>
308             
309             </ul>
310             <ul class="typedefs itemMembers">
311             
312             </ul>
313             <ul class="methods itemMembers">
314             
315             <span class="subtitle">Methods</span>
316             
317                 <li data-name="LuCI.network#addNetwork"><a href="LuCI.network.html#addNetwork">addNetwork</a></li>
318             
319                 <li data-name="LuCI.network#addWifiNetwork"><a href="LuCI.network.html#addWifiNetwork">addWifiNetwork</a></li>
320             
321                 <li data-name="LuCI.network#deleteNetwork"><a href="LuCI.network.html#deleteNetwork">deleteNetwork</a></li>
322             
323                 <li data-name="LuCI.network#deleteWifiNetwork"><a href="LuCI.network.html#deleteWifiNetwork">deleteWifiNetwork</a></li>
324             
325                 <li data-name="LuCI.network#flushCache"><a href="LuCI.network.html#flushCache">flushCache</a></li>
326             
327                 <li data-name="LuCI.network#formatWifiEncryption"><a href="LuCI.network.html#formatWifiEncryption">formatWifiEncryption</a></li>
328             
329                 <li data-name="LuCI.network#getDevice"><a href="LuCI.network.html#getDevice">getDevice</a></li>
330             
331                 <li data-name="LuCI.network#getDevices"><a href="LuCI.network.html#getDevices">getDevices</a></li>
332             
333                 <li data-name="LuCI.network#getDSLModemType"><a href="LuCI.network.html#getDSLModemType">getDSLModemType</a></li>
334             
335                 <li data-name="LuCI.network#getHostHints"><a href="LuCI.network.html#getHostHints">getHostHints</a></li>
336             
337                 <li data-name="LuCI.network#getIfnameOf"><a href="LuCI.network.html#getIfnameOf">getIfnameOf</a></li>
338             
339                 <li data-name="LuCI.network#getNetwork"><a href="LuCI.network.html#getNetwork">getNetwork</a></li>
340             
341                 <li data-name="LuCI.network#getNetworks"><a href="LuCI.network.html#getNetworks">getNetworks</a></li>
342             
343                 <li data-name="LuCI.network#getProtocol"><a href="LuCI.network.html#getProtocol">getProtocol</a></li>
344             
345                 <li data-name="LuCI.network#getProtocols"><a href="LuCI.network.html#getProtocols">getProtocols</a></li>
346             
347                 <li data-name="LuCI.network#getSwitchTopologies"><a href="LuCI.network.html#getSwitchTopologies">getSwitchTopologies</a></li>
348             
349                 <li data-name="LuCI.network#getWAN6Networks"><a href="LuCI.network.html#getWAN6Networks">getWAN6Networks</a></li>
350             
351                 <li data-name="LuCI.network#getWANNetworks"><a href="LuCI.network.html#getWANNetworks">getWANNetworks</a></li>
352             
353                 <li data-name="LuCI.network#getWifiDevice"><a href="LuCI.network.html#getWifiDevice">getWifiDevice</a></li>
354             
355                 <li data-name="LuCI.network#getWifiDevices"><a href="LuCI.network.html#getWifiDevices">getWifiDevices</a></li>
356             
357                 <li data-name="LuCI.network#getWifiNetwork"><a href="LuCI.network.html#getWifiNetwork">getWifiNetwork</a></li>
358             
359                 <li data-name="LuCI.network#getWifiNetworks"><a href="LuCI.network.html#getWifiNetworks">getWifiNetworks</a></li>
360             
361                 <li data-name="LuCI.network#isIgnoredDevice"><a href="LuCI.network.html#isIgnoredDevice">isIgnoredDevice</a></li>
362             
363                 <li data-name="LuCI.network#maskToPrefix"><a href="LuCI.network.html#maskToPrefix">maskToPrefix</a></li>
364             
365                 <li data-name="LuCI.network#prefixToMask"><a href="LuCI.network.html#prefixToMask">prefixToMask</a></li>
366             
367                 <li data-name="LuCI.network#registerErrorCode"><a href="LuCI.network.html#registerErrorCode">registerErrorCode</a></li>
368             
369                 <li data-name="LuCI.network#registerPatternVirtual"><a href="LuCI.network.html#registerPatternVirtual">registerPatternVirtual</a></li>
370             
371                 <li data-name="LuCI.network#registerProtocol"><a href="LuCI.network.html#registerProtocol">registerProtocol</a></li>
372             
373                 <li data-name="LuCI.network#renameNetwork"><a href="LuCI.network.html#renameNetwork">renameNetwork</a></li>
374             
375             </ul>
376             <ul class="events itemMembers">
377             
378             </ul>
379         </li>
380     
381         <li class="item" data-name="LuCI.network.Device">
382             <span class="title">
383                 <a href="LuCI.network.Device.html">LuCI.network.Device</a>
384                 
385             </span>
386             <ul class="members itemMembers">
387             
388             </ul>
389             <ul class="typedefs itemMembers">
390             
391             </ul>
392             <ul class="typedefs itemMembers">
393             
394             </ul>
395             <ul class="methods itemMembers">
396             
397             <span class="subtitle">Methods</span>
398             
399                 <li data-name="LuCI.network.Device#getBridgeID"><a href="LuCI.network.Device.html#getBridgeID">getBridgeID</a></li>
400             
401                 <li data-name="LuCI.network.Device#getBridgeSTP"><a href="LuCI.network.Device.html#getBridgeSTP">getBridgeSTP</a></li>
402             
403                 <li data-name="LuCI.network.Device#getI18n"><a href="LuCI.network.Device.html#getI18n">getI18n</a></li>
404             
405                 <li data-name="LuCI.network.Device#getIP6Addrs"><a href="LuCI.network.Device.html#getIP6Addrs">getIP6Addrs</a></li>
406             
407                 <li data-name="LuCI.network.Device#getIPAddrs"><a href="LuCI.network.Device.html#getIPAddrs">getIPAddrs</a></li>
408             
409                 <li data-name="LuCI.network.Device#getMAC"><a href="LuCI.network.Device.html#getMAC">getMAC</a></li>
410             
411                 <li data-name="LuCI.network.Device#getMTU"><a href="LuCI.network.Device.html#getMTU">getMTU</a></li>
412             
413                 <li data-name="LuCI.network.Device#getName"><a href="LuCI.network.Device.html#getName">getName</a></li>
414             
415                 <li data-name="LuCI.network.Device#getNetwork"><a href="LuCI.network.Device.html#getNetwork">getNetwork</a></li>
416             
417                 <li data-name="LuCI.network.Device#getNetworks"><a href="LuCI.network.Device.html#getNetworks">getNetworks</a></li>
418             
419                 <li data-name="LuCI.network.Device#getPorts"><a href="LuCI.network.Device.html#getPorts">getPorts</a></li>
420             
421                 <li data-name="LuCI.network.Device#getRXBytes"><a href="LuCI.network.Device.html#getRXBytes">getRXBytes</a></li>
422             
423                 <li data-name="LuCI.network.Device#getRXPackets"><a href="LuCI.network.Device.html#getRXPackets">getRXPackets</a></li>
424             
425                 <li data-name="LuCI.network.Device#getShortName"><a href="LuCI.network.Device.html#getShortName">getShortName</a></li>
426             
427                 <li data-name="LuCI.network.Device#getTXBytes"><a href="LuCI.network.Device.html#getTXBytes">getTXBytes</a></li>
428             
429                 <li data-name="LuCI.network.Device#getTXPackets"><a href="LuCI.network.Device.html#getTXPackets">getTXPackets</a></li>
430             
431                 <li data-name="LuCI.network.Device#getType"><a href="LuCI.network.Device.html#getType">getType</a></li>
432             
433                 <li data-name="LuCI.network.Device#getTypeI18n"><a href="LuCI.network.Device.html#getTypeI18n">getTypeI18n</a></li>
434             
435                 <li data-name="LuCI.network.Device#getWifiNetwork"><a href="LuCI.network.Device.html#getWifiNetwork">getWifiNetwork</a></li>
436             
437                 <li data-name="LuCI.network.Device#isBridge"><a href="LuCI.network.Device.html#isBridge">isBridge</a></li>
438             
439                 <li data-name="LuCI.network.Device#isBridgePort"><a href="LuCI.network.Device.html#isBridgePort">isBridgePort</a></li>
440             
441                 <li data-name="LuCI.network.Device#isUp"><a href="LuCI.network.Device.html#isUp">isUp</a></li>
442             
443             </ul>
444             <ul class="events itemMembers">
445             
446             </ul>
447         </li>
448     
449         <li class="item" data-name="LuCI.network.Hosts">
450             <span class="title">
451                 <a href="LuCI.network.Hosts.html">LuCI.network.Hosts</a>
452                 
453             </span>
454             <ul class="members itemMembers">
455             
456             </ul>
457             <ul class="typedefs itemMembers">
458             
459             </ul>
460             <ul class="typedefs itemMembers">
461             
462             </ul>
463             <ul class="methods itemMembers">
464             
465             <span class="subtitle">Methods</span>
466             
467                 <li data-name="LuCI.network.Hosts#getHostnameByIP6Addr"><a href="LuCI.network.Hosts.html#getHostnameByIP6Addr">getHostnameByIP6Addr</a></li>
468             
469                 <li data-name="LuCI.network.Hosts#getHostnameByIPAddr"><a href="LuCI.network.Hosts.html#getHostnameByIPAddr">getHostnameByIPAddr</a></li>
470             
471                 <li data-name="LuCI.network.Hosts#getHostnameByMACAddr"><a href="LuCI.network.Hosts.html#getHostnameByMACAddr">getHostnameByMACAddr</a></li>
472             
473                 <li data-name="LuCI.network.Hosts#getIP6AddrByMACAddr"><a href="LuCI.network.Hosts.html#getIP6AddrByMACAddr">getIP6AddrByMACAddr</a></li>
474             
475                 <li data-name="LuCI.network.Hosts#getIPAddrByMACAddr"><a href="LuCI.network.Hosts.html#getIPAddrByMACAddr">getIPAddrByMACAddr</a></li>
476             
477                 <li data-name="LuCI.network.Hosts#getMACAddrByIP6Addr"><a href="LuCI.network.Hosts.html#getMACAddrByIP6Addr">getMACAddrByIP6Addr</a></li>
478             
479                 <li data-name="LuCI.network.Hosts#getMACAddrByIPAddr"><a href="LuCI.network.Hosts.html#getMACAddrByIPAddr">getMACAddrByIPAddr</a></li>
480             
481                 <li data-name="LuCI.network.Hosts#getMACHints"><a href="LuCI.network.Hosts.html#getMACHints">getMACHints</a></li>
482             
483             </ul>
484             <ul class="events itemMembers">
485             
486             </ul>
487         </li>
488     
489         <li class="item" data-name="LuCI.network.Protocol">
490             <span class="title">
491                 <a href="LuCI.network.Protocol.html">LuCI.network.Protocol</a>
492                 
493             </span>
494             <ul class="members itemMembers">
495             
496             </ul>
497             <ul class="typedefs itemMembers">
498             
499             </ul>
500             <ul class="typedefs itemMembers">
501             
502             </ul>
503             <ul class="methods itemMembers">
504             
505             <span class="subtitle">Methods</span>
506             
507                 <li data-name="LuCI.network.Protocol#addDevice"><a href="LuCI.network.Protocol.html#addDevice">addDevice</a></li>
508             
509                 <li data-name="LuCI.network.Protocol#containsDevice"><a href="LuCI.network.Protocol.html#containsDevice">containsDevice</a></li>
510             
511                 <li data-name="LuCI.network.Protocol#deleteConfiguration"><a href="LuCI.network.Protocol.html#deleteConfiguration">deleteConfiguration</a></li>
512             
513                 <li data-name="LuCI.network.Protocol#deleteDevice"><a href="LuCI.network.Protocol.html#deleteDevice">deleteDevice</a></li>
514             
515                 <li data-name="LuCI.network.Protocol#get"><a href="LuCI.network.Protocol.html#get">get</a></li>
516             
517                 <li data-name="LuCI.network.Protocol#getDevice"><a href="LuCI.network.Protocol.html#getDevice">getDevice</a></li>
518             
519                 <li data-name="LuCI.network.Protocol#getDevices"><a href="LuCI.network.Protocol.html#getDevices">getDevices</a></li>
520             
521                 <li data-name="LuCI.network.Protocol#getDNS6Addrs"><a href="LuCI.network.Protocol.html#getDNS6Addrs">getDNS6Addrs</a></li>
522             
523                 <li data-name="LuCI.network.Protocol#getDNSAddrs"><a href="LuCI.network.Protocol.html#getDNSAddrs">getDNSAddrs</a></li>
524             
525                 <li data-name="LuCI.network.Protocol#getErrors"><a href="LuCI.network.Protocol.html#getErrors">getErrors</a></li>
526             
527                 <li data-name="LuCI.network.Protocol#getExpiry"><a href="LuCI.network.Protocol.html#getExpiry">getExpiry</a></li>
528             
529                 <li data-name="LuCI.network.Protocol#getGateway6Addr"><a href="LuCI.network.Protocol.html#getGateway6Addr">getGateway6Addr</a></li>
530             
531                 <li data-name="LuCI.network.Protocol#getGatewayAddr"><a href="LuCI.network.Protocol.html#getGatewayAddr">getGatewayAddr</a></li>
532             
533                 <li data-name="LuCI.network.Protocol#getI18n"><a href="LuCI.network.Protocol.html#getI18n">getI18n</a></li>
534             
535                 <li data-name="LuCI.network.Protocol#getIfname"><a href="LuCI.network.Protocol.html#getIfname">getIfname</a></li>
536             
537                 <li data-name="LuCI.network.Protocol#getIP6Addr"><a href="LuCI.network.Protocol.html#getIP6Addr">getIP6Addr</a></li>
538             
539                 <li data-name="LuCI.network.Protocol#getIP6Addrs"><a href="LuCI.network.Protocol.html#getIP6Addrs">getIP6Addrs</a></li>
540             
541                 <li data-name="LuCI.network.Protocol#getIP6Prefix"><a href="LuCI.network.Protocol.html#getIP6Prefix">getIP6Prefix</a></li>
542             
543                 <li data-name="LuCI.network.Protocol#getIPAddr"><a href="LuCI.network.Protocol.html#getIPAddr">getIPAddr</a></li>
544             
545                 <li data-name="LuCI.network.Protocol#getIPAddrs"><a href="LuCI.network.Protocol.html#getIPAddrs">getIPAddrs</a></li>
546             
547                 <li data-name="LuCI.network.Protocol#getL2Device"><a href="LuCI.network.Protocol.html#getL2Device">getL2Device</a></li>
548             
549                 <li data-name="LuCI.network.Protocol#getL3Device"><a href="LuCI.network.Protocol.html#getL3Device">getL3Device</a></li>
550             
551                 <li data-name="LuCI.network.Protocol#getMetric"><a href="LuCI.network.Protocol.html#getMetric">getMetric</a></li>
552             
553                 <li data-name="LuCI.network.Protocol#getName"><a href="LuCI.network.Protocol.html#getName">getName</a></li>
554             
555                 <li data-name="LuCI.network.Protocol#getNetmask"><a href="LuCI.network.Protocol.html#getNetmask">getNetmask</a></li>
556             
557                 <li data-name="LuCI.network.Protocol#getOpkgPackage"><a href="LuCI.network.Protocol.html#getOpkgPackage">getOpkgPackage</a></li>
558             
559                 <li data-name="LuCI.network.Protocol#getProtocol"><a href="LuCI.network.Protocol.html#getProtocol">getProtocol</a></li>
560             
561                 <li data-name="LuCI.network.Protocol#getType"><a href="LuCI.network.Protocol.html#getType">getType</a></li>
562             
563                 <li data-name="LuCI.network.Protocol#getUptime"><a href="LuCI.network.Protocol.html#getUptime">getUptime</a></li>
564             
565                 <li data-name="LuCI.network.Protocol#getZoneName"><a href="LuCI.network.Protocol.html#getZoneName">getZoneName</a></li>
566             
567                 <li data-name="LuCI.network.Protocol#isAlias"><a href="LuCI.network.Protocol.html#isAlias">isAlias</a></li>
568             
569                 <li data-name="LuCI.network.Protocol#isBridge"><a href="LuCI.network.Protocol.html#isBridge">isBridge</a></li>
570             
571                 <li data-name="LuCI.network.Protocol#isDynamic"><a href="LuCI.network.Protocol.html#isDynamic">isDynamic</a></li>
572             
573                 <li data-name="LuCI.network.Protocol#isEmpty"><a href="LuCI.network.Protocol.html#isEmpty">isEmpty</a></li>
574             
575                 <li data-name="LuCI.network.Protocol#isFloating"><a href="LuCI.network.Protocol.html#isFloating">isFloating</a></li>
576             
577                 <li data-name="LuCI.network.Protocol#isInstalled"><a href="LuCI.network.Protocol.html#isInstalled">isInstalled</a></li>
578             
579                 <li data-name="LuCI.network.Protocol#isUp"><a href="LuCI.network.Protocol.html#isUp">isUp</a></li>
580             
581                 <li data-name="LuCI.network.Protocol#isVirtual"><a href="LuCI.network.Protocol.html#isVirtual">isVirtual</a></li>
582             
583                 <li data-name="LuCI.network.Protocol#set"><a href="LuCI.network.Protocol.html#set">set</a></li>
584             
585             </ul>
586             <ul class="events itemMembers">
587             
588             </ul>
589         </li>
590     
591         <li class="item" data-name="LuCI.network.WifiDevice">
592             <span class="title">
593                 <a href="LuCI.network.WifiDevice.html">LuCI.network.WifiDevice</a>
594                 
595             </span>
596             <ul class="members itemMembers">
597             
598             </ul>
599             <ul class="typedefs itemMembers">
600             
601             </ul>
602             <ul class="typedefs itemMembers">
603             
604             </ul>
605             <ul class="methods itemMembers">
606             
607             <span class="subtitle">Methods</span>
608             
609                 <li data-name="LuCI.network.WifiDevice#addWifiNetwork"><a href="LuCI.network.WifiDevice.html#addWifiNetwork">addWifiNetwork</a></li>
610             
611                 <li data-name="LuCI.network.WifiDevice#deleteWifiNetwork"><a href="LuCI.network.WifiDevice.html#deleteWifiNetwork">deleteWifiNetwork</a></li>
612             
613                 <li data-name="LuCI.network.WifiDevice#get"><a href="LuCI.network.WifiDevice.html#get">get</a></li>
614             
615                 <li data-name="LuCI.network.WifiDevice#getHTModes"><a href="LuCI.network.WifiDevice.html#getHTModes">getHTModes</a></li>
616             
617                 <li data-name="LuCI.network.WifiDevice#getHWModes"><a href="LuCI.network.WifiDevice.html#getHWModes">getHWModes</a></li>
618             
619                 <li data-name="LuCI.network.WifiDevice#getI18n"><a href="LuCI.network.WifiDevice.html#getI18n">getI18n</a></li>
620             
621                 <li data-name="LuCI.network.WifiDevice#getName"><a href="LuCI.network.WifiDevice.html#getName">getName</a></li>
622             
623                 <li data-name="LuCI.network.WifiDevice#getScanList"><a href="LuCI.network.WifiDevice.html#getScanList">getScanList</a></li>
624             
625                 <li data-name="LuCI.network.WifiDevice#getWifiNetwork"><a href="LuCI.network.WifiDevice.html#getWifiNetwork">getWifiNetwork</a></li>
626             
627                 <li data-name="LuCI.network.WifiDevice#getWifiNetworks"><a href="LuCI.network.WifiDevice.html#getWifiNetworks">getWifiNetworks</a></li>
628             
629                 <li data-name="LuCI.network.WifiDevice#isDisabled"><a href="LuCI.network.WifiDevice.html#isDisabled">isDisabled</a></li>
630             
631                 <li data-name="LuCI.network.WifiDevice#isUp"><a href="LuCI.network.WifiDevice.html#isUp">isUp</a></li>
632             
633                 <li data-name="LuCI.network.WifiDevice#set"><a href="LuCI.network.WifiDevice.html#set">set</a></li>
634             
635             </ul>
636             <ul class="events itemMembers">
637             
638             </ul>
639         </li>
640     
641         <li class="item" data-name="LuCI.network.WifiNetwork">
642             <span class="title">
643                 <a href="LuCI.network.WifiNetwork.html">LuCI.network.WifiNetwork</a>
644                 
645             </span>
646             <ul class="members itemMembers">
647             
648             </ul>
649             <ul class="typedefs itemMembers">
650             
651             </ul>
652             <ul class="typedefs itemMembers">
653             
654             </ul>
655             <ul class="methods itemMembers">
656             
657             <span class="subtitle">Methods</span>
658             
659                 <li data-name="LuCI.network.WifiNetwork#disconnectClient"><a href="LuCI.network.WifiNetwork.html#disconnectClient">disconnectClient</a></li>
660             
661                 <li data-name="LuCI.network.WifiNetwork#get"><a href="LuCI.network.WifiNetwork.html#get">get</a></li>
662             
663                 <li data-name="LuCI.network.WifiNetwork#getActiveBSSID"><a href="LuCI.network.WifiNetwork.html#getActiveBSSID">getActiveBSSID</a></li>
664             
665                 <li data-name="LuCI.network.WifiNetwork#getActiveEncryption"><a href="LuCI.network.WifiNetwork.html#getActiveEncryption">getActiveEncryption</a></li>
666             
667                 <li data-name="LuCI.network.WifiNetwork#getActiveMode"><a href="LuCI.network.WifiNetwork.html#getActiveMode">getActiveMode</a></li>
668             
669                 <li data-name="LuCI.network.WifiNetwork#getActiveModeI18n"><a href="LuCI.network.WifiNetwork.html#getActiveModeI18n">getActiveModeI18n</a></li>
670             
671                 <li data-name="LuCI.network.WifiNetwork#getActiveSSID"><a href="LuCI.network.WifiNetwork.html#getActiveSSID">getActiveSSID</a></li>
672             
673                 <li data-name="LuCI.network.WifiNetwork#getAssocList"><a href="LuCI.network.WifiNetwork.html#getAssocList">getAssocList</a></li>
674             
675                 <li data-name="LuCI.network.WifiNetwork#getBitRate"><a href="LuCI.network.WifiNetwork.html#getBitRate">getBitRate</a></li>
676             
677                 <li data-name="LuCI.network.WifiNetwork#getBSSID"><a href="LuCI.network.WifiNetwork.html#getBSSID">getBSSID</a></li>
678             
679                 <li data-name="LuCI.network.WifiNetwork#getChannel"><a href="LuCI.network.WifiNetwork.html#getChannel">getChannel</a></li>
680             
681                 <li data-name="LuCI.network.WifiNetwork#getCountryCode"><a href="LuCI.network.WifiNetwork.html#getCountryCode">getCountryCode</a></li>
682             
683                 <li data-name="LuCI.network.WifiNetwork#getDevice"><a href="LuCI.network.WifiNetwork.html#getDevice">getDevice</a></li>
684             
685                 <li data-name="LuCI.network.WifiNetwork#getFrequency"><a href="LuCI.network.WifiNetwork.html#getFrequency">getFrequency</a></li>
686             
687                 <li data-name="LuCI.network.WifiNetwork#getI18n"><a href="LuCI.network.WifiNetwork.html#getI18n">getI18n</a></li>
688             
689                 <li data-name="LuCI.network.WifiNetwork#getID"><a href="LuCI.network.WifiNetwork.html#getID">getID</a></li>
690             
691                 <li data-name="LuCI.network.WifiNetwork#getIfname"><a href="LuCI.network.WifiNetwork.html#getIfname">getIfname</a></li>
692             
693                 <li data-name="LuCI.network.WifiNetwork#getMeshID"><a href="LuCI.network.WifiNetwork.html#getMeshID">getMeshID</a></li>
694             
695                 <li data-name="LuCI.network.WifiNetwork#getMode"><a href="LuCI.network.WifiNetwork.html#getMode">getMode</a></li>
696             
697                 <li data-name="LuCI.network.WifiNetwork#getName"><a href="LuCI.network.WifiNetwork.html#getName">getName</a></li>
698             
699                 <li data-name="LuCI.network.WifiNetwork#getNetwork"><a href="LuCI.network.WifiNetwork.html#getNetwork">getNetwork</a></li>
700             
701                 <li data-name="LuCI.network.WifiNetwork#getNetworkNames"><a href="LuCI.network.WifiNetwork.html#getNetworkNames">getNetworkNames</a></li>
702             
703                 <li data-name="LuCI.network.WifiNetwork#getNetworks"><a href="LuCI.network.WifiNetwork.html#getNetworks">getNetworks</a></li>
704             
705                 <li data-name="LuCI.network.WifiNetwork#getNoise"><a href="LuCI.network.WifiNetwork.html#getNoise">getNoise</a></li>
706             
707                 <li data-name="LuCI.network.WifiNetwork#getShortName"><a href="LuCI.network.WifiNetwork.html#getShortName">getShortName</a></li>
708             
709                 <li data-name="LuCI.network.WifiNetwork#getSignal"><a href="LuCI.network.WifiNetwork.html#getSignal">getSignal</a></li>
710             
711                 <li data-name="LuCI.network.WifiNetwork#getSignalLevel"><a href="LuCI.network.WifiNetwork.html#getSignalLevel">getSignalLevel</a></li>
712             
713                 <li data-name="LuCI.network.WifiNetwork#getSignalPercent"><a href="LuCI.network.WifiNetwork.html#getSignalPercent">getSignalPercent</a></li>
714             
715                 <li data-name="LuCI.network.WifiNetwork#getSSID"><a href="LuCI.network.WifiNetwork.html#getSSID">getSSID</a></li>
716             
717                 <li data-name="LuCI.network.WifiNetwork#getTXPower"><a href="LuCI.network.WifiNetwork.html#getTXPower">getTXPower</a></li>
718             
719                 <li data-name="LuCI.network.WifiNetwork#getTXPowerOffset"><a href="LuCI.network.WifiNetwork.html#getTXPowerOffset">getTXPowerOffset</a></li>
720             
721                 <li data-name="LuCI.network.WifiNetwork#getWifiDevice"><a href="LuCI.network.WifiNetwork.html#getWifiDevice">getWifiDevice</a></li>
722             
723                 <li data-name="LuCI.network.WifiNetwork#getWifiDeviceName"><a href="LuCI.network.WifiNetwork.html#getWifiDeviceName">getWifiDeviceName</a></li>
724             
725                 <li data-name="LuCI.network.WifiNetwork#isClientDisconnectSupported"><a href="LuCI.network.WifiNetwork.html#isClientDisconnectSupported">isClientDisconnectSupported</a></li>
726             
727                 <li data-name="LuCI.network.WifiNetwork#isDisabled"><a href="LuCI.network.WifiNetwork.html#isDisabled">isDisabled</a></li>
728             
729                 <li data-name="LuCI.network.WifiNetwork#isUp"><a href="LuCI.network.WifiNetwork.html#isUp">isUp</a></li>
730             
731                 <li data-name="LuCI.network.WifiNetwork#set"><a href="LuCI.network.WifiNetwork.html#set">set</a></li>
732             
733             </ul>
734             <ul class="events itemMembers">
735             
736             </ul>
737         </li>
738     
739         <li class="item" data-name="LuCI.poll">
740             <span class="title">
741                 <a href="LuCI.poll.html">LuCI.poll</a>
742                 
743             </span>
744             <ul class="members itemMembers">
745             
746             </ul>
747             <ul class="typedefs itemMembers">
748             
749             </ul>
750             <ul class="typedefs itemMembers">
751             
752             </ul>
753             <ul class="methods itemMembers">
754             
755             <span class="subtitle">Methods</span>
756             
757                 <li data-name="LuCI.poll#active"><a href="LuCI.poll.html#active">active</a></li>
758             
759                 <li data-name="LuCI.poll#add"><a href="LuCI.poll.html#add">add</a></li>
760             
761                 <li data-name="LuCI.poll#remove"><a href="LuCI.poll.html#remove">remove</a></li>
762             
763                 <li data-name="LuCI.poll#start"><a href="LuCI.poll.html#start">start</a></li>
764             
765                 <li data-name="LuCI.poll#stop"><a href="LuCI.poll.html#stop">stop</a></li>
766             
767             </ul>
768             <ul class="events itemMembers">
769             
770             </ul>
771         </li>
772     
773         <li class="item" data-name="LuCI.request">
774             <span class="title">
775                 <a href="LuCI.request.html">LuCI.request</a>
776                 
777             </span>
778             <ul class="members itemMembers">
779             
780             </ul>
781             <ul class="typedefs itemMembers">
782             
783             <span class="subtitle">Typedefs</span>
784             
785                 <li data-name="LuCI.request.interceptorFn"><a href="LuCI.request.html#.interceptorFn">interceptorFn</a></li>
786             
787                 <li data-name="LuCI.request.RequestOptions"><a href="LuCI.request.html#.RequestOptions">RequestOptions</a></li>
788             
789             </ul>
790             <ul class="typedefs itemMembers">
791             
792             </ul>
793             <ul class="methods itemMembers">
794             
795             <span class="subtitle">Methods</span>
796             
797                 <li data-name="LuCI.request#addInterceptor"><a href="LuCI.request.html#addInterceptor">addInterceptor</a></li>
798             
799                 <li data-name="LuCI.request#expandURL"><a href="LuCI.request.html#expandURL">expandURL</a></li>
800             
801                 <li data-name="LuCI.request#get"><a href="LuCI.request.html#get">get</a></li>
802             
803                 <li data-name="LuCI.request#post"><a href="LuCI.request.html#post">post</a></li>
804             
805                 <li data-name="LuCI.request#removeInterceptor"><a href="LuCI.request.html#removeInterceptor">removeInterceptor</a></li>
806             
807                 <li data-name="LuCI.request#request"><a href="LuCI.request.html#request">request</a></li>
808             
809             </ul>
810             <ul class="events itemMembers">
811             
812             </ul>
813         </li>
814     
815         <li class="item" data-name="LuCI.request.poll">
816             <span class="title">
817                 <a href="LuCI.request.poll.html">LuCI.request.poll</a>
818                 
819             </span>
820             <ul class="members itemMembers">
821             
822             </ul>
823             <ul class="typedefs itemMembers">
824             
825             <span class="subtitle">Typedefs</span>
826             
827                 <li data-name="LuCI.request.poll~callbackFn"><a href="LuCI.request.poll.html#~callbackFn">callbackFn</a></li>
828             
829             </ul>
830             <ul class="typedefs itemMembers">
831             
832             </ul>
833             <ul class="methods itemMembers">
834             
835             <span class="subtitle">Methods</span>
836             
837                 <li data-name="LuCI.request.poll#active"><a href="LuCI.request.poll.html#active">active</a></li>
838             
839                 <li data-name="LuCI.request.poll#add"><a href="LuCI.request.poll.html#add">add</a></li>
840             
841                 <li data-name="LuCI.request.poll#remove"><a href="LuCI.request.poll.html#remove">remove</a></li>
842             
843                 <li data-name="LuCI.request.poll#start"><a href="LuCI.request.poll.html#start">start</a></li>
844             
845                 <li data-name="LuCI.request.poll#stop"><a href="LuCI.request.poll.html#stop">stop</a></li>
846             
847             </ul>
848             <ul class="events itemMembers">
849             
850             </ul>
851         </li>
852     
853         <li class="item" data-name="LuCI.response">
854             <span class="title">
855                 <a href="LuCI.response.html">LuCI.response</a>
856                 
857             </span>
858             <ul class="members itemMembers">
859             
860             <span class="subtitle">Members</span>
861             
862                 <li data-name="LuCI.response#duration"><a href="LuCI.response.html#duration">duration</a></li>
863             
864                 <li data-name="LuCI.response#headers"><a href="LuCI.response.html#headers">headers</a></li>
865             
866                 <li data-name="LuCI.response#ok"><a href="LuCI.response.html#ok">ok</a></li>
867             
868                 <li data-name="LuCI.response#status"><a href="LuCI.response.html#status">status</a></li>
869             
870                 <li data-name="LuCI.response#statusText"><a href="LuCI.response.html#statusText">statusText</a></li>
871             
872                 <li data-name="LuCI.response#url"><a href="LuCI.response.html#url">url</a></li>
873             
874             </ul>
875             <ul class="typedefs itemMembers">
876             
877             </ul>
878             <ul class="typedefs itemMembers">
879             
880             </ul>
881             <ul class="methods itemMembers">
882             
883             <span class="subtitle">Methods</span>
884             
885                 <li data-name="LuCI.response#blob"><a href="LuCI.response.html#blob">blob</a></li>
886             
887                 <li data-name="LuCI.response#clone"><a href="LuCI.response.html#clone">clone</a></li>
888             
889                 <li data-name="LuCI.response#json"><a href="LuCI.response.html#json">json</a></li>
890             
891                 <li data-name="LuCI.response#text"><a href="LuCI.response.html#text">text</a></li>
892             
893             </ul>
894             <ul class="events itemMembers">
895             
896             </ul>
897         </li>
898     
899         <li class="item" data-name="LuCI.rpc">
900             <span class="title">
901                 <a href="LuCI.rpc.html">LuCI.rpc</a>
902                 
903             </span>
904             <ul class="members itemMembers">
905             
906             </ul>
907             <ul class="typedefs itemMembers">
908             
909             <span class="subtitle">Typedefs</span>
910             
911                 <li data-name="LuCI.rpc.DeclareOptions"><a href="LuCI.rpc.html#.DeclareOptions">DeclareOptions</a></li>
912             
913                 <li data-name="LuCI.rpc~filterFn"><a href="LuCI.rpc.html#~filterFn">filterFn</a></li>
914             
915                 <li data-name="LuCI.rpc~interceptorFn"><a href="LuCI.rpc.html#~interceptorFn">interceptorFn</a></li>
916             
917                 <li data-name="LuCI.rpc~invokeFn"><a href="LuCI.rpc.html#~invokeFn">invokeFn</a></li>
918             
919             </ul>
920             <ul class="typedefs itemMembers">
921             
922             </ul>
923             <ul class="methods itemMembers">
924             
925             <span class="subtitle">Methods</span>
926             
927                 <li data-name="LuCI.rpc#addInterceptor"><a href="LuCI.rpc.html#addInterceptor">addInterceptor</a></li>
928             
929                 <li data-name="LuCI.rpc#declare"><a href="LuCI.rpc.html#declare">declare</a></li>
930             
931                 <li data-name="LuCI.rpc#getBaseURL"><a href="LuCI.rpc.html#getBaseURL">getBaseURL</a></li>
932             
933                 <li data-name="LuCI.rpc#getSessionID"><a href="LuCI.rpc.html#getSessionID">getSessionID</a></li>
934             
935                 <li data-name="LuCI.rpc#getStatusText"><a href="LuCI.rpc.html#getStatusText">getStatusText</a></li>
936             
937                 <li data-name="LuCI.rpc#list"><a href="LuCI.rpc.html#list">list</a></li>
938             
939                 <li data-name="LuCI.rpc#removeInterceptor"><a href="LuCI.rpc.html#removeInterceptor">removeInterceptor</a></li>
940             
941                 <li data-name="LuCI.rpc#setBaseURL"><a href="LuCI.rpc.html#setBaseURL">setBaseURL</a></li>
942             
943                 <li data-name="LuCI.rpc#setSessionID"><a href="LuCI.rpc.html#setSessionID">setSessionID</a></li>
944             
945             </ul>
946             <ul class="events itemMembers">
947             
948             </ul>
949         </li>
950     
951         <li class="item" data-name="LuCI.uci">
952             <span class="title">
953                 <a href="LuCI.uci.html">LuCI.uci</a>
954                 
955             </span>
956             <ul class="members itemMembers">
957             
958             </ul>
959             <ul class="typedefs itemMembers">
960             
961             <span class="subtitle">Typedefs</span>
962             
963                 <li data-name="LuCI.uci.ChangeRecord"><a href="LuCI.uci.html#.ChangeRecord">ChangeRecord</a></li>
964             
965                 <li data-name="LuCI.uci.SectionObject"><a href="LuCI.uci.html#.SectionObject">SectionObject</a></li>
966             
967                 <li data-name="LuCI.uci~sectionsFn"><a href="LuCI.uci.html#~sectionsFn">sectionsFn</a></li>
968             
969             </ul>
970             <ul class="typedefs itemMembers">
971             
972             </ul>
973             <ul class="methods itemMembers">
974             
975             <span class="subtitle">Methods</span>
976             
977                 <li data-name="LuCI.uci#add"><a href="LuCI.uci.html#add">add</a></li>
978             
979                 <li data-name="LuCI.uci#apply"><a href="LuCI.uci.html#apply">apply</a></li>
980             
981                 <li data-name="LuCI.uci#changes"><a href="LuCI.uci.html#changes">changes</a></li>
982             
983                 <li data-name="LuCI.uci#createSID"><a href="LuCI.uci.html#createSID">createSID</a></li>
984             
985                 <li data-name="LuCI.uci#get"><a href="LuCI.uci.html#get">get</a></li>
986             
987                 <li data-name="LuCI.uci#get_first"><a href="LuCI.uci.html#get_first">get_first</a></li>
988             
989                 <li data-name="LuCI.uci#load"><a href="LuCI.uci.html#load">load</a></li>
990             
991                 <li data-name="LuCI.uci#move"><a href="LuCI.uci.html#move">move</a></li>
992             
993                 <li data-name="LuCI.uci#remove"><a href="LuCI.uci.html#remove">remove</a></li>
994             
995                 <li data-name="LuCI.uci#resolveSID"><a href="LuCI.uci.html#resolveSID">resolveSID</a></li>
996             
997                 <li data-name="LuCI.uci#save"><a href="LuCI.uci.html#save">save</a></li>
998             
999                 <li data-name="LuCI.uci#sections"><a href="LuCI.uci.html#sections">sections</a></li>
1000             
1001                 <li data-name="LuCI.uci#set"><a href="LuCI.uci.html#set">set</a></li>
1002             
1003                 <li data-name="LuCI.uci#set_first"><a href="LuCI.uci.html#set_first">set_first</a></li>
1004             
1005                 <li data-name="LuCI.uci#unload"><a href="LuCI.uci.html#unload">unload</a></li>
1006             
1007                 <li data-name="LuCI.uci#unset"><a href="LuCI.uci.html#unset">unset</a></li>
1008             
1009                 <li data-name="LuCI.uci#unset_first"><a href="LuCI.uci.html#unset_first">unset_first</a></li>
1010             
1011             </ul>
1012             <ul class="events itemMembers">
1013             
1014             </ul>
1015         </li>
1016     
1017         <li class="item" data-name="LuCI.ui">
1018             <span class="title">
1019                 <a href="LuCI.ui.html">LuCI.ui</a>
1020                 
1021             </span>
1022             <ul class="members itemMembers">
1023             
1024             </ul>
1025             <ul class="typedefs itemMembers">
1026             
1027             <span class="subtitle">Typedefs</span>
1028             
1029                 <li data-name="LuCI.ui.FileUploadReply"><a href="LuCI.ui.html#.FileUploadReply">FileUploadReply</a></li>
1030             
1031             </ul>
1032             <ul class="typedefs itemMembers">
1033             
1034             </ul>
1035             <ul class="methods itemMembers">
1036             
1037             <span class="subtitle">Methods</span>
1038             
1039                 <li data-name="LuCI.ui#addNotification"><a href="LuCI.ui.html#addNotification">addNotification</a></li>
1040             
1041                 <li data-name="LuCI.ui#addValidator"><a href="LuCI.ui.html#addValidator">addValidator</a></li>
1042             
1043                 <li data-name="LuCI.ui#awaitReconnect"><a href="LuCI.ui.html#awaitReconnect">awaitReconnect</a></li>
1044             
1045                 <li data-name="LuCI.ui#createHandlerFn"><a href="LuCI.ui.html#createHandlerFn">createHandlerFn</a></li>
1046             
1047                 <li data-name="LuCI.ui#hideIndicator"><a href="LuCI.ui.html#hideIndicator">hideIndicator</a></li>
1048             
1049                 <li data-name="LuCI.ui#hideModal"><a href="LuCI.ui.html#hideModal">hideModal</a></li>
1050             
1051                 <li data-name="LuCI.ui#instantiateView"><a href="LuCI.ui.html#instantiateView">instantiateView</a></li>
1052             
1053                 <li data-name="LuCI.ui#itemlist"><a href="LuCI.ui.html#itemlist">itemlist</a></li>
1054             
1055                 <li data-name="LuCI.ui#pingDevice"><a href="LuCI.ui.html#pingDevice">pingDevice</a></li>
1056             
1057                 <li data-name="LuCI.ui#showIndicator"><a href="LuCI.ui.html#showIndicator">showIndicator</a></li>
1058             
1059                 <li data-name="LuCI.ui#showModal"><a href="LuCI.ui.html#showModal">showModal</a></li>
1060             
1061                 <li data-name="LuCI.ui#uploadFile"><a href="LuCI.ui.html#uploadFile">uploadFile</a></li>
1062             
1063             </ul>
1064             <ul class="events itemMembers">
1065             
1066             </ul>
1067         </li>
1068     
1069         <li class="item" data-name="LuCI.ui.AbstractElement">
1070             <span class="title">
1071                 <a href="LuCI.ui.AbstractElement.html">LuCI.ui.AbstractElement</a>
1072                 
1073             </span>
1074             <ul class="members itemMembers">
1075             
1076             </ul>
1077             <ul class="typedefs itemMembers">
1078             
1079             <span class="subtitle">Typedefs</span>
1080             
1081                 <li data-name="LuCI.ui.AbstractElement.InitOptions"><a href="LuCI.ui.AbstractElement.html#.InitOptions">InitOptions</a></li>
1082             
1083             </ul>
1084             <ul class="typedefs itemMembers">
1085             
1086             </ul>
1087             <ul class="methods itemMembers">
1088             
1089             <span class="subtitle">Methods</span>
1090             
1091                 <li data-name="LuCI.ui.AbstractElement#getValue"><a href="LuCI.ui.AbstractElement.html#getValue">getValue</a></li>
1092             
1093                 <li data-name="LuCI.ui.AbstractElement#isValid"><a href="LuCI.ui.AbstractElement.html#isValid">isValid</a></li>
1094             
1095                 <li data-name="LuCI.ui.AbstractElement#registerEvents"><a href="LuCI.ui.AbstractElement.html#registerEvents">registerEvents</a></li>
1096             
1097                 <li data-name="LuCI.ui.AbstractElement#render"><a href="LuCI.ui.AbstractElement.html#render">render</a></li>
1098             
1099                 <li data-name="LuCI.ui.AbstractElement#setChangeEvents"><a href="LuCI.ui.AbstractElement.html#setChangeEvents">setChangeEvents</a></li>
1100             
1101                 <li data-name="LuCI.ui.AbstractElement#setUpdateEvents"><a href="LuCI.ui.AbstractElement.html#setUpdateEvents">setUpdateEvents</a></li>
1102             
1103                 <li data-name="LuCI.ui.AbstractElement#setValue"><a href="LuCI.ui.AbstractElement.html#setValue">setValue</a></li>
1104             
1105                 <li data-name="LuCI.ui.AbstractElement#triggerValidation"><a href="LuCI.ui.AbstractElement.html#triggerValidation">triggerValidation</a></li>
1106             
1107             </ul>
1108             <ul class="events itemMembers">
1109             
1110             </ul>
1111         </li>
1112     
1113         <li class="item" data-name="LuCI.ui.changes">
1114             <span class="title">
1115                 <a href="LuCI.ui.changes.html">LuCI.ui.changes</a>
1116                 
1117             </span>
1118             <ul class="members itemMembers">
1119             
1120             </ul>
1121             <ul class="typedefs itemMembers">
1122             
1123             </ul>
1124             <ul class="typedefs itemMembers">
1125             
1126             </ul>
1127             <ul class="methods itemMembers">
1128             
1129             <span class="subtitle">Methods</span>
1130             
1131                 <li data-name="LuCI.ui.changes#apply"><a href="LuCI.ui.changes.html#apply">apply</a></li>
1132             
1133                 <li data-name="LuCI.ui.changes#displayChanges"><a href="LuCI.ui.changes.html#displayChanges">displayChanges</a></li>
1134             
1135                 <li data-name="LuCI.ui.changes#renderChangeIndicator"><a href="LuCI.ui.changes.html#renderChangeIndicator">renderChangeIndicator</a></li>
1136             
1137                 <li data-name="LuCI.ui.changes#revert"><a href="LuCI.ui.changes.html#revert">revert</a></li>
1138             
1139                 <li data-name="LuCI.ui.changes#setIndicator"><a href="LuCI.ui.changes.html#setIndicator">setIndicator</a></li>
1140             
1141             </ul>
1142             <ul class="events itemMembers">
1143             
1144             </ul>
1145         </li>
1146     
1147         <li class="item" data-name="LuCI.ui.Checkbox">
1148             <span class="title">
1149                 <a href="LuCI.ui.Checkbox.html">LuCI.ui.Checkbox</a>
1150                 
1151             </span>
1152             <ul class="members itemMembers">
1153             
1154             </ul>
1155             <ul class="typedefs itemMembers">
1156             
1157             <span class="subtitle">Typedefs</span>
1158             
1159                 <li data-name="LuCI.ui.Checkbox.InitOptions"><a href="LuCI.ui.Checkbox.html#.InitOptions">InitOptions</a></li>
1160             
1161             </ul>
1162             <ul class="typedefs itemMembers">
1163             
1164             </ul>
1165             <ul class="methods itemMembers">
1166             
1167             <span class="subtitle">Methods</span>
1168             
1169                 <li data-name="LuCI.ui.Checkbox#getValue"><a href="LuCI.ui.Checkbox.html#getValue">getValue</a></li>
1170             
1171                 <li data-name="LuCI.ui.Checkbox#isChecked"><a href="LuCI.ui.Checkbox.html#isChecked">isChecked</a></li>
1172             
1173                 <li data-name="LuCI.ui.Checkbox#isValid"><a href="LuCI.ui.Checkbox.html#isValid">isValid</a></li>
1174             
1175                 <li data-name="LuCI.ui.Checkbox#registerEvents"><a href="LuCI.ui.Checkbox.html#registerEvents">registerEvents</a></li>
1176             
1177                 <li data-name="LuCI.ui.Checkbox#render"><a href="LuCI.ui.Checkbox.html#render">render</a></li>
1178             
1179                 <li data-name="LuCI.ui.Checkbox#setChangeEvents"><a href="LuCI.ui.Checkbox.html#setChangeEvents">setChangeEvents</a></li>
1180             
1181                 <li data-name="LuCI.ui.Checkbox#setUpdateEvents"><a href="LuCI.ui.Checkbox.html#setUpdateEvents">setUpdateEvents</a></li>
1182             
1183                 <li data-name="LuCI.ui.Checkbox#setValue"><a href="LuCI.ui.Checkbox.html#setValue">setValue</a></li>
1184             
1185                 <li data-name="LuCI.ui.Checkbox#triggerValidation"><a href="LuCI.ui.Checkbox.html#triggerValidation">triggerValidation</a></li>
1186             
1187             </ul>
1188             <ul class="events itemMembers">
1189             
1190             </ul>
1191         </li>
1192     
1193         <li class="item" data-name="LuCI.ui.Combobox">
1194             <span class="title">
1195                 <a href="LuCI.ui.Combobox.html">LuCI.ui.Combobox</a>
1196                 
1197             </span>
1198             <ul class="members itemMembers">
1199             
1200             </ul>
1201             <ul class="typedefs itemMembers">
1202             
1203             <span class="subtitle">Typedefs</span>
1204             
1205                 <li data-name="LuCI.ui.Combobox.InitOptions"><a href="LuCI.ui.Combobox.html#.InitOptions">InitOptions</a></li>
1206             
1207             </ul>
1208             <ul class="typedefs itemMembers">
1209             
1210             </ul>
1211             <ul class="methods itemMembers">
1212             
1213             <span class="subtitle">Methods</span>
1214             
1215                 <li data-name="LuCI.ui.Combobox#addChoices"><a href="LuCI.ui.Combobox.html#addChoices">addChoices</a></li>
1216             
1217                 <li data-name="LuCI.ui.Combobox#clearChoices"><a href="LuCI.ui.Combobox.html#clearChoices">clearChoices</a></li>
1218             
1219                 <li data-name="LuCI.ui.Combobox#closeAllDropdowns"><a href="LuCI.ui.Combobox.html#closeAllDropdowns">closeAllDropdowns</a></li>
1220             
1221                 <li data-name="LuCI.ui.Combobox#isValid"><a href="LuCI.ui.Combobox.html#isValid">isValid</a></li>
1222             
1223                 <li data-name="LuCI.ui.Combobox#registerEvents"><a href="LuCI.ui.Combobox.html#registerEvents">registerEvents</a></li>
1224             
1225                 <li data-name="LuCI.ui.Combobox#setChangeEvents"><a href="LuCI.ui.Combobox.html#setChangeEvents">setChangeEvents</a></li>
1226             
1227                 <li data-name="LuCI.ui.Combobox#setUpdateEvents"><a href="LuCI.ui.Combobox.html#setUpdateEvents">setUpdateEvents</a></li>
1228             
1229                 <li data-name="LuCI.ui.Combobox#triggerValidation"><a href="LuCI.ui.Combobox.html#triggerValidation">triggerValidation</a></li>
1230             
1231             </ul>
1232             <ul class="events itemMembers">
1233             
1234             </ul>
1235         </li>
1236     
1237         <li class="item" data-name="LuCI.ui.ComboButton">
1238             <span class="title">
1239                 <a href="LuCI.ui.ComboButton.html">LuCI.ui.ComboButton</a>
1240                 
1241             </span>
1242             <ul class="members itemMembers">
1243             
1244             </ul>
1245             <ul class="typedefs itemMembers">
1246             
1247             <span class="subtitle">Typedefs</span>
1248             
1249                 <li data-name="LuCI.ui.ComboButton.InitOptions"><a href="LuCI.ui.ComboButton.html#.InitOptions">InitOptions</a></li>
1250             
1251             </ul>
1252             <ul class="typedefs itemMembers">
1253             
1254             </ul>
1255             <ul class="methods itemMembers">
1256             
1257             <span class="subtitle">Methods</span>
1258             
1259                 <li data-name="LuCI.ui.ComboButton#addChoices"><a href="LuCI.ui.ComboButton.html#addChoices">addChoices</a></li>
1260             
1261                 <li data-name="LuCI.ui.ComboButton#clearChoices"><a href="LuCI.ui.ComboButton.html#clearChoices">clearChoices</a></li>
1262             
1263                 <li data-name="LuCI.ui.ComboButton#closeAllDropdowns"><a href="LuCI.ui.ComboButton.html#closeAllDropdowns">closeAllDropdowns</a></li>
1264             
1265                 <li data-name="LuCI.ui.ComboButton#isValid"><a href="LuCI.ui.ComboButton.html#isValid">isValid</a></li>
1266             
1267                 <li data-name="LuCI.ui.ComboButton#registerEvents"><a href="LuCI.ui.ComboButton.html#registerEvents">registerEvents</a></li>
1268             
1269                 <li data-name="LuCI.ui.ComboButton#setChangeEvents"><a href="LuCI.ui.ComboButton.html#setChangeEvents">setChangeEvents</a></li>
1270             
1271                 <li data-name="LuCI.ui.ComboButton#setUpdateEvents"><a href="LuCI.ui.ComboButton.html#setUpdateEvents">setUpdateEvents</a></li>
1272             
1273                 <li data-name="LuCI.ui.ComboButton#triggerValidation"><a href="LuCI.ui.ComboButton.html#triggerValidation">triggerValidation</a></li>
1274             
1275             </ul>
1276             <ul class="events itemMembers">
1277             
1278             </ul>
1279         </li>
1280     
1281         <li class="item" data-name="LuCI.ui.Dropdown">
1282             <span class="title">
1283                 <a href="LuCI.ui.Dropdown.html">LuCI.ui.Dropdown</a>
1284                 
1285             </span>
1286             <ul class="members itemMembers">
1287             
1288             </ul>
1289             <ul class="typedefs itemMembers">
1290             
1291             <span class="subtitle">Typedefs</span>
1292             
1293                 <li data-name="LuCI.ui.Dropdown.InitOptions"><a href="LuCI.ui.Dropdown.html#.InitOptions">InitOptions</a></li>
1294             
1295             </ul>
1296             <ul class="typedefs itemMembers">
1297             
1298             </ul>
1299             <ul class="methods itemMembers">
1300             
1301             <span class="subtitle">Methods</span>
1302             
1303                 <li data-name="LuCI.ui.Dropdown#addChoices"><a href="LuCI.ui.Dropdown.html#addChoices">addChoices</a></li>
1304             
1305                 <li data-name="LuCI.ui.Dropdown#clearChoices"><a href="LuCI.ui.Dropdown.html#clearChoices">clearChoices</a></li>
1306             
1307                 <li data-name="LuCI.ui.Dropdown#closeAllDropdowns"><a href="LuCI.ui.Dropdown.html#closeAllDropdowns">closeAllDropdowns</a></li>
1308             
1309                 <li data-name="LuCI.ui.Dropdown#getValue"><a href="LuCI.ui.Dropdown.html#getValue">getValue</a></li>
1310             
1311                 <li data-name="LuCI.ui.Dropdown#isValid"><a href="LuCI.ui.Dropdown.html#isValid">isValid</a></li>
1312             
1313                 <li data-name="LuCI.ui.Dropdown#registerEvents"><a href="LuCI.ui.Dropdown.html#registerEvents">registerEvents</a></li>
1314             
1315                 <li data-name="LuCI.ui.Dropdown#render"><a href="LuCI.ui.Dropdown.html#render">render</a></li>
1316             
1317                 <li data-name="LuCI.ui.Dropdown#setChangeEvents"><a href="LuCI.ui.Dropdown.html#setChangeEvents">setChangeEvents</a></li>
1318             
1319                 <li data-name="LuCI.ui.Dropdown#setUpdateEvents"><a href="LuCI.ui.Dropdown.html#setUpdateEvents">setUpdateEvents</a></li>
1320             
1321                 <li data-name="LuCI.ui.Dropdown#setValue"><a href="LuCI.ui.Dropdown.html#setValue">setValue</a></li>
1322             
1323                 <li data-name="LuCI.ui.Dropdown#triggerValidation"><a href="LuCI.ui.Dropdown.html#triggerValidation">triggerValidation</a></li>
1324             
1325             </ul>
1326             <ul class="events itemMembers">
1327             
1328             </ul>
1329         </li>
1330     
1331         <li class="item" data-name="LuCI.ui.DynamicList">
1332             <span class="title">
1333                 <a href="LuCI.ui.DynamicList.html">LuCI.ui.DynamicList</a>
1334                 
1335             </span>
1336             <ul class="members itemMembers">
1337             
1338             </ul>
1339             <ul class="typedefs itemMembers">
1340             
1341             <span class="subtitle">Typedefs</span>
1342             
1343                 <li data-name="LuCI.ui.DynamicList.InitOptions"><a href="LuCI.ui.DynamicList.html#.InitOptions">InitOptions</a></li>
1344             
1345             </ul>
1346             <ul class="typedefs itemMembers">
1347             
1348             </ul>
1349             <ul class="methods itemMembers">
1350             
1351             <span class="subtitle">Methods</span>
1352             
1353                 <li data-name="LuCI.ui.DynamicList#addChoices"><a href="LuCI.ui.DynamicList.html#addChoices">addChoices</a></li>
1354             
1355                 <li data-name="LuCI.ui.DynamicList#clearChoices"><a href="LuCI.ui.DynamicList.html#clearChoices">clearChoices</a></li>
1356             
1357                 <li data-name="LuCI.ui.DynamicList#getValue"><a href="LuCI.ui.DynamicList.html#getValue">getValue</a></li>
1358             
1359                 <li data-name="LuCI.ui.DynamicList#isValid"><a href="LuCI.ui.DynamicList.html#isValid">isValid</a></li>
1360             
1361                 <li data-name="LuCI.ui.DynamicList#registerEvents"><a href="LuCI.ui.DynamicList.html#registerEvents">registerEvents</a></li>
1362             
1363                 <li data-name="LuCI.ui.DynamicList#render"><a href="LuCI.ui.DynamicList.html#render">render</a></li>
1364             
1365                 <li data-name="LuCI.ui.DynamicList#setChangeEvents"><a href="LuCI.ui.DynamicList.html#setChangeEvents">setChangeEvents</a></li>
1366             
1367                 <li data-name="LuCI.ui.DynamicList#setUpdateEvents"><a href="LuCI.ui.DynamicList.html#setUpdateEvents">setUpdateEvents</a></li>
1368             
1369                 <li data-name="LuCI.ui.DynamicList#setValue"><a href="LuCI.ui.DynamicList.html#setValue">setValue</a></li>
1370             
1371                 <li data-name="LuCI.ui.DynamicList#triggerValidation"><a href="LuCI.ui.DynamicList.html#triggerValidation">triggerValidation</a></li>
1372             
1373             </ul>
1374             <ul class="events itemMembers">
1375             
1376             </ul>
1377         </li>
1378     
1379         <li class="item" data-name="LuCI.ui.FileUpload">
1380             <span class="title">
1381                 <a href="LuCI.ui.FileUpload.html">LuCI.ui.FileUpload</a>
1382                 
1383             </span>
1384             <ul class="members itemMembers">
1385             
1386             </ul>
1387             <ul class="typedefs itemMembers">
1388             
1389             <span class="subtitle">Typedefs</span>
1390             
1391                 <li data-name="LuCI.ui.FileUpload.InitOptions"><a href="LuCI.ui.FileUpload.html#.InitOptions">InitOptions</a></li>
1392             
1393             </ul>
1394             <ul class="typedefs itemMembers">
1395             
1396             </ul>
1397             <ul class="methods itemMembers">
1398             
1399             <span class="subtitle">Methods</span>
1400             
1401                 <li data-name="LuCI.ui.FileUpload#getValue"><a href="LuCI.ui.FileUpload.html#getValue">getValue</a></li>
1402             
1403                 <li data-name="LuCI.ui.FileUpload#isValid"><a href="LuCI.ui.FileUpload.html#isValid">isValid</a></li>
1404             
1405                 <li data-name="LuCI.ui.FileUpload#registerEvents"><a href="LuCI.ui.FileUpload.html#registerEvents">registerEvents</a></li>
1406             
1407                 <li data-name="LuCI.ui.FileUpload#render"><a href="LuCI.ui.FileUpload.html#render">render</a></li>
1408             
1409                 <li data-name="LuCI.ui.FileUpload#setChangeEvents"><a href="LuCI.ui.FileUpload.html#setChangeEvents">setChangeEvents</a></li>
1410             
1411                 <li data-name="LuCI.ui.FileUpload#setUpdateEvents"><a href="LuCI.ui.FileUpload.html#setUpdateEvents">setUpdateEvents</a></li>
1412             
1413                 <li data-name="LuCI.ui.FileUpload#setValue"><a href="LuCI.ui.FileUpload.html#setValue">setValue</a></li>
1414             
1415                 <li data-name="LuCI.ui.FileUpload#triggerValidation"><a href="LuCI.ui.FileUpload.html#triggerValidation">triggerValidation</a></li>
1416             
1417             </ul>
1418             <ul class="events itemMembers">
1419             
1420             </ul>
1421         </li>
1422     
1423         <li class="item" data-name="LuCI.ui.Hiddenfield">
1424             <span class="title">
1425                 <a href="LuCI.ui.Hiddenfield.html">LuCI.ui.Hiddenfield</a>
1426                 
1427             </span>
1428             <ul class="members itemMembers">
1429             
1430             </ul>
1431             <ul class="typedefs itemMembers">
1432             
1433             </ul>
1434             <ul class="typedefs itemMembers">
1435             
1436             </ul>
1437             <ul class="methods itemMembers">
1438             
1439             <span class="subtitle">Methods</span>
1440             
1441                 <li data-name="LuCI.ui.Hiddenfield#getValue"><a href="LuCI.ui.Hiddenfield.html#getValue">getValue</a></li>
1442             
1443                 <li data-name="LuCI.ui.Hiddenfield#isValid"><a href="LuCI.ui.Hiddenfield.html#isValid">isValid</a></li>
1444             
1445                 <li data-name="LuCI.ui.Hiddenfield#registerEvents"><a href="LuCI.ui.Hiddenfield.html#registerEvents">registerEvents</a></li>
1446             
1447                 <li data-name="LuCI.ui.Hiddenfield#render"><a href="LuCI.ui.Hiddenfield.html#render">render</a></li>
1448             
1449                 <li data-name="LuCI.ui.Hiddenfield#setChangeEvents"><a href="LuCI.ui.Hiddenfield.html#setChangeEvents">setChangeEvents</a></li>
1450             
1451                 <li data-name="LuCI.ui.Hiddenfield#setUpdateEvents"><a href="LuCI.ui.Hiddenfield.html#setUpdateEvents">setUpdateEvents</a></li>
1452             
1453                 <li data-name="LuCI.ui.Hiddenfield#setValue"><a href="LuCI.ui.Hiddenfield.html#setValue">setValue</a></li>
1454             
1455                 <li data-name="LuCI.ui.Hiddenfield#triggerValidation"><a href="LuCI.ui.Hiddenfield.html#triggerValidation">triggerValidation</a></li>
1456             
1457             </ul>
1458             <ul class="events itemMembers">
1459             
1460             </ul>
1461         </li>
1462     
1463         <li class="item" data-name="LuCI.ui.Select">
1464             <span class="title">
1465                 <a href="LuCI.ui.Select.html">LuCI.ui.Select</a>
1466                 
1467             </span>
1468             <ul class="members itemMembers">
1469             
1470             </ul>
1471             <ul class="typedefs itemMembers">
1472             
1473             <span class="subtitle">Typedefs</span>
1474             
1475                 <li data-name="LuCI.ui.Select.InitOptions"><a href="LuCI.ui.Select.html#.InitOptions">InitOptions</a></li>
1476             
1477             </ul>
1478             <ul class="typedefs itemMembers">
1479             
1480             </ul>
1481             <ul class="methods itemMembers">
1482             
1483             <span class="subtitle">Methods</span>
1484             
1485                 <li data-name="LuCI.ui.Select#getValue"><a href="LuCI.ui.Select.html#getValue">getValue</a></li>
1486             
1487                 <li data-name="LuCI.ui.Select#isValid"><a href="LuCI.ui.Select.html#isValid">isValid</a></li>
1488             
1489                 <li data-name="LuCI.ui.Select#registerEvents"><a href="LuCI.ui.Select.html#registerEvents">registerEvents</a></li>
1490             
1491                 <li data-name="LuCI.ui.Select#render"><a href="LuCI.ui.Select.html#render">render</a></li>
1492             
1493                 <li data-name="LuCI.ui.Select#setChangeEvents"><a href="LuCI.ui.Select.html#setChangeEvents">setChangeEvents</a></li>
1494             
1495                 <li data-name="LuCI.ui.Select#setUpdateEvents"><a href="LuCI.ui.Select.html#setUpdateEvents">setUpdateEvents</a></li>
1496             
1497                 <li data-name="LuCI.ui.Select#setValue"><a href="LuCI.ui.Select.html#setValue">setValue</a></li>
1498             
1499                 <li data-name="LuCI.ui.Select#triggerValidation"><a href="LuCI.ui.Select.html#triggerValidation">triggerValidation</a></li>
1500             
1501             </ul>
1502             <ul class="events itemMembers">
1503             
1504             </ul>
1505         </li>
1506     
1507         <li class="item" data-name="LuCI.ui.tabs">
1508             <span class="title">
1509                 <a href="LuCI.ui.tabs.html">LuCI.ui.tabs</a>
1510                 
1511             </span>
1512             <ul class="members itemMembers">
1513             
1514             </ul>
1515             <ul class="typedefs itemMembers">
1516             
1517             </ul>
1518             <ul class="typedefs itemMembers">
1519             
1520             </ul>
1521             <ul class="methods itemMembers">
1522             
1523             <span class="subtitle">Methods</span>
1524             
1525                 <li data-name="LuCI.ui.tabs#initTabGroup"><a href="LuCI.ui.tabs.html#initTabGroup">initTabGroup</a></li>
1526             
1527                 <li data-name="LuCI.ui.tabs#isEmptyPane"><a href="LuCI.ui.tabs.html#isEmptyPane">isEmptyPane</a></li>
1528             
1529             </ul>
1530             <ul class="events itemMembers">
1531             
1532             </ul>
1533         </li>
1534     
1535         <li class="item" data-name="LuCI.ui.Textarea">
1536             <span class="title">
1537                 <a href="LuCI.ui.Textarea.html">LuCI.ui.Textarea</a>
1538                 
1539             </span>
1540             <ul class="members itemMembers">
1541             
1542             </ul>
1543             <ul class="typedefs itemMembers">
1544             
1545             <span class="subtitle">Typedefs</span>
1546             
1547                 <li data-name="LuCI.ui.Textarea.InitOptions"><a href="LuCI.ui.Textarea.html#.InitOptions">InitOptions</a></li>
1548             
1549             </ul>
1550             <ul class="typedefs itemMembers">
1551             
1552             </ul>
1553             <ul class="methods itemMembers">
1554             
1555             <span class="subtitle">Methods</span>
1556             
1557                 <li data-name="LuCI.ui.Textarea#getValue"><a href="LuCI.ui.Textarea.html#getValue">getValue</a></li>
1558             
1559                 <li data-name="LuCI.ui.Textarea#isValid"><a href="LuCI.ui.Textarea.html#isValid">isValid</a></li>
1560             
1561                 <li data-name="LuCI.ui.Textarea#registerEvents"><a href="LuCI.ui.Textarea.html#registerEvents">registerEvents</a></li>
1562             
1563                 <li data-name="LuCI.ui.Textarea#render"><a href="LuCI.ui.Textarea.html#render">render</a></li>
1564             
1565                 <li data-name="LuCI.ui.Textarea#setChangeEvents"><a href="LuCI.ui.Textarea.html#setChangeEvents">setChangeEvents</a></li>
1566             
1567                 <li data-name="LuCI.ui.Textarea#setUpdateEvents"><a href="LuCI.ui.Textarea.html#setUpdateEvents">setUpdateEvents</a></li>
1568             
1569                 <li data-name="LuCI.ui.Textarea#setValue"><a href="LuCI.ui.Textarea.html#setValue">setValue</a></li>
1570             
1571                 <li data-name="LuCI.ui.Textarea#triggerValidation"><a href="LuCI.ui.Textarea.html#triggerValidation">triggerValidation</a></li>
1572             
1573             </ul>
1574             <ul class="events itemMembers">
1575             
1576             </ul>
1577         </li>
1578     
1579         <li class="item" data-name="LuCI.ui.Textfield">
1580             <span class="title">
1581                 <a href="LuCI.ui.Textfield.html">LuCI.ui.Textfield</a>
1582                 
1583             </span>
1584             <ul class="members itemMembers">
1585             
1586             </ul>
1587             <ul class="typedefs itemMembers">
1588             
1589             <span class="subtitle">Typedefs</span>
1590             
1591                 <li data-name="LuCI.ui.Textfield.InitOptions"><a href="LuCI.ui.Textfield.html#.InitOptions">InitOptions</a></li>
1592             
1593             </ul>
1594             <ul class="typedefs itemMembers">
1595             
1596             </ul>
1597             <ul class="methods itemMembers">
1598             
1599             <span class="subtitle">Methods</span>
1600             
1601                 <li data-name="LuCI.ui.Textfield#getValue"><a href="LuCI.ui.Textfield.html#getValue">getValue</a></li>
1602             
1603                 <li data-name="LuCI.ui.Textfield#isValid"><a href="LuCI.ui.Textfield.html#isValid">isValid</a></li>
1604             
1605                 <li data-name="LuCI.ui.Textfield#registerEvents"><a href="LuCI.ui.Textfield.html#registerEvents">registerEvents</a></li>
1606             
1607                 <li data-name="LuCI.ui.Textfield#render"><a href="LuCI.ui.Textfield.html#render">render</a></li>
1608             
1609                 <li data-name="LuCI.ui.Textfield#setChangeEvents"><a href="LuCI.ui.Textfield.html#setChangeEvents">setChangeEvents</a></li>
1610             
1611                 <li data-name="LuCI.ui.Textfield#setUpdateEvents"><a href="LuCI.ui.Textfield.html#setUpdateEvents">setUpdateEvents</a></li>
1612             
1613                 <li data-name="LuCI.ui.Textfield#setValue"><a href="LuCI.ui.Textfield.html#setValue">setValue</a></li>
1614             
1615                 <li data-name="LuCI.ui.Textfield#triggerValidation"><a href="LuCI.ui.Textfield.html#triggerValidation">triggerValidation</a></li>
1616             
1617             </ul>
1618             <ul class="events itemMembers">
1619             
1620             </ul>
1621         </li>
1622     
1623         <li class="item" data-name="LuCI.view">
1624             <span class="title">
1625                 <a href="LuCI.view.html">LuCI.view</a>
1626                 
1627             </span>
1628             <ul class="members itemMembers">
1629             
1630             </ul>
1631             <ul class="typedefs itemMembers">
1632             
1633             </ul>
1634             <ul class="typedefs itemMembers">
1635             
1636             </ul>
1637             <ul class="methods itemMembers">
1638             
1639             <span class="subtitle">Methods</span>
1640             
1641                 <li data-name="LuCI.view#addFooter"><a href="LuCI.view.html#addFooter">addFooter</a></li>
1642             
1643                 <li data-name="LuCI.view#handleReset"><a href="LuCI.view.html#handleReset">handleReset</a></li>
1644             
1645                 <li data-name="LuCI.view#handleSave"><a href="LuCI.view.html#handleSave">handleSave</a></li>
1646             
1647                 <li data-name="LuCI.view#handleSaveApply"><a href="LuCI.view.html#handleSaveApply">handleSaveApply</a></li>
1648             
1649                 <li data-name="LuCI.view#load"><a href="LuCI.view.html#load">load</a></li>
1650             
1651                 <li data-name="LuCI.view#render"><a href="LuCI.view.html#render">render</a></li>
1652             
1653             </ul>
1654             <ul class="events itemMembers">
1655             
1656             </ul>
1657         </li>
1658     
1659         <li class="item" data-name="LuCI.xhr">
1660             <span class="title">
1661                 <a href="LuCI.xhr.html">LuCI.xhr</a>
1662                 
1663             </span>
1664             <ul class="members itemMembers">
1665             
1666             </ul>
1667             <ul class="typedefs itemMembers">
1668             
1669             </ul>
1670             <ul class="typedefs itemMembers">
1671             
1672             </ul>
1673             <ul class="methods itemMembers">
1674             
1675             <span class="subtitle">Methods</span>
1676             
1677                 <li data-name="LuCI.xhr#abort"><a href="LuCI.xhr.html#abort">abort</a></li>
1678             
1679                 <li data-name="LuCI.xhr#busy"><a href="LuCI.xhr.html#busy">busy</a></li>
1680             
1681                 <li data-name="LuCI.xhr#cancel"><a href="LuCI.xhr.html#cancel">cancel</a></li>
1682             
1683                 <li data-name="LuCI.xhr#get"><a href="LuCI.xhr.html#get">get</a></li>
1684             
1685                 <li data-name="LuCI.xhr#post"><a href="LuCI.xhr.html#post">post</a></li>
1686             
1687                 <li data-name="LuCI.xhr#send_form"><a href="LuCI.xhr.html#send_form">send_form</a></li>
1688             
1689             </ul>
1690             <ul class="events itemMembers">
1691             
1692             </ul>
1693         </li>
1694     
1695     </ul>
1696 </div>
1697     <div class="main">
1698         <h1 class="page-title" data-filename="uci.js.html">Source: uci.js</h1>
1699         
1700
1701
1702     
1703     <section>
1704         <article>
1705             <pre id="source-code" class="prettyprint source "><code>'use strict';
1706 'require rpc';
1707 'require baseclass';
1708
1709 /**
1710  * @class uci
1711  * @memberof LuCI
1712  * @hideconstructor
1713  * @classdesc
1714  *
1715  * The `LuCI.uci` class utilizes {@link LuCI.rpc} to declare low level
1716  * remote UCI `ubus` procedures and implements a local caching and data
1717  * manipulation layer on top to allow for synchroneous operations on
1718  * UCI configuration data.
1719  */
1720 return baseclass.extend(/** @lends LuCI.uci.prototype */ {
1721         __init__: function() {
1722                 this.state = {
1723                         newidx:  0,
1724                         values:  { },
1725                         creates: { },
1726                         changes: { },
1727                         deletes: { },
1728                         reorder: { }
1729                 };
1730
1731                 this.loaded = {};
1732         },
1733
1734         callLoad: rpc.declare({
1735                 object: 'uci',
1736                 method: 'get',
1737                 params: [ 'config' ],
1738                 expect: { values: { } }
1739         }),
1740
1741
1742         callOrder: rpc.declare({
1743                 object: 'uci',
1744                 method: 'order',
1745                 params: [ 'config', 'sections' ]
1746         }),
1747
1748         callAdd: rpc.declare({
1749                 object: 'uci',
1750                 method: 'add',
1751                 params: [ 'config', 'type', 'name', 'values' ],
1752                 expect: { section: '' }
1753         }),
1754
1755         callSet: rpc.declare({
1756                 object: 'uci',
1757                 method: 'set',
1758                 params: [ 'config', 'section', 'values' ]
1759         }),
1760
1761         callDelete: rpc.declare({
1762                 object: 'uci',
1763                 method: 'delete',
1764                 params: [ 'config', 'section', 'options' ]
1765         }),
1766
1767         callApply: rpc.declare({
1768                 object: 'uci',
1769                 method: 'apply',
1770                 params: [ 'timeout', 'rollback' ]
1771         }),
1772
1773         callConfirm: rpc.declare({
1774                 object: 'uci',
1775                 method: 'confirm'
1776         }),
1777
1778
1779         /**
1780          * Generates a new, unique section ID for the given configuration.
1781          *
1782          * Note that the generated ID is temporary, it will get replaced by an
1783          * identifier in the form `cfgXXXXXX` once the configuration is saved
1784          * by the remote `ubus` UCI api.
1785          *
1786          * @param {string} config
1787          * The configuration to generate the new section ID for.
1788          *
1789          * @returns {string}
1790          * A newly generated, unique section ID in the form `newXXXXXX`
1791          * where `X` denotes a hexadecimal digit.
1792          */
1793         createSID: function(conf) {
1794                 var v = this.state.values,
1795                     n = this.state.creates,
1796                     sid;
1797
1798                 do {
1799                         sid = "new%06x".format(Math.random() * 0xFFFFFF);
1800                 } while ((n[conf] &amp;&amp; n[conf][sid]) || (v[conf] &amp;&amp; v[conf][sid]));
1801
1802                 return sid;
1803         },
1804
1805         /**
1806          * Resolves a given section ID in extended notation to the internal
1807          * section ID value.
1808          *
1809          * @param {string} config
1810          * The configuration to resolve the section ID for.
1811          *
1812          * @param {string} sid
1813          * The section ID to resolve. If the ID is in the form `@typename[#]`,
1814          * it will get resolved to an internal anonymous ID in the forms
1815          * `cfgXXXXXX`/`newXXXXXX` or to the name of a section in case it points
1816          * to a named section. When the given ID is not in extended notation,
1817          * it will be returned as-is.
1818          *
1819          * @returns {string|null}
1820          * Returns the resolved section ID or the original given ID if it was
1821          * not in extended notation. Returns `null` when an extended ID could
1822          * not be resolved to existing section ID.
1823          */
1824         resolveSID: function(conf, sid) {
1825                 if (typeof(sid) != 'string')
1826                         return sid;
1827
1828                 var m = /^@([a-zA-Z0-9_-]+)\[(-?[0-9]+)\]$/.exec(sid);
1829
1830                 if (m) {
1831                         var type = m[1],
1832                             pos = +m[2],
1833                             sections = this.sections(conf, type),
1834                             section = sections[pos >= 0 ? pos : sections.length + pos];
1835
1836                         return section ? section['.name'] : null;
1837                 }
1838
1839                 return sid;
1840         },
1841
1842         /* private */
1843         reorderSections: function() {
1844                 var v = this.state.values,
1845                     n = this.state.creates,
1846                     r = this.state.reorder,
1847                     tasks = [];
1848
1849                 if (Object.keys(r).length === 0)
1850                         return Promise.resolve();
1851
1852                 /*
1853                  gather all created and existing sections, sort them according
1854                  to their index value and issue an uci order call
1855                 */
1856                 for (var c in r) {
1857                         var o = [ ];
1858
1859                         if (n[c])
1860                                 for (var s in n[c])
1861                                         o.push(n[c][s]);
1862
1863                         for (var s in v[c])
1864                                 o.push(v[c][s]);
1865
1866                         if (o.length > 0) {
1867                                 o.sort(function(a, b) {
1868                                         return (a['.index'] - b['.index']);
1869                                 });
1870
1871                                 var sids = [ ];
1872
1873                                 for (var i = 0; i &lt; o.length; i++)
1874                                         sids.push(o[i]['.name']);
1875
1876                                 tasks.push(this.callOrder(c, sids));
1877                         }
1878                 }
1879
1880                 this.state.reorder = { };
1881                 return Promise.all(tasks);
1882         },
1883
1884         /* private */
1885         loadPackage: function(packageName) {
1886                 if (this.loaded[packageName] == null)
1887                         return (this.loaded[packageName] = this.callLoad(packageName));
1888
1889                 return Promise.resolve(this.loaded[packageName]);
1890         },
1891
1892         /**
1893          * Loads the given UCI configurations from the remote `ubus` api.
1894          *
1895          * Loaded configurations are cached and only loaded once. Subsequent
1896          * load operations of the same configurations will return the cached
1897          * data.
1898          *
1899          * To force reloading a configuration, it has to be unloaded with
1900          * {@link LuCI.uci#unload uci.unload()} first.
1901          *
1902          * @param {string|string[]} config
1903          * The name of the configuration or an array of configuration
1904          * names to load.
1905          *
1906          * @returns {Promise&lt;string[]>}
1907          * Returns a promise resolving to the names of the configurations
1908          * that have been successfully loaded.
1909          */
1910         load: function(packages) {
1911                 var self = this,
1912                     pkgs = [ ],
1913                     tasks = [];
1914
1915                 if (!Array.isArray(packages))
1916                         packages = [ packages ];
1917
1918                 for (var i = 0; i &lt; packages.length; i++)
1919                         if (!self.state.values[packages[i]]) {
1920                                 pkgs.push(packages[i]);
1921                                 tasks.push(self.loadPackage(packages[i]));
1922                         }
1923
1924                 return Promise.all(tasks).then(function(responses) {
1925                         for (var i = 0; i &lt; responses.length; i++)
1926                                 self.state.values[pkgs[i]] = responses[i];
1927
1928                         if (responses.length)
1929                                 document.dispatchEvent(new CustomEvent('uci-loaded'));
1930
1931                         return pkgs;
1932                 });
1933         },
1934
1935         /**
1936          * Unloads the given UCI configurations from the local cache.
1937          *
1938          * @param {string|string[]} config
1939          * The name of the configuration or an array of configuration
1940          * names to unload.
1941          */
1942         unload: function(packages) {
1943                 if (!Array.isArray(packages))
1944                         packages = [ packages ];
1945
1946                 for (var i = 0; i &lt; packages.length; i++) {
1947                         delete this.state.values[packages[i]];
1948                         delete this.state.creates[packages[i]];
1949                         delete this.state.changes[packages[i]];
1950                         delete this.state.deletes[packages[i]];
1951
1952                         delete this.loaded[packages[i]];
1953                 }
1954         },
1955
1956         /**
1957          * Adds a new section of the given type to the given configuration,
1958          * optionally named according to the given name.
1959          *
1960          * @param {string} config
1961          * The name of the configuration to add the section to.
1962          *
1963          * @param {string} type
1964          * The type of the section to add.
1965          *
1966          * @param {string} [name]
1967          * The name of the section to add. If the name is omitted, an anonymous
1968          * section will be added instead.
1969          *
1970          * @returns {string}
1971          * Returns the section ID of the newly added section which is equivalent
1972          * to the given name for non-anonymous sections.
1973          */
1974         add: function(conf, type, name) {
1975                 var n = this.state.creates,
1976                     sid = name || this.createSID(conf);
1977
1978                 if (!n[conf])
1979                         n[conf] = { };
1980
1981                 n[conf][sid] = {
1982                         '.type':      type,
1983                         '.name':      sid,
1984                         '.create':    name,
1985                         '.anonymous': !name,
1986                         '.index':     1000 + this.state.newidx++
1987                 };
1988
1989                 return sid;
1990         },
1991
1992         /**
1993          * Removes the section with the given ID from the given configuration.
1994          *
1995          * @param {string} config
1996          * The name of the configuration to remove the section from.
1997          *
1998          * @param {string} sid
1999          * The ID of the section to remove.
2000          */
2001         remove: function(conf, sid) {
2002                 var n = this.state.creates,
2003                     c = this.state.changes,
2004                     d = this.state.deletes;
2005
2006                 /* requested deletion of a just created section */
2007                 if (n[conf] &amp;&amp; n[conf][sid]) {
2008                         delete n[conf][sid];
2009                 }
2010                 else {
2011                         if (c[conf])
2012                                 delete c[conf][sid];
2013
2014                         if (!d[conf])
2015                                 d[conf] = { };
2016
2017                         d[conf][sid] = true;
2018                 }
2019         },
2020
2021         /**
2022          * A section object represents the options and their corresponding values
2023          * enclosed within a configuration section, as well as some additional
2024          * meta data such as sort indexes and internal ID.
2025          *
2026          * Any internal metadata fields are prefixed with a dot which is isn't
2027          * an allowed character for normal option names.
2028          *
2029          * @typedef {Object&lt;string, boolean|number|string|string[]>} SectionObject
2030          * @memberof LuCI.uci
2031          *
2032          * @property {boolean} .anonymous
2033          * The `.anonymous` property specifies whether the configuration is
2034          * anonymous (`true`) or named (`false`).
2035          *
2036          * @property {number} .index
2037          * The `.index` property specifes the sort order of the section.
2038          *
2039          * @property {string} .name
2040          * The `.name` property holds the name of the section object. It may be
2041          * either an anonymous ID in the form `cfgXXXXXX` or `newXXXXXX` with `X`
2042          * being a hexadecimal digit or a string holding the name of the section.
2043          *
2044          * @property {string} .type
2045          * The `.type` property contains the type of the corresponding uci
2046          * section.
2047          *
2048          * @property {string|string[]} *
2049          * A section object may contain an arbitrary number of further properties
2050          * representing the uci option enclosed in the section.
2051          *
2052          * All option property names will be in the form `[A-Za-z0-9_]+` and
2053          * either contain a string value or an array of strings, in case the
2054          * underlying option is an UCI list.
2055          */
2056
2057         /**
2058          * The sections callback is invoked for each section found within
2059          * the given configuration and receives the section object and its
2060          * associated name as arguments.
2061          *
2062          * @callback LuCI.uci~sectionsFn
2063          *
2064          * @param {LuCI.uci.SectionObject} section
2065          * The section object.
2066          *
2067          * @param {string} sid
2068          * The name or ID of the section.
2069          */
2070
2071         /**
2072          * Enumerates the sections of the given configuration, optionally
2073          * filtered by type.
2074          *
2075          * @param {string} config
2076          * The name of the configuration to enumerate the sections for.
2077          *
2078          * @param {string} [type]
2079          * Enumerate only sections of the given type. If omitted, enumerate
2080          * all sections.
2081          *
2082          * @param {LuCI.uci~sectionsFn} [cb]
2083          * An optional callback to invoke for each enumerated section.
2084          *
2085          * @returns {Array&lt;LuCI.uci.SectionObject>}
2086          * Returns a sorted array of the section objects within the given
2087          * configuration, filtered by type of a type has been specified.
2088          */
2089         sections: function(conf, type, cb) {
2090                 var sa = [ ],
2091                     v = this.state.values[conf],
2092                     n = this.state.creates[conf],
2093                     c = this.state.changes[conf],
2094                     d = this.state.deletes[conf];
2095
2096                 if (!v)
2097                         return sa;
2098
2099                 for (var s in v)
2100                         if (!d || d[s] !== true)
2101                                 if (!type || v[s]['.type'] == type)
2102                                         sa.push(Object.assign({ }, v[s], c ? c[s] : undefined));
2103
2104                 if (n)
2105                         for (var s in n)
2106                                 if (!type || n[s]['.type'] == type)
2107                                         sa.push(Object.assign({ }, n[s]));
2108
2109                 sa.sort(function(a, b) {
2110                         return a['.index'] - b['.index'];
2111                 });
2112
2113                 for (var i = 0; i &lt; sa.length; i++)
2114                         sa[i]['.index'] = i;
2115
2116                 if (typeof(cb) == 'function')
2117                         for (var i = 0; i &lt; sa.length; i++)
2118                                 cb.call(this, sa[i], sa[i]['.name']);
2119
2120                 return sa;
2121         },
2122
2123         /**
2124          * Gets the value of the given option within the specified section
2125          * of the given configuration or the entire section object if the
2126          * option name is omitted.
2127          *
2128          * @param {string} config
2129          * The name of the configuration to read the value from.
2130          *
2131          * @param {string} sid
2132          * The name or ID of the section to read.
2133          *
2134          * @param {string} [option]
2135          * The option name to read the value from. If the option name is
2136          * omitted or `null`, the entire section is returned instead.
2137          *
2138          * @returns {null|string|string[]|LuCI.uci.SectionObject}
2139          * - Returns a string containing the option value in case of a
2140          *   plain UCI option.
2141          * - Returns an array of strings containing the option values in
2142          *   case of `option` pointing to an UCI list.
2143          * - Returns a {@link LuCI.uci.SectionObject section object} if
2144          *   the `option` argument has been omitted or is `null`.
2145          * - Returns `null` if the config, section or option has not been
2146          *   found or if the corresponding configuration is not loaded.
2147          */
2148         get: function(conf, sid, opt) {
2149                 var v = this.state.values,
2150                     n = this.state.creates,
2151                     c = this.state.changes,
2152                     d = this.state.deletes;
2153
2154                 sid = this.resolveSID(conf, sid);
2155
2156                 if (sid == null)
2157                         return null;
2158
2159                 /* requested option in a just created section */
2160                 if (n[conf] &amp;&amp; n[conf][sid]) {
2161                         if (!n[conf])
2162                                 return undefined;
2163
2164                         if (opt == null)
2165                                 return n[conf][sid];
2166
2167                         return n[conf][sid][opt];
2168                 }
2169
2170                 /* requested an option value */
2171                 if (opt != null) {
2172                         /* check whether option was deleted */
2173                         if (d[conf] &amp;&amp; d[conf][sid]) {
2174                                 if (d[conf][sid] === true)
2175                                         return undefined;
2176
2177                                 for (var i = 0; i &lt; d[conf][sid].length; i++)
2178                                         if (d[conf][sid][i] == opt)
2179                                                 return undefined;
2180                         }
2181
2182                         /* check whether option was changed */
2183                         if (c[conf] &amp;&amp; c[conf][sid] &amp;&amp; c[conf][sid][opt] != null)
2184                                 return c[conf][sid][opt];
2185
2186                         /* return base value */
2187                         if (v[conf] &amp;&amp; v[conf][sid])
2188                                 return v[conf][sid][opt];
2189
2190                         return undefined;
2191                 }
2192
2193                 /* requested an entire section */
2194                 if (v[conf])
2195                         return v[conf][sid];
2196
2197                 return undefined;
2198         },
2199
2200         /**
2201          * Sets the value of the given option within the specified section
2202          * of the given configuration.
2203          *
2204          * If either config, section or option is null, or if `option` begins
2205          * with a dot, the function will do nothing.
2206          *
2207          * @param {string} config
2208          * The name of the configuration to set the option value in.
2209          *
2210          * @param {string} sid
2211          * The name or ID of the section to set the option value in.
2212          *
2213          * @param {string} option
2214          * The option name to set the value for.
2215          *
2216          * @param {null|string|string[]} value
2217          * The option value to set. If the value is `null` or an empty string,
2218          * the option will be removed, otherwise it will be set or overwritten
2219          * with the given value.
2220          */
2221         set: function(conf, sid, opt, val) {
2222                 var v = this.state.values,
2223                     n = this.state.creates,
2224                     c = this.state.changes,
2225                     d = this.state.deletes;
2226
2227                 sid = this.resolveSID(conf, sid);
2228
2229                 if (sid == null || opt == null || opt.charAt(0) == '.')
2230                         return;
2231
2232                 if (n[conf] &amp;&amp; n[conf][sid]) {
2233                         if (val != null)
2234                                 n[conf][sid][opt] = val;
2235                         else
2236                                 delete n[conf][sid][opt];
2237                 }
2238                 else if (val != null &amp;&amp; val !== '') {
2239                         /* do not set within deleted section */
2240                         if (d[conf] &amp;&amp; d[conf][sid] === true)
2241                                 return;
2242
2243                         /* only set in existing sections */
2244                         if (!v[conf] || !v[conf][sid])
2245                                 return;
2246
2247                         if (!c[conf])
2248                                 c[conf] = {};
2249
2250                         if (!c[conf][sid])
2251                                 c[conf][sid] = {};
2252
2253                         /* undelete option */
2254                         if (d[conf] &amp;&amp; d[conf][sid])
2255                                 d[conf][sid] = d[conf][sid].filter(function(o) { return o !== opt });
2256
2257                         c[conf][sid][opt] = val;
2258                 }
2259                 else {
2260                         /* only delete in existing sections */
2261                         if (!(v[conf] &amp;&amp; v[conf][sid] &amp;&amp; v[conf][sid].hasOwnProperty(opt)) &amp;&amp;
2262                             !(c[conf] &amp;&amp; c[conf][sid] &amp;&amp; c[conf][sid].hasOwnProperty(opt)))
2263                             return;
2264
2265                         if (!d[conf])
2266                                 d[conf] = { };
2267
2268                         if (!d[conf][sid])
2269                                 d[conf][sid] = [ ];
2270
2271                         if (d[conf][sid] !== true)
2272                                 d[conf][sid].push(opt);
2273                 }
2274         },
2275
2276         /**
2277          * Remove the given option within the specified section of the given
2278          * configuration.
2279          *
2280          * This function is a convenience wrapper around
2281          * `uci.set(config, section, option, null)`.
2282          *
2283          * @param {string} config
2284          * The name of the configuration to remove the option from.
2285          *
2286          * @param {string} sid
2287          * The name or ID of the section to remove the option from.
2288          *
2289          * @param {string} option
2290          * The name of the option to remove.
2291          */
2292         unset: function(conf, sid, opt) {
2293                 return this.set(conf, sid, opt, null);
2294         },
2295
2296         /**
2297          * Gets the value of the given option or the entire section object of
2298          * the first found section of the specified type or the first found
2299          * section of the entire configuration if no type is specfied.
2300          *
2301          * @param {string} config
2302          * The name of the configuration to read the value from.
2303          *
2304          * @param {string} [type]
2305          * The type of the first section to find. If it is `null`, the first
2306          * section of the entire config is read, otherwise the first section
2307          * matching the given type.
2308          *
2309          * @param {string} [option]
2310          * The option name to read the value from. If the option name is
2311          * omitted or `null`, the entire section is returned instead.
2312          *
2313          * @returns {null|string|string[]|LuCI.uci.SectionObject}
2314          * - Returns a string containing the option value in case of a
2315          *   plain UCI option.
2316          * - Returns an array of strings containing the option values in
2317          *   case of `option` pointing to an UCI list.
2318          * - Returns a {@link LuCI.uci.SectionObject section object} if
2319          *   the `option` argument has been omitted or is `null`.
2320          * - Returns `null` if the config, section or option has not been
2321          *   found or if the corresponding configuration is not loaded.
2322          */
2323         get_first: function(conf, type, opt) {
2324                 var sid = null;
2325
2326                 this.sections(conf, type, function(s) {
2327                         if (sid == null)
2328                                 sid = s['.name'];
2329                 });
2330
2331                 return this.get(conf, sid, opt);
2332         },
2333
2334         /**
2335          * Sets the value of the given option within the first found section
2336          * of the given configuration matching the specified type or within
2337          * the first section of the entire config when no type has is specified.
2338          *
2339          * If either config, type or option is null, or if `option` begins
2340          * with a dot, the function will do nothing.
2341          *
2342          * @param {string} config
2343          * The name of the configuration to set the option value in.
2344          *
2345          * @param {string} [type]
2346          * The type of the first section to find. If it is `null`, the first
2347          * section of the entire config is written to, otherwise the first
2348          * section matching the given type is used.
2349          *
2350          * @param {string} option
2351          * The option name to set the value for.
2352          *
2353          * @param {null|string|string[]} value
2354          * The option value to set. If the value is `null` or an empty string,
2355          * the option will be removed, otherwise it will be set or overwritten
2356          * with the given value.
2357          */
2358         set_first: function(conf, type, opt, val) {
2359                 var sid = null;
2360
2361                 this.sections(conf, type, function(s) {
2362                         if (sid == null)
2363                                 sid = s['.name'];
2364                 });
2365
2366                 return this.set(conf, sid, opt, val);
2367         },
2368
2369         /**
2370          * Removes the given option within the first found section of the given
2371          * configuration matching the specified type or within the first section
2372          * of the entire config when no type has is specified.
2373          *
2374          * This function is a convenience wrapper around
2375          * `uci.set_first(config, type, option, null)`.
2376          *
2377          * @param {string} config
2378          * The name of the configuration to set the option value in.
2379          *
2380          * @param {string} [type]
2381          * The type of the first section to find. If it is `null`, the first
2382          * section of the entire config is written to, otherwise the first
2383          * section matching the given type is used.
2384          *
2385          * @param {string} option
2386          * The option name to set the value for.
2387          */
2388         unset_first: function(conf, type, opt) {
2389                 return this.set_first(conf, type, opt, null);
2390         },
2391
2392         /**
2393          * Move the first specified section within the given configuration
2394          * before or after the second specified section.
2395          *
2396          * @param {string} config
2397          * The configuration to move the section within.
2398          *
2399          * @param {string} sid1
2400          * The ID of the section to move within the configuration.
2401          *
2402          * @param {string} [sid2]
2403          * The ID of the target section for the move operation. If the
2404          * `after` argument is `false` or not specified, the section named by
2405          * `sid1` will be moved before this target section, if the `after`
2406          * argument is `true`, the `sid1` section will be moved after this
2407          * section.
2408          *
2409          * When the `sid2` argument is `null`, the section specified by `sid1`
2410          * is moved to the end of the configuration.
2411          *
2412          * @param {boolean} [after=false]
2413          * When `true`, the section `sid1` is moved after the section `sid2`,
2414          * when `false`, the section `sid1` is moved before `sid2`.
2415          *
2416          * If `sid2` is null, then this parameter has no effect and the section
2417          * `sid1` is moved to the end of the configuration instead.
2418          *
2419          * @returns {boolean}
2420          * Returns `true` when the section was successfully moved, or `false`
2421          * when either the section specified by `sid1` or by `sid2` is not found.
2422          */
2423         move: function(conf, sid1, sid2, after) {
2424                 var sa = this.sections(conf),
2425                     s1 = null, s2 = null;
2426
2427                 sid1 = this.resolveSID(conf, sid1);
2428                 sid2 = this.resolveSID(conf, sid2);
2429
2430                 for (var i = 0; i &lt; sa.length; i++) {
2431                         if (sa[i]['.name'] != sid1)
2432                                 continue;
2433
2434                         s1 = sa[i];
2435                         sa.splice(i, 1);
2436                         break;
2437                 }
2438
2439                 if (s1 == null)
2440                         return false;
2441
2442                 if (sid2 == null) {
2443                         sa.push(s1);
2444                 }
2445                 else {
2446                         for (var i = 0; i &lt; sa.length; i++) {
2447                                 if (sa[i]['.name'] != sid2)
2448                                         continue;
2449
2450                                 s2 = sa[i];
2451                                 sa.splice(i + !!after, 0, s1);
2452                                 break;
2453                         }
2454
2455                         if (s2 == null)
2456                                 return false;
2457                 }
2458
2459                 for (var i = 0; i &lt; sa.length; i++)
2460                         this.get(conf, sa[i]['.name'])['.index'] = i;
2461
2462                 this.state.reorder[conf] = true;
2463
2464                 return true;
2465         },
2466
2467         /**
2468          * Submits all local configuration changes to the remove `ubus` api,
2469          * adds, removes and reorders remote sections as needed and reloads
2470          * all loaded configurations to resynchronize the local state with
2471          * the remote configuration values.
2472          *
2473          * @returns {string[]}
2474          * Returns a promise resolving to an array of configuration names which
2475          * have been reloaded by the save operation.
2476          */
2477         save: function() {
2478                 var v = this.state.values,
2479                     n = this.state.creates,
2480                     c = this.state.changes,
2481                     d = this.state.deletes,
2482                     r = this.state.reorder,
2483                     self = this,
2484                     snew = [ ],
2485                     pkgs = { },
2486                     tasks = [];
2487
2488                 if (n)
2489                         for (var conf in n) {
2490                                 for (var sid in n[conf]) {
2491                                         var r = {
2492                                                 config: conf,
2493                                                 values: { }
2494                                         };
2495
2496                                         for (var k in n[conf][sid]) {
2497                                                 if (k == '.type')
2498                                                         r.type = n[conf][sid][k];
2499                                                 else if (k == '.create')
2500                                                         r.name = n[conf][sid][k];
2501                                                 else if (k.charAt(0) != '.')
2502                                                         r.values[k] = n[conf][sid][k];
2503                                         }
2504
2505                                         snew.push(n[conf][sid]);
2506                                         tasks.push(self.callAdd(r.config, r.type, r.name, r.values));
2507                                 }
2508
2509                                 pkgs[conf] = true;
2510                         }
2511
2512                 if (c)
2513                         for (var conf in c) {
2514                                 for (var sid in c[conf])
2515                                         tasks.push(self.callSet(conf, sid, c[conf][sid]));
2516
2517                                 pkgs[conf] = true;
2518                         }
2519
2520                 if (d)
2521                         for (var conf in d) {
2522                                 for (var sid in d[conf]) {
2523                                         var o = d[conf][sid];
2524                                         tasks.push(self.callDelete(conf, sid, (o === true) ? null : o));
2525                                 }
2526
2527                                 pkgs[conf] = true;
2528                         }
2529
2530                 if (r)
2531                         for (var conf in r)
2532                                 pkgs[conf] = true;
2533
2534                 return Promise.all(tasks).then(function(responses) {
2535                         /*
2536                          array "snew" holds references to the created uci sections,
2537                          use it to assign the returned names of the new sections
2538                         */
2539                         for (var i = 0; i &lt; snew.length; i++)
2540                                 snew[i]['.name'] = responses[i];
2541
2542                         return self.reorderSections();
2543                 }).then(function() {
2544                         pkgs = Object.keys(pkgs);
2545
2546                         self.unload(pkgs);
2547
2548                         return self.load(pkgs);
2549                 });
2550         },
2551
2552         /**
2553          * Instructs the remote `ubus` UCI api to commit all saved changes with
2554          * rollback protection and attempts to confirm the pending commit
2555          * operation to cancel the rollback timer.
2556          *
2557          * @param {number} [timeout=10]
2558          * Override the confirmation timeout after which a rollback is triggered.
2559          *
2560          * @returns {Promise&lt;number>}
2561          * Returns a promise resolving/rejecting with the `ubus` RPC status code.
2562          */
2563         apply: function(timeout) {
2564                 var self = this,
2565                     date = new Date();
2566
2567                 if (typeof(timeout) != 'number' || timeout &lt; 1)
2568                         timeout = 10;
2569
2570                 return self.callApply(timeout, true).then(function(rv) {
2571                         if (rv != 0)
2572                                 return Promise.reject(rv);
2573
2574                         var try_deadline = date.getTime() + 1000 * timeout;
2575                         var try_confirm = function() {
2576                                 return self.callConfirm().then(function(rv) {
2577                                         if (rv != 0) {
2578                                                 if (date.getTime() &lt; try_deadline)
2579                                                         window.setTimeout(try_confirm, 250);
2580                                                 else
2581                                                         return Promise.reject(rv);
2582                                         }
2583
2584                                         return rv;
2585                                 });
2586                         };
2587
2588                         window.setTimeout(try_confirm, 1000);
2589                 });
2590         },
2591
2592         /**
2593          * An UCI change record is a plain array containing the change operation
2594          * name as first element, the affected section ID as second argument
2595          * and an optional third and fourth argument whose meanings depend on
2596          * the operation.
2597          *
2598          * @typedef {string[]} ChangeRecord
2599          * @memberof LuCI.uci
2600          *
2601          * @property {string} 0
2602          * The operation name - may be one of `add`, `set`, `remove`, `order`,
2603          * `list-add`, `list-del` or `rename`.
2604          *
2605          * @property {string} 1
2606          * The section ID targeted by the operation.
2607          *
2608          * @property {string} 2
2609          * The meaning of the third element depends on the operation.
2610          * - For `add` it is type of the section that has been added
2611          * - For `set` it either is the option name if a fourth element exists,
2612          *   or the type of a named section which has been added when the change
2613          *   entry only contains three elements.
2614          * - For `remove` it contains the name of the option that has been
2615          *   removed.
2616          * - For `order` it specifies the new sort index of the section.
2617          * - For `list-add` it contains the name of the list option a new value
2618          *   has been added to.
2619          * - For `list-del` it contains the name of the list option a value has
2620          *   been removed from.
2621          * - For `rename` it contains the name of the option that has been
2622          *   renamed if a fourth element exists, else it contains the new name
2623          *   a section has been renamed to if the change entry only contains
2624          *   three elements.
2625          *
2626          * @property {string} 4
2627          * The meaning of the fourth element depends on the operation.
2628          * - For `set` it is the value an option has been set to.
2629          * - For `list-add` it is the new value that has been added to a
2630          *   list option.
2631          * - For `rename` it is the new name of an option that has been
2632          *   renamed.
2633          */
2634
2635         /**
2636          * Fetches uncommitted UCI changes from the remote `ubus` RPC api.
2637          *
2638          * @method
2639          * @returns {Promise&lt;Object&lt;string, Array&lt;LuCI.uci.ChangeRecord>>>}
2640          * Returns a promise resolving to an object containing the configuration
2641          * names as keys and arrays of related change records as values.
2642          */
2643         changes: rpc.declare({
2644                 object: 'uci',
2645                 method: 'changes',
2646                 expect: { changes: { } }
2647         })
2648 });
2649 </code></pre>
2650         </article>
2651     </section>
2652
2653
2654
2655
2656
2657
2658         
2659
2660         <footer>
2661             Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.3</a> on Fri Apr 03 2020 13:28:08 GMT+0200 (Central European Summer Time)
2662         </footer>
2663     </div>
2664 </div>
2665 <script>prettyPrint();</script>
2666 <script src="scripts/jaguar.js"></script>
2667 </body>
2668 </html>