X-Git-Url: http://git.roojs.org/?a=blobdiff_plain;f=Roo%2Fform%2FTextField.js;h=20a8c7dd0f13cc57b3a1c0d6bb5aba87b7fa3c05;hb=16d585588738895fd73db1cc2cf3754144012aab;hp=82ffa19743303082c7ac924407378170045289e5;hpb=1460d0ae179dc7748afd80fd8ef7119d89e22b56;p=roojs1 diff --git a/Roo/form/TextField.js b/Roo/form/TextField.js index 82ffa19743..20a8c7dd0f 100644 --- a/Roo/form/TextField.js +++ b/Roo/form/TextField.js @@ -83,6 +83,10 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { * @cfg {Boolean} selectOnFocus True to automatically select any existing field text when the field receives input focus (defaults to false) */ selectOnFocus : false, + /** + * @cfg {Boolean} allowLeadingSpace True to prevent the stripping of leading white space + */ + allowLeadingSpace : false, /** * @cfg {String} blankText Error text to display if the allow blank validation fails (defaults to "This field is required") */ @@ -104,27 +108,19 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { */ regexText : "", /** - * @cfg {String} emptyText The default text to display in an empty field (defaults to null). + * @cfg {String} emptyText The default text to display in an empty field - placeholder... (defaults to null). */ 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', + // private - initEvents : function(){ - Roo.form.TextField.superclass.initEvents.call(this); - - if(this.el.is('input[type=password]') && Roo.isSafari){ - this.el.on('keydown', this.SafariOnKeyDown, this); - this.el.on("focus", function(){ - Roo.log('run'); - this.setValue(''); - }, this); + initEvents : function() + { + if (this.emptyText) { + this.el.attr('placeholder', this.emptyText); } + Roo.form.TextField.superclass.initEvents.call(this); if(this.validationEvent == 'keyup'){ this.validationTask = new Roo.util.DelayedTask(this.validate, this); this.el.on('keyup', this.filterValidation, this); @@ -132,13 +128,14 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { else if(this.validationEvent !== false){ this.el.on(this.validationEvent, this.validate, this, {buffer: this.validationDelay}); } - if(this.selectOnFocus || this.emptyText){ + + if(this.selectOnFocus){ this.on("focus", this.preFocus, this); - if(this.emptyText){ - this.on('blur', this.postBlur, this); - this.applyEmptyText(); - } } + if (!this.allowLeadingSpace) { + this.on('blur', this.cleanLeadingSpace, this); + } + if(this.maskRe || (this.vtype && this.disableKeyFilter !== true && (this.maskRe = Roo.form.VTypes[this.vtype+'Mask']))){ this.el.on("keypress", this.filterKeys, this); } @@ -146,7 +143,9 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { this.el.on("keyup", this.onKeyUp, this, {buffer:50}); this.el.on("click", this.autoSize, this); } - + if(this.el.is('input[type=password]') && Roo.isSafari){ + this.el.on('keydown', this.SafariOnKeyDown, this); + } }, processValue : function(value){ @@ -172,41 +171,28 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { this.autoSize(); } }, - + // private - clean the leading white space + cleanLeadingSpace : function(e) + { + this.setValue(this.getValue().replace(/^\s+/,'')); + }, /** * Resets the current field value to the originally-loaded value and clears any validation messages. - * Also adds emptyText and emptyClass if the original value was blank. + * */ reset : function(){ Roo.form.TextField.superclass.reset.call(this); - this.applyEmptyText(); - }, - - applyEmptyText : function(){ - if(this.rendered && this.emptyText && this.getRawValue().length < 1){ - this.setRawValue(this.emptyText); - this.el.addClass(this.emptyClass); - } - }, - + + }, // private preFocus : function(){ - if(this.emptyText){ - if(this.el.dom.value == this.emptyText){ - this.setRawValue(''); - } - this.el.removeClass(this.emptyClass); - } + if(this.selectOnFocus){ this.el.dom.select(); } }, - // private - postBlur : function(){ - this.applyEmptyText(); - }, - + // private filterKeys : function(e){ var k = e.getKey(); @@ -223,11 +209,9 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { }, setValue : function(v){ - if(this.emptyText && this.el && v !== undefined && v !== null && v !== ''){ - this.el.removeClass(this.emptyClass); - } + Roo.form.TextField.superclass.setValue.apply(this, arguments); - this.applyEmptyText(); + this.autoSize(); }, @@ -238,7 +222,7 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { * @return {Boolean} True if the value is valid, else false */ validateValue : function(value){ - if(value.length < 1 || value === this.emptyText){ // if it's blank + if(value.length < 1) { // if it's blank if(this.allowBlank){ this.clearInvalid(); return true; @@ -322,10 +306,33 @@ Roo.extend(Roo.form.TextField, Roo.form.Field, { }, // private - SafariOnKeyDown : function(event){ - if((event.getKey() == 8 || event.getKey() == 46) && this.getValue().length ==1){ // backspace and delete key + SafariOnKeyDown : function(event) + { + // this is a workaround for a password hang bug on chrome/ webkit. + + var isSelectAll = false; + + if(this.el.dom.selectionEnd > 0){ + isSelectAll = (this.el.dom.selectionEnd - this.el.dom.selectionStart - this.getValue().length == 0) ? true : false; + } + if(((event.getKey() == 8 || event.getKey() == 46) && this.getValue().length ==1)){ // backspace and delete key event.preventDefault(); this.setValue(''); - }; + return; + } + + if(isSelectAll && event.getCharCode() > 31){ // backspace and delete key + + event.preventDefault(); + // this is very hacky as keydown always get's upper case. + + var cc = String.fromCharCode(event.getCharCode()); + + + this.setValue( event.shiftKey ? cc : cc.toLowerCase()); + + } + + } }); \ No newline at end of file