JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.5
[ckeditor.git] / _source / plugins / elementspath / plugin.js
index 58cacc3..f4320f4 100644 (file)
@@ -19,8 +19,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                var idBase = editor._.elementsPath.idBase;\r
                                var element = CKEDITOR.document.getById( idBase + '0' );\r
 \r
-                               if ( element )\r
-                                       element.focus();\r
+                               // Make the first button focus accessible for IE. (#3417)\r
+                               // Adobe AIR instead need while of delay.\r
+                               element && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air );\r
                        }\r
                }\r
        };\r
@@ -56,6 +57,60 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                        }\r
                                });\r
 \r
+                       function onClick( elementIndex )\r
+                       {\r
+                               editor.focus();\r
+                               var element = editor._.elementsPath.list[ elementIndex ];\r
+                               if ( element.is( 'body' ) )\r
+                               {\r
+                                       var range = new CKEDITOR.dom.range( editor.document );\r
+                                       range.selectNodeContents( element );\r
+                                       range.select();\r
+                               }\r
+                               else\r
+                                       editor.getSelection().selectElement( element );\r
+                       }\r
+\r
+                       var onClickHanlder = CKEDITOR.tools.addFunction( onClick );\r
+\r
+                       var onKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev )\r
+                               {\r
+                                       var idBase = editor._.elementsPath.idBase,\r
+                                               element;\r
+\r
+                                       ev = new CKEDITOR.dom.event( ev );\r
+\r
+                                       var rtl = editor.lang.dir == 'rtl';\r
+                                       switch ( ev.getKeystroke() )\r
+                                       {\r
+                                               case rtl ? 39 : 37 :            // LEFT-ARROW\r
+                                               case 9 :                                        // TAB\r
+                                                       element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );\r
+                                                       if ( !element )\r
+                                                               element = CKEDITOR.document.getById( idBase + '0' );\r
+                                                       element.focus();\r
+                                                       return false;\r
+\r
+                                               case rtl ? 37 : 39 :            // RIGHT-ARROW\r
+                                               case CKEDITOR.SHIFT + 9 :       // SHIFT + TAB\r
+                                                       element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );\r
+                                                       if ( !element )\r
+                                                               element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );\r
+                                                       element.focus();\r
+                                                       return false;\r
+\r
+                                               case 27 :                                       // ESC\r
+                                                       editor.focus();\r
+                                                       return false;\r
+\r
+                                               case 13 :                                       // ENTER        // Opera\r
+                                               case 32 :                                       // SPACE\r
+                                                       onClick( elementIndex );\r
+                                                       return false;\r
+                                       }\r
+                                       return true;\r
+                               });\r
+\r
                        editor.on( 'selectionChange', function( ev )\r
                                {\r
                                        var env = CKEDITOR.env,\r
@@ -82,8 +137,8 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                {\r
                                                        var index = elementsList.push( element ) - 1;\r
                                                        var name;\r
-                                                       if ( element.getAttribute( '_cke_real_element_type' ) )\r
-                                                               name = element.getAttribute( '_cke_real_element_type' );\r
+                                                       if ( element.data( 'cke-real-element-type' ) )\r
+                                                               name = element.data( 'cke-real-element-type' );\r
                                                        else\r
                                                                name = element.getName();\r
 \r
@@ -112,9 +167,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                                        ( ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 ) ?\r
                                                                        ' onfocus="event.preventBubble();"' : '' ) +\r
                                                                        ' hidefocus="true" ' +\r
-                                                                       ' onkeydown="return CKEDITOR._.elementsPath.keydown(\'', editor.name, '\',', index, ', event);"' +\r
+                                                                       ' onkeydown="return CKEDITOR.tools.callFunction(', onKeyDownHandler, ',', index, ', event );"' +\r
                                                                        extra ,\r
-                                                                       ' onclick="return CKEDITOR._.elementsPath.click(\'', editor.name, '\',', index, ');"',\r
+                                                                       ' onclick="CKEDITOR.tools.callFunction('+ onClickHanlder, ',', index, '); return false;"',\r
                                                                        ' role="button" aria-labelledby="' + idBase + index + '_label">',\r
                                                                                name,\r
                                                                                '<span id="', idBase, index, '_label" class="cke_label">' + label + '</span>',\r
@@ -128,7 +183,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                element = element.getParent();\r
                                        }\r
 \r
-                                       getSpaceElement().setHtml( html.join('') + emptyHtml );\r
+                                       var space = getSpaceElement();\r
+                                       space.setHtml( html.join('') + emptyHtml );\r
+                                       editor.fire( 'elementsPathUpdate', { space : space } );\r
                                });\r
 \r
                        editor.on( 'contentDomUnload', function()\r
@@ -142,73 +199,3 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                }\r
        });\r
 })();\r
-\r
-/**\r
- * Handles the click on an element in the element path.\r
- * @private\r
- */\r
-CKEDITOR._.elementsPath =\r
-{\r
-       click : function( instanceName, elementIndex )\r
-       {\r
-               var editor = CKEDITOR.instances[ instanceName ];\r
-               editor.focus();\r
-\r
-               var element = editor._.elementsPath.list[ elementIndex ];\r
-\r
-               if ( element.is( 'body' ) )\r
-               {\r
-                       var range = new CKEDITOR.dom.range( editor.document );\r
-                       range.selectNodeContents( element );\r
-                       range.select();\r
-               }\r
-               else\r
-                       editor.getSelection().selectElement( element );\r
-\r
-               return false;\r
-       },\r
-\r
-       keydown : function( instanceName, elementIndex, ev )\r
-       {\r
-               var instance = CKEDITOR.ui.button._.instances[ elementIndex ];\r
-               var editor = CKEDITOR.instances[ instanceName ];\r
-               var idBase = editor._.elementsPath.idBase;\r
-\r
-               var element;\r
-\r
-               ev = new CKEDITOR.dom.event( ev );\r
-\r
-               var rtl = editor.lang.dir == 'rtl';\r
-               switch ( ev.getKeystroke() )\r
-               {\r
-                       case rtl ? 39 : 37 :                                    // LEFT-ARROW\r
-                       case 9 :                                        // TAB\r
-                               element = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );\r
-                               if ( !element )\r
-                                       element = CKEDITOR.document.getById( idBase + '0' );\r
-                               element.focus();\r
-                               return false;\r
-\r
-                       case rtl ? 37 : 39 :                                    // RIGHT-ARROW\r
-                       case CKEDITOR.SHIFT + 9 :       // SHIFT + TAB\r
-                               element = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );\r
-                               if ( !element )\r
-                                       element = CKEDITOR.document.getById( idBase + ( editor._.elementsPath.list.length - 1 ) );\r
-                               element.focus();\r
-                               return false;\r
-\r
-                       case 27 :                                       // ESC\r
-                               editor.focus();\r
-                               return false;\r
-\r
-                       case 13 :                                       // ENTER        // Opera\r
-                       case 32 :                                       // SPACE\r
-                               this.click( instanceName, elementIndex );\r
-                               return false;\r
-\r
-                       //default :\r
-                       //      alert( ev.getKeystroke() );\r
-               }\r
-               return true;\r
-       }\r
-};\r