blossom
Version:
Modern, Cross-Platform Application Framework
87 lines (74 loc) • 2.92 kB
JavaScript
// ==========================================================================
// Project: SproutCore - JavaScript Application Framework
// Copyright: ©2006-2011 Strobe Inc. and contributors.
// Portions ©2008-2010 Apple Inc. All rights reserved.
// License: Licensed under MIT license (see license.js)
// ==========================================================================
sc_require('validators/validator') ;
/**
Ensures all fields with the Password validator attached in the same form
contain the same value.
@class
@extends SC.Validator
@author Charles Jolley
@version 1.0
*/
SC.Validator.Password = SC.Validator.extend(
/** @scope SC.Validator.Password.prototype */ {
attachTo: function(form,field) {
arguments.callee.base.apply(this, arguments);
if (!this.fields) this.fields = [] ;
this.fields.push(field) ;
},
validate: function(force) {
if (!this.fields || this.fields.length === 0) return true ;
var empty = false ;
var notEmpty = false ;
var ret = true ;
var value = this.fields[0].get('fieldValue') ;
this.fields.forEach(function(field) {
var curValue = field.get('fieldValue') ;
if (curValue != value) ret= false ;
if (!curValue || curValue.length === 0) empty = true ;
if (curValue && curValue.length > 0) notEmpty = true ;
}) ;
// if forces, valid OK if there was an empty. If not forced, valid OK
// only if all fields match AND they are not all empty.
if (force) {
return (notEmpty === false) ? false : ret ;
} else {
return (empty === true) ? true : ret ;
}
},
// update field states
updateFields: function(form,valid) {
if (!this.fields || this.fields.length === 0) return true ;
var err = "Invalid.Password".loc();
var topField = this._field ;
this.fields.forEach(function(f) {
var msg = (valid) ? null : ((f == topField) ? err : '') ;
form.setErrorFor(f,msg) ;
}) ;
return (valid) ? SC.VALIDATE_OK : err ;
},
validateChange: function(form, field, oldValue) {
return this.updateFields(form, this.validate(false)) ;
},
// this method is called just before the form is submitted.
// field: the field toe validate.
validateSubmit: function(form, field) {
return this.updateFields(form, this.validate(true)) ;
},
// this method gets called 1ms after the user types a key (if a change is
// allowed). You can use this validate the new partial string and return
// an error if needed.
//
// The default will validate a partial only if there was already an error.
// this allows the user to try to get it right before you bug them.
validatePartial: function(form, field) {
var isInvalid = !this._field.get('isValid') ;
if (isInvalid) {
return this.updateFields(form, this.validate(false)) ;
} else return SC.VALIDATE_NO_CHANGE ;
}
}) ;