123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The source code</title>
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
- <style type="text/css">
- .highlight { display: block; background-color: #ddd; }
- </style>
- <script type="text/javascript">
- function highlight() {
- document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
- }
- </script>
- </head>
- <body onload="prettyPrint(); highlight();">
- <pre class="prettyprint lang-js"><span id='Ext-form-field-Text'>/**
- </span> * @docauthor Jason Johnston <jason@sencha.com>
- *
- * A 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.field.TextArea}
- * and {@link Ext.form.field.ComboBox}). Has support for empty-field placeholder values (see {@link #emptyText}).
- *
- * # Validation
- *
- * The Text field has a useful set of validations built in:
- *
- * - {@link #allowBlank} for making the field required
- * - {@link #minLength} for requiring a minimum value length
- * - {@link #maxLength} for setting a maximum value length (with {@link #enforceMaxLength} to add it
- * as the `maxlength` attribute on the input element)
- * - {@link #regex} to specify a custom regular expression for validation
- *
- * In addition, custom validations may be added:
- *
- * - {@link #vtype} specifies a virtual type implementation from {@link Ext.form.field.VTypes} which can contain
- * custom validation logic
- * - {@link #validator} allows a custom arbitrary function to be called during validation
- *
- * The details around how and when each of these validation options get used are described in the
- * documentation for {@link #getErrors}.
- *
- * By default, the field value is checked for validity immediately while the user is typing in the
- * field. This can be controlled with the {@link #validateOnChange}, {@link #checkChangeEvents}, and
- * {@link #checkChangeBuffer} configurations. Also see the details on Form Validation in the
- * {@link Ext.form.Panel} class documentation.
- *
- * # Masking and Character Stripping
- *
- * Text fields can be configured with custom regular expressions to be applied to entered values before
- * validation: see {@link #maskRe} and {@link #stripCharsRe} for details.
- *
- * # Example usage
- *
- * @example
- * Ext.create('Ext.form.Panel', {
- * title: 'Contact Info',
- * width: 300,
- * bodyPadding: 10,
- * renderTo: Ext.getBody(),
- * items: [{
- * xtype: 'textfield',
- * name: 'name',
- * fieldLabel: 'Name',
- * allowBlank: false // requires a non-empty value
- * }, {
- * xtype: 'textfield',
- * name: 'email',
- * fieldLabel: 'Email Address',
- * vtype: 'email' // requires value to be a valid email address format
- * }]
- * });
- */
- Ext.define('Ext.form.field.Text', {
- extend:'Ext.form.field.Base',
- alias: 'widget.textfield',
- requires: ['Ext.form.field.VTypes', 'Ext.layout.component.field.Text'],
- alternateClassName: ['Ext.form.TextField', 'Ext.form.Text'],
- <span id='Ext-form-field-Text-cfg-vtypeText'> /**
- </span> * @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. **Note**: only applies if **`{@link #vtype}`** is set, else ignored.
- */
- <span id='Ext-form-field-Text-cfg-stripCharsRe'> /**
- </span> * @cfg {RegExp} stripCharsRe
- * A JavaScript RegExp object used to strip unwanted content from the value
- * during input. If `stripCharsRe` is specified,
- * every *character sequence* matching `stripCharsRe` will be removed.
- */
- <span id='Ext-form-field-Text-cfg-size'> /**
- </span> * @cfg {Number} size
- * An initial value for the 'size' attribute on the text input element. This is only used if the field has no
- * configured {@link #width} and is not given a width by its container's layout. Defaults to 20.
- */
- size: 20,
- <span id='Ext-form-field-Text-cfg-grow'> /**
- </span> * @cfg {Boolean} [grow=false]
- * true if this field should automatically grow and shrink to its content
- */
- <span id='Ext-form-field-Text-cfg-growMin'> /**
- </span> * @cfg {Number} growMin
- * The minimum width to allow when `{@link #grow} = true`
- */
- growMin : 30,
- <span id='Ext-form-field-Text-cfg-growMax'> /**
- </span> * @cfg {Number} growMax
- * The maximum width to allow when `{@link #grow} = true`
- */
- growMax : 800,
- //<locale>
- <span id='Ext-form-field-Text-cfg-growAppend'> /**
- </span> * @cfg {String} growAppend
- * A string that will be appended to the field's current value for the purposes of calculating the target field
- * size. Only used when the {@link #grow} config is true. Defaults to a single capital "W" (the widest character in
- * common fonts) to leave enough space for the next typed character and avoid the field value shifting before the
- * width is adjusted.
- */
- growAppend: 'W',
- //</locale>
- <span id='Ext-form-field-Text-cfg-vtype'> /**
- </span> * @cfg {String} vtype
- * A validation type name as defined in {@link Ext.form.field.VTypes}
- */
- <span id='Ext-form-field-Text-cfg-maskRe'> /**
- </span> * @cfg {RegExp} maskRe An input mask regular expression that will be used to filter keystrokes (character being
- * typed) that do not match.
- * Note: It does not filter characters already in the input.
- */
- <span id='Ext-form-field-Text-cfg-disableKeyFilter'> /**
- </span> * @cfg {Boolean} [disableKeyFilter=false]
- * Specify true to disable input keystroke filtering
- */
- <span id='Ext-form-field-Text-cfg-allowBlank'> /**
- </span> * @cfg {Boolean} allowBlank
- * Specify false to validate that the value's length is > 0
- */
- allowBlank : true,
- <span id='Ext-form-field-Text-cfg-minLength'> /**
- </span> * @cfg {Number} minLength
- * Minimum input field length required
- */
- minLength : 0,
- <span id='Ext-form-field-Text-cfg-maxLength'> /**
- </span> * @cfg {Number} maxLength
- * Maximum input field length allowed by validation. 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 the
- * **{@link Ext.form.field.Text#enforceMaxLength enforceMaxLength}** option.
- *
- * Defaults to Number.MAX_VALUE.
- */
- maxLength : Number.MAX_VALUE,
- <span id='Ext-form-field-Text-cfg-enforceMaxLength'> /**
- </span> * @cfg {Boolean} enforceMaxLength
- * True to set the maxLength property on the underlying input field. Defaults to false
- */
- <span id='Ext-form-field-Text-cfg-minLengthText'> /**
- </span> * @cfg {String} minLengthText
- * Error text to display if the **{@link #minLength minimum length}** validation fails.
- */
- //<locale>
- minLengthText : 'The minimum length for this field is {0}',
- //</locale>
- //<locale>
- <span id='Ext-form-field-Text-cfg-maxLengthText'> /**
- </span> * @cfg {String} maxLengthText
- * Error text to display if the **{@link #maxLength maximum length}** validation fails
- */
- maxLengthText : 'The maximum length for this field is {0}',
- //</locale>
- <span id='Ext-form-field-Text-cfg-selectOnFocus'> /**
- </span> * @cfg {Boolean} [selectOnFocus=false]
- * true to automatically select any existing field text when the field receives input focus
- */
- //<locale>
- <span id='Ext-form-field-Text-cfg-blankText'> /**
- </span> * @cfg {String} blankText
- * The error text to display if the **{@link #allowBlank}** validation fails
- */
- blankText : 'This field is required',
- //</locale>
- <span id='Ext-form-field-Text-cfg-validator'> /**
- </span> * @cfg {Function} validator
- * A custom validation function to be called during field validation ({@link #getErrors}).
- * 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:
- *
- * @cfg {Object} validator.value The current field value
- * @cfg {Boolean/String} validator.return
- *
- * - True if the value is valid
- * - An error message if the value is invalid
- */
- <span id='Ext-form-field-Text-cfg-regex'> /**
- </span> * @cfg {RegExp} regex
- * A JavaScript RegExp object to be tested against the field value during validation.
- * If the test fails, the field will be marked invalid using
- * either **{@link #regexText}** or **{@link #invalidText}**.
- */
- <span id='Ext-form-field-Text-cfg-regexText'> /**
- </span> * @cfg {String} regexText
- * The error text to display if **{@link #regex}** is used and the test fails during validation
- */
- regexText : '',
- <span id='Ext-form-field-Text-cfg-emptyText'> /**
- </span> * @cfg {String} emptyText
- * The default text to place into an empty field.
- *
- * Note that normally this value will be submitted to the server if this field is enabled; to prevent this you can
- * set the {@link Ext.form.action.Action#submitEmptyText submitEmptyText} option of {@link Ext.form.Basic#submit} to
- * false.
- *
- * Also note that if you use {@link #inputType inputType}:'file', {@link #emptyText} is not supported and should be
- * avoided.
- *
- * Note that for browsers that support it, setting this property will use the HTML 5 placeholder attribute, and for
- * older browsers that don't support the HTML 5 placeholder attribute the value will be placed directly into the input
- * element itself as the raw value. This means that older browsers will obfuscate the {@link #emptyText} value for
- * password input fields.
- */
- <span id='Ext-form-field-Text-cfg-emptyCls'> /**
- </span> * @cfg {String} [emptyCls='x-form-empty-field']
- * The CSS class to apply to an empty field to style the **{@link #emptyText}**.
- * This class is automatically added and removed as needed depending on the current field value.
- */
- emptyCls : Ext.baseCSSPrefix + 'form-empty-field',
- <span id='Ext-form-field-Text-cfg-requiredCls'> /**
- </span> * @cfg {String} [requiredCls='x-form-required-field']
- * The CSS class to apply to a required field, i.e. a field where **{@link #allowBlank}** is false.
- */
- requiredCls : Ext.baseCSSPrefix + 'form-required-field',
- <span id='Ext-form-field-Text-cfg-enableKeyEvents'> /**
- </span> * @cfg {Boolean} [enableKeyEvents=false]
- * true to enable the proxying of key events for the HTML input field
- */
- componentLayout: 'textfield',
- // private
- valueContainsPlaceholder : false,
- initComponent: function () {
- var me = this;
- me.callParent();
- me.addEvents(
- <span id='Ext-form-field-Text-event-autosize'> /**
- </span> * @event autosize
- * Fires when the **{@link #autoSize}** function is triggered and the field is resized according to the
- * {@link #grow}/{@link #growMin}/{@link #growMax} configs as a result. This event provides a hook for the
- * developer to apply additional logic at runtime to resize the field if needed.
- * @param {Ext.form.field.Text} this This text field
- * @param {Number} width The new field width
- */
- 'autosize',
- <span id='Ext-form-field-Text-event-keydown'> /**
- </span> * @event keydown
- * Keydown input field event. This event only fires if **{@link #enableKeyEvents}** is set to true.
- * @param {Ext.form.field.Text} this This text field
- * @param {Ext.EventObject} e
- */
- 'keydown',
- <span id='Ext-form-field-Text-event-keyup'> /**
- </span> * @event keyup
- * Keyup input field event. This event only fires if **{@link #enableKeyEvents}** is set to true.
- * @param {Ext.form.field.Text} this This text field
- * @param {Ext.EventObject} e
- */
- 'keyup',
- <span id='Ext-form-field-Text-event-keypress'> /**
- </span> * @event keypress
- * Keypress input field event. This event only fires if **{@link #enableKeyEvents}** is set to true.
- * @param {Ext.form.field.Text} this This text field
- * @param {Ext.EventObject} e
- */
- 'keypress'
- );
- me.addStateEvents('change');
- me.setGrowSizePolicy();
- },
- // private
- setGrowSizePolicy: function(){
- if (this.grow) {
- this.shrinkWrap |= 1; // width must shrinkWrap
- }
- },
- // private
- initEvents : function(){
- var me = this,
- el = me.inputEl;
- me.callParent();
- if(me.selectOnFocus || me.emptyText){
- me.mon(el, 'mousedown', me.onMouseDown, me);
- }
- if(me.maskRe || (me.vtype && me.disableKeyFilter !== true && (me.maskRe = Ext.form.field.VTypes[me.vtype+'Mask']))){
- me.mon(el, 'keypress', me.filterKeys, me);
- }
- if (me.enableKeyEvents) {
- me.mon(el, {
- scope: me,
- keyup: me.onKeyUp,
- keydown: me.onKeyDown,
- keypress: me.onKeyPress
- });
- }
- },
- <span id='Ext-form-field-Text-method-isEqual'> /**
- </span> * @private
- * Override. Treat undefined and null values as equal to an empty string value.
- */
- isEqual: function(value1, value2) {
- return this.isEqualAsString(value1, value2);
- },
- <span id='Ext-form-field-Text-method-onChange'> /**
- </span> * @private
- * If grow=true, invoke the autoSize method when the field's value is changed.
- */
- onChange: function() {
- this.callParent();
- this.autoSize();
- },
- getSubTplData: function() {
- var me = this,
- value = me.getRawValue(),
- isEmpty = me.emptyText && value.length < 1,
- maxLength = me.maxLength,
- placeholder;
-
- // We can't just dump the value here, since MAX_VALUE ends up
- // being something like 1.xxxxe+300, which gets interpreted as 1
- // in the markup
- if (me.enforceMaxLength) {
- if (maxLength === Number.MAX_VALUE) {
- maxLength = undefined;
- }
- } else {
- maxLength = undefined;
- }
- if (isEmpty) {
- if (Ext.supports.Placeholder) {
- placeholder = me.emptyText;
- } else {
- value = me.emptyText;
- me.valueContainsPlaceholder = true;
- }
- }
- return Ext.apply(me.callParent(), {
- maxLength : maxLength,
- readOnly : me.readOnly,
- placeholder : placeholder,
- value : value,
- fieldCls : me.fieldCls + ((isEmpty && (placeholder || value)) ? ' ' + me.emptyCls : '') + (me.allowBlank ? '' : ' ' + me.requiredCls)
- });
- },
- afterRender: function(){
- this.autoSize();
- this.callParent();
- },
- onMouseDown: function(e){
- var me = this;
- if(!me.hasFocus){
- me.mon(me.inputEl, 'mouseup', Ext.emptyFn, me, { single: true, preventDefault: true });
- }
- },
- <span id='Ext-form-field-Text-method-processRawValue'> /**
- </span> * Performs any necessary manipulation of a raw String value to prepare it for conversion and/or
- * {@link #validate validation}. For text fields this applies the configured {@link #stripCharsRe}
- * to the raw value.
- * @param {String} value The unprocessed string value
- * @return {String} The processed string value
- */
- processRawValue: function(value) {
- var me = this,
- stripRe = me.stripCharsRe,
- newValue;
- if (stripRe) {
- newValue = value.replace(stripRe, '');
- if (newValue !== value) {
- me.setRawValue(newValue);
- value = newValue;
- }
- }
- return value;
- },
- //private
- onDisable: function(){
- this.callParent();
- if (Ext.isIE) {
- this.inputEl.dom.unselectable = 'on';
- }
- },
- //private
- onEnable: function(){
- this.callParent();
- if (Ext.isIE) {
- this.inputEl.dom.unselectable = '';
- }
- },
- onKeyDown: function(e) {
- this.fireEvent('keydown', this, e);
- },
- onKeyUp: function(e) {
- this.fireEvent('keyup', this, e);
- },
- onKeyPress: function(e) {
- this.fireEvent('keypress', this, e);
- },
- <span id='Ext-form-field-Text-method-reset'> /**
- </span> * Resets the current field value to the originally-loaded value and clears any validation messages.
- * Also adds **{@link #emptyText}** and **{@link #emptyCls}** if the original value was blank.
- */
- reset : function(){
- this.callParent();
- this.applyEmptyText();
- },
- applyEmptyText : function(){
- var me = this,
- emptyText = me.emptyText,
- isEmpty;
- if (me.rendered && emptyText) {
- isEmpty = me.getRawValue().length < 1 && !me.hasFocus;
- if (Ext.supports.Placeholder) {
- me.inputEl.dom.placeholder = emptyText;
- } else if (isEmpty) {
- me.setRawValue(emptyText);
- me.valueContainsPlaceholder = true;
- }
- //all browsers need this because of a styling issue with chrome + placeholders.
- //the text isnt vertically aligned when empty (and using the placeholder)
- if (isEmpty) {
- me.inputEl.addCls(me.emptyCls);
- }
- me.autoSize();
- }
- },
-
- afterFirstLayout: function() {
- this.callParent();
- if (Ext.isIE && this.disabled) {
- var el = this.inputEl;
- if (el) {
- el.dom.unselectable = 'on';
- }
- }
- },
-
- // private
- preFocus : function(){
- var me = this,
- inputEl = me.inputEl,
- emptyText = me.emptyText,
- isEmpty;
- me.callParent(arguments);
- if ((emptyText && !Ext.supports.Placeholder) && (inputEl.dom.value === me.emptyText && me.valueContainsPlaceholder)) {
- me.setRawValue('');
- isEmpty = true;
- inputEl.removeCls(me.emptyCls);
- me.valueContainsPlaceholder = false;
- } else if (Ext.supports.Placeholder) {
- me.inputEl.removeCls(me.emptyCls);
- }
- if (me.selectOnFocus || isEmpty) {
- inputEl.dom.select();
- }
- },
- onFocus: function() {
- var me = this;
- me.callParent(arguments);
- if (me.emptyText) {
- me.autoSize();
- }
- },
- // private
- postBlur : function(){
- this.callParent(arguments);
- this.applyEmptyText();
- },
- // private
- filterKeys : function(e){
- /*
- * On European keyboards, the right alt key, Alt Gr, is used to type certain special characters.
- * JS detects a keypress of this as ctrlKey & altKey. As such, we check that alt isn't pressed
- * so we can still process these special characters.
- */
- if (e.ctrlKey && !e.altKey) {
- return;
- }
- var key = e.getKey(),
- charCode = String.fromCharCode(e.getCharCode());
- if((Ext.isGecko || Ext.isOpera) && (e.isNavKeyPress() || key === e.BACKSPACE || (key === e.DELETE && e.button === -1))){
- return;
- }
- if((!Ext.isGecko && !Ext.isOpera) && e.isSpecialKey() && !charCode){
- return;
- }
- if(!this.maskRe.test(charCode)){
- e.stopEvent();
- }
- },
- getState: function() {
- return this.addPropertyToState(this.callParent(), 'value');
- },
- applyState: function(state) {
- this.callParent(arguments);
- if(state.hasOwnProperty('value')) {
- this.setValue(state.value);
- }
- },
- <span id='Ext-form-field-Text-method-getRawValue'> /**
- </span> * Returns the raw String value of the field, without performing any normalization, conversion, or validation. Gets
- * the current value of the input element if the field has been rendered, ignoring the value if it is the
- * {@link #emptyText}. To get a normalized and converted value see {@link #getValue}.
- * @return {String} The raw String value of the field
- */
- getRawValue: function() {
- var me = this,
- v = me.callParent();
- if (v === me.emptyText && me.valueContainsPlaceholder) {
- v = '';
- }
- return v;
- },
- <span id='Ext-form-field-Text-method-setValue'> /**
- </span> * Sets a data value into the field and runs the change detection and validation. Also applies any configured
- * {@link #emptyText} for text fields. To set the value directly without these inspections see {@link #setRawValue}.
- * @param {Object} value The value to set
- * @return {Ext.form.field.Text} this
- */
- setValue: function(value) {
- var me = this,
- inputEl = me.inputEl;
- if (inputEl && me.emptyText && !Ext.isEmpty(value)) {
- inputEl.removeCls(me.emptyCls);
- me.valueContainsPlaceholder = false;
- }
- me.callParent(arguments);
- me.applyEmptyText();
- return me;
- },
- <span id='Ext-form-field-Text-method-getErrors'> /**
- </span> * Validates a value according to the field's validation rules and returns an array of errors
- * for any failing validations. 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 #blankText}`)
- *
- * 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.field.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 {Object} value The value to validate. The processed raw value will be used if nothing is passed.
- * @return {String[]} Array of any validation errors
- */
- getErrors: function(value) {
- var me = this,
- errors = me.callParent(arguments),
- validator = me.validator,
- emptyText = me.emptyText,
- allowBlank = me.allowBlank,
- vtype = me.vtype,
- vtypes = Ext.form.field.VTypes,
- regex = me.regex,
- format = Ext.String.format,
- msg;
- value = value || me.processRawValue(me.getRawValue());
- if (Ext.isFunction(validator)) {
- msg = validator.call(me, value);
- if (msg !== true) {
- errors.push(msg);
- }
- }
- if (value.length < 1 || (value === me.emptyText && me.valueContainsPlaceholder)) {
- if (!allowBlank) {
- errors.push(me.blankText);
- }
- //if value is blank, there cannot be any additional errors
- return errors;
- }
- if (value.length < me.minLength) {
- errors.push(format(me.minLengthText, me.minLength));
- }
- if (value.length > me.maxLength) {
- errors.push(format(me.maxLengthText, me.maxLength));
- }
- if (vtype) {
- if(!vtypes[vtype](value, me)){
- errors.push(me.vtypeText || vtypes[vtype +'Text']);
- }
- }
- if (regex && !regex.test(value)) {
- errors.push(me.regexText || me.invalidText);
- }
- return errors;
- },
- <span id='Ext-form-field-Text-method-selectText'> /**
- </span> * Selects text in this field
- * @param {Number} [start=0] The index where the selection should start
- * @param {Number} [end] The index where the selection should end (defaults to the text length)
- */
- selectText : function(start, end){
- var me = this,
- v = me.getRawValue(),
- doFocus = true,
- el = me.inputEl.dom,
- undef,
- range;
- if (v.length > 0) {
- start = start === undef ? 0 : start;
- end = end === undef ? v.length : end;
- if (el.setSelectionRange) {
- el.setSelectionRange(start, end);
- }
- else if(el.createTextRange) {
- range = el.createTextRange();
- range.moveStart('character', start);
- range.moveEnd('character', end - v.length);
- range.select();
- }
- doFocus = Ext.isGecko || Ext.isOpera;
- }
- if (doFocus) {
- me.focus();
- }
- },
- <span id='Ext-form-field-Text-method-autoSize'> /**
- </span> * 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 if the width changes.
- */
- autoSize: function() {
- var me = this;
- if (me.grow && me.rendered) {
- me.autoSizing = true;
- me.updateLayout();
- }
- },
- afterComponentLayout: function() {
- var me = this,
- width;
- me.callParent(arguments);
- if (me.autoSizing) {
- width = me.inputEl.getWidth();
- if (width !== me.lastInputWidth) {
- me.fireEvent('autosize', me, width);
- me.lastInputWidth = width;
- delete me.autoSizing;
- }
- }
- }
- });
- </pre>
- </body>
- </html>
|