JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.2
[ckeditor.git] / _source / plugins / a11yhelp / dialogs / a11yhelp.js
diff --git a/_source/plugins/a11yhelp/dialogs/a11yhelp.js b/_source/plugins/a11yhelp/dialogs/a11yhelp.js
new file mode 100644 (file)
index 0000000..3348f93
--- /dev/null
@@ -0,0 +1,211 @@
+/*\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