JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.2
[ckeditor.git] / _source / plugins / toolbar / plugin.js
index c1701a4..4b59f6d 100644 (file)
@@ -59,13 +59,36 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                {\r
                        var itemKeystroke = function( item, keystroke )\r
                        {\r
+                               var next, nextToolGroup, groupItemsCount;\r
+\r
                                switch ( keystroke )\r
                                {\r
                                        case 39 :                                       // RIGHT-ARROW\r
                                        case 9 :                                        // TAB\r
-                                               // Look for the next item in the toolbar.\r
-                                               while ( ( item = item.next || ( item.toolbar.next && item.toolbar.next.items[ 0 ] ) ) && !item.focus )\r
-                                               { /*jsl:pass*/ }\r
+                                               do\r
+                                               {\r
+                                                       // Look for the previous item in the toolbar.\r
+                                                       next = item.next;\r
+\r
+                                                       if ( !next )\r
+                                                       {\r
+                                                               nextToolGroup = item.toolbar.next;\r
+                                                               groupItemsCount = nextToolGroup && nextToolGroup.items.length;\r
+\r
+                                                               // Bypass the empty toolgroups.\r
+                                                               while ( groupItemsCount === 0 )\r
+                                                               {\r
+                                                                       nextToolGroup = nextToolGroup.next;\r
+                                                                       groupItemsCount = nextToolGroup && nextToolGroup.items.length;\r
+                                                               }\r
+\r
+                                                               if ( nextToolGroup )\r
+                                                                       next = nextToolGroup.items[ 0 ];\r
+                                                       }\r
+\r
+                                                       item = next;\r
+                                               }\r
+                                               while ( item && !item.focus )\r
 \r
                                                // If available, just focus it, otherwise focus the\r
                                                // first one.\r
@@ -78,9 +101,30 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 \r
                                        case 37 :                                       // LEFT-ARROW\r
                                        case CKEDITOR.SHIFT + 9 :       // SHIFT + TAB\r
-                                               // Look for the previous item in the toolbar.\r
-                                               while ( ( item = item.previous || ( item.toolbar.previous && item.toolbar.previous.items[ item.toolbar.previous.items.length - 1 ] ) ) && !item.focus )\r
-                                               { /*jsl:pass*/ }\r
+                                               do\r
+                                               {\r
+                                                       // Look for the previous item in the toolbar.\r
+                                                       next = item.previous;\r
+\r
+                                                       if ( !next )\r
+                                                       {\r
+                                                               nextToolGroup = item.toolbar.previous;\r
+                                                               groupItemsCount = nextToolGroup && nextToolGroup.items.length;\r
+\r
+                                                               // Bypass the empty toolgroups.\r
+                                                               while ( groupItemsCount === 0 )\r
+                                                               {\r
+                                                                       nextToolGroup = nextToolGroup.previous;\r
+                                                                       groupItemsCount = nextToolGroup && nextToolGroup.items.length;\r
+                                                               }\r
+\r
+                                                               if ( nextToolGroup )\r
+                                                                       next = nextToolGroup.items[ groupItemsCount - 1 ];\r
+                                                       }\r
+\r
+                                                       item = next;\r
+                                               }\r
+                                               while ( item && !item.focus )\r
 \r
                                                // If available, just focus it, otherwise focus the\r
                                                // last one.\r
@@ -112,12 +156,17 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                        {\r
                                                editor.toolbox = new toolbox();\r
 \r
-                                               var output = [ '<div class="cke_toolbox"' ],\r
+                                               var labelId = 'cke_' + CKEDITOR.tools.getNextNumber();\r
+\r
+                                               var output = [ '<div class="cke_toolbox" role="toolbar" aria-labelledby="', labelId, '"' ],\r
                                                        expanded =  editor.config.toolbarStartupExpanded !== false,\r
                                                        groupStarted;\r
 \r
                                                output.push( expanded ? '>' : ' style="display:none">' );\r
 \r
+                                               // Sends the ARIA label.\r
+                                               output.push( '<span id="', labelId, '" class="cke_voice_label">', editor.lang.toolbar, '</span>' );\r
+\r
                                                var toolbars = editor.toolbox.toolbars,\r
                                                        toolbar =\r
                                                                        ( editor.config.toolbar instanceof Array ) ?\r
@@ -152,7 +201,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                                continue;\r
                                                        }\r
 \r
-                                                       output.push( '<span id="', toolbarId, '" class="cke_toolbar"><span class="cke_toolbar_start"></span>' );\r
+                                                       output.push( '<span id="', toolbarId, '" class="cke_toolbar" role="presentation"><span class="cke_toolbar_start"></span>' );\r
 \r
                                                        // Add the toolbar to the "editor.toolbox.toolbars"\r
                                                        // array.\r
@@ -182,7 +231,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                                        {\r
                                                                                if ( !groupStarted )\r
                                                                                {\r
-                                                                                       output.push( '<span class="cke_toolgroup">' );\r
+                                                                                       output.push( '<span class="cke_toolgroup" role="presentation">' );\r
                                                                                        groupStarted = 1;\r
                                                                                }\r
                                                                        }\r
@@ -247,8 +296,9 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                                                var toolboxContainer = toolbox.getParent();\r
                                                                                var contentHeight = parseInt( contents.$.style.height, 10 );\r
                                                                                var previousHeight = toolboxContainer.$.offsetHeight;\r
+                                                                               var collapsed = !toolbox.isVisible();\r
 \r
-                                                                               if ( toolbox.isVisible() )\r
+                                                                               if ( !collapsed )\r
                                                                                {\r
                                                                                        toolbox.hide();\r
                                                                                        collapser.addClass( 'cke_toolbox_collapser_min' );\r
@@ -261,6 +311,11 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                                                        collapser.setAttribute( 'title', editor.lang.toolbarCollapse );\r
                                                                                }\r
 \r
+                                                                               // Update collapser symbol.\r
+                                                                               collapser.getFirst().setText( collapsed ?\r
+                                                                                       '\u25B2' :              // BLACK UP-POINTING TRIANGLE\r
+                                                                                       '\u25C0' );             // BLACK LEFT-POINTING TRIANGLE\r
+\r
                                                                                var dy = toolboxContainer.$.offsetHeight - previousHeight;\r
                                                                                contents.setStyle( 'height', ( contentHeight - dy ) + 'px' );\r
 \r
@@ -271,12 +326,14 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                                                } );\r
 \r
                                                        output.push( '<a title="' + ( expanded ? editor.lang.toolbarCollapse : editor.lang.toolbarExpand )\r
-                                                                                                         + '" id="' + collapserId + '" class="cke_toolbox_collapser' );\r
+                                                                                                         + '" id="' + collapserId + '" tabIndex="-1" class="cke_toolbox_collapser' );\r
 \r
                                                        if ( !expanded )\r
                                                                output.push( ' cke_toolbox_collapser_min' );\r
 \r
-                                                       output.push( '" onclick="CKEDITOR.tools.callFunction(' + collapserFn + ')"></a>' );\r
+                                                       output.push( '" onclick="CKEDITOR.tools.callFunction(' + collapserFn + ')">',\r
+                                                                               '<span>&#9650;</span>',         // BLACK UP-POINTING TRIANGLE\r
+                                                                               '</a>' );\r
                                                }\r
 \r
                                                event.data.html += output.join( '' );\r
@@ -297,7 +354,7 @@ CKEDITOR.ui.separator =
 {\r
        render : function( editor, output )\r
        {\r
-               output.push( '<span class="cke_separator"></span>' );\r
+               output.push( '<span class="cke_separator" role="separator"></span>' );\r
                return {};\r
        }\r
 };\r