Ticket #3256: 3256_5.patch

File 3256_5.patch, 4.2 KB (added by Garry Yao, 10 years ago)
  • _source/plugins/justify/plugin.js

     
    6666        justifyCommand.prototype = {
    6767                exec : function( editor )
    6868                {
    69                         var selection = editor.getSelection(),
    70                                 range = selection && selection.getRanges()[0];
    71 
    72                         if ( !range )
     69                        var selection = editor.getSelection();
     70                        if ( !selection )
    7371                                return;
    74 
     72                       
    7573                        var bookmarks = selection.createBookmarks(),
    76                                 cssClassName = this.cssClassName,
    77                                 iterator = range.createIterator(),
    78                                 block;
     74                                ranges = selection.getRanges();
    7975
    80                         while ( ( block = iterator.getNextParagraph() ) )
    81                         {
    82                                 block.removeAttribute( 'align' );
    83 
    84                                 if ( cssClassName )
    85                                 {
    86                                         // Remove any of the alignment classes from the className.
    87                                         var className = block.$.className =
    88                                                 CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) );
    89 
    90                                         // Append the desired class name.
    91                                         if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )
    92                                                 block.addClass( cssClassName );
    93                                         else if ( !className )
    94                                                 block.removeAttribute( 'class' );
    95                                 }
    96                                 else
    97                                 {
    98                                         if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )
    99                                                 block.setStyle( 'text-align', this.value );
    100                                         else
    101                                                 block.removeStyle( 'text-align' );
    102                                 }
    103                         }
    104 
     76
     77                        var cssClassName = this.cssClassName,
     78                                iterator,
     79                                block;
     80                        for ( var i = ranges.length-1 ; i >= 0 ; i-- ) {
     81                                iterator = ranges[ i ].createIterator();
     82                                while ( ( block = iterator.getNextParagraph() ) )
     83                                {
     84                                        block.removeAttribute( 'align' );
     85       
     86                                        if ( cssClassName )
     87                                        {
     88                                                // Remove any of the alignment classes from the className.
     89                                                var className = block.$.className =
     90                                                        CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) );
     91       
     92                                                // Append the desired class name.
     93                                                if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )
     94                                                        block.addClass( cssClassName );
     95                                                else if ( !className )
     96                                                        block.removeAttribute( 'class' );
     97                                        }
     98                                        else
     99                                        {
     100                                                if ( this.state == CKEDITOR.TRISTATE_OFF && !this.isDefaultAlign )
     101                                                        block.setStyle( 'text-align', this.value );
     102                                                else
     103                                                        block.removeStyle( 'text-align' );
     104                                        }
     105                                }
     106                               
     107                        }
     108
    105109                        editor.focus();
    106110                        editor.forceNextSelectionCheck();
    107111                        selection.selectBookmarks( bookmarks );
  • _source/plugins/selection/plugin.js

     
    869869                createBookmarks : function( serializable )
    870870                {
    871871                        var retval = [],
    872                                 ranges = this.getRanges();
    873                         for ( var i = 0 ; i < ranges.length ; i++ )
    874                                 retval.push( ranges[i].createBookmark( serializable ) );
     872                                ranges = this.getRanges(),
     873                                length = ranges.length,
     874                                bookmark;
     875                        for ( var i = 0; i < length ; i++ )
     876                        {
     877                            retval.push( bookmark = ranges[ i ].createBookmark( serializable, true ) );
     878
     879                                var serializable = bookmark.serializable,
     880                                        bookmarkStart = serializable ?
     881                                                this.document.getById( bookmark.startNode )
     882                                                : bookmark.startNode,
     883                                        bookmarkEnd = serializable ?
     884                                          this.document.getById( bookmark.endNode )
     885                                          : bookmark.endNode;
     886
     887                            // Updating the offset values for rest of ranges which have been mangled(#3256).
     888                            for ( var j = i + 1 ; j < length ; j++ )
     889                            {
     890                                var dirtyRange = ranges[ j ],
     891                                       rangeStart = dirtyRange.startContainer,
     892                                       rangeEnd = dirtyRange.endContainer;
     893
     894                               rangeStart.equals( bookmarkStart.getParent() ) && dirtyRange.startOffset++;
     895                               rangeStart.equals( bookmarkEnd.getParent() ) && dirtyRange.startOffset++;
     896                               rangeEnd.equals( bookmarkStart.getParent() ) && dirtyRange.endOffset++;
     897                               rangeEnd.equals( bookmarkEnd.getParent() ) && dirtyRange.endOffset++;
     898                            }
     899                        }
     900
    875901                        return retval;
    876902                },
    877903
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy