ORIENT/modules/system/assets/ui/js/inspector.validator.length.js

72 lines
2.3 KiB
JavaScript

/*
* Inspector length validator.
*/
+function ($) { "use strict";
var Base = $.oc.inspector.validators.base,
BaseProto = Base.prototype
var LengthValidator = function(options) {
Base.call(this, options)
}
LengthValidator.prototype = Object.create(BaseProto)
LengthValidator.prototype.constructor = Base
LengthValidator.prototype.isValid = function(value) {
if (value === undefined || value === null) {
return null
}
if (typeof value == 'boolean') {
this.throwError('The Length Inspector validator cannot work with Boolean values.')
}
var length = null
if(Object.prototype.toString.call(value) === '[object Array]' || typeof value === 'string') {
length = value.length
}
else if (typeof value === 'object') {
length = this.getObjectLength(value)
}
if (this.options.min !== undefined || this.options.max !== undefined) {
if (this.options.min !== undefined) {
if (this.options.min.value === undefined) {
throw new Error('The min.value parameter is not defined in the Length Inspector validator configuration.')
}
if (length < this.options.min.value) {
return this.options.min.message !== undefined ?
this.options.min.message :
"The value should not be shorter than " + this.options.min.value
}
}
if (this.options.max !== undefined) {
if (this.options.max.value === undefined)
throw new Error('The max.value parameter is not defined in the Length Inspector validator configuration.')
if (length > this.options.max.value) {
return this.options.max.message !== undefined ?
this.options.max.message :
"The value should not be longer than " + this.options.max.value
}
}
}
}
LengthValidator.prototype.getObjectLength = function(value) {
var result = 0
for (var key in value) {
result++
}
return result
}
$.oc.inspector.validators.length = LengthValidator
}(window.jQuery);