r1662 - in branches/bxe_2_0: js mozile

[email protected] Fri, 27 Apr 2007 18:08:17 +0200 (CEST)
Newsgroups gmane.editors.bitflux.cvs
Message-ID <[email protected]>
Author: chregu
Date: Fri Apr 27 18:08:17 2007
New Revision: 1662

Log:
first implementation on onempty callbacks


Modified:
   branches/bxe_2_0/js/bxeFunctions.js
   branches/bxe_2_0/mozile/mozCE.js
   branches/bxe_2_0/mozile/mozilekb.js

Modified: branches/bxe_2_0/js/bxeFunctions.js
==============================================================================
--- branches/bxe_2_0/js/bxeFunctions.js	(original)
+++ branches/bxe_2_0/js/bxeFunctions.js	Fri Apr 27 18:08:17 2007
@@ -2624,4 +2624,54 @@
 	if (bxe_lastCursorPositionFocusNode) {
 		sel.extend(bxe_lastCursorPositionFocusNode, bxe_lastCursorPositionFocusOffset);
 	}
-}
\ No newline at end of file
+}
+
+
+function bxe_checkEmpty(xmlnode, makeDefault) {
+	if (!makeDefault && xmlnode.vdom.bxeOnempty) {
+		var par = xmlnode.parentNode;
+		if (xmlnode.vdom.bxeOnemptyType == "function") {
+			if (eval(xmlnode.vdom.bxeOnempty + "(xmlnode)")) {
+				bxe_checkEmptyParent(par);
+				return true;
+			}
+		}
+		else if (xmlnode.vdom.bxeOnemptyType == "delete") {
+			par.removeChild(xmlnode);
+			bxe_checkEmptyParent(par);
+			return true;
+		}
+	}
+	if (xmlnode.vdom.bxeDefaultcontent || xmlnode.vdom.bxeTabletype == "table-cell" || xmlnode.vdom.bxeTabletype == "table-col" ) {
+		xmlnode.makeDefaultNodes();
+	} else {
+		xmlnode.parentNode.removeChild(xmlnode);
+	}
+/* old way....	
+	if (!makeDefault && (! (xmlnode.vdom.bxeTabletype == "table-cell" || xmlnode.vdom.bxeTabletype == "table-col" ))){
+		//FIXME ondelete
+		xmlnode.parentNode.removeChild(xmlnode);
+	} else {
+		xmlnode.makeDefaultNodes();
+	}*/
+}
+
+function bxe_checkEmptyParent(par) {
+	par._node.betterNormalize();
+	if (par._node.childNodes.length == 0) {
+		bxe_checkEmpty(par);
+	}
+}
+
+/* example function for onEmpty Function callback with
+<bxe:onempty type="function">bxe_empty_para</bxe:onempty>			
+can be removed later
+*/
+
+function bxe_empty_para(e) {
+	e.setContent("content via callback function");
+	e._node.setAttribute("__bxe_defaultcontent","true");
+	bxe_Transform(false,false,e);
+	return true;
+}
+/* end example function */
\ No newline at end of file

Modified: branches/bxe_2_0/mozile/mozCE.js
==============================================================================
--- branches/bxe_2_0/mozile/mozCE.js	(original)
+++ branches/bxe_2_0/mozile/mozCE.js	Fri Apr 27 18:08:17 2007
@@ -214,23 +214,12 @@
 				} else {
 					var parpar = par.parentNode;
 					var nextSibling = par.nextSibling;
-					if (par.XMLNode.vdom.bxeOnempty && par.XMLNode.vdom.bxeOnemptyType == "function") {
-						if (eval(par.XMLNode.vdom.bxeOnempty + "(par.XMLNode)")) {
-							return true;
-						}
-					} 
-					if (!makeDefault && (! (par.XMLNode.vdom.bxeTabletype == "table-cell" || par.XMLNode.vdom.bxeTabletype == "table-col" ))){
-						//FIXME ondelete
-						parpar.removeChild(par);
-					} else {
-						par.XMLNode.makeDefaultNodes();
-					}
-					
+					bxe_checkEmpty(par.XMLNode,makeDefault);
 				}
 				if (!parpar.XMLNode.isNodeValid(true,2,true)) {
 					var _new = parpar.insertBefore(parpar.ownerDocument.createElementNS(par.namespaceURI,par.localName),nextSibling);
 					_new.XMLNode = _new.getXMLNode();
-					_new.XMLNode.makeDefaultNodes();
+					bxe_checkEmpty(_new.XMLNode,makeDefault);
 				}
 				parpar.normalize();
 				var _h = par.XMLNode._htmlnode;
@@ -423,7 +412,7 @@
 				xmlnode.removeChild(textNode);
 				xmlnode.betterNormalize();
 				if (xmlnode.childNodes.length == 0)  {
-					xmlnode.XMLNode.makeDefaultNodes();
+					bxe_checkEmpty(xmlnode);
 				}
 			} else {
 				delete textNode;

Modified: branches/bxe_2_0/mozile/mozilekb.js
==============================================================================
--- branches/bxe_2_0/mozile/mozilekb.js	(original)
+++ branches/bxe_2_0/mozile/mozilekb.js	Fri Apr 27 18:08:17 2007
@@ -299,6 +299,7 @@
 	// BACKSPACE AND DELETE (DOM_VK_BACK_SPACE, DOM_VK_DELETE)
 	if((event.keyCode == 8) || (event.keyCode == 46)) {
 		try {
+			
 		return bxe_deleteEventKey(sel,(event.keyCode == 46));
 		} catch (e) {
 			dump(e + "\n");
@@ -495,7 +496,7 @@
 		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);
+			bxe_deleteEventKey(sel,false,false,true);
 			sel = window.getSelection();
 			//sel.selectEditableRange(cssr);
 			
@@ -585,7 +586,7 @@
 //	sel.anchorNode.parentNode.updateXMLNode();
 }
 
-function bxe_deleteEventKey(sel, backspace, noTransform) {
+function bxe_deleteEventKey(sel, backspace, noTransform,makeDefault) {
 	if (sel.isCollapsed) {
 			sel.deleteSelection(backspace);
 			return true;
@@ -623,7 +624,7 @@
 						} else {
 							if (_par.childNodes.length == 1) {
 								_par.removeChild(_par.firstChild);
-								_par.XMLNode.makeDefaultNodes();
+								bxe_checkEmpty(_par.XMLNode,makeDefault);
 							} else {
 								_par.replaceChild(_par.ownerDocument.createTextNode(" "),xmlnode);
 							}
@@ -650,8 +651,7 @@
 				try {
 					if (_par.childNodes.length == 1 && _par.firstChild.nodeValue.strip().length == 0) {
 						_par.removeChild(_par.firstChild);
-						_par.XMLNode.makeDefaultNodes();
-						
+						bxe_checkEmpty(_par.XMLNode,makeDefault);
 					}
 				} catch(e) {
 					//console.log(e);
-- 
Bx-editor-cvs mailing list
[email protected]
http://lists.bitflux.ch/cgi-bin/listinfo/bx-editor-cvs