libs/web: add new datatypes min(...), max(...) and neg_network_ip4addr
authorJo-Philipp Wich <jow@openwrt.org>
Fri, 17 Jun 2011 10:52:49 +0000 (10:52 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Fri, 17 Jun 2011 10:52:49 +0000 (10:52 +0000)
libs/web/htdocs/luci-static/resources/cbi.js
libs/web/luasrc/cbi/datatypes.lua

index a8814d4..1cd49bc 100644 (file)
@@ -2,7 +2,7 @@
        LuCI - Lua Configuration Interface
 
        Copyright 2008 Steven Barth <steven@midlink.org>
-       Copyright 2008-2010 Jo-Philipp Wich <xm@subsignal.org>
+       Copyright 2008-2011 Jo-Philipp Wich <xm@subsignal.org>
 
        Licensed under the Apache License, Version 2.0 (the "License");
        you may not use this file except in compliance with the License.
@@ -153,6 +153,8 @@ var cbi_validators = {
        'hostname': function(v)
        {       if ( v.length <= 253 )
                        return (v.match(/^[a-zA-Z0-9][a-zA-Z0-9\-.]*[a-zA-Z0-9]$/) != null);
+
+               return false;
        },
 
        'wpakey': function(v)
@@ -179,6 +181,12 @@ var cbi_validators = {
                return (v.match(/^[a-zA-Z0-9_]+$/) != null);
        },
 
+       'neg_network_ip4addr': function(v)
+       {
+               v = v.replace(/^\s*!/, "");
+               return cbi_validators.uciname(v) || cbi_validators.ip4addr(v);          
+       },
+
        'range': function(v, args)
        {
                var min = parseInt(args[0]);
@@ -189,6 +197,28 @@ var cbi_validators = {
                        return ((val >= min) && (val <= max));
 
                return false;
+       },
+
+       'min': function(v, args)
+       {
+               var min = parseInt(args[0]);
+               var val = parseInt(v);
+
+               if (!isNaN(min) && !isNaN(val))
+                       return (val >= min);
+
+               return false;
+       },
+
+       'max': function(v, args)
+       {
+               var max = parseInt(args[0]);
+               var val = parseInt(v);
+
+               if (!isNaN(max) && !isNaN(val))
+                       return (val <= max);
+
+               return false;
        }
 };
 
index d4603cf..6640db6 100644 (file)
@@ -227,6 +227,13 @@ function uciname(val)
        return (val:match("^[a-zA-Z0-9_]+$") ~= nil)
 end
 
+function neg_network_ip4addr(val)
+       if type(v) == "string" then
+               v = v:gsub("^%s*!", "")
+               return (uciname(v) or ip4addr(v))
+       end     
+end
+
 function range(val, min, max)
        val = tonumber(val)
        min = tonumber(min)
@@ -238,3 +245,25 @@ function range(val, min, max)
 
        return false
 end
+
+function min(val, min)
+       val = tonumber(val)
+       min = tonumber(min)
+
+       if val ~= nil and min ~= nil then
+               return (val >= min)
+       end
+
+       return false
+end
+
+function max(val, max)
+       val = tonumber(val)
+       max = tonumber(max)
+
+       if val ~= nil and max ~= nil then
+               return (val <= max)
+       end
+
+       return false
+end