currentIndex = baseIndex,\r
indentLevel = Math.max( listArray[ baseIndex ].indent, 0 ),\r
currentListItem = null,\r
- itemDir,\r
+ orgDir,\r
paragraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' );\r
while ( 1 )\r
{\r
var item = listArray[ currentIndex ];\r
+\r
+ orgDir = item.element.getDirection( 1 );\r
+\r
if ( item.indent == indentLevel )\r
{\r
if ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() )\r
retval.append( rootNode );\r
}\r
currentListItem = rootNode.append( item.element.clone( 0, 1 ) );\r
+\r
+ if ( orgDir != rootNode.getDirection( 1 ) )\r
+ currentListItem.setAttribute( 'dir', orgDir );\r
+ else\r
+ currentListItem.removeAttribute( 'dir' );\r
+\r
for ( var i = 0 ; i < item.contents.length ; i++ )\r
currentListItem.append( item.contents[i].clone( 1, 1 ) );\r
currentIndex++;\r
else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )\r
{\r
// Maintain original direction (#6861).\r
- var orgDir = item.element.getDirection( 1 ),\r
- currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ),\r
+ var currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ),\r
listData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode,\r
currDir != orgDir ? orgDir: null );\r
\r
else if ( item.indent == -1 && !baseIndex && item.grandparent )\r
{\r
if ( listNodeNames[ item.grandparent.getName() ] )\r
- {\r
currentListItem = item.element.clone( false, true );\r
- itemDir = item.element.getDirection( 1 );\r
- item.grandparent.getDirection( 1 ) != itemDir &&\r
- currentListItem.setAttribute( 'dir', itemDir );\r
- }\r
else\r
{\r
// Create completely new blocks here.\r
{\r
currentListItem = doc.createElement( paragraphName );\r
item.element.copyAttributes( currentListItem, { type:1, value:1 } );\r
- itemDir = item.element.getDirection() || dir;\r
- itemDir &&\r
- currentListItem.setAttribute( 'dir', itemDir );\r
\r
// There might be a case where there are no attributes in the element after all\r
// (i.e. when "type" or "value" are the only attributes set). In this case, if enterMode = BR,\r
currentListItem = new CKEDITOR.dom.documentFragment( doc );\r
}\r
\r
+ if ( currentListItem.type == CKEDITOR.NODE_ELEMENT )\r
+ {\r
+ if ( item.grandparent.getDirection( 1 ) != orgDir )\r
+ currentListItem.setAttribute( 'dir', orgDir );\r
+ else\r
+ currentListItem.removeAttribute( 'dir' );\r
+ }\r
+\r
for ( i = 0 ; i < item.contents.length ; i++ )\r
currentListItem.append( item.contents[i].clone( 1, 1 ) );\r
\r
contentBlock.appendTo( listItem );\r
else\r
{\r
- // Remove DIR attribute if it was merged into list root.\r
+ contentBlock.copyAttributes( listItem );\r
+ // Remove direction attribute after it was merged into list root. (#7657)\r
if ( listDir && contentBlock.getDirection() )\r
{\r
- contentBlock.removeStyle( 'direction' );\r
- contentBlock.removeAttribute( 'dir' );\r
+ listItem.removeStyle( 'direction' );\r
+ listItem.removeAttribute( 'dir' );\r
}\r
-\r
- contentBlock.copyAttributes( listItem );\r
contentBlock.moveChildren( listItem );\r
contentBlock.remove();\r
}\r