JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.3
[ckeditor.git] / _source / core / ui.js
index 1d152e2..085815c 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -21,7 +21,8 @@ CKEDITOR.ui = function( editor )
        this._ =\r
        {\r
                handlers : {},\r
-               items : {}\r
+               items : {},\r
+               editor : editor\r
        };\r
 \r
        return this;\r
@@ -51,6 +52,8 @@ CKEDITOR.ui.prototype =
                this._.items[ name ] =\r
                {\r
                        type : type,\r
+                       // The name of {@link CKEDITOR.command} which associate with this UI.\r
+                       command : definition.command || null,\r
                        args : Array.prototype.slice.call( arguments, 2 )\r
                };\r
        },\r
@@ -63,9 +66,19 @@ CKEDITOR.ui.prototype =
        create : function( name )\r
        {\r
                var item        = this._.items[ name ],\r
-                       handler = item && this._.handlers[ item.type ];\r
+                       handler = item && this._.handlers[ item.type ],\r
+                       command = item && item.command && this._.editor.getCommand( item.command );\r
 \r
-               return handler && handler.create.apply( this, item.args );\r
+               var result = handler && handler.create.apply( this, item.args );\r
+\r
+               // Allow overrides from skin ui definitions..\r
+               item && ( result = CKEDITOR.tools.extend( result, this._.editor.skin[ item.type ], true ) );\r
+\r
+               // Add reference inside command object.\r
+               if ( command )\r
+                       command.uiItems.push( result );\r
+\r
+               return result;\r
        },\r
 \r
        /**\r
@@ -81,6 +94,8 @@ CKEDITOR.ui.prototype =
        }\r
 };\r
 \r
+CKEDITOR.event.implementOn( CKEDITOR.ui );\r
+\r
 /**\r
  * (Virtual Class) Do not call this constructor. This class is not really part\r
  *             of the API. It just illustrates the features of hanlder objects to be\r
@@ -104,3 +119,10 @@ CKEDITOR.ui.prototype =
  *         }\r
  *     });\r
  */\r
+\r
+/**\r
+ * Internal event fired when a new UI element is ready\r
+ * @name CKEDITOR.ui#ready\r
+ * @event\r
+ * @param {Object} element The new element\r
+ */\r