libs/web: relax validation for hostnames to allow names like _kerberos._udp.EXAMPLE.COM
[project/luci.git] / libs / web / htdocs / luci-static / resources / cbi.js
index 7171574..d8719c4 100644 (file)
@@ -148,8 +148,8 @@ var cbi_validators = {
        'hostname': function()
        {
                if (this.length <= 253)
-                       return (this.match(/^[a-zA-Z]+$/) != null ||
-                               (this.match(/^[a-zA-Z0-9][a-zA-Z0-9\-.]*[a-zA-Z0-9]$/) &&
+                       return (this.match(/^[a-zA-Z0-9]+$/) != null ||
+                               (this.match(/^[a-zA-Z0-9_][a-zA-Z0-9_\-.]*[a-zA-Z0-9]$/) &&
                                 this.match(/[^0-9.]/)));
 
                return false;
@@ -216,6 +216,33 @@ var cbi_validators = {
                return false;
        },
 
+       'rangelength': function(min, max)
+       {
+               var val = '' + this;
+               if (!isNaN(min) && !isNaN(max))
+                       return ((val.length >= min) && (val.length <= max));
+
+               return false;
+       },
+
+       'minlength': function(min)
+       {
+               var val = '' + this;
+               if (!isNaN(min))
+                       return (val.length >= min);
+
+               return false;
+       },
+
+       'maxlength': function(max)
+       {
+               var val = '' + this;
+               if (!isNaN(max))
+                       return (val.length <= max);
+
+               return false;
+       },
+
        'or': function()
        {
                for (var i = 0; i < arguments.length; i += 2)
@@ -269,6 +296,10 @@ var cbi_validators = {
                                return false;
 
                return true;
+       },
+       'phonedigit': function()
+       {
+               return (this.match(/^[0-9\*#]+$/) != null);
        }
 };
 
@@ -410,7 +441,7 @@ function cbi_combobox(id, values, def, man) {
        var obj = document.getElementById(id)
        var sel = document.createElement("select");
                sel.id = selid;
-               sel.className = 'cbi-input-select';
+               sel.className = obj.className.replace(/cbi-input-text/, 'cbi-input-select');
 
        if (obj.nextSibling) {
                obj.parentNode.insertBefore(sel, obj.nextSibling);
@@ -473,6 +504,10 @@ function cbi_combobox(id, values, def, man) {
                        //Do nothing
                }
        })
+
+       // Retrigger validation in select
+       sel.focus();
+       sel.blur();
 }
 
 function cbi_combobox_init(id, values, def, man) {
@@ -744,7 +779,7 @@ function cbi_dynlist_init(name, respath, datatype, optional, choices)
                return false;
        }
 
-       cbi_dynlist_redraw(-1, -1, -1);
+       cbi_dynlist_redraw(NaN, -1, -1);
 }
 
 //Hijacks the CBI form to send via XHR (requires Prototype)