From: Jo-Philipp Wich
+ Members
+
+
@@ -1065,6 +1087,8 @@
+
+ Members
+
+
@@ -1203,6 +1231,8 @@
+
+
+
+
+
+
+
+
+
+
+
+ Methods
+
+
+
+
+
+
+
+
+
+
+ Typedefs
+
+
+
+
+
+
+
+ Methods
+
+
+
+
+
+
new
.
@@ -3666,7 +3764,7 @@ enable inheritance.
@@ -3813,7 +3911,7 @@ a subclass of this class'.
@@ -4005,7 +4103,7 @@ enable inheritance.
@@ -4235,7 +4333,7 @@ superclass method returned null
.
@@ -4458,7 +4556,7 @@ and the values extracted from the args
array beginning with
diff --git a/docs/jsapi/LuCI.dom.html b/docs/jsapi/LuCI.dom.html
index 529803ef6..4bca2bf45 100644
--- a/docs/jsapi/LuCI.dom.html
+++ b/docs/jsapi/LuCI.dom.html
@@ -74,12 +74,16 @@
L.require("dom").then(...)
.<
@@ -3330,7 +3428,7 @@ external JavaScript, use L.require("dom").then(...)
.<
@@ -3531,7 +3629,7 @@ if either the node
argument was no valid DOM node
or i
@@ -3729,7 +3827,7 @@ call implicitely turning it into a string.
@@ -3930,7 +4028,7 @@ a valid Class instance.
@@ -4146,7 +4244,7 @@ instance didn't have the requested method
.
@@ -4350,7 +4448,7 @@ if either the node
argument was no valid DOM node
or i
@@ -4610,7 +4708,7 @@ element names, such as spaces.
@@ -4849,7 +4947,7 @@ be found.
@@ -4994,7 +5092,7 @@ be found.
@@ -5144,7 +5242,7 @@ class could be found on the node itself or any of its parents.
@@ -5331,7 +5429,7 @@ result when testing it using the given ignoreFn
.
@@ -5517,7 +5615,7 @@ selector didn't match.
@@ -5707,7 +5805,7 @@ selector didn't match any parent.
@@ -5862,7 +5960,7 @@ the first div
element node.
@@ -6016,7 +6114,7 @@ ignored, else not.
diff --git a/docs/jsapi/LuCI.form.AbstractElement.html b/docs/jsapi/LuCI.form.AbstractElement.html
index 768e83a43..b64c50f2d 100644
--- a/docs/jsapi/LuCI.form.AbstractElement.html
+++ b/docs/jsapi/LuCI.form.AbstractElement.html
@@ -74,12 +74,16 @@
AbstractValue
.
@@ -4214,7 +4312,7 @@ not meeting the validation constraints of their respective elements.
@@ -4322,7 +4420,7 @@ the form element's markup, including the markup of any child elements.
@@ -4467,7 +4565,7 @@ the form element's markup, including the markup of any child elements.
@@ -4684,7 +4782,7 @@ contents. If omitted, no description will be rendered.
@@ -4953,7 +5051,7 @@ descendent of AbstractValue
.
@@ -5154,7 +5252,7 @@ was neither a string nor a function.
diff --git a/docs/jsapi/LuCI.form.AbstractValue.html b/docs/jsapi/LuCI.form.AbstractValue.html
index 73a47e396..008c57ba7 100644
--- a/docs/jsapi/LuCI.form.AbstractValue.html
+++ b/docs/jsapi/LuCI.form.AbstractValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5092,7 +5242,7 @@ returns false
.
@@ -5238,7 +5388,7 @@ returns false
.
@@ -5419,7 +5569,7 @@ so it may return promises if overridden by user code.
@@ -5568,7 +5718,7 @@ validation constraints.
@@ -5693,7 +5843,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -5801,7 +5951,7 @@ the form element's markup, including the markup of any child elements.
@@ -5946,7 +6096,7 @@ the form element's markup, including the markup of any child elements.
@@ -6126,7 +6276,7 @@ state of checkbox elements.
@@ -6319,7 +6469,7 @@ was neither a string nor a function.
@@ -6495,7 +6645,7 @@ as error message to the user.
@@ -6654,7 +6804,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.ButtonValue.html b/docs/jsapi/LuCI.form.ButtonValue.html
index 247ea5d4e..b8e5200c4 100644
--- a/docs/jsapi/LuCI.form.ButtonValue.html
+++ b/docs/jsapi/LuCI.form.ButtonValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5539,7 +5689,7 @@ returns false
.
@@ -5687,7 +5837,7 @@ returns false
.
@@ -5870,7 +6020,7 @@ so it may return promises if overridden by user code.
@@ -6021,7 +6171,7 @@ validation constraints.
@@ -6146,7 +6296,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6293,7 +6443,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6473,7 +6623,7 @@ state of checkbox elements.
@@ -6668,7 +6818,7 @@ was neither a string nor a function.
@@ -6816,7 +6966,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6975,7 +7125,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.DummyValue.html b/docs/jsapi/LuCI.form.DummyValue.html
index a0632ae7e..4fb2525ca 100644
--- a/docs/jsapi/LuCI.form.DummyValue.html
+++ b/docs/jsapi/LuCI.form.DummyValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5476,7 +5626,7 @@ returns false
.
@@ -5624,7 +5774,7 @@ returns false
.
@@ -5807,7 +5957,7 @@ so it may return promises if overridden by user code.
@@ -5958,7 +6108,7 @@ validation constraints.
@@ -6083,7 +6233,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6230,7 +6380,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6410,7 +6560,7 @@ state of checkbox elements.
@@ -6605,7 +6755,7 @@ was neither a string nor a function.
@@ -6753,7 +6903,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6912,7 +7062,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.DynamicList.html b/docs/jsapi/LuCI.form.DynamicList.html
index 424f37b0e..cf8a995c7 100644
--- a/docs/jsapi/LuCI.form.DynamicList.html
+++ b/docs/jsapi/LuCI.form.DynamicList.html
@@ -74,12 +74,16 @@
@@ -3847,6 +3945,58 @@ as plain text input.
+
+
+
+
+
+
+
+
+
+
+ readonlyboolean
+
+
+
+
+
+
+
+ Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ - Default Value:
+ - false
+
+
+
+
+
+
+
@@ -4183,7 +4333,7 @@ table section elements.
@@ -4301,7 +4451,7 @@ table section elements.
@@ -4479,7 +4629,7 @@ within the given specific section.
@@ -4657,7 +4807,7 @@ different way.
@@ -4871,7 +5021,7 @@ argument, this parameter is ignored.
@@ -5048,7 +5198,7 @@ It may be overwritten by user code to handle input values differently.
@@ -5226,7 +5376,7 @@ option implementation does not use LuCI.ui
widgets.
@@ -5376,7 +5526,7 @@ returns false
.
@@ -5524,7 +5674,7 @@ returns false
.
@@ -5707,7 +5857,7 @@ so it may return promises if overridden by user code.
@@ -5858,7 +6008,7 @@ validation constraints.
@@ -5983,7 +6133,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6130,7 +6280,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6310,7 +6460,7 @@ state of checkbox elements.
@@ -6505,7 +6655,7 @@ was neither a string nor a function.
@@ -6653,7 +6803,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6812,7 +6962,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.FileUpload.html b/docs/jsapi/LuCI.form.FileUpload.html
index cc10b43b3..add63f061 100644
--- a/docs/jsapi/LuCI.form.FileUpload.html
+++ b/docs/jsapi/LuCI.form.FileUpload.html
@@ -74,12 +74,16 @@
error
+ fspath
+
get
halt
hasSystemFeature
+ hasViewPermission
+
isObject
location
@@ -331,6 +335,8 @@
optional
+ readonly
+
rmempty
uciconfig
@@ -423,6 +429,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -511,6 +519,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -595,6 +605,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -687,6 +699,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -775,6 +789,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -929,6 +945,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -997,6 +1015,10 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5587,7 +5737,7 @@ returns false
.
@@ -5735,7 +5885,7 @@ returns false
.
@@ -5918,7 +6068,7 @@ so it may return promises if overridden by user code.
@@ -6069,7 +6219,7 @@ validation constraints.
@@ -6194,7 +6344,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6341,7 +6491,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6521,7 +6671,7 @@ state of checkbox elements.
@@ -6716,7 +6866,7 @@ was neither a string nor a function.
@@ -6864,7 +7014,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -7023,7 +7173,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.FlagValue.html b/docs/jsapi/LuCI.form.FlagValue.html
index adb3f398f..81161c587 100644
--- a/docs/jsapi/LuCI.form.FlagValue.html
+++ b/docs/jsapi/LuCI.form.FlagValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5470,7 +5620,7 @@ returns false
.
@@ -5618,7 +5768,7 @@ returns false
.
@@ -5801,7 +5951,7 @@ so it may return promises if overridden by user code.
@@ -5952,7 +6102,7 @@ validation constraints.
@@ -6077,7 +6227,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6224,7 +6374,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6399,7 +6549,7 @@ either a localized Yes
or No
string, depending on the
@@ -6594,7 +6744,7 @@ was neither a string nor a function.
@@ -6742,7 +6892,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6901,7 +7051,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.GridSection.html b/docs/jsapi/LuCI.form.GridSection.html
index 97402ecd9..22605f931 100644
--- a/docs/jsapi/LuCI.form.GridSection.html
+++ b/docs/jsapi/LuCI.form.GridSection.html
@@ -74,12 +74,16 @@
null
, means inheriting from the parent form.
@@ -4320,7 +4418,7 @@ is shown.
@@ -4438,7 +4536,7 @@ is shown.
@@ -4592,7 +4690,7 @@ custom implementations.
@@ -4698,7 +4796,7 @@ elements load functions rejected with an error.
@@ -4915,7 +5013,7 @@ descendent of AbstractValue
.
@@ -5023,7 +5121,7 @@ not meeting the validation constraints of their respective elements.
@@ -5168,7 +5266,7 @@ not meeting the validation constraints of their respective elements.
@@ -5386,7 +5484,7 @@ contents. If omitted, no description will be rendered.
@@ -5655,7 +5753,7 @@ descendent of AbstractValue
.
@@ -5856,7 +5954,7 @@ was neither a string nor a function.
diff --git a/docs/jsapi/LuCI.form.HiddenValue.html b/docs/jsapi/LuCI.form.HiddenValue.html
index e44d2508e..33c3c6a48 100644
--- a/docs/jsapi/LuCI.form.HiddenValue.html
+++ b/docs/jsapi/LuCI.form.HiddenValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5380,7 +5530,7 @@ returns false
.
@@ -5528,7 +5678,7 @@ returns false
.
@@ -5711,7 +5861,7 @@ so it may return promises if overridden by user code.
@@ -5862,7 +6012,7 @@ validation constraints.
@@ -5987,7 +6137,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6134,7 +6284,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6314,7 +6464,7 @@ state of checkbox elements.
@@ -6509,7 +6659,7 @@ was neither a string nor a function.
@@ -6657,7 +6807,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6816,7 +6966,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.JSONMap.html b/docs/jsapi/LuCI.form.JSONMap.html
index da1d72f90..7947037f5 100644
--- a/docs/jsapi/LuCI.form.JSONMap.html
+++ b/docs/jsapi/LuCI.form.JSONMap.html
@@ -74,12 +74,16 @@
Toggle readonly state of the form.
+If set to true
, the Map instance is marked readonly and any form
+option elements added to it will inherit the readonly state.
If left unset, the Map will test the access permission of the primary +uci configuration upon loading and mark the form readonly if no write +permissions are granted.
+null
if the option could not be found.
@@ -4577,7 +4729,7 @@ not meeting the validation constraints of their respective elements.
@@ -4680,7 +4832,7 @@ rendering is complete.
@@ -4784,7 +4936,7 @@ re-rendering is complete.
@@ -4987,7 +5139,7 @@ failed.
@@ -5182,7 +5334,7 @@ documentation for details.
@@ -5329,7 +5481,7 @@ documentation for details.
@@ -5530,7 +5682,7 @@ was neither a string nor a function.
diff --git a/docs/jsapi/LuCI.form.ListValue.html b/docs/jsapi/LuCI.form.ListValue.html
index d85af7af4..ae2669ef9 100644
--- a/docs/jsapi/LuCI.form.ListValue.html
+++ b/docs/jsapi/LuCI.form.ListValue.html
@@ -74,12 +74,16 @@
LuCI.ui.Select
@@ -3895,6 +3993,58 @@ as plain text input.
+
+
+
+
+
+
+
+
+Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5424,7 +5574,7 @@ returns false
.
@@ -5572,7 +5722,7 @@ returns false
.
@@ -5755,7 +5905,7 @@ so it may return promises if overridden by user code.
@@ -5906,7 +6056,7 @@ validation constraints.
@@ -6031,7 +6181,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6178,7 +6328,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6358,7 +6508,7 @@ state of checkbox elements.
@@ -6553,7 +6703,7 @@ was neither a string nor a function.
@@ -6701,7 +6851,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6860,7 +7010,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.Map.html b/docs/jsapi/LuCI.form.Map.html
index ccb94b454..2f44ad62b 100644
--- a/docs/jsapi/LuCI.form.Map.html
+++ b/docs/jsapi/LuCI.form.Map.html
@@ -74,12 +74,16 @@
Toggle readonly state of the form.
+If set to true
, the Map instance is marked readonly and any form
+option elements added to it will inherit the readonly state.
If left unset, the Map will test the access permission of the primary +uci configuration upon loading and mark the form readonly if no write +permissions are granted.
+null
if the option could not be found.
@@ -4562,7 +4714,7 @@ not meeting the validation constraints of their respective elements.
@@ -4663,7 +4815,7 @@ rendering is complete.
@@ -4765,7 +4917,7 @@ re-rendering is complete.
@@ -4966,7 +5118,7 @@ failed.
@@ -5161,7 +5313,7 @@ documentation for details.
@@ -5308,7 +5460,7 @@ documentation for details.
@@ -5509,7 +5661,7 @@ was neither a string nor a function.
diff --git a/docs/jsapi/LuCI.form.MultiValue.html b/docs/jsapi/LuCI.form.MultiValue.html
index 34f63f949..d004535f5 100644
--- a/docs/jsapi/LuCI.form.MultiValue.html
+++ b/docs/jsapi/LuCI.form.MultiValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5476,7 +5626,7 @@ returns false
.
@@ -5624,7 +5774,7 @@ returns false
.
@@ -5807,7 +5957,7 @@ so it may return promises if overridden by user code.
@@ -5958,7 +6108,7 @@ validation constraints.
@@ -6083,7 +6233,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6230,7 +6380,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6410,7 +6560,7 @@ state of checkbox elements.
@@ -6605,7 +6755,7 @@ was neither a string nor a function.
@@ -6753,7 +6903,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6912,7 +7062,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.NamedSection.html b/docs/jsapi/LuCI.form.NamedSection.html
index 6d1b95467..3643a3745 100644
--- a/docs/jsapi/LuCI.form.NamedSection.html
+++ b/docs/jsapi/LuCI.form.NamedSection.html
@@ -74,12 +74,16 @@
AbstractValue
.
@@ -4466,7 +4564,7 @@ not meeting the validation constraints of their respective elements.
@@ -4574,7 +4672,7 @@ the form element's markup, including the markup of any child elements.
@@ -4721,7 +4819,7 @@ the form element's markup, including the markup of any child elements.
@@ -4940,7 +5038,7 @@ contents. If omitted, no description will be rendered.
@@ -5209,7 +5307,7 @@ descendent of AbstractValue
.
@@ -5410,7 +5508,7 @@ was neither a string nor a function.
diff --git a/docs/jsapi/LuCI.form.SectionValue.html b/docs/jsapi/LuCI.form.SectionValue.html
index e98ae4ac0..b628e6f9d 100644
--- a/docs/jsapi/LuCI.form.SectionValue.html
+++ b/docs/jsapi/LuCI.form.SectionValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
cfgvalue()
implementation will always return null
.
@@ -4920,7 +5070,7 @@ argument, this parameter is ignored.
@@ -5095,7 +5245,7 @@ its formvalue()
implementation will always return null
@@ -5273,7 +5423,7 @@ option implementation does not use LuCI.ui
widgets.
@@ -5423,7 +5573,7 @@ returns false
.
@@ -5571,7 +5721,7 @@ returns false
.
@@ -5754,7 +5904,7 @@ so it may return promises if overridden by user code.
@@ -5905,7 +6055,7 @@ validation constraints.
@@ -6024,7 +6174,7 @@ its remove()
implementation is a no-op.
@@ -6171,7 +6321,7 @@ its remove()
implementation is a no-op.
@@ -6351,7 +6501,7 @@ state of checkbox elements.
@@ -6546,7 +6696,7 @@ was neither a string nor a function.
@@ -6692,7 +6842,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6843,7 +6993,7 @@ its write()
implementation is a no-op.
diff --git a/docs/jsapi/LuCI.form.TableSection.html b/docs/jsapi/LuCI.form.TableSection.html
index 0eb677f97..e2271c83e 100644
--- a/docs/jsapi/LuCI.form.TableSection.html
+++ b/docs/jsapi/LuCI.form.TableSection.html
@@ -74,12 +74,16 @@
addremove
property.
@@ -4311,7 +4409,7 @@ The default is null
, means inheriting from the parent form.
@@ -4514,7 +4612,7 @@ is shown.
@@ -4632,7 +4730,7 @@ is shown.
@@ -4786,7 +4884,7 @@ custom implementations.
@@ -4892,7 +4990,7 @@ elements load functions rejected with an error.
@@ -5109,7 +5207,7 @@ descendent of AbstractValue
.
@@ -5217,7 +5315,7 @@ not meeting the validation constraints of their respective elements.
@@ -5364,7 +5462,7 @@ not meeting the validation constraints of their respective elements.
@@ -5562,7 +5660,7 @@ contents. If omitted, no description will be rendered.
@@ -5831,7 +5929,7 @@ descendent of AbstractValue
.
@@ -6032,7 +6130,7 @@ was neither a string nor a function.
diff --git a/docs/jsapi/LuCI.form.TextValue.html b/docs/jsapi/LuCI.form.TextValue.html
index 27d8ae18f..780b089f9 100644
--- a/docs/jsapi/LuCI.form.TextValue.html
+++ b/docs/jsapi/LuCI.form.TextValue.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5571,7 +5721,7 @@ returns false
.
@@ -5719,7 +5869,7 @@ returns false
.
@@ -5902,7 +6052,7 @@ so it may return promises if overridden by user code.
@@ -6053,7 +6203,7 @@ validation constraints.
@@ -6178,7 +6328,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6325,7 +6475,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6505,7 +6655,7 @@ state of checkbox elements.
@@ -6700,7 +6850,7 @@ was neither a string nor a function.
@@ -6859,7 +7009,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.TypedSection.html b/docs/jsapi/LuCI.form.TypedSection.html
index d4510730f..b4625a160 100644
--- a/docs/jsapi/LuCI.form.TypedSection.html
+++ b/docs/jsapi/LuCI.form.TypedSection.html
@@ -74,12 +74,16 @@
addremove
property.
@@ -3790,7 +3888,7 @@ this property will hold a reference to the parent option instance.
@@ -3908,7 +4006,7 @@ this property will hold a reference to the parent option instance.
@@ -4038,7 +4136,7 @@ The sections will be rendered in the same order as the returned array.
@@ -4192,7 +4290,7 @@ custom implementations.
@@ -4298,7 +4396,7 @@ elements load functions rejected with an error.
@@ -4515,7 +4613,7 @@ descendent of AbstractValue
.
@@ -4623,7 +4721,7 @@ not meeting the validation constraints of their respective elements.
@@ -4731,7 +4829,7 @@ the form element's markup, including the markup of any child elements.
@@ -4878,7 +4976,7 @@ the form element's markup, including the markup of any child elements.
@@ -5097,7 +5195,7 @@ contents. If omitted, no description will be rendered.
@@ -5366,7 +5464,7 @@ descendent of AbstractValue
.
@@ -5567,7 +5665,7 @@ was neither a string nor a function.
diff --git a/docs/jsapi/LuCI.form.Value.html b/docs/jsapi/LuCI.form.Value.html
index 6ea8e48ad..1d5bee772 100644
--- a/docs/jsapi/LuCI.form.Value.html
+++ b/docs/jsapi/LuCI.form.Value.html
@@ -74,12 +74,16 @@
Make option element readonly.
+This property defaults to the readonly state of the parent form element.
+When set to true
, the underlying widget is rendered in disabled state,
+means its contents cannot be changed and the widget cannot be interacted
+with.
LuCI.ui
widgets.
@@ -5376,7 +5526,7 @@ returns false
.
@@ -5524,7 +5674,7 @@ returns false
.
@@ -5707,7 +5857,7 @@ so it may return promises if overridden by user code.
@@ -5858,7 +6008,7 @@ validation constraints.
@@ -5983,7 +6133,7 @@ implement alternative removal logic, e.g. to retain the original value.
@@ -6091,7 +6241,7 @@ the form element's markup, including the markup of any child elements.
@@ -6238,7 +6388,7 @@ the form element's markup, including the markup of any child elements.
@@ -6418,7 +6568,7 @@ state of checkbox elements.
@@ -6611,7 +6761,7 @@ was neither a string nor a function.
@@ -6759,7 +6909,7 @@ or a plain text string. If omitted, the key
value is used as captio
@@ -6918,7 +7068,7 @@ before it is written.
diff --git a/docs/jsapi/LuCI.form.html b/docs/jsapi/LuCI.form.html
index 35e33a6a2..464a76617 100644
--- a/docs/jsapi/LuCI.form.html
+++ b/docs/jsapi/LuCI.form.html
@@ -74,12 +74,16 @@
response.headers
property.
@@ -3328,7 +3426,7 @@ response objects using the response.headers
property.
@@ -3477,7 +3575,7 @@ Note: Header-Names are case-insensitive.
@@ -3631,7 +3729,7 @@ Note: Header-Names are case-insensitive.
diff --git a/docs/jsapi/LuCI.html b/docs/jsapi/LuCI.html
index 9c7c60f6a..a8bf2d946 100644
--- a/docs/jsapi/LuCI.html
+++ b/docs/jsapi/LuCI.html
@@ -74,12 +74,16 @@
L
variable.
LuCI.view
class.
@@ -3919,7 +4020,7 @@ as parameters.
@@ -4145,6 +4246,161 @@ argument or copied from the given error instance.
+
+
+
+
+Construct an absolute filesystem path relative to the server +document root.
+Name | + + +Type | + + + +Description | +
---|---|---|
parts |
+
+
+ + + +string + + + + | + + + +
+
+
+ optional
+
+
+
+
+ repeatable
+
+
+ An array of parts to join into a path. |
+
Type | +Description | +
---|---|
+ + string + + + | +Return the joined path. | +
Check whether a view has sufficient permissions.
+Type | +Description | +
---|---|
+ + boolean + | + + null + + + | +Returns null if the current session has no permission at all to
+load resources required by the view. Returns false if readonly
+permissions are granted or true if at least one required ACL
+group is granted with write permissions. |
+
null
, else returns false
.
@@ -4921,7 +5283,7 @@ not null
, else returns false
.
@@ -5078,7 +5440,7 @@ slashes and any of the other characters mentioned above.
@@ -5265,7 +5627,7 @@ slashes and any of the other characters mentioned above.
@@ -5570,7 +5932,7 @@ polling request.
@@ -5785,7 +6147,7 @@ by default.
@@ -6024,7 +6386,7 @@ argument or copied from the given error instance.
@@ -6282,7 +6644,7 @@ class instance.
@@ -6453,7 +6815,7 @@ to the given default value on error.
@@ -6610,7 +6972,7 @@ slashes and any of the other characters mentioned above.
@@ -6713,7 +7075,7 @@ when it was already running.
@@ -6930,7 +7292,7 @@ addresses or numeric values respectively.
@@ -7078,7 +7440,7 @@ it could not be found.
@@ -7228,7 +7590,7 @@ space and returned as array.
@@ -7391,7 +7753,7 @@ slashes and any of the other characters mentioned above.
@@ -7562,7 +7924,7 @@ else null
.
diff --git a/docs/jsapi/LuCI.network.Device.html b/docs/jsapi/LuCI.network.Device.html
index 7adf03c9f..332ea597b 100644
--- a/docs/jsapi/LuCI.network.Device.html
+++ b/docs/jsapi/LuCI.network.Device.html
@@ -74,12 +74,16 @@
false
.
@@ -3634,7 +3732,7 @@ for non-wifi devices or operation mode and ssid for wifi ones.
@@ -3734,7 +3832,7 @@ for non-wifi devices or operation mode and ssid for wifi ones.
@@ -3834,7 +3932,7 @@ for non-wifi devices or operation mode and ssid for wifi ones.
@@ -3938,7 +4036,7 @@ e.g. for non-ethernet tunnel devices.
@@ -4038,7 +4136,7 @@ e.g. for non-ethernet tunnel devices.
@@ -4138,7 +4236,7 @@ e.g. for non-ethernet tunnel devices.
@@ -4243,7 +4341,7 @@ assigned to any logical interface.
@@ -4344,7 +4442,7 @@ logical interfaces this device is assigned to.
@@ -4449,7 +4547,7 @@ a Linux bridge.
@@ -4549,7 +4647,7 @@ a Linux bridge.
@@ -4649,7 +4747,7 @@ a Linux bridge.
@@ -4750,7 +4848,7 @@ the operation mode and SSID for wifi devices.
@@ -4850,7 +4948,7 @@ the operation mode and SSID for wifi devices.
@@ -4950,7 +5048,7 @@ the operation mode and SSID for wifi devices.
@@ -5059,7 +5157,7 @@ the operation mode and SSID for wifi devices.
@@ -5160,7 +5258,7 @@ the operation mode and SSID for wifi devices.
@@ -5265,7 +5363,7 @@ is not a wireless device.
@@ -5366,7 +5464,7 @@ else false
.
@@ -5467,7 +5565,7 @@ else false
.
@@ -5576,7 +5674,7 @@ when it is down or absent.
diff --git a/docs/jsapi/LuCI.network.Hosts.html b/docs/jsapi/LuCI.network.Hosts.html
index 7468e054d..0ff4adeef 100644
--- a/docs/jsapi/LuCI.network.Hosts.html
+++ b/docs/jsapi/LuCI.network.Hosts.html
@@ -74,12 +74,16 @@
config interface
@@ -3328,7 +3426,7 @@ subclasses which describe logical UCI networks defined by config interface
@@ -3489,7 +3587,7 @@ interface or if the logical interface is virtual.
@@ -3650,7 +3748,7 @@ device or false
if not.
@@ -3760,7 +3858,7 @@ the interface removal will be aborted.
@@ -3921,7 +4019,7 @@ interface or if the logical interface is virtual.
@@ -4073,7 +4171,7 @@ not found.
@@ -4175,7 +4273,7 @@ expected Linux network device according to the configuration.
@@ -4282,7 +4380,7 @@ virtual and not a bridge.
@@ -4383,7 +4481,7 @@ protocol backend.
@@ -4484,7 +4582,7 @@ protocol backend.
@@ -4592,7 +4690,7 @@ error code in case no translation can be found.
@@ -4696,7 +4794,7 @@ if it isn't applicable to the associated protocol.
@@ -4798,7 +4896,7 @@ default route or null
if no default route was found.
@@ -4900,7 +4998,7 @@ default route or null
if no default route was found.
@@ -5002,7 +5100,7 @@ default route or null
if no default route was found.
@@ -5106,7 +5204,7 @@ it could not be determined.
@@ -5210,7 +5308,7 @@ in CIDR notation or null
if no IPv6 addresses were set.
@@ -5312,7 +5410,7 @@ follows the order of the addresses in ubus
runtime information.
- network.js, line 2239
+ network.js, line 2241
@@ -5416,7 +5514,7 @@ handler or null
if no prefix is present.
@@ -5520,7 +5618,7 @@ or null
if no IPv4 addresses were set.
@@ -5622,7 +5720,7 @@ follows the order of the addresses in ubus
runtime information.
- network.js, line 2556
+ network.js, line 2558
@@ -5724,7 +5822,7 @@ network device currently associated with the logical interface.
@@ -5826,7 +5924,7 @@ network device currently associated with the logical interface.
@@ -5927,7 +6025,7 @@ routes spawned by the associated logical interface.
@@ -6027,7 +6125,7 @@ routes spawned by the associated logical interface.
@@ -6131,7 +6229,7 @@ protocol handler or null
if no IPv4 addresses were set.
@@ -6233,7 +6331,7 @@ function, e.g. odhcp6c
for the dhcpv6
prototocol.
@@ -6336,7 +6434,7 @@ function, e.g. odhcp6c
for the dhcpv6
prototocol.
@@ -6443,7 +6541,7 @@ interface or null
if no type
option is set.
@@ -6543,7 +6641,7 @@ interface or null
if no type
option is set.
@@ -6651,7 +6749,7 @@ handler didn't request a zone.
@@ -6758,7 +6856,7 @@ is an alias or null
if it is not an alias interface.
@@ -6860,7 +6958,7 @@ or false
when the logical interface is no bridge.
@@ -7007,7 +7105,7 @@ rejects with an error message string.
@@ -7112,7 +7210,7 @@ or not (false
).
@@ -7213,7 +7311,7 @@ has no network devices attached.
@@ -7322,7 +7420,7 @@ or not (false
).
@@ -7426,7 +7524,7 @@ returns true
.
@@ -7526,7 +7624,7 @@ returns true
.
@@ -7633,7 +7731,7 @@ dynamic interfaces (true
) or not (false
).
@@ -7787,7 +7885,7 @@ configuration.
diff --git a/docs/jsapi/LuCI.network.WifiDevice.html b/docs/jsapi/LuCI.network.WifiDevice.html
index 0b12b5d06..cab05c6f0 100644
--- a/docs/jsapi/LuCI.network.WifiDevice.html
+++ b/docs/jsapi/LuCI.network.WifiDevice.html
@@ -74,12 +74,16 @@
error
+ fspath
+
get
halt
hasSystemFeature
+ hasViewPermission
+
isObject
location
@@ -331,6 +335,8 @@
optional
+ readonly
+
rmempty
uciconfig
@@ -423,6 +429,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -511,6 +519,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -595,6 +605,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -687,6 +699,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -775,6 +789,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -929,6 +945,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -997,6 +1015,10 @@
ubus
runtime information.
- network.js, line 3621
+ network.js, line 3623
@@ -4068,7 +4166,7 @@ state. Possible returned values are:
@@ -4170,7 +4268,7 @@ translated string.
@@ -4271,7 +4369,7 @@ information.
@@ -4372,7 +4470,7 @@ with this network.
@@ -4478,7 +4576,7 @@ is not available.
@@ -4581,7 +4679,7 @@ is not available.
@@ -4685,7 +4783,7 @@ or null
if it cannot be determined.
@@ -4786,7 +4884,7 @@ information or 00
if it cannot be determined.
@@ -4887,7 +4985,7 @@ device associted with this wireless network.
@@ -4992,7 +5090,7 @@ available.
@@ -5095,7 +5193,7 @@ name, depending on which information is available.
@@ -5198,7 +5296,7 @@ radio and network index numbers.
@@ -5303,7 +5401,7 @@ associated network device, e.g. when not configured or up.
@@ -5407,7 +5505,7 @@ is not in mesh mode.
@@ -5514,7 +5612,7 @@ is not in mesh mode.
@@ -5614,7 +5712,7 @@ is not in mesh mode.
@@ -5719,7 +5817,7 @@ interface.
@@ -5820,7 +5918,7 @@ attached to.
@@ -5921,7 +6019,7 @@ logical interfaces this wireless network is attached to.
@@ -6022,7 +6120,7 @@ information or 0
if it cannot be determined.
@@ -6124,7 +6222,7 @@ internal network ID, depending on which information is available.
@@ -6228,7 +6326,7 @@ information or null
if it cannot be determined.
@@ -6331,7 +6429,7 @@ noise and signal (SNR), divided by 5.
@@ -6433,7 +6531,7 @@ by ubus
runtime state.
@@ -6537,7 +6635,7 @@ in mesh mode.
@@ -6641,7 +6739,7 @@ in mesh mode.
@@ -6745,7 +6843,7 @@ cannot be determined.
@@ -6850,7 +6948,7 @@ found.
@@ -6954,7 +7052,7 @@ or null
if it cannot be determined.
@@ -7055,7 +7153,7 @@ deauthenticating clients, otherwise false
.
@@ -7157,7 +7255,7 @@ UCI configuration.
@@ -7262,7 +7360,7 @@ instance.
@@ -7416,7 +7514,7 @@ configuration.
diff --git a/docs/jsapi/LuCI.network.html b/docs/jsapi/LuCI.network.html
index 40bceb966..735906ea6 100644
--- a/docs/jsapi/LuCI.network.html
+++ b/docs/jsapi/LuCI.network.html
@@ -74,12 +74,16 @@
ubus
apis.
@@ -4236,7 +4334,7 @@ or WPA3 SAE (CCMP)
.
@@ -4384,7 +4482,7 @@ be found.
@@ -4485,7 +4583,7 @@ instances describing the network devices found on the system.
@@ -4586,7 +4684,7 @@ instances describing the network devices found on the system.
@@ -4690,7 +4788,7 @@ class instance describing the found hosts.
@@ -4851,7 +4949,7 @@ object could not be converted to a name.
@@ -4999,7 +5097,7 @@ the network or null
if the network did not exist.
@@ -5101,7 +5199,7 @@ describing all known networks.
@@ -5301,7 +5399,7 @@ protocol isn't known.
@@ -5402,7 +5500,7 @@ backend classes.
@@ -5506,7 +5604,7 @@ the layout.
@@ -5609,7 +5707,7 @@ instances describing the found IPv6 default route interfaces.
@@ -5712,7 +5810,7 @@ instances describing the found default route interfaces.
@@ -5861,7 +5959,7 @@ be found.
@@ -5964,7 +6062,7 @@ the configuration.
@@ -6115,7 +6213,7 @@ be found.
@@ -6218,7 +6316,7 @@ are found.
@@ -6368,7 +6466,7 @@ else returns false
.
@@ -6565,7 +6663,7 @@ if the given netmask value was invalid.
@@ -6763,7 +6861,7 @@ value of 32
for IPv4 or 128
for IPv6.
@@ -6935,7 +7033,7 @@ description for the given code.
@@ -7053,7 +7151,7 @@ such as 6in4-wan
or tun0
.
@@ -7226,7 +7324,7 @@ be passed to Class.extend()
.
@@ -9271,7 +9369,7 @@ conjunction with quality
to calculate a quality percentage.
- Documentation generated by JSDoc 3.6.3 on Tue Apr 07 2020 16:33:40 GMT+0200 (Central European Summer Time)
+ Documentation generated by JSDoc 3.6.3 on Thu Apr 16 2020 13:30:42 GMT+0200 (Central European Summer Time)
diff --git a/docs/jsapi/LuCI.poll.html b/docs/jsapi/LuCI.poll.html
index 98a21d884..c895c5dd2 100644
--- a/docs/jsapi/LuCI.poll.html
+++ b/docs/jsapi/LuCI.poll.html
@@ -74,12 +74,16 @@
false
when the polling loop already runs.
@@ -4014,7 +4112,7 @@ run to begin with.
diff --git a/docs/jsapi/LuCI.request.html b/docs/jsapi/LuCI.request.html
index a02440505..97042f805 100644
--- a/docs/jsapi/LuCI.request.html
+++ b/docs/jsapi/LuCI.request.html
@@ -74,12 +74,16 @@
null
.
diff --git a/docs/jsapi/LuCI.response.html b/docs/jsapi/LuCI.response.html
index f0f821f32..c6c2a37e2 100644
--- a/docs/jsapi/LuCI.response.html
+++ b/docs/jsapi/LuCI.response.html
@@ -74,12 +74,16 @@
String()
and treated as response text.
@@ -3983,7 +4081,7 @@ using String()
and treated as response text.
@@ -4091,7 +4189,7 @@ using String()
and treated as response text.
diff --git a/docs/jsapi/LuCI.rpc.html b/docs/jsapi/LuCI.rpc.html
index b3d5f4a6f..901518290 100644
--- a/docs/jsapi/LuCI.rpc.html
+++ b/docs/jsapi/LuCI.rpc.html
@@ -74,12 +74,16 @@
ubus
object name will be returned.
- rpc.js, line 472
+ rpc.js, line 481
@@ -4281,7 +4379,7 @@ if it has not been found.
@@ -4397,7 +4495,7 @@ if it has not been found.
@@ -4543,6 +4641,8 @@ requests.
+ The name of the remote ubus
object to invoke.
The name of the remote ubus
method to invoke.
Lists the named parameters expected by the remote Describes the expected return data structure. The given object is
supposed to contain a single key selecting the value to use from
@@ -4743,12 +4859,55 @@ be returned as default instead.
+ Specfies an optional filter function which is invoked to transform the
received reply data before it is returned to the caller. If set to ubus
RPC method.
The arguments passed to the resulting generated method call function
@@ -4683,6 +4795,10 @@ invoked with filterFn(reply, [ "foo" ], "bar", "b
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -4790,7 +4949,7 @@ received reply data before it is returned to the caller.
+
+
+ reject
+
+
+boolean
+
+
+
+
+
+
+
+
+ <optional>
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+ true
, non-zero ubus call status codes are treated as fatal
+error and lead to the rejection of the call promise. The default
+behaviour is to resolve with the call return code value instead.
expect
and filter
declarations.
diff --git a/docs/jsapi/LuCI.uci.html b/docs/jsapi/LuCI.uci.html
index 898a52c5f..e103e74f4 100644
--- a/docs/jsapi/LuCI.uci.html
+++ b/docs/jsapi/LuCI.uci.html
@@ -74,12 +74,16 @@
X
denotes a hexadecimal digit.
@@ -4182,7 +4280,7 @@ found or if the corresponding configuration is not loaded.sid1
or by sid2
i
@@ -4978,7 +5076,7 @@ when either the section specified by sid1
or by sid2
i
@@ -5156,7 +5254,7 @@ not be resolved to existing section ID.
@@ -5260,7 +5358,7 @@ have been reloaded by the save operation.
@@ -5473,7 +5571,7 @@ configuration, filtered by type of a type has been specified.
@@ -5669,7 +5767,7 @@ with the given value.
@@ -5890,7 +5988,7 @@ with the given value.
@@ -6010,7 +6108,7 @@ names to unload.
@@ -6175,7 +6273,7 @@ configuration.
@@ -6762,7 +6860,7 @@ underlying option is an UCI list.
@@ -6909,7 +7007,7 @@ associated name as arguments.
diff --git a/docs/jsapi/LuCI.ui.AbstractElement.html b/docs/jsapi/LuCI.ui.AbstractElement.html
index 5e7847df3..320fb565f 100644
--- a/docs/jsapi/LuCI.ui.AbstractElement.html
+++ b/docs/jsapi/LuCI.ui.AbstractElement.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
@@ -3337,7 +3435,7 @@ it in external JavaScript, use L.require("ui").then(...)
@@ -3446,7 +3544,7 @@ an array of strings or null
for unset values.
@@ -3547,7 +3645,7 @@ not meet the validation constraints.
@@ -3717,7 +3815,7 @@ registered.
@@ -3818,7 +3916,7 @@ widget markup.
@@ -3975,7 +4073,7 @@ as dirty.
@@ -4130,7 +4228,7 @@ trigger input value validation.
@@ -4255,7 +4353,7 @@ or null
values.
@@ -4553,6 +4651,45 @@ converted to a string and treated as validation error message.
+
+ disabled
Specifies whether the widget should be rendered in disabled state
+(true
) or not (false
). Disabled widgets cannot be interacted with
+and are displayed in a slightly faded style.
L.require("ui").then(...)
and ac
@@ -3440,7 +3538,7 @@ external JavaScript, use L.require("ui").then(...)
and ac
@@ -3549,7 +3647,7 @@ an array of strings or null
for unset values.
@@ -3651,7 +3749,7 @@ an array of strings or null
for unset values.
@@ -3754,7 +3852,7 @@ not meet the validation constraints.
@@ -3926,7 +4024,7 @@ registered.
@@ -4029,7 +4127,7 @@ widget markup.
@@ -4188,7 +4286,7 @@ as dirty.
@@ -4345,7 +4443,7 @@ trigger input value validation.
@@ -4472,7 +4570,7 @@ or null
values.
@@ -4747,7 +4845,7 @@ it is required for HTML based form submissions.
diff --git a/docs/jsapi/LuCI.ui.ComboButton.html b/docs/jsapi/LuCI.ui.ComboButton.html
index 2352aa58b..3031037cc 100644
--- a/docs/jsapi/LuCI.ui.ComboButton.html
+++ b/docs/jsapi/LuCI.ui.ComboButton.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3478,7 +3576,7 @@ choice labels.
@@ -3624,7 +3722,7 @@ as label text. Choice labels may be any valid value accepted by
@@ -3761,7 +3859,7 @@ of keeping them.
@@ -3834,7 +3932,7 @@ of keeping them.
@@ -3937,7 +4035,7 @@ not meet the validation constraints.
@@ -4109,7 +4207,7 @@ registered.
@@ -4268,7 +4366,7 @@ as dirty.
@@ -4425,7 +4523,7 @@ trigger input value validation.
@@ -4777,7 +4875,7 @@ choice value as second argument.
diff --git a/docs/jsapi/LuCI.ui.Combobox.html b/docs/jsapi/LuCI.ui.Combobox.html
index 7baa7e2c0..30280f12e 100644
--- a/docs/jsapi/LuCI.ui.Combobox.html
+++ b/docs/jsapi/LuCI.ui.Combobox.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3480,7 +3578,7 @@ choice labels.
@@ -3626,7 +3724,7 @@ as label text. Choice labels may be any valid value accepted by
@@ -3763,7 +3861,7 @@ of keeping them.
@@ -3836,7 +3934,7 @@ of keeping them.
@@ -3939,7 +4037,7 @@ not meet the validation constraints.
@@ -4111,7 +4209,7 @@ registered.
@@ -4270,7 +4368,7 @@ as dirty.
@@ -4427,7 +4525,7 @@ trigger input value validation.
@@ -4680,7 +4778,7 @@ forcibly set to true
.
diff --git a/docs/jsapi/LuCI.ui.Dropdown.html b/docs/jsapi/LuCI.ui.Dropdown.html
index f5898d37b..a157c38d5 100644
--- a/docs/jsapi/LuCI.ui.Dropdown.html
+++ b/docs/jsapi/LuCI.ui.Dropdown.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3476,7 +3574,7 @@ choice labels.
@@ -3620,7 +3718,7 @@ as label text. Choice labels may be any valid value accepted by
@@ -3755,7 +3853,7 @@ of keeping them.
@@ -3828,7 +3926,7 @@ of keeping them.
@@ -3939,7 +4037,7 @@ an array of strings or null
for unset values.
@@ -4042,7 +4140,7 @@ not meet the validation constraints.
@@ -4214,7 +4312,7 @@ registered.
@@ -4317,7 +4415,7 @@ widget markup.
@@ -4476,7 +4574,7 @@ as dirty.
@@ -4633,7 +4731,7 @@ trigger input value validation.
@@ -4760,7 +4858,7 @@ or null
values.
@@ -5478,7 +5576,7 @@ expression. Only applicable when create
is true
.
diff --git a/docs/jsapi/LuCI.ui.DynamicList.html b/docs/jsapi/LuCI.ui.DynamicList.html
index 11b6f6332..12fa533b3 100644
--- a/docs/jsapi/LuCI.ui.DynamicList.html
+++ b/docs/jsapi/LuCI.ui.DynamicList.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3481,7 +3579,7 @@ arbitrary values to the dynamic list.
@@ -3625,7 +3723,7 @@ as label text. Choice labels may be any valid value accepted by
@@ -3699,7 +3797,7 @@ as label text. Choice labels may be any valid value accepted by
@@ -3810,7 +3908,7 @@ an array of strings or null
for unset values.
@@ -3913,7 +4011,7 @@ not meet the validation constraints.
@@ -4085,7 +4183,7 @@ registered.
@@ -4188,7 +4286,7 @@ widget markup.
@@ -4347,7 +4445,7 @@ as dirty.
@@ -4504,7 +4602,7 @@ trigger input value validation.
@@ -4631,7 +4729,7 @@ or null
values.
@@ -4855,7 +4953,7 @@ it to remain unselected.
diff --git a/docs/jsapi/LuCI.ui.FileUpload.html b/docs/jsapi/LuCI.ui.FileUpload.html
index d66ecde64..bb84aafec 100644
--- a/docs/jsapi/LuCI.ui.FileUpload.html
+++ b/docs/jsapi/LuCI.ui.FileUpload.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3445,7 +3543,7 @@ upload control.
@@ -3556,7 +3654,7 @@ an array of strings or null
for unset values.
@@ -3659,7 +3757,7 @@ not meet the validation constraints.
@@ -3831,7 +3929,7 @@ registered.
@@ -3934,7 +4032,7 @@ widget markup.
@@ -4093,7 +4191,7 @@ as dirty.
@@ -4250,7 +4348,7 @@ trigger input value validation.
@@ -4377,7 +4475,7 @@ or null
values.
@@ -4704,7 +4802,7 @@ ACL setup for the current session.
diff --git a/docs/jsapi/LuCI.ui.Hiddenfield.html b/docs/jsapi/LuCI.ui.Hiddenfield.html
index 6e8733d70..a8130359d 100644
--- a/docs/jsapi/LuCI.ui.Hiddenfield.html
+++ b/docs/jsapi/LuCI.ui.Hiddenfield.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3444,7 +3542,7 @@ external JavaScript, use L.require("ui").then(...)
and ac
@@ -3555,7 +3653,7 @@ an array of strings or null
for unset values.
@@ -3658,7 +3756,7 @@ not meet the validation constraints.
@@ -3830,7 +3928,7 @@ registered.
@@ -3933,7 +4031,7 @@ widget markup.
@@ -4092,7 +4190,7 @@ as dirty.
@@ -4249,7 +4347,7 @@ trigger input value validation.
@@ -4376,7 +4474,7 @@ or null
values.
@@ -4458,7 +4556,7 @@ trigger validation runs, e.g. when programmatically altering values.
diff --git a/docs/jsapi/LuCI.ui.Select.html b/docs/jsapi/LuCI.ui.Select.html
index b6c867686..6de142fb6 100644
--- a/docs/jsapi/LuCI.ui.Select.html
+++ b/docs/jsapi/LuCI.ui.Select.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3479,7 +3577,7 @@ choice labels.
@@ -3590,7 +3688,7 @@ an array of strings or null
for unset values.
@@ -3693,7 +3791,7 @@ not meet the validation constraints.
@@ -3865,7 +3963,7 @@ registered.
@@ -3968,7 +4066,7 @@ widget markup.
@@ -4127,7 +4225,7 @@ as dirty.
@@ -4284,7 +4382,7 @@ trigger input value validation.
@@ -4411,7 +4509,7 @@ or null
values.
@@ -4807,7 +4905,7 @@ selected yet. Only applicable to the select
widget type.
diff --git a/docs/jsapi/LuCI.ui.Textarea.html b/docs/jsapi/LuCI.ui.Textarea.html
index a39cc8298..0f383fbdd 100644
--- a/docs/jsapi/LuCI.ui.Textarea.html
+++ b/docs/jsapi/LuCI.ui.Textarea.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3440,7 +3538,7 @@ external JavaScript, use L.require("ui").then(...)
and ac
@@ -3551,7 +3649,7 @@ an array of strings or null
for unset values.
@@ -3654,7 +3752,7 @@ not meet the validation constraints.
@@ -3826,7 +3924,7 @@ registered.
@@ -3929,7 +4027,7 @@ widget markup.
@@ -4088,7 +4186,7 @@ as dirty.
@@ -4245,7 +4343,7 @@ trigger input value validation.
@@ -4372,7 +4470,7 @@ or null
values.
@@ -4756,7 +4854,7 @@ contents.
diff --git a/docs/jsapi/LuCI.ui.Textfield.html b/docs/jsapi/LuCI.ui.Textfield.html
index 2e87514e2..d3657a8c9 100644
--- a/docs/jsapi/LuCI.ui.Textfield.html
+++ b/docs/jsapi/LuCI.ui.Textfield.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3440,7 +3538,7 @@ external JavaScript, use L.require("ui").then(...)
and ac
@@ -3551,7 +3649,7 @@ an array of strings or null
for unset values.
@@ -3654,7 +3752,7 @@ not meet the validation constraints.
@@ -3826,7 +3924,7 @@ registered.
@@ -3929,7 +4027,7 @@ widget markup.
@@ -4088,7 +4186,7 @@ as dirty.
@@ -4245,7 +4343,7 @@ trigger input value validation.
@@ -4372,7 +4470,7 @@ or null
values.
@@ -4684,7 +4782,7 @@ corresponding <input>
element is empty.
diff --git a/docs/jsapi/LuCI.ui.changes.html b/docs/jsapi/LuCI.ui.changes.html
index ceb09d6a2..37c3aeb76 100644
--- a/docs/jsapi/LuCI.ui.changes.html
+++ b/docs/jsapi/LuCI.ui.changes.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3332,7 +3430,7 @@ external JavaScript, use L.require("ui").then(...)
and ac
@@ -3473,7 +3571,7 @@ settings.
@@ -3546,7 +3644,7 @@ and offer options to revert or apply the shown changes.
@@ -3664,7 +3762,7 @@ UCI changeset structure.
@@ -3740,7 +3838,7 @@ complete.
@@ -3868,7 +3966,7 @@ is removed.
diff --git a/docs/jsapi/LuCI.ui.html b/docs/jsapi/LuCI.ui.html
index 1d21b68f6..39222a14f 100644
--- a/docs/jsapi/LuCI.ui.html
+++ b/docs/jsapi/LuCI.ui.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
.
@@ -3340,6 +3438,9 @@ external JavaScript, use L.require("ui").then(...)
.
L.require("ui").then(...)
.
@@ -3602,7 +3703,7 @@ banner element.
@@ -3916,7 +4017,7 @@ trigger field validation or to bind it to further events.
@@ -4053,7 +4154,7 @@ default.
@@ -4279,7 +4380,7 @@ valid function value.
@@ -4427,7 +4528,7 @@ requested indicator was not found.
@@ -4503,7 +4604,7 @@ handler as-is without the need to bind it first.
@@ -4655,7 +4756,7 @@ catched and rendered using LuCI.error()
@@ -4897,7 +4998,7 @@ accepted by LuCI.dom.content()
.
@@ -5100,7 +5201,7 @@ or rejecting with null
when the connectivity check timed out.
@@ -5371,7 +5472,7 @@ changes were made.
@@ -5600,7 +5701,7 @@ element.
@@ -5958,7 +6059,7 @@ cancelled by the user.
diff --git a/docs/jsapi/LuCI.ui.tabs.html b/docs/jsapi/LuCI.ui.tabs.html
index 88279f346..fac9caf10 100644
--- a/docs/jsapi/LuCI.ui.tabs.html
+++ b/docs/jsapi/LuCI.ui.tabs.html
@@ -74,12 +74,16 @@
L.require("ui").then(...)
and ac
@@ -3333,7 +3431,7 @@ external JavaScript, use L.require("ui").then(...)
and ac
@@ -3462,7 +3560,7 @@ DOM node.
@@ -3615,7 +3713,7 @@ DOM node.
diff --git a/docs/jsapi/LuCI.view.html b/docs/jsapi/LuCI.view.html
index 2ea583ebb..dbf81e9d8 100644
--- a/docs/jsapi/LuCI.view.html
+++ b/docs/jsapi/LuCI.view.html
@@ -74,12 +74,16 @@
null
.
@@ -3605,7 +3703,7 @@ is reenabled.
@@ -3769,7 +3867,7 @@ is reenabled.
@@ -3935,7 +4033,7 @@ is reenabled.
@@ -4045,7 +4143,7 @@ the default implementation does nothing.
@@ -4219,7 +4317,7 @@ to a Node
value.
diff --git a/docs/jsapi/LuCI.xhr.html b/docs/jsapi/LuCI.xhr.html
index 873d691c0..99c01420d 100644
--- a/docs/jsapi/LuCI.xhr.html
+++ b/docs/jsapi/LuCI.xhr.html
@@ -74,12 +74,16 @@
'use strict';
'require ui';
'require uci';
+'require rpc';
'require dom';
'require baseclass';
var scope = this;
+var callSessionAccess = rpc.declare({
+ object: 'session',
+ method: 'access',
+ params: [ 'scope', 'object', 'function' ],
+ expect: { 'access': false }
+});
+
var CBIJSONConfig = baseclass.extend({
__init__: function(data) {
data = Object.assign({}, data);
@@ -3581,6 +3687,20 @@ var CBIMap = CBIAbstractElement.extend(/** @lends LuCI.form.Map.prototype */ {
this.data = uci;
},
+ /**
+ * Toggle readonly state of the form.
+ *
+ * If set to `true`, the Map instance is marked readonly and any form
+ * option elements added to it will inherit the readonly state.
+ *
+ * If left unset, the Map will test the access permission of the primary
+ * uci configuration upon loading and mark the form readonly if no write
+ * permissions are granted.
+ *
+ * @name LuCI.form.Map.prototype#readonly
+ * @type boolean
+ */
+
/**
* Find all DOM nodes within this Map which match the given search
* parameters. This function is essentially a convenience wrapper around
@@ -3727,8 +3847,17 @@ var CBIMap = CBIAbstractElement.extend(/** @lends LuCI.form.Map.prototype */ {
* an error.
*/
load: function() {
- return this.data.load(this.parsechain || [ this.config ])
- .then(this.loadChildren.bind(this));
+ var doCheckACL = (!(this instanceof CBIJSONMap) && this.readonly == null);
+
+ return Promise.all([
+ doCheckACL ? callSessionAccess('uci', this.config, 'write') : true,
+ this.data.load(this.parsechain || [ this.config ])
+ ]).then(L.bind(function(res) {
+ if (res[0] === false)
+ this.readonly = true;
+
+ return this.loadChildren();
+ }, this));
},
/**
@@ -3782,11 +3911,18 @@ var CBIMap = CBIAbstractElement.extend(/** @lends LuCI.form.Map.prototype */ {
.then(this.data.save.bind(this.data))
.then(this.load.bind(this))
.catch(function(e) {
- if (!silent)
- alert('Cannot save due to invalid values');
+ if (!silent) {
+ ui.showModal(_('Save error'), [
+ E('p', {}, [ _('An error occurred while saving the form:') ]),
+ E('p', {}, [ E('em', { 'style': 'white-space:pre' }, [ e.message ]) ]),
+ E('div', { 'class': 'right' }, [
+ E('button', { 'click': ui.hideModal }, [ _('Dismiss') ])
+ ])
+ ]);
+ }
- return Promise.reject();
- }).finally(this.renderContents.bind(this));
+ return Promise.reject(e);
+ }).then(this.renderContents.bind(this));
},
/**
@@ -4519,6 +4655,19 @@ var CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.AbstractVa
* @default null
*/
+ /**
+ * Make option element readonly.
+ *
+ * This property defaults to the readonly state of the parent form element.
+ * When set to `true`, the underlying widget is rendered in disabled state,
+ * means its contents cannot be changed and the widget cannot be interacted
+ * with.
+ *
+ * @name LuCI.form.AbstractValue.prototype#readonly
+ * @type boolean
+ * @default false
+ */
+
/**
* Override the cell width of a table or grid section child option.
*
@@ -4972,8 +5121,10 @@ var CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.AbstractVa
cval = this.cfgvalue(section_id),
fval = active ? this.formvalue(section_id) : null;
- if (active && !this.isValid(section_id))
- return Promise.reject();
+ if (active && !this.isValid(section_id)) {
+ var title = this.stripTags(this.title).trim();
+ return Promise.reject(new TypeError(_('Option "%s" contains an invalid input value.').format(title || this.option)));
+ }
if (fval != '' && fval != null) {
if (this.forcewrite || !isEqual(cval, fval))
@@ -4984,8 +5135,8 @@ var CBIAbstractValue = CBIAbstractElement.extend(/** @lends LuCI.form.AbstractVa
return Promise.resolve(this.remove(section_id));
}
else if (!isEqual(cval, fval)) {
- console.log('This should have been catched by isValid()');
- return Promise.reject();
+ var title = this.stripTags(this.title).trim();
+ return Promise.reject(new TypeError(_('Option "%s" must not be empty.').format(title || this.option)));
}
}
@@ -5169,13 +5320,15 @@ var CBITypedSection = CBIAbstractSection.extend(/** @lends LuCI.form.TypedSectio
createEl.appendChild(E('button', {
'class': 'cbi-button cbi-button-add',
'title': btn_title || _('Add'),
- 'click': ui.createHandlerFn(this, 'handleAdd')
+ 'click': ui.createHandlerFn(this, 'handleAdd'),
+ 'disabled': this.map.readonly || null
}, [ btn_title || _('Add') ]));
}
else {
var nameEl = E('input', {
'type': 'text',
- 'class': 'cbi-section-create-name'
+ 'class': 'cbi-section-create-name',
+ 'disabled': this.map.readonly || null
});
dom.append(createEl, [
@@ -5190,7 +5343,8 @@ var CBITypedSection = CBIAbstractSection.extend(/** @lends LuCI.form.TypedSectio
return;
return this.handleAdd(ev, nameEl.value);
- })
+ }),
+ 'disabled': this.map.readonly || null
})
]);
@@ -5233,7 +5387,8 @@ var CBITypedSection = CBIAbstractSection.extend(/** @lends LuCI.form.TypedSectio
'class': 'cbi-button',
'name': 'cbi.rts.%s.%s'.format(config_name, cfgsections[i]),
'data-section-id': cfgsections[i],
- 'click': ui.createHandlerFn(this, 'handleRemove', cfgsections[i])
+ 'click': ui.createHandlerFn(this, 'handleRemove', cfgsections[i]),
+ 'disabled': this.map.readonly || null
}, [ _('Delete') ])));
}
@@ -5609,7 +5764,8 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
E('div', {
'title': _('Drag to reorder'),
'class': 'btn cbi-button drag-handle center',
- 'style': 'cursor:move'
+ 'style': 'cursor:move',
+ 'disabled': this.map.readonly || null
}, '☰')
]);
}
@@ -5650,7 +5806,8 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
E('button', {
'title': btn_title || _('Delete'),
'class': 'cbi-button cbi-button-remove',
- 'click': ui.createHandlerFn(this, 'handleRemove', section_id)
+ 'click': ui.createHandlerFn(this, 'handleRemove', section_id),
+ 'disabled': this.map.readonly || null
}, [ btn_title || _('Delete') ])
);
}
@@ -5801,6 +5958,7 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
s = m.section(CBINamedSection, section_id, this.sectiontype);
m.parent = parent;
+ m.readonly = parent.readonly;
s.tabs = this.tabs;
s.tab_names = this.tab_names;
@@ -5848,7 +6006,8 @@ var CBITableSection = CBITypedSection.extend(/** @lends LuCI.form.TableSection.p
}, [ _('Dismiss') ]), ' ',
E('button', {
'class': 'cbi-button cbi-button-positive important',
- 'click': ui.createHandlerFn(this, 'handleModalSave', m)
+ 'click': ui.createHandlerFn(this, 'handleModalSave', m),
+ 'disabled': m.readonly || null
}, [ _('Save') ])
])
], 'cbi-modal');
@@ -6135,7 +6294,8 @@ var CBINamedSection = CBIAbstractSection.extend(/** @lends LuCI.form.NamedSectio
E('div', { 'class': 'cbi-section-remove right' },
E('button', {
'class': 'cbi-button',
- 'click': ui.createHandlerFn(this, 'handleRemove')
+ 'click': ui.createHandlerFn(this, 'handleRemove'),
+ 'disabled': this.map.readonly || null
}, [ _('Delete') ])));
}
@@ -6150,7 +6310,8 @@ var CBINamedSection = CBIAbstractSection.extend(/** @lends LuCI.form.NamedSectio
sectionEl.appendChild(
E('button', {
'class': 'cbi-button cbi-button-add',
- 'click': ui.createHandlerFn(this, 'handleAdd')
+ 'click': ui.createHandlerFn(this, 'handleAdd'),
+ 'disabled': this.map.readonly || null
}, [ _('Add') ]));
}
@@ -6344,7 +6505,8 @@ var CBIValue = CBIAbstractValue.extend(/** @lends LuCI.form.Value.prototype */ {
optional: this.optional || this.rmempty,
datatype: this.datatype,
select_placeholder: this.placeholder || placeholder,
- validate: L.bind(this.validate, this, section_id)
+ validate: L.bind(this.validate, this, section_id),
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
}
else {
@@ -6354,7 +6516,8 @@ var CBIValue = CBIAbstractValue.extend(/** @lends LuCI.form.Value.prototype */ {
optional: this.optional || this.rmempty,
datatype: this.datatype,
placeholder: this.placeholder,
- validate: L.bind(this.validate, this, section_id)
+ validate: L.bind(this.validate, this, section_id),
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
}
@@ -6409,7 +6572,8 @@ var CBIDynamicList = CBIValue.extend(/** @lends LuCI.form.DynamicList.prototype
optional: this.optional || this.rmempty,
datatype: this.datatype,
placeholder: this.placeholder,
- validate: L.bind(this.validate, this, section_id)
+ validate: L.bind(this.validate, this, section_id),
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
return widget.render();
@@ -6474,7 +6638,8 @@ var CBIListValue = CBIValue.extend(/** @lends LuCI.form.ListValue.prototype */ {
sort: this.keylist,
optional: this.optional,
placeholder: this.placeholder,
- validate: L.bind(this.validate, this, section_id)
+ validate: L.bind(this.validate, this, section_id),
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
return widget.render();
@@ -6545,7 +6710,8 @@ var CBIFlagValue = CBIValue.extend(/** @lends LuCI.form.FlagValue.prototype */ {
id: this.cbid(section_id),
value_enabled: this.enabled,
value_disabled: this.disabled,
- validate: L.bind(this.validate, this, section_id)
+ validate: L.bind(this.validate, this, section_id),
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
return widget.render();
@@ -6584,8 +6750,10 @@ var CBIFlagValue = CBIValue.extend(/** @lends LuCI.form.FlagValue.prototype */ {
if (this.isActive(section_id)) {
var fval = this.formvalue(section_id);
- if (!this.isValid(section_id))
- return Promise.reject();
+ if (!this.isValid(section_id)) {
+ var title = this.stripTags(this.title).trim();
+ return Promise.reject(new TypeError(_('Option "%s" contains an invalid input value.').format(title || this.option)));
+ }
if (fval == this.default && (this.optional || this.rmempty))
return Promise.resolve(this.remove(section_id));
@@ -6671,7 +6839,8 @@ var CBIMultiValue = CBIDynamicList.extend(/** @lends LuCI.form.MultiValue.protot
select_placeholder: this.placeholder,
display_items: this.display_size || this.size || 3,
dropdown_items: this.dropdown_size || this.size || -1,
- validate: L.bind(this.validate, this, section_id)
+ validate: L.bind(this.validate, this, section_id),
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
return widget.render();
@@ -6763,7 +6932,8 @@ var CBITextValue = CBIValue.extend(/** @lends LuCI.form.TextValue.prototype */ {
cols: this.cols,
rows: this.rows,
wrap: this.wrap,
- validate: L.bind(this.validate, this, section_id)
+ validate: L.bind(this.validate, this, section_id),
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
return widget.render();
@@ -6833,7 +7003,7 @@ var CBIDummyValue = CBIValue.extend(/** @lends LuCI.form.DummyValue.prototype */
hiddenEl = new ui.Hiddenfield(value, { id: this.cbid(section_id) }),
outputEl = E('div');
- if (this.href)
+ if (this.href && !((this.readonly != null) ? this.readonly : this.map.readonly))
outputEl.appendChild(E('a', { 'href': this.href }));
dom.append(outputEl.lastChild || outputEl,
@@ -6954,7 +7124,8 @@ var CBIButtonValue = CBIValue.extend(/** @lends LuCI.form.ButtonValue.prototype
ev.currentTarget.parentNode.nextElementSibling.value = value;
return this.map.save();
- }, section_id)
+ }, section_id),
+ 'disabled': ((this.readonly != null) ? this.readonly : this.map.readonly) || null
}, [ btn_title ])
]);
else
@@ -7129,7 +7300,8 @@ var CBIFileUpload = CBIValue.extend(/** @lends LuCI.form.FileUpload.prototype */
show_hidden: this.show_hidden,
enable_upload: this.enable_upload,
enable_remove: this.enable_remove,
- root_directory: this.root_directory
+ root_directory: this.root_directory,
+ disabled: (this.readonly != null) ? this.readonly : this.map.readonly
});
return browserEl.render();
@@ -7338,7 +7510,7 @@ return baseclass.extend(/** @lends LuCI.form.prototype */ {
diff --git a/docs/jsapi/fs.js.html b/docs/jsapi/fs.js.html
index a356962f0..160faf200 100644
--- a/docs/jsapi/fs.js.html
+++ b/docs/jsapi/fs.js.html
@@ -74,12 +74,16 @@
error
+ fspath
+
get
halt
hasSystemFeature
+ hasViewPermission
+
isObject
location
@@ -331,6 +335,8 @@
optional
+ readonly
+
rmempty
uciconfig
@@ -423,6 +429,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -511,6 +519,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -595,6 +605,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -687,6 +699,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -775,6 +789,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -929,6 +945,8 @@
placeholder
+ readonly
+
rmempty
uciconfig
@@ -997,6 +1015,10 @@