--- /dev/null
+/*\r
+Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'a11yHelp', function( editor )\r
+{\r
+ var lang = editor.lang.accessibilityHelp,\r
+ id = CKEDITOR.tools.getNextNumber();\r
+\r
+ // CharCode <-> KeyChar.\r
+ var keyMap =\r
+ {\r
+ 8 : "BACKSPACE",\r
+ 9 : "TAB" ,\r
+ 13 : "ENTER" ,\r
+ 16 : "SHIFT" ,\r
+ 17 : "CTRL" ,\r
+ 18 : "ALT" ,\r
+ 19 : "PAUSE" ,\r
+ 20 : "CAPSLOCK" ,\r
+ 27 : "ESCAPE" ,\r
+ 33 : "PAGE UP" ,\r
+ 34 : "PAGE DOWN" ,\r
+ 35 : "END" ,\r
+ 36 : "HOME" ,\r
+ 37 : "LEFT ARROW" ,\r
+ 38 : "UP ARROW" ,\r
+ 39 : "RIGHT ARROW" ,\r
+ 40 : "DOWN ARROW" ,\r
+ 45 : "INSERT" ,\r
+ 46 : "DELETE" ,\r
+ 91 : "LEFT WINDOW KEY" ,\r
+ 92 : "RIGHT WINDOW KEY" ,\r
+ 93 : "SELECT KEY" ,\r
+ 96 : "NUMPAD 0" ,\r
+ 97 : "NUMPAD 1" ,\r
+ 98 : "NUMPAD 2" ,\r
+ 99 : "NUMPAD 3" ,\r
+ 100 : "NUMPAD 4" ,\r
+ 101 : "NUMPAD 5" ,\r
+ 102 : "NUMPAD 6" ,\r
+ 103 : "NUMPAD 7" ,\r
+ 104 : "NUMPAD 8" ,\r
+ 105 : "NUMPAD 9" ,\r
+ 106 : "MULTIPLY" ,\r
+ 107 : "ADD" ,\r
+ 109 : "SUBTRACT" ,\r
+ 110 : "DECIMAL POINT" ,\r
+ 111 : "DIVIDE" ,\r
+ 112 : "F1" ,\r
+ 113 : "F2" ,\r
+ 114 : "F3" ,\r
+ 115 : "F4" ,\r
+ 116 : "F5" ,\r
+ 117 : "F6" ,\r
+ 118 : "F7" ,\r
+ 119 : "F8" ,\r
+ 120 : "F9" ,\r
+ 121 : "F10" ,\r
+ 122 : "F11" ,\r
+ 123 : "F12" ,\r
+ 144 : "NUM LOCK" ,\r
+ 145 : "SCROLL LOCK" ,\r
+ 186 : "SEMI-COLON" ,\r
+ 187 : "EQUAL SIGN" ,\r
+ 188 : "COMMA" ,\r
+ 189 : "DASH" ,\r
+ 190 : "PERIOD" ,\r
+ 191 : "FORWARD SLASH" ,\r
+ 192 : "GRAVE ACCENT" ,\r
+ 219 : "OPEN BRACKET" ,\r
+ 220 : "BACK SLASH" ,\r
+ 221 : "CLOSE BRAKET" ,\r
+ 222 : "SINGLE QUOTE"\r
+ };\r
+\r
+ // Modifier keys override.\r
+ keyMap[ CKEDITOR.ALT ] = 'ALT';\r
+ keyMap[ CKEDITOR.SHIFT ] = 'SHIFT';\r
+ keyMap[ CKEDITOR.CTRL ] = 'CTRL';\r
+\r
+ // Sort in desc.\r
+ var modifiers = [ CKEDITOR.ALT, CKEDITOR.SHIFT, CKEDITOR.CTRL ];\r
+\r
+ function representKeyStroke( keystroke )\r
+ {\r
+ var quotient,\r
+ modifier,\r
+ presentation = [];\r
+\r
+ for ( var i = 0; i < modifiers.length; i++ )\r
+ {\r
+ modifier = modifiers[ i ];\r
+ quotient = keystroke / modifiers[ i ];\r
+ if ( quotient > 1 && quotient <= 2 )\r
+ {\r
+ keystroke -= modifier;\r
+ presentation.push( keyMap[ modifier ] );\r
+ }\r
+ }\r
+\r
+ presentation.push( keyMap[ keystroke ]\r
+ || String.fromCharCode( keystroke ) );\r
+\r
+ return presentation.join( '+' );\r
+ }\r
+\r
+ var variablesPattern = /\$\{(.*?)\}/g;\r
+ function replaceVariables( match, name )\r
+ {\r
+ var keystrokes = editor.config.keystrokes,\r
+ definition,\r
+ length = keystrokes.length;\r
+\r
+ for ( var i = 0; i < length; i++ )\r
+ {\r
+ definition = keystrokes[ i ];\r
+ if ( definition[ 1 ] == name )\r
+ break;\r
+ }\r
+ return representKeyStroke( definition[ 0 ] );\r
+ }\r
+\r
+ // Create the help list directly from lang file entries.\r
+ function buildHelpContents()\r
+ {\r
+ var pageTpl = '<div class="cke_accessibility_legend" role="document" aria-labelledby="cke_' + id + '_arialbl" tabIndex="-1">%1</div>' +\r
+ '<span id="cke_' + id + '_arialbl" class="cke_voice_label">' + lang.contents + ' </span>',\r
+ sectionTpl = '<h1>%1</h1><dl>%2</dl>',\r
+ itemTpl = '<dt>%1</dt><dd>%2</dd>';\r
+\r
+ var pageHtml = [],\r
+ sections = lang.legend,\r
+ sectionLength = sections.length;\r
+\r
+ for ( var i = 0; i < sectionLength; i++ )\r
+ {\r
+ var section = sections[ i ],\r
+ sectionHtml = [],\r
+ items = section.items,\r
+ itemsLength = items.length;\r
+\r
+ for ( var j = 0; j < itemsLength; j++ )\r
+ {\r
+ var item = items[ j ],\r
+ itemHtml;\r
+ itemHtml = itemTpl.replace( '%1', item.name ).\r
+ replace( '%2', item.legend.replace( variablesPattern, replaceVariables ) );\r
+ sectionHtml.push( itemHtml );\r
+ }\r
+\r
+ pageHtml.push( sectionTpl.replace( '%1', section.name ).replace( '%2', sectionHtml.join( '' ) ) );\r
+ }\r
+\r
+ return pageTpl.replace( '%1', pageHtml.join( '' ) );\r
+ }\r
+\r
+ return {\r
+ title : lang.title,\r
+ minWidth : 600,\r
+ minHeight : 400,\r
+ contents : [\r
+ {\r
+ id : 'info',\r
+ label : editor.lang.common.generalTab,\r
+ expand : true,\r
+ elements :\r
+ [\r
+ {\r
+ type : 'html',\r
+ id : 'legends',\r
+ focus : function() {},\r
+ html : buildHelpContents() +\r
+ '<style type="text/css">' +\r
+ '.cke_accessibility_legend' +\r
+ '{' +\r
+ 'width:600px;' +\r
+ 'height:400px;' +\r
+ 'padding-right:5px;' +\r
+ 'overflow-y:auto;' +\r
+ 'overflow-x:hidden;' +\r
+ '}' +\r
+ '.cke_accessibility_legend h1' +\r
+ '{' +\r
+ 'font-size: 20px;' +\r
+ 'border-bottom: 1px solid #AAA;' +\r
+ 'margin: 5px 0px 15px;' +\r
+ '}' +\r
+ '.cke_accessibility_legend dl' +\r
+ '{' +\r
+ 'margin-left: 5px;' +\r
+ '}' +\r
+ '.cke_accessibility_legend dt' +\r
+ '{' +\r
+ 'font-size: 13px;' +\r
+ 'font-weight: bold;' +\r
+ '}' +\r
+ '.cke_accessibility_legend dd' +\r
+ '{' +\r
+ 'white-space:normal;' +\r
+ 'margin:10px' +\r
+ '}' +\r
+ '</style>'\r
+ }\r
+ ]\r
+ }\r
+ ],\r
+ buttons : [ CKEDITOR.dialog.cancelButton ]\r
+ };\r
+});\r