X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Fundo%2Fplugin.js;h=e843d2360710aa1d7ac759e3bed73af0fed8b0d7;hb=c6e377a02b54abc07129d72b632763c727476a15;hp=fcdd2a4e4803d853e79fc8963cb9f6542208cc81;hpb=7cd80714081a8ffdf4a1a8d2c72f120ed5ef3d6d;p=ckeditor.git diff --git a/_source/plugins/undo/plugin.js b/_source/plugins/undo/plugin.js index fcdd2a4..e843d23 100644 --- a/_source/plugins/undo/plugin.js +++ b/_source/plugins/undo/plugin.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ @@ -120,14 +120,14 @@ For licensing, see LICENSE.html or http://ckeditor.com/license // Gets a snapshot image which represent the current document status. function Image( editor ) { - var selection = editor.getSelection(); - - this.contents = editor.getSnapshot(); - this.bookmarks = selection && selection.createBookmarks2( true ); + var contents = editor.getSnapshot(), + selection = contents && editor.getSelection(); // In IE, we need to remove the expando attributes. - if ( CKEDITOR.env.ie ) - this.contents = this.contents.replace( /\s+_cke_expando=".*?"/g, '' ); + CKEDITOR.env.ie && contents && ( contents = contents.replace( /\s+_cke_expando=".*?"/g, '' ) ); + + this.contents = contents; + this.bookmarks = selection && selection.createBookmarks2( true ); } // Attributes that browser may changing them when setting via innerHTML. @@ -141,13 +141,13 @@ For licensing, see LICENSE.html or http://ckeditor.com/license otherContents = otherImage.contents; // For IE6/7 : Comparing only the protected attribute values but not the original ones.(#4522) - if( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) + if ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) ) { thisContents = thisContents.replace( protectedAttrs, '' ); otherContents = otherContents.replace( protectedAttrs, '' ); } - if( thisContents != otherContents ) + if ( thisContents != otherContents ) return false; if ( contentOnly ) @@ -242,6 +242,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license if ( beforeTypeImage.contents != currentSnapshot ) { + // It's safe to now indicate typing state. + this.typing = true; + // This's a special save, with specified snapshot // and without auto 'fireChange'. if ( !this.save( false, beforeTypeImage, false ) ) @@ -263,9 +266,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license this.lastKeystroke = keystroke; - // Ignore modifier keys. (#4673) - if( isModifierKey ) - return; // Create undo snap after typed too much (over 25 times). if ( isEditingKey ) { @@ -274,7 +274,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license if ( this.modifiersCount > 25 ) { - this.save(); + this.save( false, null, false ); this.modifiersCount = 1; } } @@ -285,12 +285,11 @@ For licensing, see LICENSE.html or http://ckeditor.com/license if ( this.typesCount > 25 ) { - this.save(); + this.save( false, null, false ); this.typesCount = 1; } } - this.typing = true; }, reset : function() // Reset the undo stack. @@ -352,6 +351,10 @@ For licensing, see LICENSE.html or http://ckeditor.com/license if ( !image ) image = new Image( this.editor ); + // Do nothing if it was not possible to retrieve an image. + if ( image.contents === false ) + return false; + // Check if this is a duplicate. In such case, do nothing. if ( this.currentImage && image.equals( this.currentImage, onContentOnly ) ) return false; @@ -391,7 +394,10 @@ For licensing, see LICENSE.html or http://ckeditor.com/license this.index = image.index; - this.currentImage = image; + // Update current image with the actual editor + // content, since actualy content may differ from + // the original snapshot due to dom change. (#4622) + this.snapshots.splice( this.index, 1, ( this.currentImage = new Image( this.editor ) ) ); this.fireChange(); }, @@ -504,3 +510,10 @@ For licensing, see LICENSE.html or http://ckeditor.com/license * config.undoStackSize = 50; */ CKEDITOR.config.undoStackSize = 20; + +/** + * Fired when the editor is about to save an undo snapshot. This event can be + * fired by plugins and customizations to make the editor saving undo snapshots. + * @name CKEDITOR.editor#saveSnapshot + * @event + */