JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.1
[ckeditor.git] / _source / plugins / list / plugin.js
index be10d0d..bc28e51 100644 (file)
@@ -87,11 +87,14 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                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
@@ -101,6 +104,12 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                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
@@ -108,8 +117,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                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
@@ -124,12 +132,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                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
@@ -137,9 +140,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                {\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
@@ -151,6 +151,14 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                        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
@@ -363,14 +371,13 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                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