You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xap-commits@incubator.apache.org by mt...@apache.org on 2006/10/13 20:56:47 UTC

svn commit: r463821 - /incubator/xap/trunk/src/xap/bridges/dojo/TextFieldBridge.js

Author: mturyn
Date: Fri Oct 13 13:56:47 2006
New Revision: 463821

URL: http://svn.apache.org/viewvc?view=rev&rev=463821
Log:
1.) Separated "selectable" from "editable".
2.) Improved "onEdit" and "onTextChange".

Modified:
    incubator/xap/trunk/src/xap/bridges/dojo/TextFieldBridge.js

Modified: incubator/xap/trunk/src/xap/bridges/dojo/TextFieldBridge.js
URL: http://svn.apache.org/viewvc/incubator/xap/trunk/src/xap/bridges/dojo/TextFieldBridge.js?view=diff&rev=463821&r1=463820&r2=463821
==============================================================================
--- incubator/xap/trunk/src/xap/bridges/dojo/TextFieldBridge.js (original)
+++ incubator/xap/trunk/src/xap/bridges/dojo/TextFieldBridge.js Fri Oct 13 13:56:47 2006
@@ -26,6 +26,7 @@
 Xap.require("xap.bridges.dojo.DojoWidgetBridge");
 Xap.require("xap.widgets.dojo.TextField"); 
 Xap.require("xap.session.ClientEvent"); 
+Xap.require("dojo.html") ;
 
  /**
  * @fileoverview
@@ -49,8 +50,8 @@
 	this.superclass.init.call(this);
 	
 	//add listener last so we don't fire for the initial set
-	dojo.event.connect(this.getPeer(), "onblur",this,"onblur");	
-	dojo.event.connect(this.getPeer(), "onkeyup",this,"onTextChange");		
+	dojo.event.connect(this.getPeer(), "onkeyup",this,"onTextChange");	
+	dojo.event.connect(this.getPeer(), "onchange",this,"onEdit");			
 }
 
 xap.bridges.dojo.TextFieldBridge.prototype.getPeerString = function(){
@@ -77,56 +78,50 @@
 	this.getPeer().setText(value);
 }	
 
-xap.bridges.dojo.TextFieldBridge.prototype.onblur = function( ){
-	// Only do the rest if read-only:	
-	if( this.getPeer().isReadOnly() ){
-		return ;
-	}
+xap.bridges.dojo.TextFieldBridge.prototype.onTextChange = function( event ){
 	var text = this.getPeer().getText();
-	this.writeBackAttribute("text",text);
 	var clientEvent = new xap.session.ClientEvent(this.getElement(),this.getSession());
 	clientEvent.text = text;
-	this.fireEvent("onEdit",null,null,clientEvent);
+	clientEvent.originalEvent = event ;
+	// Probably shouldn't alter element on every keystroke:
+	//this.writeBackAttribute(xap.xml.XmlTokens.TEXT,newText);	
+	this.fireEvent("onTextChange",null,null,clientEvent);
 }	
 
 /**
- * Fires an onTextChange() iff the field has lost focus
+ * Fires an onEvent() iff the field has lost focus
  * and there has been a change in the text:
+ * Problem:  This doesn't work under IE
 **/ 
-xap.bridges.dojo.TextFieldBridge.prototype.onTextChange = function( kbdEvent ){
-	// Only do the rest if not read-only:	
-	if( this.getPeer().isReadOnly() ){
-		return false;
-	}
-	var oldText = this.getElement().getAttribute(xap.xml.XmlTokens.TEXT) ;
+xap.bridges.dojo.TextFieldBridge.prototype.onEdit= function(event ){
+//	var oldText = this.getElement().getAttribute(xap.xml.XmlTokens.TEXT) ;
 	var newText = this.getPeer().getText();
 
 	var clientEvent = new xap.session.ClientEvent(this.getElement(),this.getSession());
 
-	// fire an onTextChange() iff there's been a change:
-	if( oldText != newText ){
-		// I don't think we should change the element on
-		// every keystroke:
-		//this.writeBackAttribute(xap.xml.XmlTokens.TEXT,newText);
-		clientEvent.text = newText;
-		clientEvent.originalEvent = kbdEvent ;
-		this.fireEvent("onTextChange",null,null,clientEvent);
-	}
+	this.writeBackAttribute(xap.xml.XmlTokens.TEXT,newText);
+	clientEvent.text = newText;
+	clientEvent.originalEvent = event ;
+	this.fireEvent("onEdit",null,null,clientEvent);
+
 	return false ;	
 }
 
 
-
-
-
 xap.bridges.dojo.TextFieldBridge.prototype.setMaxLengthAttribute = function( nMax ){
 	this.getPeer().setMaxLength( nMax ) ;
 
 	// Trim text down, if needed:	
 	var text = this.getPeer().getText();
 	if (text && text.length> nMax){
-		text = text.substring(0,nMax) ;
-		this.setTextAttribute(text) ;	
+		// For the benefit of the onEdit event later on:
+		var newText = text.substring(0,nMax) ;
+		// Trimmed so let the document know about that:
+		var clientEvent = new xap.session.ClientEvent(this.getElement(),this.getSession());	
+		clientEvent.text = newText;
+		this.setTextAttribute(newText) ;
+		this.writeBackAttribute(xap.xml.XmlTokens.TEXT,newText);	
+		this.fireEvent("onEdit",null,null,clientEvent) ;
 	}
 }	
 
@@ -136,13 +131,23 @@
 }
 
 
-xap.bridges.dojo.TextFieldBridge.prototype.setSelectableAttribute = function( bWritable ){
-	this.setEditableAttribute(bWritable) ;
+xap.bridges.dojo.TextFieldBridge.prototype.setSelectableAttribute = function( bSelectable ){
+	if( this.getPeer().isReadOnly() ){
+		//ineditability trumps selectability setting:
+		return ;
+	}
+	if ( bSelectable == "false" ){
+		dojo.html.disableSelection(this.getPeer().domNode); 
+		// TODO: Move this to css a.s.a.p:
+		this.getPeer().domNode.style.fontWeight = "bold" ;
+	} else {
+		dojo.html.enableSelection(this.getPeer().domNode); 
+		// TODO: Move this to css a.s.a.p:
+		this.getPeer().domNode.style.fontWeight = "normal" ;		
+	}
+	this.writeBackAttribute("selectable",bSelectable);	
 }	
 
-xap.bridges.dojo.TextFieldBridge.prototype.getSelectableAttribute = function( ){
-	return (this.getEditableAttribute()=="false")?"false":"true" ;
-}
 
 xap.bridges.dojo.TextFieldBridge.prototype.setEditableAttribute = function( bWritable ){
 //alert("About to handle setEditableAttribute("+bWritable+").");
@@ -150,8 +155,7 @@
 	var bReadonly = (bWritable=="false")?"true":"false" ;
 	this.getPeer().setReadOnly( bReadonly ) ;
 	this.writeBackAttribute("editable",bWritable);
-	this.writeBackAttribute("selectable",bWritable);
-	
+
 	// TODO: Move this to css a.s.a.p:
 	if( bReadonly == "true"){
 		this.setBackgroundColorAttribute("#ccccdd") ;
@@ -164,12 +168,6 @@
 }	
 
 
-// The peer thinks in terms of "readOnly" or not, we set using the opposite sense,
-// as "editable"=="non-readOnly":
-
-xap.bridges.dojo.TextFieldBridge.prototype.getEditableAttribute = function( ){
-	return ""+ !Boolean(this.getPeer().getReadOnly()) ;
-}