Ticket #4950: 4950.patch

File 4950.patch, 3.2 KB (added by Garry Yao, 9 years ago)
  • _source/plugins/list/plugin.js

     
    2929                        if ( !baseArray )
    3030                                baseArray = [];
    3131
    32                         // Iterate over all list items to get their contents and look for inner lists.
     32                        // Iterate over all list items to and look for inner lists.
    3333                        for ( var i = 0, count = listNode.getChildCount() ; i < count ; i++ )
    3434                        {
    3535                                var listItem = listNode.getChild( i );
     
    3737                                // It may be a text node or some funny stuff.
    3838                                if ( listItem.$.nodeName.toLowerCase() != 'li' )
    3939                                        continue;
    40                                 var itemObj = { 'parent' : listNode, indent : baseIndentLevel, contents : [] };
     40
     41                                var itemObj = { 'parent' : listNode, indent : baseIndentLevel, element : listItem };
    4142                                if ( !grandparentNode )
    4243                                {
    4344                                        itemObj.grandparent = listNode.getParent();
     
    5152                                        CKEDITOR.dom.element.setMarker( database, listItem, 'listarray_index', baseArray.length );
    5253                                baseArray.push( itemObj );
    5354
    54                                 for ( var j = 0, itemChildCount = listItem.getChildCount() ; j < itemChildCount ; j++ )
     55                                for ( var j = 0, itemChildCount = listItem.getChildCount(), child; j < itemChildCount ; j++ )
    5556                                {
    56                                         var child = listItem.getChild( j );
     57                                        child = listItem.getChild( j );
     58                                        // Push inner list items with +1 indentation in the correct order.
    5759                                        if ( child.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ child.getName() ] )
    58                                                 // Note the recursion here, it pushes inner list items with
    59                                                 // +1 indentation in the correct order.
    6060                                                CKEDITOR.plugins.list.listToArray( child, database, baseArray, baseIndentLevel + 1, itemObj.grandparent );
    61                                         else
    62                                                 itemObj.contents.push( child );
    6361                                }
    6462                        }
    6563                        return baseArray;
     
    8987                                                rootNode = listArray[ currentIndex ].parent.clone( false, true );
    9088                                                retval.append( rootNode );
    9189                                        }
    92                                         currentListItem = rootNode.append( doc.createElement( 'li' ) );
    93                                         for ( var i = 0 ; i < item.contents.length ; i++ )
    94                                                 currentListItem.append( item.contents[i].clone( true, true ) );
     90                                        currentListItem = rootNode.append( item.element );
    9591                                        currentIndex++;
    9692                                }
    9793                                else if ( item.indent == Math.max( indentLevel, 0 ) + 1 )
     
    104100                                {
    105101                                        currentListItem;
    106102                                        if ( listNodeNames[ item.grandparent.getName() ] )
    107                                                 currentListItem = doc.createElement( 'li' );
     103                                                currentListItem = item.element;
    108104                                        else
    109105                                        {
     106                                                // Create completely new blocks here, attributes are dropped.
    110107                                                if ( paragraphMode != CKEDITOR.ENTER_BR && item.grandparent.getName() != 'td' )
    111108                                                        currentListItem = doc.createElement( paragraphName );
    112109                                                else
    113110                                                        currentListItem = new CKEDITOR.dom.documentFragment( doc );
    114111                                        }
    115112
    116                                         for ( i = 0 ; i < item.contents.length ; i++ )
    117                                                 currentListItem.append( item.contents[i].clone( true, true ) );
     113                                        item.element.moveChildren( currentListItem );
    118114
    119115                                        if ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT
    120116                                                 && currentIndex != listArray.length - 1 )
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy