Ticket #6107: 6107_6.patch

File 6107_6.patch, 5.6 KB (added by Sa'ar Zac Elias, 10 years ago)
  • _source/core/dom/range.js

     
    11871187                                            blockBoundary,  // The node on which the enlarging should stop.
    11881188                                                tailBr, // In case BR as block boundary.
    11891189                                            notBlockBoundary = CKEDITOR.dom.walker.blockBoundary(
    1190                                                                 ( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ) ? { br : 1 } : null ),
     1190                                                                ( unit == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ) ? { br : 1 } : null, 1 ),
    11911191                                                // Record the encountered 'blockBoundary' for later use.
    11921192                                                boundaryGuard = function( node )
    11931193                                                {
  • _source/core/dom/walker.js

     
    345345                                || nodeNameMatches[ this.getName() ];
    346346        };
    347347
    348         CKEDITOR.dom.walker.blockBoundary = function( customNodeNames )
     348        CKEDITOR.dom.walker.blockBoundary = function( customNodeNames, isReject )
    349349        {
    350350                return function( node , type )
    351351                {
    352                         return ! ( node.type == CKEDITOR.NODE_ELEMENT
    353                                                 && node.isBlockBoundary( customNodeNames ) );
     352                        return !! ( isReject ^ ( node.type == CKEDITOR.NODE_ELEMENT
     353                                                && node.isBlockBoundary( customNodeNames ) ) );
    354354                };
    355355        };
    356356
    357         CKEDITOR.dom.walker.listItemBoundary = function()
     357        CKEDITOR.dom.walker.listItemBoundary = function( isReject )
    358358        {
    359                         return this.blockBoundary( { br : 1 } );
     359                return this.blockBoundary( { br : 1 }, isReject );
    360360        };
    361361
    362362        /**
  • _source/plugins/format/plugin.js

     
    5454                                        editor.focus();
    5555                                        editor.fire( 'saveSnapshot' );
    5656
    57                                         styles[ value ].apply( editor.document );
     57                                        var style = styles[ value ],
     58                                                elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() );
    5859
     60                                        style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document );
     61
    5962                                        // Save the undo snapshot after all changes are affected. (#4899)
    6063                                        setTimeout( function()
    6164                                        {
  • _source/plugins/styles/plugin.js

     
    149149                        return ( this.removeFromRange =
    150150                                                this.type == CKEDITOR.STYLE_INLINE ?
    151151                                                        removeInlineStyle
     152                                                : this.type == CKEDITOR.STYLE_BLOCK ?
     153                                                        removeBlockStyle
    152154                                                : this.type == CKEDITOR.STYLE_OBJECT ?
    153155                                                        removeObjectStyle
    154156                                                : null ).call( this, range );
     
    881883                range.moveToBookmark( bookmark );
    882884        }
    883885
     886        function removeBlockStyle( range )
     887        {
     888                // Serializible bookmarks is needed here since
     889                // elements may be merged.
     890                var bookmark = range.createBookmark( 1 );
     891
     892                var iterator = range.createIterator();
     893                iterator.enforceRealBlocks = true;
     894                iterator.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR;
     895
     896                var block;
     897                while ( ( block = iterator.getNextParagraph() ) )
     898                        this.checkElementRemovable( block ) && removeFromElement( this, block, 1 );
     899
     900                range.moveToBookmark( bookmark );
     901        }
     902
    884903        // Replace the original block with new one, with special treatment
    885904        // for <pre> blocks to make sure content format is well preserved, and merging/splitting adjacent
    886905        // when necessary.(#3188)
     
    10901109                        element.removeStyle( styleName );
    10911110                }
    10921111
    1093                 removeEmpty && removeNoAttribsElement( element );
     1112                if ( removeEmpty )
     1113                {
     1114                        CKEDITOR.dtd.$block[ element.getName() ] ?
     1115                                ( style._.enterMode == CKEDITOR.ENTER_BR && !element.hasAttributes() ?
     1116                                        blockToBrs( element ) :
     1117                                        element.renameNode( style._.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) )
     1118                                : removeNoAttribsElement( element );
     1119                }
    10941120        }
    10951121
    10961122        // Removes a style from inside an element.
     
    11861212                }
    11871213        }
    11881214
     1215        var nonWhitespaces = CKEDITOR.dom.walker.whitespaces( 1 );
     1216        function blockToBrs( block )
     1217        {
     1218                var previous = block.getPrevious( nonWhitespaces ),
     1219                        next = block.getNext( nonWhitespaces );
     1220
     1221                if ( previous && ( previous.type == CKEDITOR.NODE_TEXT || !previous.isBlockBoundary( { br : 1 } ) ) )
     1222                        block.append( 'br', 1 );
     1223                if ( next && ( next.type == CKEDITOR.NODE_TEXT || !next.isBlockBoundary( { br : 1 } ) ) )
     1224                        block.append( 'br' );
     1225
     1226                block.remove( 1 );
     1227        }
     1228
    11891229        function getElement( style, targetDocument, element )
    11901230        {
    11911231                var el;
     
    14361476
    14371477                var iterator = ranges.createIterator();
    14381478                while ( ( range = iterator.getNextRange() ) )
    1439                 {
    14401479                        func.call( this, range );
    1441                 }
    14421480
    14431481                selection.selectRanges( ranges );
    14441482
  • _source/plugins/stylescombo/plugin.js

     
    106106
    107107                                                var elementPath = new CKEDITOR.dom.elementPath( selection.getStartElement() );
    108108
    109                                                 if ( style.type == CKEDITOR.STYLE_INLINE && style.checkActive( elementPath ) )
    110                                                         style.remove( editor.document );
    111                                                 else if ( style.type == CKEDITOR.STYLE_OBJECT && style.checkActive( elementPath ) )
    112                                                         style.remove( editor.document );
    113                                                 else
    114                                                         style.apply( editor.document );
     109                                                style[ style.checkActive( elementPath ) ? 'remove' : 'apply' ]( editor.document );
    115110
    116111                                                editor.fire( 'saveSnapshot' );
    117112                                        },
© 2003 – 2021 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy