JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.6.1
[ckeditor.git] / _source / plugins / richcombo / plugin.js
index d7895c8..1fa8f34 100644 (file)
@@ -1,5 +1,5 @@
 /*\r
-Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.\r
 For licensing, see LICENSE.html or http://ckeditor.com/license\r
 */\r
 \r
@@ -18,7 +18,7 @@ CKEDITOR.plugins.add( 'richcombo',
  * @constant\r
  * @example\r
  */\r
-CKEDITOR.UI_RICHCOMBO = 3;\r
+CKEDITOR.UI_RICHCOMBO = 'richcombo';\r
 \r
 CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(\r
 {\r
@@ -128,11 +128,16 @@ CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(
                                clickFn : clickFn\r
                        };\r
 \r
-                       editor.on( 'mode', function()\r
-                               {\r
-                                       this.setState( this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\r
-                               },\r
-                               this );\r
+                       function updateState()\r
+                       {\r
+                               var state = this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;\r
+                               this.setState( editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state );\r
+                               this.setValue( '' );\r
+                       }\r
+\r
+                       editor.on( 'mode', updateState, this );\r
+                       // If this combo is sensitive to readOnly state, update it accordingly.\r
+                       !this.readOnly && editor.on( 'readOnly', updateState, this);\r
 \r
                        var keyDownFn = CKEDITOR.tools.addFunction( function( ev, element )\r
                                {\r
@@ -156,18 +161,20 @@ CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(
                                        ev.preventDefault();\r
                                });\r
 \r
+                       var focusFn = CKEDITOR.tools.addFunction( function() { instance.onfocus && instance.onfocus(); } );\r
+\r
                        // For clean up\r
                        instance.keyDownFn = keyDownFn;\r
 \r
                        output.push(\r
-                               '<span class="cke_rcombo">',\r
+                               '<span class="cke_rcombo" role="presentation">',\r
                                '<span id=', id );\r
 \r
                        if ( this.className )\r
                                output.push( ' class="', this.className, ' cke_off"');\r
 \r
                        output.push(\r
-                               '>',\r
+                               ' role="presentation">',\r
                                        '<span id="' + id+ '_label" class=cke_label>', this.label, '</span>',\r
                                        '<a hidefocus=true title="', this.title, '" tabindex="-1"',\r
                                                env.gecko && env.version >= 10900 && !env.hc ? '' : ' href="javascript:void(\'' + this.label + '\')"',\r
@@ -192,11 +199,13 @@ CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(
 \r
                        output.push(\r
                                        ' onkeydown="CKEDITOR.tools.callFunction( ', keyDownFn, ', event, this );"' +\r
-                                       ' onclick="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' +\r
+                                       ' onfocus="return CKEDITOR.tools.callFunction(', focusFn, ', event);" ' +\r
+                                       ( CKEDITOR.env.ie ? 'onclick="return false;" onmouseup' : 'onclick' ) +         // #188\r
+                                               '="CKEDITOR.tools.callFunction(', clickFn, ', this); return false;">' +\r
                                                '<span>' +\r
                                                        '<span id="' + id + '_text" class="cke_text cke_inline_label">' + this.label + '</span>' +\r
                                                '</span>' +\r
-                                               '<span class=cke_openbutton>' + ( CKEDITOR.env.hc ? '<span>&#9660;</span>' : CKEDITOR.env.air ?  '&nbsp;' : '' ) + '</span>' +  // BLACK DOWN-POINTING TRIANGLE\r
+                                               '<span class=cke_openbutton><span class=cke_icon>' + ( CKEDITOR.env.hc ? '&#9660;' : CKEDITOR.env.air ?  '&nbsp;' : '' ) + '</span></span>' +   // BLACK DOWN-POINTING TRIANGLE\r
                                        '</a>' +\r
                                '</span>' +\r
                                '</span>' );\r
@@ -250,7 +259,6 @@ CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(
                        panel.onEscape = function()\r
                                {\r
                                        panel.hide();\r
-                                       me.document.getById( 'cke_' + me.id ).getFirst().getNext().focus();\r
                                };\r
 \r
                        list.onClick = function( value, marked )\r
@@ -268,7 +276,7 @@ CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(
                                        else\r
                                                me.setValue( '' );\r
 \r
-                                       panel.hide();\r
+                                       panel.hide( false );\r
                                };\r
 \r
                        this._.panel = panel;\r
@@ -289,16 +297,18 @@ CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass(
                        this._.value = value;\r
 \r
                        var textElement = this.document.getById( 'cke_' + this.id + '_text' );\r
-\r
-                       if ( !( value || text ) )\r
+                       if ( textElement )\r
                        {\r
-                               text = this.label;\r
-                               textElement.addClass( 'cke_inline_label' );\r
-                       }\r
-                       else\r
-                               textElement.removeClass( 'cke_inline_label' );\r
+                               if ( !( value || text ) )\r
+                               {\r
+                                       text = this.label;\r
+                                       textElement.addClass( 'cke_inline_label' );\r
+                               }\r
+                               else\r
+                                       textElement.removeClass( 'cke_inline_label' );\r
 \r
-                       textElement.setHtml( typeof text != 'undefined' ? text : value );\r
+                               textElement.setHtml( typeof text != 'undefined' ? text : value );\r
+                       }\r
                },\r
 \r
                getValue : function()\r