diff options
author | Jo-Philipp Wich <jow@openwrt.org> | 2011-12-16 05:52:24 +0000 |
---|---|---|
committer | Jo-Philipp Wich <jow@openwrt.org> | 2011-12-16 05:52:24 +0000 |
commit | 3a0905f21cb1afe307402cb8ea1d89096f28c141 (patch) | |
tree | 051bf3027671eba27184035f916466d9537cf022 /libs | |
parent | ca7bc48ebc0b1f655088eaae89bd358556dc8824 (diff) |
libs/web: add list(...) datatype for space separated lists of arbritary datatypes
Diffstat (limited to 'libs')
-rw-r--r-- | libs/web/htdocs/luci-static/resources/cbi.js | 18 | ||||
-rw-r--r-- | libs/web/luasrc/cbi/datatypes.lua | 14 |
2 files changed, 32 insertions, 0 deletions
diff --git a/libs/web/htdocs/luci-static/resources/cbi.js b/libs/web/htdocs/luci-static/resources/cbi.js index d1e34d178..8d32b669d 100644 --- a/libs/web/htdocs/luci-static/resources/cbi.js +++ b/libs/web/htdocs/luci-static/resources/cbi.js @@ -234,6 +234,24 @@ var cbi_validators = { return cbi_validators[args[0]](v.replace(/^\s*!\s*/, '')); return false; + }, + + 'list': function(v, args) + { + var cb = cbi_validators[args[0] || 'string']; + if (typeof cb == "function") + { + var cbargs = args.slice(1); + var values = v.match(/[^\s]+/g); + + for (var i = 0; i < values.length; i++) + if (!cb(values[i], cbargs)) + return false; + + return true; + } + + return false; } }; diff --git a/libs/web/luasrc/cbi/datatypes.lua b/libs/web/luasrc/cbi/datatypes.lua index 93b29cba8..9a3b73500 100644 --- a/libs/web/luasrc/cbi/datatypes.lua +++ b/libs/web/luasrc/cbi/datatypes.lua @@ -282,3 +282,17 @@ function neg(val, what) return false end + +function list(val, what, ...) + if type(val) == "string" and what and type(_M[what]) == "function" then + for val in val:gmatch("%S+") do + if not _M[what](val, ...) then + return false + end + end + + return true + end + + return false +end |