/*
* YUI Extensions 0.33 RC2
* Copyright(c) 2006, Jack Slocum.
*/
/**
* @class YAHOO.ext.grid.TextEditor
* @extends YAHOO.ext.grid.CellEditor
Provides basic text editing for a cells and supports the following configuration options:
- allowBlank - True if the cell is allowed to be empty.
- minLength - The minimum length the cell will accept.
- maxLength - The maximum length the cell will allow.
- minText - The tooltip to display when the length of the value in the cell is below the minimum.
- maxText - The tooltip to display when the length of the value in the cell is above the maximum.
- selectOnFocus - True to select the text when the editor is activated.
- blankText - The tooltip (error message) to display when the cell is empty and is not allowed to be.
- regex - A regular expression to match if the value is valid. If the regex.test(value) returns false, the value is considered invalid.
- regexText - The tooltip (error message) to display when regex does not match.
- validator - Any custom validation function you want called. The function must return true if the data is valid or an error message otherwise.
- validationDelay - The delay in milliseconds for validation. Each time the user types something the field is validated after a specified delay, setting this value allows you to customize that delay (for example, if your custom validation routine is slow).
For more information on using this editor, see this blog post.
* @constructor
* Create a new TextEditor
* @param {Object} config
*/
YAHOO.ext.grid.TextEditor = function(config){
var element = document.createElement('input');
element.type = 'text';
element.className = 'ygrid-editor ygrid-text-editor';
element.setAttribute('autocomplete', 'off');
document.body.appendChild(element);
YAHOO.ext.grid.TextEditor.superclass.constructor.call(this, element);
YAHOO.ext.util.Config.apply(this, config);
};
YAHOO.extendX(YAHOO.ext.grid.TextEditor, YAHOO.ext.grid.CellEditor);
YAHOO.ext.grid.TextEditor.prototype.validate = function(){
var dom = this.element.dom;
var value = dom.value;
if(value.length < 1){ // if it's blank
if(this.allowBlank){
dom.title = '';
this.element.removeClass('ygrid-editor-invalid');
return true;
}else{
dom.title = this.blankText;
this.element.addClass('ygrid-editor-invalid');
return false;
}
}
if(value.length < this.minLength){
dom.title = this.minText.replace('%0', this.minLength);
this.element.addClass('ygrid-editor-invalid');
return false;
}
if(value.length > this.maxLength){
dom.title = this.maxText.replace('%0', this.maxLength);
this.element.addClass('ygrid-editor-invalid');
return false;
}
var msg = this.validator(value);
if(msg !== true){
dom.title = msg;
this.element.addClass('ygrid-editor-invalid');
return false;
}
if(this.regex && !this.regex.test(value)){
dom.title = this.regexText;
this.element.addClass('ygrid-editor-invalid');
return false;
}
dom.title = '';
this.element.removeClass('ygrid-editor-invalid');
return true;
};
YAHOO.ext.grid.TextEditor.prototype.initEvents = function(){
YAHOO.ext.grid.TextEditor.superclass.initEvents.call(this);
var vtask = new YAHOO.ext.util.DelayedTask(this.validate, this);
this.element.mon('keyup', vtask.delay.createDelegate(vtask, [this.validationDelay]));
};
YAHOO.ext.grid.TextEditor.prototype.show = function(){
this.element.dom.title = '';
YAHOO.ext.grid.TextEditor.superclass.show.call(this);
this.element.focus();
if(this.selectOnFocus){
try{
this.element.dom.select();
}catch(e){}
}
this.validate(this.element.dom.value);
};
YAHOO.ext.grid.TextEditor.prototype.getValue = function(){
if(!this.validate()){
return this.originalValue;
}else{
return this.element.dom.value;
}
};
YAHOO.ext.grid.TextEditor.prototype.allowBlank = true;
YAHOO.ext.grid.TextEditor.prototype.minLength = 0;
YAHOO.ext.grid.TextEditor.prototype.maxLength = Number.MAX_VALUE;
YAHOO.ext.grid.TextEditor.prototype.minText = 'The minimum length for this field is %0';
YAHOO.ext.grid.TextEditor.prototype.maxText = 'The maximum length for this field is %0';
YAHOO.ext.grid.TextEditor.prototype.selectOnFocus = true;
YAHOO.ext.grid.TextEditor.prototype.blankText = 'This field cannot be blank';
YAHOO.ext.grid.TextEditor.prototype.validator = function(){return true;};
YAHOO.ext.grid.TextEditor.prototype.validationDelay = 200;
YAHOO.ext.grid.TextEditor.prototype.regex = null;
YAHOO.ext.grid.TextEditor.prototype.regexText = '';