mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@5282 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
205 lines
6.2 KiB
JavaScript
205 lines
6.2 KiB
JavaScript
/*
|
|
Copyright (c) 2004-2006, The Dojo Foundation
|
|
All Rights Reserved.
|
|
|
|
Licensed under the Academic Free License version 2.1 or above OR the
|
|
modified BSD license. For more information on Dojo licensing, see:
|
|
|
|
http://dojotoolkit.org/community/licensing.shtml
|
|
*/
|
|
|
|
dojo.provide("dojo.widget.ValidationTextbox");
|
|
|
|
dojo.require("dojo.widget.Textbox");
|
|
dojo.require("dojo.i18n.common");
|
|
|
|
dojo.widget.defineWidget(
|
|
"dojo.widget.ValidationTextbox",
|
|
dojo.widget.Textbox,
|
|
function() {
|
|
// summary:
|
|
// A subclass of Textbox.
|
|
// Over-ride isValid in subclasses to perform specific kinds of validation.
|
|
|
|
// this property isn't a primitive and needs to be created on a per-item basis.
|
|
this.flags = {};
|
|
},
|
|
{
|
|
// default values for new subclass properties
|
|
// required: Boolean
|
|
// Can be true or false, default is false.
|
|
required: false,
|
|
rangeClass: "range",
|
|
// invalidClass: String
|
|
// Class used to format displayed text in page if necessary to override default class
|
|
invalidClass: "invalid",
|
|
// missingClass: String
|
|
// Override default class used for missing input data
|
|
missingClass: "missing",
|
|
classPrefix: "dojoValidate",
|
|
// size: String
|
|
// Basic input tag size declaration.
|
|
size: "",
|
|
// maxlength: String
|
|
// Basic input tag maxlength declaration.
|
|
maxlength: "",
|
|
// promptMessage: String
|
|
// Will not issue invalid message if field is populated with default user-prompt text
|
|
promptMessage: "",
|
|
// invalidMessage: String
|
|
// The message to display if value is invalid.
|
|
invalidMessage: "",
|
|
// missingMessage: String
|
|
// The message to display if value is missing.
|
|
missingMessage: "",
|
|
rangeMessage: "",
|
|
// listenOnKeyPress: Boolean
|
|
// Updates messages on each key press. Default is true.
|
|
listenOnKeyPress: true,
|
|
htmlfloat: "none",
|
|
lastCheckedValue: null,
|
|
|
|
templatePath: dojo.uri.dojoUri("src/widget/templates/ValidationTextbox.html"),
|
|
templateCssPath: dojo.uri.dojoUri("src/widget/templates/Validate.css"),
|
|
|
|
// new DOM nodes
|
|
invalidSpan: null,
|
|
missingSpan: null,
|
|
rangeSpan: null,
|
|
|
|
getValue: function() {
|
|
return this.textbox.value;
|
|
},
|
|
|
|
setValue: function(value) {
|
|
this.textbox.value = value;
|
|
this.update();
|
|
},
|
|
|
|
isValid: function() {
|
|
// summary: Need to over-ride with your own validation code in subclasses
|
|
return true;
|
|
},
|
|
|
|
isInRange: function() {
|
|
// summary: Need to over-ride with your own validation code in subclasses
|
|
return true;
|
|
},
|
|
|
|
isEmpty: function() {
|
|
// summary: Checks for whitespace
|
|
return ( /^\s*$/.test(this.textbox.value) ); // Boolean
|
|
},
|
|
|
|
isMissing: function() {
|
|
// summary: Checks to see if value is required and is whitespace
|
|
return ( this.required && this.isEmpty() ); // Boolean
|
|
},
|
|
|
|
update: function() {
|
|
// summary:
|
|
// Called by oninit, onblur, and onkeypress.
|
|
// description:
|
|
// Show missing or invalid messages if appropriate, and highlight textbox field.
|
|
this.lastCheckedValue = this.textbox.value;
|
|
this.missingSpan.style.display = "none";
|
|
this.invalidSpan.style.display = "none";
|
|
this.rangeSpan.style.display = "none";
|
|
|
|
var empty = this.isEmpty();
|
|
var valid = true;
|
|
if(this.promptMessage != this.textbox.value){
|
|
valid = this.isValid();
|
|
}
|
|
var missing = this.isMissing();
|
|
|
|
// Display at most one error message
|
|
if(missing){
|
|
this.missingSpan.style.display = "";
|
|
}else if( !empty && !valid ){
|
|
this.invalidSpan.style.display = "";
|
|
}else if( !empty && !this.isInRange() ){
|
|
this.rangeSpan.style.display = "";
|
|
}
|
|
this.highlight();
|
|
},
|
|
|
|
updateClass: function(className){
|
|
// summary: used to ensure that only 1 validation class is set at a time
|
|
var pre = this.classPrefix;
|
|
dojo.html.removeClass(this.textbox,pre+"Empty");
|
|
dojo.html.removeClass(this.textbox,pre+"Valid");
|
|
dojo.html.removeClass(this.textbox,pre+"Invalid");
|
|
dojo.html.addClass(this.textbox,pre+className);
|
|
},
|
|
|
|
highlight: function() {
|
|
// summary: by Called oninit, and onblur.
|
|
|
|
// highlight textbox background
|
|
if (this.isEmpty()) {
|
|
this.updateClass("Empty");
|
|
}else if (this.isValid() && this.isInRange() ){
|
|
this.updateClass("Valid");
|
|
}else if(this.textbox.value != this.promptMessage){
|
|
this.updateClass("Invalid");
|
|
}else{
|
|
this.updateClass("Empty");
|
|
}
|
|
},
|
|
|
|
onfocus: function(evt) {
|
|
if ( !this.listenOnKeyPress) {
|
|
this.updateClass("Empty");
|
|
// this.textbox.style.backgroundColor = "";
|
|
}
|
|
},
|
|
|
|
onblur: function(evt) {
|
|
this.filter();
|
|
this.update();
|
|
},
|
|
|
|
onkeyup: function(evt){
|
|
if(this.listenOnKeyPress){
|
|
//this.filter(); trim is problem if you have to type two words
|
|
this.update();
|
|
}else if (this.textbox.value != this.lastCheckedValue){
|
|
this.updateClass("Empty");
|
|
// this.textbox.style.backgroundColor = "";
|
|
}
|
|
},
|
|
|
|
postMixInProperties: function(localProperties, frag) {
|
|
dojo.widget.ValidationTextbox.superclass.postMixInProperties.apply(this, arguments);
|
|
this.messages = dojo.i18n.getLocalization("dojo.widget", "validate", this.lang);
|
|
dojo.lang.forEach(["invalidMessage", "missingMessage", "rangeMessage"], function(prop) {
|
|
if(this[prop]){ this.messages[prop] = this[prop]; }
|
|
}, this);
|
|
},
|
|
|
|
fillInTemplate: function() {
|
|
dojo.widget.ValidationTextbox.superclass.fillInTemplate.apply(this, arguments);
|
|
|
|
// Attach isMissing and isValid methods to the textbox.
|
|
// We may use them later in connection with a submit button widget.
|
|
// TODO: this is unorthodox; it seems better to do it another way -- Bill
|
|
this.textbox.isValid = function() { this.isValid.call(this); };
|
|
this.textbox.isMissing = function() { this.isMissing.call(this); };
|
|
this.textbox.isInRange = function() { this.isInRange.call(this); };
|
|
dojo.html.setClass(this.invalidSpan,this.invalidClass);
|
|
this.update();
|
|
|
|
// apply any filters to initial value
|
|
this.filter();
|
|
|
|
// set table to be inlined (technique varies by browser)
|
|
// TODO: use method in dojo.html that does this
|
|
if(dojo.render.html.ie){ dojo.html.addClass(this.domNode, "ie"); }
|
|
if(dojo.render.html.moz){ dojo.html.addClass(this.domNode, "moz"); }
|
|
if(dojo.render.html.opera){ dojo.html.addClass(this.domNode, "opera"); }
|
|
if(dojo.render.html.safari){ dojo.html.addClass(this.domNode, "safari"); }
|
|
}
|
|
}
|
|
);
|