/** * @license Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'a11yHelp', function( editor ) { var lang = editor.lang.a11yhelp, id = CKEDITOR.tools.getNextId(); // CharCode <-> KeyChar. var keyMap = { 8: "BACKSPACE", 9: "TAB", 13: "ENTER", 16: "SHIFT", 17: "CTRL", 18: "ALT", 19: "PAUSE", 20: "CAPSLOCK", 27: "ESCAPE", 33: "PAGE UP", 34: "PAGE DOWN", 35: "END", 36: "HOME", 37: "LEFT ARROW", 38: "UP ARROW", 39: "RIGHT ARROW", 40: "DOWN ARROW", 45: "INSERT", 46: "DELETE", 91: "LEFT WINDOW KEY", 92: "RIGHT WINDOW KEY", 93: "SELECT KEY", 96: "NUMPAD 0", 97: "NUMPAD 1", 98: "NUMPAD 2", 99: "NUMPAD 3", 100: "NUMPAD 4", 101: "NUMPAD 5", 102: "NUMPAD 6", 103: "NUMPAD 7", 104: "NUMPAD 8", 105: "NUMPAD 9", 106: "MULTIPLY", 107: "ADD", 109: "SUBTRACT", 110: "DECIMAL POINT", 111: "DIVIDE", 112: "F1", 113: "F2", 114: "F3", 115: "F4", 116: "F5", 117: "F6", 118: "F7", 119: "F8", 120: "F9", 121: "F10", 122: "F11", 123: "F12", 144: "NUM LOCK", 145: "SCROLL LOCK", 186: "SEMI-COLON", 187: "EQUAL SIGN", 188: "COMMA", 189: "DASH", 190: "PERIOD", 191: "FORWARD SLASH", 192: "GRAVE ACCENT", 219: "OPEN BRACKET", 220: "BACK SLASH", 221: "CLOSE BRAKET", 222: "SINGLE QUOTE" }; // Modifier keys override. keyMap[ CKEDITOR.ALT ] = 'ALT'; keyMap[ CKEDITOR.SHIFT ] = 'SHIFT'; keyMap[ CKEDITOR.CTRL ] = 'CTRL'; // Sort in desc. var modifiers = [ CKEDITOR.ALT, CKEDITOR.SHIFT, CKEDITOR.CTRL ]; function representKeyStroke( keystroke ) { var quotient, modifier, presentation = []; for ( var i = 0; i < modifiers.length; i++ ) { modifier = modifiers[ i ]; quotient = keystroke / modifiers[ i ]; if ( quotient > 1 && quotient <= 2 ) { keystroke -= modifier; presentation.push( keyMap[ modifier ] ); } } presentation.push( keyMap[ keystroke ] || String.fromCharCode( keystroke ) ); return presentation.join( '+' ); } var variablesPattern = /\$\{(.*?)\}/g; var replaceVariables = (function() { // Swaps keystrokes with their commands in object literal. // This makes searching keystrokes by command much easier. var keystrokesByCode = editor.keystrokeHandler.keystrokes, keystrokesByName = {}; for ( var i in keystrokesByCode ) keystrokesByName[ keystrokesByCode[ i ] ] = i; return function( match, name ) { // Return the keystroke representation or leave match untouched // if there's no keystroke for such command. return keystrokesByName[ name ] ? representKeyStroke( keystrokesByName[ name ] ) : match; }; })(); // Create the help list directly from lang file entries. function buildHelpContents() { var pageTpl = '