Ticket #7694: 7694.patch

File 7694.patch, 1.7 KB (added by Garry Yao, 10 years ago)
  • _source/plugins/styles/plugin.js

     
    866866                if ( this._.enterMode )
    867867                        iterator.enlargeBr = ( this._.enterMode != CKEDITOR.ENTER_BR );
    868868
    869                 var block;
    870                 var doc = range.document;
    871                 var previousPreBlock;
     869                var block,
     870                        doc = range.document,
     871                        db = doc.getCustomData( 'style_processed' );
    872872
    873                 while ( ( block = iterator.getNextParagraph() ) )               // Only one =
     873                while ( ( block = iterator.getNextParagraph() )
     874                        && !block.getCustomData( 'style_processed' ) )          // Only one =
    874875                {
    875876                        var newBlock = getElement( this, doc, block );
    876877                        replaceBlock( block, newBlock );
     878
     879                        // Mark this element as processed, not ot be re-applied by other ranges.
     880                        db && CKEDITOR.dom.element.setMarker( db, newBlock, 'style_processed', 1 );
    877881                }
    878882
    879883                range.moveToBookmark( bookmark );
     
    14971501        function applyStyle( document, remove )
    14981502        {
    14991503                var selection = document.getSelection(),
    1500                         ranges = selection.getRanges(),
     1504                        // Inline styles might be applicable to read-only elements. (#7694)
     1505                        ranges = selection.getRanges( this.type != CKEDITOR.STYLE_INLINE ),
    15011506                        func = remove ? this.removeFromRange : this.applyToRange,
    15021507                        range;
    15031508
     1509                document.setCustomData( 'style_processed', {} );
    15041510                var iterator = ranges.createIterator();
    15051511                while ( ( range = iterator.getNextRange() ) )
    15061512                        func.call( this, range );
     
    15081514                selection.selectRanges( ranges );
    15091515
    15101516                document.removeCustomData( 'doc_processing_style' );
     1517                CKEDITOR.dom.element.clearAllMarkers( document.removeCustomData( 'style_processed' ) );
    15111518        }
    15121519})();
    15131520
© 2003 – 2021 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy