##// END OF EJS Templates
prettify combo keyboard shortcuts
Paul Ivanov -
Show More
@@ -1,146 +1,153
1 1 //----------------------------------------------------------------------------
2 2 // Copyright (C) 2008-2011 The IPython Development Team
3 3 //
4 4 // Distributed under the terms of the BSD License. The full license is in
5 5 // the file COPYING, distributed as part of this software.
6 6 //----------------------------------------------------------------------------
7 7
8 8 //============================================================================
9 9 // QuickHelp button
10 10 //============================================================================
11 11
12 12 var IPython = (function (IPython) {
13 13 "use strict";
14 14
15 15 var QuickHelp = function (selector) {
16 16 };
17 17
18 18 QuickHelp.prototype.show_keyboard_shortcuts = function () {
19 19 // toggles display of keyboard shortcut dialog
20 20 var that = this;
21 21 if ( this.force_rebuild ) {
22 22 delete(this.shortcut_dialog);
23 23 this.force_rebuild = false;
24 24 }
25 25 if ( this.shortcut_dialog ){
26 26 // if dialog is already shown, close it
27 27 $(this.shortcut_dialog).modal("toggle");
28 28 return;
29 29 }
30 30 var command_shortcuts = IPython.keyboard_manager.command_shortcuts.help();
31 31 var edit_shortcuts = IPython.keyboard_manager.edit_shortcuts.help();
32 32 var help, shortcut;
33 33 var i, half, n;
34 34 var element = $('<div/>');
35 35
36 36 // The documentation
37 37 var doc = $('<div/>').addClass('alert');
38 38 doc.append(
39 39 $('<button/>').addClass('close').attr('data-dismiss','alert').html('&times;')
40 40 ).append(
41 41 'The IPython Notebook has two different keyboard input modes. <b>Edit mode</b> '+
42 42 'allows you to type code/text into a cell and is indicated by a green cell '+
43 43 'border. <b>Command mode</b> binds the keyboard to notebook level actions '+
44 44 'and is indicated by a grey cell border.'
45 45 )
46 46 element.append(doc);
47 47
48 48 // Command mode
49 49 var cmd_div = this.build_command_help();
50 50 element.append(cmd_div);
51 51
52 52 // Edit mode
53 53 var edit_div = this.build_edit_help();
54 54 element.append(edit_div);
55 55
56 56 this.shortcut_dialog = IPython.dialog.modal({
57 57 title : "Keyboard shortcuts",
58 58 body : element,
59 59 destroy : false,
60 60 buttons : {
61 61 Close : {}
62 62 }
63 63 });
64 64
65 65 $([IPython.events]).on('rebuild.QuickHelp', function() { that.force_rebuild = true;});
66 66 };
67 67
68 68 QuickHelp.prototype.build_command_help = function () {
69 69 var command_shortcuts = IPython.keyboard_manager.command_shortcuts.help();
70 70 var help, shortcut;
71 71 var i, half, n;
72 72
73 73 // Command mode
74 74 var cmd_div = $('<div/>').append($('<h4>Command Mode (press <code>esc</code> to enable)</h4>'));
75 75 var cmd_sub_div = $('<div/>').addClass('hbox');
76 76 var cmd_col1 = $('<div/>').addClass('box-flex0');
77 77 var cmd_col2 = $('<div/>').addClass('box-flex0');
78 78 n = command_shortcuts.length;
79 79 half = ~~(n/2); // Truncate :)
80 80 for (i=0; i<half; i++) {
81 81 help = command_shortcuts[i]['help'];
82 shortcut = shortcut_name(command_shortcuts[i]['shortcut']);
82 shortcut = prettify(command_shortcuts[i]['shortcut']);
83 83 cmd_col1.append($('<div>').addClass('quickhelp').
84 84 append($('<span/>').addClass('shortcut_key').text(shortcut)).
85 85 append($('<span/>').addClass('shortcut_descr').text(' : ' + help))
86 86 );
87 87 };
88 88 for (i=half; i<n; i++) {
89 89 help = command_shortcuts[i]['help'];
90 shortcut = shortcut_name(command_shortcuts[i]['shortcut']);
90 shortcut = prettify(command_shortcuts[i]['shortcut']);
91 91 cmd_col2.append($('<div>').addClass('quickhelp').
92 92 append($('<span/>').addClass('shortcut_key').text(shortcut)).
93 93 append($('<span/>').addClass('shortcut_descr').text(' : ' + help))
94 94 );
95 95 };
96 96 cmd_sub_div.append(cmd_col1).append(cmd_col2);
97 97 cmd_div.append(cmd_sub_div);
98 98 return cmd_div;
99 99 }
100 100
101 101 var special_case = { pageup: "PageUp", pagedown: "Page Down" };
102 var shortcut_name = function (s) {
103 return ( special_case[s] ? special_case[s] : s.charAt(0).toUpperCase() + s.slice(1) );
102 var prettify = function (s) {
103 var keys = s.split('+');
104 var k, i;
105 for (i in keys) {
106 k = keys[i];
107 if ( k.length == 1 ) continue; // leave individual keys lower-cased
108 keys[i] = ( special_case[k] ? special_case[k] : k.charAt(0).toUpperCase() + k.slice(1) );
109 }
110 return keys.join('-');
104 111
105 112
106 113 };
107 114
108 115 QuickHelp.prototype.build_edit_help = function () {
109 116 var edit_shortcuts = IPython.keyboard_manager.edit_shortcuts.help();
110 117 var help, shortcut;
111 118 var i, half, n;
112 119
113 120 // Edit mode
114 121 var edit_div = $('<div/>').append($('<h4>Edit Mode (press <code>enter</code> to enable)</h4>'));
115 122 var edit_sub_div = $('<div/>').addClass('hbox');
116 123 var edit_col1 = $('<div/>').addClass('box-flex0');
117 124 var edit_col2 = $('<div/>').addClass('box-flex0');
118 125 n = edit_shortcuts.length;
119 126 half = ~~(n/2); // Truncate :)
120 127 for (i=0; i<half; i++) {
121 128 help = edit_shortcuts[i]['help'];
122 shortcut = shortcut_name(edit_shortcuts[i]['shortcut']);
129 shortcut = prettify(edit_shortcuts[i]['shortcut']);
123 130 edit_col1.append($('<div>').addClass('quickhelp').
124 131 append($('<span/>').addClass('shortcut_key').text(shortcut)).
125 132 append($('<span/>').addClass('shortcut_descr').text(' : ' + help))
126 133 );
127 134 };
128 135 for (i=half; i<n; i++) {
129 136 help = edit_shortcuts[i]['help'];
130 shortcut = shortcut_name(edit_shortcuts[i]['shortcut']);
137 shortcut = prettify(edit_shortcuts[i]['shortcut']);
131 138 edit_col2.append($('<div>').addClass('quickhelp').
132 139 append($('<span/>').addClass('shortcut_key').text(shortcut)).
133 140 append($('<span/>').addClass('shortcut_descr').text(' : ' + help))
134 141 );
135 142 };
136 143 edit_sub_div.append(edit_col1).append(edit_col2);
137 144 edit_div.append(edit_sub_div);
138 145 return edit_div;
139 146 }
140 147
141 148 // Set module variables
142 149 IPython.QuickHelp = QuickHelp;
143 150
144 151 return IPython;
145 152
146 153 }(IPython));
General Comments 0
You need to be logged in to leave comments. Login now