luci-firewall: Add support for negations for ip addresses/nets (#218)
[project/luci.git] / libs / web / htdocs / luci-static / resources / cbi.js
index be0a5a8..a8814d4 100644 (file)
@@ -42,6 +42,11 @@ var cbi_validators = {
                return cbi_validators.ip4addr(v) || cbi_validators.ip6addr(v);
        },
 
+       'neg_ipaddr': function(v)
+       {
+               return cbi_validators.ip4addr(v.replace(/^\s*!/, "")) || cbi_validators.ip6addr(v.replace(/^\s*!/, ""));
+       },
+
        'ip4addr': function(v)
        {
                if( v.match(/^(\d+)\.(\d+)\.(\d+)\.(\d+)(\/(\d+))?$/) )
@@ -57,6 +62,11 @@ var cbi_validators = {
                return false;
        },
 
+       'neg_ip4addr': function(v)
+       {
+               return cbi_validators.ip4addr(v.replace(/^\s*!/, ""));
+       },
+
        'ip6addr': function(v)
        {
                if( v.match(/^([a-fA-F0-9:.]+)(\/(\d+))?$/) )
@@ -907,7 +917,7 @@ if( ! String.format )
 
                var str = arguments[0];
                var out = '';
-               var re = /^(([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X|q|h|j|t))/;
+               var re = /^(([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X|q|h|j|t|m))/;
                var a = b = [], numSubstitutions = 0, numMatches = 0;
 
                while( a = re.exec(str) )
@@ -1026,6 +1036,20 @@ if( ! String.format )
                                                                : String.format('%dh %dm %ds', th, tm, ts);
 
                                                        break;
+
+                                               case 'm':
+                                                       var mf = pMinLength ? parseInt(pMinLength) : 1000;
+                                                       var pr = pPrecision ? Math.floor(10*parseFloat('0'+pPrecision)) : 2;
+
+                                                       var i = 0;
+                                                       var val = parseFloat(param || 0);
+                                                       var units = [ '', 'K', 'M', 'G', 'T', 'P', 'E' ];
+
+                                                       for (i = 0; (i < units.length) && (val > mf); i++)
+                                                               val /= mf;
+
+                                                       subst = val.toFixed(pr) + ' ' + units[i];
+                                                       break;
                                        }
                                }
                        }