Index: /FCKeditor/trunk/editor/_source/commandclasses/fckindentcommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fckindentcommands.js (revision 869)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fckindentcommands.js (revision 870)
@@ -272,5 +272,5 @@
// Clean up the markers.
- FCKDomTools.ClearElementMarkers( markerObj ) ;
+ FCKDomTools.ClearAllMarkers( markerObj ) ;
}
} ;
Index: /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js
===================================================================
--- /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js (revision 869)
+++ /FCKeditor/trunk/editor/_source/commandclasses/fcklistcommands.js (revision 870)
@@ -156,7 +156,7 @@
// For all new lists created, merge adjacent, same type lists.
- while ( listsCreated.length > 0 )
- {
- var listNode = listsCreated.shift() ;
+ for ( var i = 0 ; i < listsCreated.length ; i++ )
+ {
+ var listNode = listsCreated[i] ;
var stopFlag = false ;
var currentNode = listNode ;
@@ -164,5 +164,5 @@
{
currentNode = currentNode.nextSibling ;
- if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+ if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
continue ;
stopFlag = true ;
@@ -175,8 +175,25 @@
listNode.appendChild( currentNode.removeChild( currentNode.firstChild ) ) ;
}
+
+ stopFlag = false ;
+ currentNode = listNode ;
+ while ( ! stopFlag )
+ {
+ currentNode = currentNode.previousSibling ;
+ if ( currentNode && currentNode.nodeType == 3 && currentNode.nodeValue.search( /^[\n\r\t ]*$/ ) == 0 )
+ continue ;
+ stopFlag = true ;
+ }
+ if ( currentNode && currentNode.nodeName.IEquals( this.TagName ) )
+ {
+ currentNode.parentNode.removeChild( currentNode ) ;
+ while ( currentNode.lastChild )
+ listNode.insertBefore( currentNode.removeChild( currentNode.lastChild ),
+ listNode.firstChild ) ;
+ }
}
// Clean up, restore selection and update toolbar button states.
- FCKDomTools.ClearElementMarkers( markerObj ) ;
+ FCKDomTools.ClearAllMarkers( markerObj ) ;
range.MoveToBookmark( bookmark ) ;
range.Select() ;
@@ -208,5 +225,5 @@
listArray[listIndex].parent = fakeParent ;
}
- var newList = FCKDomTools.ArrayToList( listArray ) ;
+ var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
if ( newList.listNode.lastChild.nodeName.IEquals( this.TagName) )
listsCreated.push( newList.listNode.lastChild ) ;
@@ -316,5 +333,5 @@
}
- var newList = FCKDomTools.ArrayToList( listArray ) ;
+ var newList = FCKDomTools.ArrayToList( listArray, markerObj ) ;
// If groupObj.root is the last element in its parent, or its nextSibling is a
, then we should
// not add a
after the final item. So, check for the cases and trim the
.
Index: /FCKeditor/trunk/editor/_source/internals/fckdomtools.js
===================================================================
--- /FCKeditor/trunk/editor/_source/internals/fckdomtools.js (revision 869)
+++ /FCKeditor/trunk/editor/_source/internals/fckdomtools.js (revision 870)
@@ -585,24 +585,30 @@
},
- SetElementMarker : function ( markObj, element, attrName, value)
+ SetElementMarker : function ( markerObj, element, attrName, value)
{
var id = String( parseInt( Math.random() * 0xfffffff, 10 ) ) ;
element._FCKMarkerId = id ;
element[attrName] = value ;
- if ( ! markObj[id] )
- markObj[id] = { 'element' : element, 'markers' : {} } ;
- markObj[id]['markers'][attrName] = value ;
- },
-
- ClearElementMarkers : function( markObj )
- {
- for ( var i in markObj )
- {
- var element = markObj[i]['element'] ;
- this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
- for ( var j in markObj[i]['markers'] )
- this.ClearElementJSProperty( element, j ) ;
- delete markObj[i] ;
- }
+ if ( ! markerObj[id] )
+ markerObj[id] = { 'element' : element, 'markers' : {} } ;
+ markerObj[id]['markers'][attrName] = value ;
+ },
+
+ ClearElementMarkers : function( markerObj, element, clearMarkerObj )
+ {
+ var id = element._FCKMarkerId ;
+ if ( ! id )
+ return ;
+ this.ClearElementJSProperty( element, '_FCKMarkerId' ) ;
+ for ( var j in markerObj[id]['markers'] )
+ this.ClearElementJSProperty( element, j ) ;
+ if ( clearMarkerObj )
+ delete markerObj[id] ;
+ },
+
+ ClearAllMarkers : function( markerObj )
+ {
+ for ( var i in markerObj )
+ this.ClearElementMarkers( markerObj, markerObj[i]['element'], true ) ;
},
@@ -652,5 +658,5 @@
// Convert our internal representation of a list back to a DOM forest.
- ArrayToList : function( listArray, baseIndex )
+ ArrayToList : function( listArray, markerObj, baseIndex )
{
if ( baseIndex == undefined )
@@ -682,5 +688,5 @@
else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
{
- var listData = this.ArrayToList( listArray, currentIndex ) ;
+ var listData = this.ArrayToList( listArray, null, currentIndex ) ;
currentListItem.appendChild( listData.listNode ) ;
currentIndex = listData.nextIndex ;
@@ -715,4 +721,17 @@
}
}
+
+ // Clear marker attributes for the new list tree made of cloned nodes, if any.
+ if ( markerObj )
+ {
+ var currentNode = retval.firstChild ;
+ while ( currentNode )
+ {
+ if ( currentNode.nodeType == 1 )
+ this.ClearElementMarkers( markerObj, currentNode ) ;
+ currentNode = this.GetNextSourceNode( currentNode ) ;
+ }
+ }
+
return { 'listNode' : retval, 'nextIndex' : currentIndex } ;
},