rem: sNodeName = sNodeName.toLowerCase() ;  if ( FCKBrowserInfo.IsGecko && sNodeName == 'br' && htmlNode.hasAttribute('type') && htmlNode.getAttribute( 'type', 2 ) == '_moz' ) 
add:  if ( sNodeName == 'br' && ( htmlNode.getAttribute( 'type', 2 ) == '_moz' || !htmlNode.nextSibling ) ) 
context: FCKXHtml._AppendNode = function( xmlNode, htmlNode ){	if ( !htmlNode )		return ;	switch ( htmlNode.nodeType )	{		// Element Node.		case 1 :			// Here we found an element that is not the real element, but a 			// fake one (like the Flash placeholder image), so we must get the real one.			if ( htmlNode.getAttribute('_fckfakelement') )				return FCKXHtml._AppendNode( xmlNode, FCK.GetRealElement( htmlNode ) ) ;					// Mozilla insert custom nodes in the DOM.			if ( FCKBrowserInfo.IsGecko && htmlNode.hasAttribute('_moz_editor_bogus_node') )				return false ;						// This is for elements that are instrumental to FCKeditor and 			// must be removed from the final HTML.			if ( htmlNode.getAttribute('_fcktemp') )				return false ;			// Get the element name.			var sNodeName = htmlNode.nodeName ;						//Add namespace:			if ( FCKBrowserInfo.IsIE && htmlNode.scopeName && htmlNode.scopeName != 'HTML' && htmlNode.scopeName != 'FCK' )				sNodeName = htmlNode.scopeName + ':' + sNodeName ;			// Check if the node name is valid, otherwise ignore this tag.			// If the nodeName starts with a slash, it is a orphan closing tag.			// On some strange cases, the nodeName is empty, even if the node exists.			if ( !FCKRegexLib.ElementName.test( sNodeName ) )				return false ;			sNodeName = sNodeName.toLowerCase() ;			if ( FCKBrowserInfo.IsGecko && sNodeName == 'br' && htmlNode.hasAttribute('type') && htmlNode.getAttribute( 'type', 2 ) == '_moz' )				return false ;			// The already processed nodes must be marked to avoid then to be duplicated (bad formatted HTML).			// So here, the "mark" is checked... if the element is Ok, then mark it.			if ( htmlNode._fckxhtmljob && htmlNode._fckxhtmljob == FCKXHtml.CurrentJobNum )				return false ;			var oNode = this._CreateNode( sNodeName ) ;						// Add all attributes.			FCKXHtml._AppendAttributes( xmlNode, htmlNode, oNode, sNodeName ) ;						htmlNode._fckxhtmljob = FCKXHtml.CurrentJobNum ;			// Tag specific processing.			var oTagProcessor = FCKXHtml.TagProcessors[ sNodeName ] ;			if ( oTagProcessor )			{				oNode = oTagProcessor( oNode, htmlNode, xmlNode ) ;				if ( !oNode ) break ;			}			else				this._AppendChildNodes( oNode, htmlNode, FCKRegexLib.BlockElements.test( sNodeName ) ) ;			xmlNode.appendChild( oNode ) ;			break ;		// Text Node.		case 3 :			this._AppendTextNode( xmlNode, htmlNode.nodeValue.replaceNewLineChars(' ') ) ;			break ;		// Comment		case 8 :			// IE catches the <!DOTYPE ... > as a comment, but it has no			// innerHTML, so we can catch it, and ignore it.			if ( FCKBrowserInfo.IsIE && !htmlNode.innerHTML )				break ;			try { xmlNode.appendChild( this.XML.createComment( htmlNode.nodeValue ) ) ; }			catch (e) { /* Do nothing... probably this is a wrong format comment. */ }			break ;		// Unknown Node type.		default :			xmlNode.appendChild( this.XML.createComment( "Element not supported - Type: " + htmlNode.nodeType + " Name: " + htmlNode.nodeName ) ) ;			break ;	}	return true ;}
meta: 8533	/local1/tlutelli/issta_data/temp/all_js/javascript/2007_temp/2007/8533/30774da157017224af5d9a1b55d04bf21f55a840/fckxhtml.js/clean/library/src/webapp/editor/FCKeditor/editor/_source/internals/fckxhtml.js