luci-base: form.js: implement AbstractSection.getOption() helper
authorJo-Philipp Wich <jo@mein.io>
Thu, 6 Aug 2020 14:56:46 +0000 (16:56 +0200)
committerJo-Philipp Wich <jo@mein.io>
Thu, 6 Aug 2020 15:56:34 +0000 (17:56 +0200)
The `getOption()` function allows to easily obtain a reference to another
option object instance within the same section.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
modules/luci-base/htdocs/luci-static/resources/form.js

index 32d803d6afdd20140814959a83814c37f3a8cbe7..568a4abb6aa6761439e735db7f025c7718199197 100644 (file)
@@ -1156,6 +1156,36 @@ var CBIAbstractSection = CBIAbstractElement.extend(/** @lends LuCI.form.Abstract
                return rv;
        },
 
+       /**
+        * Obtain underlying option objects.
+        *
+        * This function is sensitive to the amount of arguments passed to it;
+        * if no option name is specified, all options within this section are
+        * returned as dictionary.
+        *
+        * If an option name is supplied, this function returns the matching
+        * LuCI.form.AbstractValue instance only.
+        *
+        * @param {string} [option]
+        * The name of the option object to obtain
+        *
+        * @returns {null|LuCI.form.AbstractValue|Object<string, LuCI.form.AbstractValue>}
+        * Returns either a dictionary of option names and their corresponding
+        * option instance objects or just a single object instance value,
+        * depending on the amount of passed arguments.
+        */
+       getOption: function(option) {
+               var rv = (arguments.length == 0) ? {} : null;
+
+               for (var i = 0, o; (o = this.children[i]) != null; i++)
+                       if (rv)
+                               rv[o.option] = o;
+                       else if (o.option == option)
+                               return o;
+
+               return rv;
+       },
+
        /** @private */
        renderUCISection: function(section_id) {
                var renderTasks = [];