1 /*
  2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
  3 For licensing, see LICENSE.html or http://ckeditor.com/license
  4 */
  5
  6 CKEDITOR.command = function( editor, commandDefinition )
  7 {
  8 	this.exec = function( data )
  9 	{
 10 		if ( this.state == CKEDITOR.TRISTATE_DISABLED )
 11 			return false;
 12
 13 		// The editor will always have the focus when executing a command.
 14 		editor.focus();
 15
 16 		return ( commandDefinition.exec.call( this, editor, data ) !== false );
 17 	};
 18
 19 	CKEDITOR.tools.extend( this, commandDefinition,
 20 		// Defaults
 21 		{
 22 			modes : { wysiwyg : 1 },
 23 			state : CKEDITOR.TRISTATE_OFF
 24 		});
 25
 26 	// Call the CKEDITOR.event constructor to initialize this instance.
 27 	CKEDITOR.event.call( this );
 28 };
 29
 30 CKEDITOR.command.prototype =
 31 {
 32 	enable : function()
 33 	{
 34 		if ( this.state == CKEDITOR.TRISTATE_DISABLED )
 35 			this.setState( ( !this.preserveState || ( typeof this.previousState == 'undefined' ) ) ? CKEDITOR.TRISTATE_OFF : this.previousState );
 36 	},
 37
 38 	disable : function()
 39 	{
 40 		this.setState( CKEDITOR.TRISTATE_DISABLED );
 41 	},
 42
 43 	setState : function( newState )
 44 	{
 45 		// Do nothing if there is no state change.
 46 		if ( this.state == newState )
 47 			return false;
 48
 49 		this.previousState = this.state;
 50
 51 		// Set the new state.
 52 		this.state = newState;
 53
 54 		// Fire the "state" event, so other parts of the code can react to the
 55 		// change.
 56 		this.fire( 'state' );
 57
 58 		return true;
 59 	},
 60
 61 	toggleState : function()
 62 	{
 63 		if ( this.state == CKEDITOR.TRISTATE_OFF )
 64 			this.setState( CKEDITOR.TRISTATE_ON );
 65 		else if ( this.state == CKEDITOR.TRISTATE_ON )
 66 			this.setState( CKEDITOR.TRISTATE_OFF );
 67 	}
 68 };
 69
 70 CKEDITOR.event.implementOn( CKEDITOR.command.prototype, true );
 71