      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 /**
      7  * Contains UI features related to an editor instance.
      8  * @constructor
      9  * @param {CKEDITOR.editor} editor The editor instance.
     10  * @example
     11  */
     12 CKEDITOR.ui = function( editor )
     13 {
     14 	if ( editor.ui )
     15 		return editor.ui;
     16
     17 	/**
     18 	 * Object used to hold private stuff.
     19 	 * @private
     20 	 */
     21 	this._ =
     22 	{
     23 		handlers : {},
     24 		items : {}
     25 	};
     26
     27 	return this;
     28 };
     29
     30 // PACKAGER_RENAME( CKEDITOR.ui )
     31
     32 CKEDITOR.ui.prototype =
     33 {
     34 	/**
     35 	 * Adds a UI item to the items collection. These items can be later used in
     36 	 * the interface.
     37 	 * @param {String} name The UI item name.
     38 	 * @param {Object} type The item type.
     39 	 * @param {Object} definition The item definition. The properties of this
     40 	 *		object depend on the item type.
     41 	 * @example
     42 	 * // Add a new button named "MyBold".
     43 	 * editorInstance.ui.add( 'MyBold', CKEDITOR.UI_BUTTON,
     44 	 *     {
     45 	 *         label : 'My Bold',
     46 	 *         command : 'bold'
     47 	 *     });
     48 	 */
     49 	add : function( name, type, definition )
     50 	{
     51 		this._.items[ name ] =
     52 		{
     53 			type : type,
     54 			args : Array.prototype.slice.call( arguments, 2 )
     55 		};
     56 	},
     57
     58 	/**
     59 	 * Gets a UI object.
     60 	 * @param {String} name The UI item hame.
     61 	 * @example
     62 	 */
     63 	create : function( name )
     64 	{
     65 		var item	= this._.items[ name ],
     66 			handler	= item && this._.handlers[ item.type ];
     67
     68 		return handler && handler.create.apply( this, item.args );
     69 	},
     70
     71 	/**
     72 	 * Adds a handler for a UI item type. The handler is responsible for
     73 	 * transforming UI item definitions in UI objects.
     74 	 * @param {Object} type The item type.
     75 	 * @param {Object} handler The handler definition.
     76 	 * @example
     77 	 */
     78 	addHandler : function( type, handler )
     79 	{
     80 		this._.handlers[ type ] = handler;
     81 	}
     82 };
     83
     84 /**
     85  * (Virtual Class) Do not call this constructor. This class is not really part
     86  *		of the API. It just illustrates the features of hanlder objects to be
     87  *		passed to the {@link CKEDITOR.ui.prototype.addHandler} function.
     88  * @name CKEDITOR.ui.handlerDefinition
     89  * @constructor
     90  * @example
     91  */
     92
     93  /**
     94  * Transforms an item definition into an UI item object.
     95  * @name CKEDITOR.handlerDefinition.prototype.create
     96  * @function
     97  * @param {Object} definition The item definition.
     98  * @example
     99  * editorInstance.ui.addHandler( CKEDITOR.UI_BUTTON,
    100  *     {
    101  *         create : function( definition )
    102  *         {
    103  *             return new CKEDITOR.ui.button( definition );
    104  *         }
    105  *     });
    106  */
    107