Merge pull request #1735 from sumpfralle/olsr-jsoninfo-parser-handle-empty-result
[oweals/luci.git] / modules / luci-base / htdocs / luci-static / resources / validation.js
index f0c89d804fff5572a555d265fbcdc3afeb298582..79ae1d67070efa8a0e078099c4c36e19fad37b15 100644 (file)
@@ -56,7 +56,7 @@ var Validator = L.Class.extend({
                        valid = this.vstack[0].apply(this, this.vstack[1]);
 
                if (valid !== true) {
-                       this.field.setAttribute('data-tooltip', _('Expecting %s').format(this.error));
+                       this.field.setAttribute('data-tooltip', _('Expecting: %s').format(this.error));
                        this.field.setAttribute('data-tooltip-style', 'error');
                        this.field.dispatchEvent(new CustomEvent('validation-failure', { bubbles: true }));
                        return false;
@@ -419,6 +419,12 @@ var ValidatorFactory = L.Class.extend({
                        return this.assert(this.factory.parseDecimal(this.value) <= +max, _('value smaller or equal to %f').format(max));
                },
 
+               length: function(len) {
+                       var val = '' + this.value;
+                       return this.assert(val.length == +len,
+                               _('value with %d characters').format(len));
+               },
+
                rangelength: function(min, max) {
                        var val = '' + this.value;
                        return this.assert((val.length >= +min) && (val.length <= +max),
@@ -453,7 +459,9 @@ var ValidatorFactory = L.Class.extend({
                                }
                        }
 
-                       return this.assert(false, _('one of:\n - %s'.format(errors.join('\n - '))));
+                       var t = _('One of the following: %s');
+
+                       return this.assert(false, t.format('\n - ' + errors.join('\n - ')));
                },
 
                and: function() {
@@ -472,7 +480,12 @@ var ValidatorFactory = L.Class.extend({
                },
 
                neg: function() {
-                       return this.apply('or', this.value.replace(/^[ \t]*![ \t]*/, ''), arguments);
+                       this.value = this.value.replace(/^[ \t]*![ \t]*/, '');
+
+                       if (arguments[0].apply(this, arguments[1]))
+                               return this.assert(true);
+
+                       return this.assert(false, _('Potential negation of: %s').format(this.error));
                },
 
                list: function(subvalidator, subargs) {
@@ -503,11 +516,11 @@ var ValidatorFactory = L.Class.extend({
                                    day   = +RegExp.$3,
                                    days_in_month = [ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 ];
 
-                               function is_leap_year(year) {
+                               var is_leap_year = function(year) {
                                        return ((!(year % 4) && (year % 100)) || !(year % 400));
                                }
 
-                               function get_days_in_month(month, year) {
+                               var get_days_in_month = function(month, year) {
                                        return (month === 2 && is_leap_year(year)) ? 29 : days_in_month[month - 1];
                                }