luci-base: override the load() function to return boolean for FlagValue
authorPaul Donald <[email protected]>
Fri, 25 Apr 2025 15:17:51 +0000 (17:17 +0200)
committerPaul Donald <[email protected]>
Fri, 25 Apr 2025 15:19:13 +0000 (17:19 +0200)
In the underlying uci system, all variables are effectively strings, so
for those configuration values which serve as 'boolean' flags, we need
to coerce the various forms into a real boolean. Only the following
string values result in true: 1|on|true|yes|enabled. Otherwise, false.

Checkboxes now fill correctly.

"Unchanged" configurations may write changed values as the Flag values
are coerced to '1' or '0' on write, but the configuration behaviour
remains synonymous.

Signed-off-by: Paul Donald <[email protected]>
(cherry picked from commit 1355a6fa253d765140f5571354939d2e93e6d967)

modules/luci-base/htdocs/luci-static/resources/form.js

index 13ca76450ea7ff32e52bf14ca38f64dbc434abc6..db3da638a3cdd510d28ae77bb011490ef5c5684b 100644 (file)
@@ -4000,6 +4000,19 @@ var CBIFlagValue = CBIValue.extend(/** @lends LuCI.form.FlagValue.prototype */ {
         * @default 'ℹ️';
         */
 
+       /**
+        * Coerce the various forms of a 'boolean' string into a true/false value.
+        *
+        * @override
+        */
+       load() {
+               // 
+               let load = this.super('load', arguments);
+               if (typeof(load) == 'string')
+                       load = ['1', 'on', 'true', 'yes', 'enabled'].includes(load.toLowerCase());
+               return load;
+       },
+
        /** @private */
        renderWidget: function(section_id, option_index, cfgvalue) {
                var tooltip = null;