r1589 - branches/bxe_2_0/mozile

[email protected] Fri, 27 Oct 2006 15:42:49 +0200 (CEST)
Newsgroups gmane.editors.bitflux.cvs
Message-ID <[email protected]>
Author: chregu
Date: Fri Oct 27 15:42:48 2006
New Revision: 1589

Modified:
   branches/bxe_2_0/mozile/mozCE.js
   branches/bxe_2_0/mozile/mozilekb.js
Log:
hopefully improved selection/delete code

Modified: branches/bxe_2_0/mozile/mozCE.js
==============================================================================
--- branches/bxe_2_0/mozile/mozCE.js	(original)
+++ branches/bxe_2_0/mozile/mozCE.js	Fri Oct 27 15:42:48 2006
@@ -336,6 +336,8 @@
 	
 	else
 	{
+		//TESTME
+		this.fixFocus();
 		
 		
 		var xmlnode = bxe_getXMLNodeByHTMLNode(this.anchorNode.parentNode);
@@ -382,6 +384,7 @@
 				// merge nodes
 				
 			} else {
+				
 				textNode.splitText(this.focusOffset);
 			}
 			textNode = textNode.splitText(this.anchorOffset);
@@ -410,7 +413,12 @@
 				}
 			}
 			if (textNode.parentNode == xmlnode) {
+				
 				xmlnode.removeChild(textNode);
+				xmlnode.betterNormalize();
+				if (xmlnode.childNodes.length == 0)  {
+					xmlnode.XMLNode.makeDefaultNodes();
+				}
 			} else {
 				delete textNode;
 			}
@@ -1074,8 +1082,7 @@
 	var docfrag = bxe_config.xmldoc.createDocumentFragment();
 	this.fixFocus();
 	if (this.anchorNode != this.focusNode) {
-		var xmlnode = bxe_getXMLNodeByHTMLNode(this.anchorNode.parentNode);
-		
+		var xmlnode = bxe_getXMLNodeByHTMLNodeRecursive(this.anchorNode.parentNode);
 		if (xmlnode.betterNormalize) {
 			xmlnode.betterNormalize();
 		

Modified: branches/bxe_2_0/mozile/mozilekb.js
==============================================================================
--- branches/bxe_2_0/mozile/mozilekb.js	(original)
+++ branches/bxe_2_0/mozile/mozilekb.js	Fri Oct 27 15:42:48 2006
@@ -536,6 +536,25 @@
 		if(!cssr.collapsed)
 		{
 			//if !collapsed, get the editable Range, it has a saner check, the getRangeAt(0) does not always work
+			bxe_deleteEventKey(sel,false);
+			
+			sel = window.getSelection();
+			//sel.selectEditableRange(cssr);
+			cssr = sel.getRangeAt(0);
+			var _node = sel.anchorNode.parentNode;
+			if (_node.getAttribute("__bxe_defaultcontent") == "true") {
+				_node.firstChild.nodeValue = " ";
+				_node.XMLNode._node.firstChild.nodeValue = " ";
+				sel = window.getSelection();
+				
+				sel.collapse(_node.firstChild,0);
+				cssr = sel.getRangeAt(0);
+				par = cssr.startContainer.parentNode;
+				bxid = par.getAttribute("__bxe_id");
+			}
+		
+			
+			/*
 			cssr = sel.getEditableRange();
 			var backspace = false;
 			if (!sel.isCollapsed && sel.anchorNode.nodeType == 3 && sel.anchorOffset == 0) {
@@ -557,10 +576,9 @@
 				sel.deleteSelection(backspace);
 			} else {
 				sel.deleteSelection(backspace);
-			//sel.anchorNode.parentNode.updateXMLNode();
 			sel = window.getSelection();
 				cssr = sel.getEditableRange();
-			}
+			}*/
 		}
 
 		var startC = cssr.startContainer;
@@ -619,37 +637,42 @@
 //	sel.anchorNode.parentNode.updateXMLNode();
 }
 
-function bxe_deleteEventKey(sel, backspace) {
-
+function bxe_deleteEventKey(sel, backspace, noTransform) {
+	if (sel.isCollapsed) {
+			sel.deleteSelection(backspace);
+			return true;
+	}
+	sel.fixFocus();
 		//switch focus and anchor, if focus is before anchor
-		if ((!sel.isCollapsed && sel.focusNode.nodeType == 3 && sel.focusNode.compareDocumentPosition(sel.anchorNode) & 4) ||
-			(sel.focusNode == sel.anchorNode && sel.focusOffset < sel.anchorOffset) ) {
-			var n = sel.anchorNode;
-			var o = sel.anchorOffset;
-			sel.collapse(sel.focusNode, sel.focusOffset)
-			sel.extend(n,o);
+
+		if (sel.anchorOffset >= sel.anchorNode.nodeValue.strip().length) {
+			var _pos = sel.focusOffset;
+			sel.collapse(sel.focusNode,0);
+			sel.extend(sel.focusNode,_pos);
+			
 		}
-		if (sel.isCollapsed) {
-			sel.deleteSelection(backspace);
-		} else if (!sel.isCollapsed && sel.anchorNode.nodeType == 3 && sel.anchorOffset == 0) {
+		if (sel.anchorNode.nodeType == 3 && sel.anchorOffset == 0) {
 			// if only one textnode and fully selected
 			if (sel.anchorNode == sel.focusNode) {
-				
 				if (sel.focusOffset == sel.anchorNode.nodeValue.strip().length) {
 					
 					var xmlnode = bxe_getXMLNodeByHTMLNode(sel.anchorNode);
 					//xmlnode.parentNode.appendChild(xmlnode.ownerDocument.createTextNode(" "));
 					var _par = xmlnode.parentNode;
 					if (_par) {
+						
 						_par.removeChild(xmlnode);
 						_par.XMLNode.makeDefaultNodes();
 						
+						
+						
 					} else {
 						bxe_deleteWholeSelection(sel,backspace);
 						sel = window.getSelection();
 						sel.deleteSelection(false);
 					}
 				} else {
+					
 					bxe_history_snapshot();
 					sel.deleteSelection(backspace);
 					
@@ -674,10 +697,14 @@
 				
 			}
 			bxe_Transform();
+			  
 		} else {
 			bxe_history_snapshot();
 			sel.deleteSelection(backspace);
-			bxe_Transform();
+			
+			if (!noTransform) {
+				bxe_Transform();
+			}
 			
 		}
 		return true;
-- 
Bx-editor-cvs mailing list
[email protected]
http://lists.bitflux.ch/cgi-bin/listinfo/bx-editor-cvs