X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/25ef3491bd9ae007ff1fc2b0d7943e6eaaccf775..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/src/widgets/form/TextField.js
diff --git a/src/widgets/form/TextField.js b/src/widgets/form/TextField.js
deleted file mode 100644
index aed69ebb..00000000
--- a/src/widgets/form/TextField.js
+++ /dev/null
@@ -1,527 +0,0 @@
-/*!
- * Ext JS Library 3.0.3
- * Copyright(c) 2006-2009 Ext JS, LLC
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
-/**
- * @class Ext.form.TextField
- * @extends Ext.form.Field
- *
Basic text field. Can be used as a direct replacement for traditional text inputs,
- * or as the base class for more sophisticated input controls (like {@link Ext.form.TextArea}
- * and {@link Ext.form.ComboBox}).
- * Validation
- * The validation procedure is described in the documentation for {@link #validateValue}.
- * Alter Validation Behavior
- * Validation behavior for each field can be configured:
- *
- * {@link Ext.form.TextField#invalidText invalidText}
: the default validation message to
- * show if any validation step above does not provide a message when invalid
- * {@link Ext.form.TextField#maskRe maskRe}
: filter out keystrokes before any validation occurs
- * {@link Ext.form.TextField#stripCharsRe stripCharsRe}
: filter characters after being typed in,
- * but before being validated
- * {@link Ext.form.Field#invalidClass invalidClass}
: alternate style when invalid
- * {@link Ext.form.Field#validateOnBlur validateOnBlur}
,
- * {@link Ext.form.Field#validationDelay validationDelay}
, and
- * {@link Ext.form.Field#validationEvent validationEvent}
: modify how/when validation is triggered
- *
- *
- * @constructor Creates a new TextField
- * @param {Object} config Configuration options
- *
- * @xtype textfield
- */
-Ext.form.TextField = Ext.extend(Ext.form.Field, {
- /**
- * @cfg {String} vtypeText A custom error message to display in place of the default message provided
- * for the {@link #vtype}
currently set for this field (defaults to ''). Note:
- * only applies if {@link #vtype}
is set, else ignored.
- */
- /**
- * @cfg {RegExp} stripCharsRe A JavaScript RegExp object used to strip unwanted content from the value
- * before validation (defaults to null).
- */
- /**
- * @cfg {Boolean} grow true if this field should automatically grow and shrink to its content
- * (defaults to false)
- */
- grow : false,
- /**
- * @cfg {Number} growMin The minimum width to allow when {@link #grow} = true
(defaults
- * to 30)
- */
- growMin : 30,
- /**
- * @cfg {Number} growMax The maximum width to allow when {@link #grow} = true
(defaults
- * to 800)
- */
- growMax : 800,
- /**
- * @cfg {String} vtype A validation type name as defined in {@link Ext.form.VTypes} (defaults to null)
- */
- vtype : null,
- /**
- * @cfg {RegExp} maskRe An input mask regular expression that will be used to filter keystrokes that do
- * not match (defaults to null)
- */
- maskRe : null,
- /**
- * @cfg {Boolean} disableKeyFilter Specify true to disable input keystroke filtering (defaults
- * to false)
- */
- disableKeyFilter : false,
- /**
- * @cfg {Boolean} allowBlank Specify false to validate that the value's length is > 0 (defaults to
- * true)
- */
- allowBlank : true,
- /**
- * @cfg {Number} minLength Minimum input field length required (defaults to 0)
- */
- minLength : 0,
- /**
- * @cfg {Number} maxLength Maximum input field length allowed by validation (defaults to Number.MAX_VALUE).
- * This behavior is intended to provide instant feedback to the user by improving usability to allow pasting
- * and editing or overtyping and back tracking. To restrict the maximum number of characters that can be
- * entered into the field use {@link Ext.form.Field#autoCreate autoCreate} to add
- * any attributes you want to a field, for example:
-var myField = new Ext.form.NumberField({
- id: 'mobile',
- anchor:'90%',
- fieldLabel: 'Mobile',
- maxLength: 16, // for validation
- autoCreate: {tag: 'input', type: 'text', size: '20', autocomplete: 'off', maxlength: '10'}
-});
-
- */
- maxLength : Number.MAX_VALUE,
- /**
- * @cfg {String} minLengthText Error text to display if the {@link #minLength minimum length}
- * validation fails (defaults to 'The minimum length for this field is {minLength}')
- */
- minLengthText : 'The minimum length for this field is {0}',
- /**
- * @cfg {String} maxLengthText Error text to display if the {@link #maxLength maximum length}
- * validation fails (defaults to 'The maximum length for this field is {maxLength}')
- */
- maxLengthText : 'The maximum length for this field is {0}',
- /**
- * @cfg {Boolean} selectOnFocus true to automatically select any existing field text when the field
- * receives input focus (defaults to false)
- */
- selectOnFocus : false,
- /**
- * @cfg {String} blankText The error text to display if the {@link #allowBlank} validation
- * fails (defaults to 'This field is required')
- */
- blankText : 'This field is required',
- /**
- * @cfg {Function} validator
- * A custom validation function to be called during field validation ({@link #validateValue})
- * (defaults to null). If specified, this function will be called first, allowing the
- * developer to override the default validation process.
- *
This function will be passed the following Parameters:
- *
- * value
: Mixed
- * The current field value
- *
- *
This function is to Return:
- *
- */
- validator : null,
- /**
- * @cfg {RegExp} regex A JavaScript RegExp object to be tested against the field value during validation
- * (defaults to null). If the test fails, the field will be marked invalid using
- * {@link #regexText}.
- */
- regex : null,
- /**
- * @cfg {String} regexText The error text to display if {@link #regex} is used and the
- * test fails during validation (defaults to '')
- */
- regexText : '',
- /**
- * @cfg {String} emptyText The default text to place into an empty field (defaults to null).
- * Note: that this value will be submitted to the server if this field is enabled and configured
- * with a {@link #name}.
- */
- emptyText : null,
- /**
- * @cfg {String} emptyClass The CSS class to apply to an empty field to style the {@link #emptyText}
- * (defaults to 'x-form-empty-field'). This class is automatically added and removed as needed
- * depending on the current field value.
- */
- emptyClass : 'x-form-empty-field',
-
- /**
- * @cfg {Boolean} enableKeyEvents true to enable the proxying of key events for the HTML input
- * field (defaults to false)
- */
-
- initComponent : function(){
- Ext.form.TextField.superclass.initComponent.call(this);
- this.addEvents(
- /**
- * @event autosize
- * Fires when the {@link #autoSize} function is triggered. The field may or
- * may not have actually changed size according to the default logic, but this event provides
- * a hook for the developer to apply additional logic at runtime to resize the field if needed.
- * @param {Ext.form.Field} this This text field
- * @param {Number} width The new field width
- */
- 'autosize',
-
- /**
- * @event keydown
- * Keydown input field event. This event only fires if {@link #enableKeyEvents}
- * is set to true.
- * @param {Ext.form.TextField} this This text field
- * @param {Ext.EventObject} e
- */
- 'keydown',
- /**
- * @event keyup
- * Keyup input field event. This event only fires if {@link #enableKeyEvents}
- * is set to true.
- * @param {Ext.form.TextField} this This text field
- * @param {Ext.EventObject} e
- */
- 'keyup',
- /**
- * @event keypress
- * Keypress input field event. This event only fires if {@link #enableKeyEvents}
- * is set to true.
- * @param {Ext.form.TextField} this This text field
- * @param {Ext.EventObject} e
- */
- 'keypress'
- );
- },
-
- // private
- initEvents : function(){
- Ext.form.TextField.superclass.initEvents.call(this);
- if(this.validationEvent == 'keyup'){
- this.validationTask = new Ext.util.DelayedTask(this.validate, this);
- this.mon(this.el, 'keyup', this.filterValidation, this);
- }
- else if(this.validationEvent !== false && this.validationEvent != 'blur'){
- this.mon(this.el, this.validationEvent, this.validate, this, {buffer: this.validationDelay});
- }
- if(this.selectOnFocus || this.emptyText){
- this.mon(this.el, 'mousedown', this.onMouseDown, this);
-
- if(this.emptyText){
- this.applyEmptyText();
- }
- }
- if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Ext.form.VTypes[this.vtype+'Mask']))){
- this.mon(this.el, 'keypress', this.filterKeys, this);
- }
- if(this.grow){
- this.mon(this.el, 'keyup', this.onKeyUpBuffered, this, {buffer: 50});
- this.mon(this.el, 'click', this.autoSize, this);
- }
- if(this.enableKeyEvents){
- this.mon(this.el, {
- scope: this,
- keyup: this.onKeyUp,
- keydown: this.onKeyDown,
- keypress: this.onKeyPress
- });
- }
- },
-
- onMouseDown: function(e){
- if(!this.hasFocus){
- this.mon(this.el, 'mouseup', Ext.emptyFn, this, { single: true, preventDefault: true });
- }
- },
-
- processValue : function(value){
- if(this.stripCharsRe){
- var newValue = value.replace(this.stripCharsRe, '');
- if(newValue !== value){
- this.setRawValue(newValue);
- return newValue;
- }
- }
- return value;
- },
-
- filterValidation : function(e){
- if(!e.isNavKeyPress()){
- this.validationTask.delay(this.validationDelay);
- }
- },
-
- //private
- onDisable: function(){
- Ext.form.TextField.superclass.onDisable.call(this);
- if(Ext.isIE){
- this.el.dom.unselectable = 'on';
- }
- },
-
- //private
- onEnable: function(){
- Ext.form.TextField.superclass.onEnable.call(this);
- if(Ext.isIE){
- this.el.dom.unselectable = '';
- }
- },
-
- // private
- onKeyUpBuffered : function(e){
- if(!e.isNavKeyPress()){
- this.autoSize();
- }
- },
-
- // private
- onKeyUp : function(e){
- this.fireEvent('keyup', this, e);
- },
-
- // private
- onKeyDown : function(e){
- this.fireEvent('keydown', this, e);
- },
-
- // private
- onKeyPress : function(e){
- this.fireEvent('keypress', this, e);
- },
-
- /**
- * Resets the current field value to the originally-loaded value and clears any validation messages.
- * Also adds {@link #emptyText} and {@link #emptyClass} if the
- * original value was blank.
- */
- reset : function(){
- Ext.form.TextField.superclass.reset.call(this);
- this.applyEmptyText();
- },
-
- applyEmptyText : function(){
- if(this.rendered && this.emptyText && this.getRawValue().length < 1 && !this.hasFocus){
- this.setRawValue(this.emptyText);
- this.el.addClass(this.emptyClass);
- }
- },
-
- // private
- preFocus : function(){
- var el = this.el;
- if(this.emptyText){
- if(el.dom.value == this.emptyText){
- this.setRawValue('');
- }
- el.removeClass(this.emptyClass);
- }
- if(this.selectOnFocus){
- el.dom.select();
- }
- },
-
- // private
- postBlur : function(){
- this.applyEmptyText();
- },
-
- // private
- filterKeys : function(e){
- // special keys don't generate charCodes, so leave them alone
- if(e.ctrlKey || e.isSpecialKey()){
- return;
- }
-
- if(!this.maskRe.test(String.fromCharCode(e.getCharCode()))){
- e.stopEvent();
- }
- },
-
- setValue : function(v){
- if(this.emptyText && this.el && !Ext.isEmpty(v)){
- this.el.removeClass(this.emptyClass);
- }
- Ext.form.TextField.superclass.setValue.apply(this, arguments);
- this.applyEmptyText();
- this.autoSize();
- return this;
- },
-
- /**
- * Validates a value according to the field's validation rules and marks the field as invalid
- * if the validation fails. Validation rules are processed in the following order:
- *
- *
- * - 1. Field specific validator
- *
- *
A validator offers a way to customize and reuse a validation specification.
- * If a field is configured with a {@link #validator}
- * function, it will be passed the current field value. The {@link #validator}
- * function is expected to return either:
- *
- * - Boolean true if the value is valid (validation continues).
- * - a String to represent the invalid message if invalid (validation halts).
- *
- *
- *
- * - 2. Basic Validation
- *
- *
If the {@link #validator}
has not halted validation,
- * basic validation proceeds as follows:
- *
- *
- *
- * {@link #allowBlank}
: (Invalid message =
- * {@link #emptyText}
)
- * Depending on the configuration of {@link #allowBlank}
, a
- * blank field will cause validation to halt at this step and return
- * Boolean true or false accordingly.
- *
- *
- * {@link #minLength}
: (Invalid message =
- * {@link #minLengthText}
)
- * If the passed value does not satisfy the {@link #minLength}
- * specified, validation halts.
- *
- *
- * {@link #maxLength}
: (Invalid message =
- * {@link #maxLengthText}
)
- * If the passed value does not satisfy the {@link #maxLength}
- * specified, validation halts.
- *
- *
- *
- *
- *
- * - 3. Preconfigured Validation Types (VTypes)
- *
- *
If none of the prior validation steps halts validation, a field
- * configured with a {@link #vtype}
will utilize the
- * corresponding {@link Ext.form.VTypes VTypes} validation function.
- * If invalid, either the field's {@link #vtypeText}
or
- * the VTypes vtype Text property will be used for the invalid message.
- * Keystrokes on the field will be filtered according to the VTypes
- * vtype Mask property.
- *
- *
- * - 4. Field specific regex test
- *
- *
If none of the prior validation steps halts validation, a field's
- * configured {@link #regex}
test will be processed.
- * The invalid message for this test is configured with
- * {@link #regexText}
.
- *
- *
- * @param {Mixed} value The value to validate
- * @return {Boolean} True if the value is valid, else false
- */
- validateValue : function(value){
- if(Ext.isFunction(this.validator)){
- var msg = this.validator(value);
- if(msg !== true){
- this.markInvalid(msg);
- return false;
- }
- }
- if(value.length < 1 || value === this.emptyText){ // if it's blank
- if(this.allowBlank){
- this.clearInvalid();
- return true;
- }else{
- this.markInvalid(this.blankText);
- return false;
- }
- }
- if(value.length < this.minLength){
- this.markInvalid(String.format(this.minLengthText, this.minLength));
- return false;
- }
- if(value.length > this.maxLength){
- this.markInvalid(String.format(this.maxLengthText, this.maxLength));
- return false;
- }
- if(this.vtype){
- var vt = Ext.form.VTypes;
- if(!vt[this.vtype](value, this)){
- this.markInvalid(this.vtypeText || vt[this.vtype +'Text']);
- return false;
- }
- }
- if(this.regex && !this.regex.test(value)){
- this.markInvalid(this.regexText);
- return false;
- }
- return true;
- },
-
- /**
- * Selects text in this field
- * @param {Number} start (optional) The index where the selection should start (defaults to 0)
- * @param {Number} end (optional) The index where the selection should end (defaults to the text length)
- */
- selectText : function(start, end){
- var v = this.getRawValue();
- var doFocus = false;
- if(v.length > 0){
- start = start === undefined ? 0 : start;
- end = end === undefined ? v.length : end;
- var d = this.el.dom;
- if(d.setSelectionRange){
- d.setSelectionRange(start, end);
- }else if(d.createTextRange){
- var range = d.createTextRange();
- range.moveStart('character', start);
- range.moveEnd('character', end-v.length);
- range.select();
- }
- doFocus = Ext.isGecko || Ext.isOpera;
- }else{
- doFocus = true;
- }
- if(doFocus){
- this.focus();
- }
- },
-
- /**
- * Automatically grows the field to accomodate the width of the text up to the maximum field width allowed.
- * This only takes effect if {@link #grow} = true, and fires the {@link #autosize} event.
- */
- autoSize : function(){
- if(!this.grow || !this.rendered){
- return;
- }
- if(!this.metrics){
- this.metrics = Ext.util.TextMetrics.createInstance(this.el);
- }
- var el = this.el;
- var v = el.dom.value;
- var d = document.createElement('div');
- d.appendChild(document.createTextNode(v));
- v = d.innerHTML;
- d = null;
- Ext.removeNode(d);
- v += ' ';
- var w = Math.min(this.growMax, Math.max(this.metrics.getWidth(v) + /* add extra padding */ 10, this.growMin));
- this.el.setWidth(w);
- this.fireEvent('autosize', this, w);
- },
-
- onDestroy: function(){
- if(this.validationTask){
- this.validationTask.cancel();
- this.validationTask = null;
- }
- Ext.form.TextField.superclass.onDestroy.call(this);
- }
-});
-Ext.reg('textfield', Ext.form.TextField);