summaryrefslogtreecommitdiffhomepage
path: root/libs/web
diff options
context:
space:
mode:
authorJo-Philipp Wich <jow@openwrt.org>2010-11-20 18:35:44 +0000
committerJo-Philipp Wich <jow@openwrt.org>2010-11-20 18:35:44 +0000
commitbe385bfcc63a4e75698ea7b564b0c1f5e50ba4ed (patch)
treec32d14223cc5c29f3349a7cc661756c76bed020d /libs/web
parentd79895c0c3d8ac11e34a59a60e11d304c01fb08f (diff)
libs/web: better server side handling of DynList values
Diffstat (limited to 'libs/web')
-rw-r--r--libs/web/luasrc/cbi.lua24
1 files changed, 18 insertions, 6 deletions
diff --git a/libs/web/luasrc/cbi.lua b/libs/web/luasrc/cbi.lua
index 50b594b4c..0fc93b25c 100644
--- a/libs/web/luasrc/cbi.lua
+++ b/libs/web/luasrc/cbi.lua
@@ -1657,15 +1657,27 @@ function DynamicList.value(self, key, val)
end
function DynamicList.write(self, section, value)
- if self.cast == "string" and type(value) == "table" then
- value = table.concat(value, " ")
- elseif self.cast == "table" and type(value) == "string" then
- local x, t = { }
- for x in value:gmatch("%S+") do
- if #x > 0 then
+ local t = { }
+
+ if type(value) == "table" then
+ local x
+ for _, x in ipairs(value) do
+ if x and #x > 0 then
t[#t+1] = x
end
end
+ elseif self.cast == "table" then
+ local x
+ for x in util.imatch(value) do
+ t[#t+1] = x
+ end
+ else
+ t = { value }
+ end
+
+ if self.cast == "string" then
+ value = table.concat(t, " ")
+ else
value = t
end