public/ckeditor/4.4dev/plugins/undo/plugin.js
function( onContentOnly, image, autoFireChange ) {
			var editor = this.editor;
			// Do not change snapshots stack when locked, editor is not ready,
			// editable is not ready or when editor is in mode difference than 'wysiwyg'.
			if ( this.locked || editor.status != 'ready' || editor.mode != 'wysiwyg' )
				return false;

			var editable = editor.editable();
			if ( !editable || editable.status != 'ready' )
				return false;

			var snapshots = this.snapshots;

			// Get a content image.
			if ( !image )
				image = new Image( 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 ) {
				if ( image.equalsContent( this.currentImage ) ) {
					if ( onContentOnly )
						return false;

					if ( image.equalsSelection( this.currentImage ) )
						return false;
				} else if ( autoFireChange !== false ) {
					editor.fire( 'change' );
				}
			}

			// Drop future snapshots.
			snapshots.splice( this.index + 1, snapshots.length - this.index - 1 );

			// If we have reached the limit, remove the oldest one.
			if ( snapshots.length == this.limit )
				snapshots.shift();

			// Add the new image, updating the current index.
			this.index = snapshots.push( image ) - 1;

			this.currentImage = image;

			if ( autoFireChange !== false )
				this.refreshState();
			return true;
		}
function( onContentOnly, image, autoFireChange ) {
			var editor = this.editor;
			// Do not change snapshots stack when locked, editor is not ready,
			// editable is not ready or when editor is in mode difference than 'wysiwyg'.
			if ( this.locked || editor.status != 'ready' || editor.mode != 'wysiwyg' )
				return false;

			var editable = editor.editable();
			if ( !editable || editable.status != 'ready' )
				return false;

			var snapshots = this.snapshots;

			// Get a content image.
			if ( !image )
				image = new Image( 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 ) {
				if ( image.equalsContent( this.currentImage ) ) {
					if ( onContentOnly )
						return false;

					if ( image.equalsSelection( this.currentImage ) )
						return false;
				} else if ( autoFireChange !== false ) {
					editor.fire( 'change' );
				}
			}

			// Drop future snapshots.
			snapshots.splice( this.index + 1, snapshots.length - this.index - 1 );

			// If we have reached the limit, remove the oldest one.
			if ( snapshots.length == this.limit )
				snapshots.shift();

			// Add the new image, updating the current index.
			this.index = snapshots.push( image ) - 1;

			this.currentImage = image;

			if ( autoFireChange !== false )
				this.refreshState();
			return true;
		}
function ( onContentOnly , image , autoFireChange ) { var editor = this . editor ; // Do not change snapshots stack when locked, editor is not ready,
 // editable is not ready or when editor is in mode difference than 'wysiwyg'.
 if ( this . locked || editor . status != 'ready' || editor . mode != 'wysiwyg' ) return false ; var editable = editor . editable ( ) ; if ( ! editable || editable . status != 'ready' ) return false ; var snapshots = this . snapshots ; // Get a content image.
 if ( ! image ) image = new Image ( 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 ) { if ( image . equalsContent ( this . currentImage ) ) { if ( onContentOnly ) return false ; if ( image . equalsSelection ( this . currentImage ) ) return false ; } else if ( autoFireChange !== false ) { editor . fire ( 'change' ) ; } } // Drop future snapshots.
 snapshots . splice ( this . index + 1 , snapshots . length - this . index - 1 ) ; // If we have reached the limit, remove the oldest one.
 if ( snapshots . length == this . limit ) snapshots . shift ( ) ; // Add the new image, updating the current index.
 this . index = snapshots . push ( image ) - 1 ; this . currentImage = image ; if ( autoFireChange !== false ) this . refreshState ( ) ; return true ; }
Saves a snapshot of the document image for later retrieval.

@param {Boolean} onContentOnly If set to `true`, the snapshot will be saved only if the content has changed.
@param {CKEDITOR.plugins.undo.Image} image An optional image to save. If skipped, current editor will be used.
@param {Boolean} autoFireChange If set to `false`, will not trigger the {@link CKEDITOR.editor#change} event to editor.
Saves a snapshot of the document image for later retrieval .