Changeset 3734


Ignore:
Timestamp:
06/22/2009 10:39:04 AM (6 years ago)
Author:
garry.yao
Message:

Fixing #3790: Enhance 'replace all' performance by turnning highlight and snapshot off for each individual replacement.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • CKEditor/trunk/_source/plugins/find/dialogs/find.js

    r3712 r3734  
    215215                        {
    216216                                this._.isMatched = true;
    217                                 this.highlight();
    218217                        },
    219218
     
    221220                        {
    222221                                this._.isMatched = false;
    223                                 this.removeHighlight();
    224222                        },
    225223
     
    428426                        searchRange : null,
    429427                        matchRange : null,
    430                         find : function( pattern, matchCase, matchWord, matchCyclic )
     428                        find : function( pattern, matchCase, matchWord, matchCyclic, highlightMatched )
    431429                        {
    432430                                if( !this.matchRange )
     
    472470                                                                continue;
    473471                                                }
    474 
    475472                                                this.matchRange.setMatched();
     473                                                if ( highlightMatched !== false )
     474                                                        this.matchRange.highlight();
    476475                                                return true;
    477476                                        }
     
    497496
    498497                        replace : function( dialog, pattern, newString, matchCase, matchWord,
    499                                 matchCyclic, matchReplaceAll )
     498                                matchCyclic , isReplaceAll )
    500499                        {
    501500                                // Successiveness of current replace/find.
     
    511510                                        var domRange = this.matchRange.toDomRange();
    512511                                        var text = editor.document.createText( newString );
    513 
    514                                         // Save undo snaps before and after the replacement.
    515                                         var selection = editor.getSelection();
    516                                         selection.selectRanges( [ domRange ] );
    517                                         editor.fire( 'saveSnapshot' );
    518 
     512                                        if ( !isReplaceAll )
     513                                        {
     514                                                // Save undo snaps before and after the replacement.
     515                                                var selection = editor.getSelection();
     516                                                selection.selectRanges( [ domRange ] );
     517                                                editor.fire( 'saveSnapshot' );
     518                                        }
    519519                                        domRange.deleteContents();
    520520                                        domRange.insertNode( text );
    521 
    522                                         selection.selectRanges( [ domRange ] );
    523                                         editor.fire( 'saveSnapshot' );
    524 
     521                                        if ( !isReplaceAll )
     522                                        {
     523                                                selection.selectRanges( [ domRange ] );
     524                                                editor.fire( 'saveSnapshot' );
     525                                        }
    525526                                        this.matchRange.updateFromDomRange( domRange );
    526                                         this.matchRange.highlight();
     527                                        if ( !isReplaceAll )
     528                                                this.matchRange.highlight();
    527529                                        this.matchRange._.isReplaced = true;
    528530                                        this.replaceCounter++;
     
    530532                                }
    531533                                else
    532                                         result = this.find( pattern, matchCase, matchWord, matchCyclic );
    533 
    534                                 // Recusively replace all matches.
    535                                 if ( matchReplaceAll && result )
    536                                         this.replace.apply( this, Array.prototype.slice.call( arguments ) );
    537 
    538                                 return matchReplaceAll ?
    539                                         this.replaceCounter : result;
     534                                        result = this.find( pattern, matchCase, matchWord, matchCyclic, !isReplaceAll );
     535
     536                                return result;
    540537                        }
    541538                };
     
    703700                                                                                // Scope to full document.
    704701                                                                                finder.searchRange = getSearchRange( true );
    705                                                                                 finder.matchRange = null;
    706                                                                                 if ( ( replaceNums = finder.replace( dialog,
     702                                                                                if ( finder.matchRange )
     703                                                                                {
     704                                                                                        finder.matchRange.removeHighlight();
     705                                                                                        finder.matchRange = null;
     706                                                                                }
     707                                                                                editor.fire( 'saveSnapshot' );
     708                                                                                while( finder.replace( dialog,
    707709                                                                                        dialog.getValueOf( 'replace', 'txtFindReplace' ),
    708710                                                                                        dialog.getValueOf( 'replace', 'txtReplace' ),
    709711                                                                                        dialog.getValueOf( 'replace', 'txtReplaceCaseChk' ),
    710712                                                                                        dialog.getValueOf( 'replace', 'txtReplaceWordChk' ),
    711                                                                                         false, true ) ) )
    712                                                                                         alert( editor.lang.findAndReplace.replaceSuccessMsg.replace( /%1/, replaceNums ) );
     713                                                                                        false, true ) )
     714                                                                                ;
     715
     716                                                                                if ( finder.replaceCounter )
     717                                                                                {
     718                                                                                        alert( editor.lang.findAndReplace.replaceSuccessMsg.replace( /%1/, finder.replaceCounter ) );
     719                                                                                        editor.fire( 'saveSnapshot' );
     720                                                                                }
    713721                                                                                else
    714722                                                                                        alert( editor.lang.findAndReplace.notFoundMsg );
Note: See TracChangeset for help on using the changeset viewer.
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy