@jupyterlab/shortcuts-extension 3.3.0-alpha.9 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/lib/componentStyle/ShortcutButtonStyle.d.ts +2 -0
  2. package/lib/componentStyle/ShortcutButtonStyle.js +41 -0
  3. package/lib/componentStyle/ShortcutButtonStyle.js.map +1 -0
  4. package/lib/componentStyle/ShortcutInputStyle.d.ts +11 -0
  5. package/lib/componentStyle/ShortcutInputStyle.js +98 -0
  6. package/lib/componentStyle/ShortcutInputStyle.js.map +1 -0
  7. package/lib/componentStyle/ShortcutItemStyle.d.ts +18 -0
  8. package/lib/componentStyle/ShortcutItemStyle.js +179 -0
  9. package/lib/componentStyle/ShortcutItemStyle.js.map +1 -0
  10. package/lib/componentStyle/ShortcutListStyle.d.ts +2 -0
  11. package/lib/componentStyle/ShortcutListStyle.js +16 -0
  12. package/lib/componentStyle/ShortcutListStyle.js.map +1 -0
  13. package/lib/componentStyle/ShortcutTitleItemStyle.d.ts +3 -0
  14. package/lib/componentStyle/ShortcutTitleItemStyle.js +34 -0
  15. package/lib/componentStyle/ShortcutTitleItemStyle.js.map +1 -0
  16. package/lib/componentStyle/ShortcutUIStyle.d.ts +2 -0
  17. package/lib/componentStyle/ShortcutUIStyle.js +21 -0
  18. package/lib/componentStyle/ShortcutUIStyle.js.map +1 -0
  19. package/lib/componentStyle/TopNavStyle.d.ts +18 -0
  20. package/lib/componentStyle/TopNavStyle.js +138 -0
  21. package/lib/componentStyle/TopNavStyle.js.map +1 -0
  22. package/lib/components/ShortcutInput.d.ts +78 -0
  23. package/lib/components/ShortcutInput.js +342 -0
  24. package/lib/components/ShortcutInput.js.map +1 -0
  25. package/lib/components/ShortcutItem.d.ts +64 -0
  26. package/lib/components/ShortcutItem.js +275 -0
  27. package/lib/components/ShortcutItem.js.map +1 -0
  28. package/lib/components/ShortcutList.d.ts +25 -0
  29. package/lib/components/ShortcutList.js +14 -0
  30. package/lib/components/ShortcutList.js.map +1 -0
  31. package/lib/components/ShortcutTitleItem.d.ts +9 -0
  32. package/lib/components/ShortcutTitleItem.js +13 -0
  33. package/lib/components/ShortcutTitleItem.js.map +1 -0
  34. package/lib/components/ShortcutUI.d.ts +61 -0
  35. package/lib/components/ShortcutUI.js +361 -0
  36. package/lib/components/ShortcutUI.js.map +1 -0
  37. package/lib/components/TopNav.d.ts +52 -0
  38. package/lib/components/TopNav.js +143 -0
  39. package/lib/components/TopNav.js.map +1 -0
  40. package/lib/components/index.d.ts +2 -0
  41. package/lib/components/index.js +2 -0
  42. package/lib/components/index.js.map +1 -0
  43. package/lib/index.js +23 -1
  44. package/lib/index.js.map +1 -1
  45. package/lib/renderer.d.ts +5 -0
  46. package/lib/renderer.js +6 -0
  47. package/lib/renderer.js.map +1 -0
  48. package/package.json +22 -10
  49. package/style/index.css +8 -0
  50. package/style/index.js +8 -0
@@ -0,0 +1,361 @@
1
+ import { ArrayExt, StringExt } from '@lumino/algorithm';
2
+ import { ShortcutUIStyle, TopWhitespaceStyle } from '../componentStyle/ShortcutUIStyle';
3
+ import { ShortcutList } from './ShortcutList';
4
+ import { TopNav } from './TopNav';
5
+ import * as React from 'react';
6
+ import { ErrorObject, ShortcutObject, TakenByObject } from './ShortcutInput';
7
+ /** Normalize the query text for a fuzzy search. */
8
+ function normalizeQuery(text) {
9
+ return text.replace(/\s+/g, '').toLowerCase();
10
+ }
11
+ /** Perform a fuzzy search on a single command item. */
12
+ function fuzzySearch(item, query) {
13
+ // Create the source text to be searched.
14
+ const category = item.category.toLowerCase();
15
+ const label = item['label'].toLowerCase();
16
+ const source = `${category} ${label}`;
17
+ // Set up the match score and indices array.
18
+ let score = Infinity;
19
+ let indices = null;
20
+ // The regex for search word boundaries
21
+ const rgx = /\b\w/g;
22
+ // Search the source by word boundary.
23
+ // eslint-disable-next-line
24
+ while (true) {
25
+ // Find the next word boundary in the source.
26
+ const rgxMatch = rgx.exec(source);
27
+ // Break if there is no more source context.
28
+ if (!rgxMatch) {
29
+ break;
30
+ }
31
+ // Run the string match on the relevant substring.
32
+ const match = StringExt.matchSumOfDeltas(source, query, rgxMatch.index);
33
+ // Break if there is no match.
34
+ if (!match) {
35
+ break;
36
+ }
37
+ // Update the match if the score is better.
38
+ if (match && match.score <= score) {
39
+ score = match.score;
40
+ indices = match.indices;
41
+ }
42
+ }
43
+ // Bail if there was no match.
44
+ if (!indices || score === Infinity) {
45
+ return null;
46
+ }
47
+ // Compute the pivot index between category and label text.
48
+ const pivot = category.length + 1;
49
+ // Find the slice index to separate matched indices.
50
+ const j = ArrayExt.lowerBound(indices, pivot, (a, b) => a - b);
51
+ // Extract the matched category and label indices.
52
+ const categoryIndices = indices.slice(0, j);
53
+ const labelIndices = indices.slice(j);
54
+ // Adjust the label indices for the pivot offset.
55
+ for (let i = 0, n = labelIndices.length; i < n; ++i) {
56
+ labelIndices[i] -= pivot;
57
+ }
58
+ // Handle a pure label match.
59
+ if (categoryIndices.length === 0) {
60
+ return {
61
+ matchType: 0 /* Label */,
62
+ categoryIndices: null,
63
+ labelIndices,
64
+ score,
65
+ item
66
+ };
67
+ }
68
+ // Handle a pure category match.
69
+ if (labelIndices.length === 0) {
70
+ return {
71
+ matchType: 1 /* Category */,
72
+ categoryIndices,
73
+ labelIndices: null,
74
+ score,
75
+ item
76
+ };
77
+ }
78
+ // Handle a split match.
79
+ return {
80
+ matchType: 2 /* Split */,
81
+ categoryIndices,
82
+ labelIndices,
83
+ score,
84
+ item
85
+ };
86
+ }
87
+ /** Perform a fuzzy match on an array of command items. */
88
+ function matchItems(items, query) {
89
+ // Normalize the query text to lower case with no whitespace.
90
+ query = normalizeQuery(query);
91
+ // Create the array to hold the scores.
92
+ let scores = [];
93
+ // Iterate over the items and match against the query.
94
+ let itemList = Object.keys(items);
95
+ for (let i = 0, n = itemList.length; i < n; ++i) {
96
+ let item = items[itemList[i]];
97
+ // If the query is empty, all items are matched by default.
98
+ if (!query) {
99
+ scores.push({
100
+ matchType: 3 /* Default */,
101
+ categoryIndices: null,
102
+ labelIndices: null,
103
+ score: 0,
104
+ item
105
+ });
106
+ continue;
107
+ }
108
+ // Run the fuzzy search for the item and query.
109
+ let score = fuzzySearch(item, query);
110
+ // Ignore the item if it is not a match.
111
+ if (!score) {
112
+ continue;
113
+ }
114
+ // Add the score to the results.
115
+ scores.push(score);
116
+ }
117
+ // Return the final array of scores.
118
+ return scores;
119
+ }
120
+ /** Transform SettingRegistry's shortcut list to list of ShortcutObjects */
121
+ function getShortcutObjects(external, settings) {
122
+ const shortcuts = settings.composite.shortcuts;
123
+ let shortcutObjects = {};
124
+ shortcuts.forEach((shortcut) => {
125
+ let key = shortcut.command + '_' + shortcut.selector;
126
+ if (Object.keys(shortcutObjects).indexOf(key) !== -1) {
127
+ let currentCount = shortcutObjects[key].numberOfShortcuts;
128
+ shortcutObjects[key].keys[currentCount] = shortcut.keys;
129
+ shortcutObjects[key].numberOfShortcuts++;
130
+ }
131
+ else {
132
+ let shortcutObject = new ShortcutObject();
133
+ shortcutObject.commandName = shortcut.command;
134
+ let label = external.getLabel(shortcut.command);
135
+ if (!label) {
136
+ label = shortcut.command.split(':')[1];
137
+ }
138
+ shortcutObject.label = label;
139
+ shortcutObject.category = shortcut.command.split(':')[0];
140
+ shortcutObject.keys[0] = shortcut.keys;
141
+ shortcutObject.selector = shortcut.selector;
142
+ // TODO needs translation
143
+ shortcutObject.source = 'Default';
144
+ shortcutObject.id = key;
145
+ shortcutObject.numberOfShortcuts = 1;
146
+ shortcutObjects[key] = shortcutObject;
147
+ }
148
+ });
149
+ // find all the shortcuts that have custom settings
150
+ const userShortcuts = settings.user.shortcuts;
151
+ userShortcuts.forEach((userSetting) => {
152
+ const command = userSetting.command;
153
+ const selector = userSetting.selector;
154
+ const keyTo = command + '_' + selector;
155
+ if (shortcutObjects[keyTo]) {
156
+ // TODO needs translation
157
+ shortcutObjects[keyTo].source = 'Custom';
158
+ }
159
+ });
160
+ return shortcutObjects;
161
+ }
162
+ /** Get list of all shortcut keybindings currently in use
163
+ * An object where keys are unique keyBinding_selector and values are shortcut objects **/
164
+ function getKeyBindingsUsed(shortcutObjects) {
165
+ let keyBindingsUsed = {};
166
+ Object.keys(shortcutObjects).forEach((shortcut) => {
167
+ Object.keys(shortcutObjects[shortcut].keys).forEach((key) => {
168
+ const takenBy = new TakenByObject(shortcutObjects[shortcut]);
169
+ takenBy.takenByKey = key;
170
+ keyBindingsUsed[shortcutObjects[shortcut].keys[key].join(' ') +
171
+ '_' +
172
+ shortcutObjects[shortcut].selector] = takenBy;
173
+ });
174
+ });
175
+ return keyBindingsUsed;
176
+ }
177
+ /** Top level React component for widget */
178
+ export class ShortcutUI extends React.Component {
179
+ constructor(props) {
180
+ super(props);
181
+ /** Set the current seach query */
182
+ this.updateSearchQuery = (event) => {
183
+ this.setState({
184
+ searchQuery: event.target['value']
185
+ }, () => this.setState({
186
+ filteredShortcutList: this.searchFilterShortcuts(this.state.shortcutList)
187
+ }, () => {
188
+ this.sortShortcuts();
189
+ }));
190
+ };
191
+ /** Reset all shortcuts to their defaults */
192
+ this.resetShortcuts = async () => {
193
+ const settings = await this.props.external.getAllShortCutSettings();
194
+ for (const key of Object.keys(settings.user)) {
195
+ await this.props.external.removeShortCut(key);
196
+ }
197
+ await this._refreshShortcutList();
198
+ };
199
+ /** Set new shortcut for command, refresh state */
200
+ this.handleUpdate = async (shortcutObject, keys) => {
201
+ const settings = await this.props.external.getAllShortCutSettings();
202
+ const userShortcuts = settings.user.shortcuts;
203
+ const newUserShortcuts = [];
204
+ let found = false;
205
+ for (let shortcut of userShortcuts) {
206
+ if (shortcut['command'] === shortcutObject.commandName &&
207
+ shortcut['selector'] === shortcutObject.selector) {
208
+ newUserShortcuts.push({
209
+ command: shortcut['command'],
210
+ selector: shortcut['selector'],
211
+ keys: keys
212
+ });
213
+ found = true;
214
+ }
215
+ else {
216
+ newUserShortcuts.push(shortcut);
217
+ }
218
+ }
219
+ if (!found) {
220
+ newUserShortcuts.push({
221
+ command: shortcutObject.commandName,
222
+ selector: shortcutObject.selector,
223
+ keys: keys
224
+ });
225
+ }
226
+ await settings.set('shortcuts', newUserShortcuts);
227
+ await this._refreshShortcutList();
228
+ };
229
+ /** Delete shortcut for command, refresh state */
230
+ this.deleteShortcut = async (shortcutObject, shortcutId) => {
231
+ await this.handleUpdate(shortcutObject, ['']);
232
+ await this._refreshShortcutList();
233
+ };
234
+ /** Reset a specific shortcut to its default settings */
235
+ this.resetShortcut = async (shortcutObject) => {
236
+ const settings = await this.props.external.getAllShortCutSettings();
237
+ const userShortcuts = settings.user.shortcuts;
238
+ const newUserShortcuts = [];
239
+ for (let shortcut of userShortcuts) {
240
+ if (shortcut['command'] !== shortcutObject.commandName ||
241
+ shortcut['selector'] !== shortcutObject.selector) {
242
+ newUserShortcuts.push(shortcut);
243
+ }
244
+ }
245
+ await settings.set('shortcuts', newUserShortcuts);
246
+ await this._refreshShortcutList();
247
+ };
248
+ /** Toggles showing command selectors */
249
+ this.toggleSelectors = () => {
250
+ this.setState({ showSelectors: !this.state.showSelectors });
251
+ };
252
+ /** Set the current list sort order */
253
+ this.updateSort = (value) => {
254
+ if (value !== this.state.currentSort) {
255
+ this.setState({ currentSort: value }, this.sortShortcuts);
256
+ }
257
+ };
258
+ /** Sort shortcut list so that an error row is right below the one currently being set */
259
+ this.sortConflict = (newShortcut, takenBy) => {
260
+ const shortcutList = this.state.filteredShortcutList;
261
+ if (shortcutList.filter(shortcut => shortcut.id === 'error_row').length === 0) {
262
+ const errorRow = new ErrorObject();
263
+ errorRow.takenBy = takenBy;
264
+ errorRow.id = 'error_row';
265
+ shortcutList.splice(shortcutList.indexOf(newShortcut) + 1, 0, errorRow);
266
+ errorRow.hasConflict = true;
267
+ this.setState({ filteredShortcutList: shortcutList });
268
+ }
269
+ };
270
+ /** Remove conflict flag from all shortcuts */
271
+ this.clearConflicts = () => {
272
+ /** Remove error row */
273
+ const shortcutList = this.state.filteredShortcutList.filter(shortcut => shortcut.id !== 'error_row');
274
+ shortcutList.forEach((shortcut) => {
275
+ shortcut.hasConflict = false;
276
+ });
277
+ this.setState({ filteredShortcutList: shortcutList });
278
+ };
279
+ this.contextMenu = (event, commandIDs) => {
280
+ event.persist();
281
+ this.setState({
282
+ contextMenu: this.props.external.createMenu()
283
+ }, () => {
284
+ event.preventDefault();
285
+ for (let command of commandIDs) {
286
+ this.state.contextMenu.addItem({ command });
287
+ }
288
+ this.state.contextMenu.open(event.clientX, event.clientY);
289
+ });
290
+ };
291
+ this.state = {
292
+ shortcutList: {},
293
+ filteredShortcutList: new Array(),
294
+ shortcutsFetched: false,
295
+ searchQuery: '',
296
+ showSelectors: false,
297
+ currentSort: 'category',
298
+ keyBindingsUsed: {},
299
+ contextMenu: this.props.external.createMenu()
300
+ };
301
+ }
302
+ /** Fetch shortcut list on mount */
303
+ componentDidMount() {
304
+ void this._refreshShortcutList();
305
+ }
306
+ /** Fetch shortcut list from SettingRegistry */
307
+ async _refreshShortcutList() {
308
+ const shortcuts = await this.props.external.getAllShortCutSettings();
309
+ const shortcutObjects = getShortcutObjects(this.props.external, shortcuts);
310
+ this.setState({
311
+ shortcutList: shortcutObjects,
312
+ filteredShortcutList: this.searchFilterShortcuts(shortcutObjects),
313
+ shortcutsFetched: true
314
+ }, () => {
315
+ let keyBindingsUsed = getKeyBindingsUsed(shortcutObjects);
316
+ this.setState({ keyBindingsUsed });
317
+ this.sortShortcuts();
318
+ });
319
+ }
320
+ /** Filter shortcut list using current search query */
321
+ searchFilterShortcuts(shortcutObjects) {
322
+ const filteredShortcuts = matchItems(shortcutObjects, this.state.searchQuery).map((item) => {
323
+ return item.item;
324
+ });
325
+ return filteredShortcuts;
326
+ }
327
+ /** Sort shortcut list using current sort property */
328
+ sortShortcuts() {
329
+ const shortcuts = this.state.filteredShortcutList;
330
+ let filterCritera = this.state.currentSort;
331
+ if (filterCritera === 'command') {
332
+ filterCritera = 'label';
333
+ }
334
+ if (filterCritera !== '') {
335
+ shortcuts.sort((a, b) => {
336
+ const compareA = a.get(filterCritera);
337
+ const compareB = b.get(filterCritera);
338
+ if (compareA < compareB) {
339
+ return -1;
340
+ }
341
+ else if (compareA > compareB) {
342
+ return 1;
343
+ }
344
+ else {
345
+ return a['label'] < b['label'] ? -1 : a['label'] > b['label'] ? 1 : 0;
346
+ }
347
+ });
348
+ }
349
+ this.setState({ filteredShortcutList: shortcuts });
350
+ }
351
+ render() {
352
+ if (!this.state.shortcutsFetched) {
353
+ return null;
354
+ }
355
+ return (React.createElement("div", { className: ShortcutUIStyle, id: "jp-shortcutui" },
356
+ React.createElement("div", { className: TopWhitespaceStyle }),
357
+ React.createElement(TopNav, { updateSearchQuery: this.updateSearchQuery, resetShortcuts: this.resetShortcuts, toggleSelectors: this.toggleSelectors, showSelectors: this.state.showSelectors, updateSort: this.updateSort, currentSort: this.state.currentSort, width: this.props.width, external: this.props.external }),
358
+ React.createElement(ShortcutList, { shortcuts: this.state.filteredShortcutList, resetShortcut: this.resetShortcut, handleUpdate: this.handleUpdate, deleteShortcut: this.deleteShortcut, showSelectors: this.state.showSelectors, keyBindingsUsed: this.state.keyBindingsUsed, sortConflict: this.sortConflict, clearConflicts: this.clearConflicts, height: this.props.height, errorSize: this.props.width < 775 ? 1 /* Small */ : 0 /* Regular */, contextMenu: this.contextMenu, external: this.props.external })));
359
+ }
360
+ }
361
+ //# sourceMappingURL=ShortcutUI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ShortcutUI.js","sourceRoot":"","sources":["../../src/components/ShortcutUI.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ import { ISettingRegistry } from '@jupyterlab/settingregistry';
2
+ import { ITranslator } from '@jupyterlab/translation';
3
+ import { CommandRegistry } from '@lumino/commands';
4
+ import { IDisposable } from '@lumino/disposable';
5
+ import { Menu } from '@lumino/widgets';
6
+ import * as React from 'react';
7
+ import { UISize } from './ShortcutUI';
8
+ export interface IAdvancedOptionsProps {
9
+ size: UISize;
10
+ toggleSelectors: Function;
11
+ showSelectors: boolean;
12
+ resetShortcuts: Function;
13
+ menu: Menu;
14
+ translator: ITranslator;
15
+ }
16
+ export interface ISymbolsProps {
17
+ size: UISize;
18
+ }
19
+ /** All external actions, setting commands, getting command list ... */
20
+ export interface IShortcutUIexternal {
21
+ translator: ITranslator;
22
+ getAllShortCutSettings: () => Promise<ISettingRegistry.ISettings>;
23
+ removeShortCut: (key: string) => Promise<void>;
24
+ createMenu: () => Menu;
25
+ hasCommand: (id: string) => boolean;
26
+ addCommand: (id: string, options: CommandRegistry.ICommandOptions) => IDisposable;
27
+ getLabel: (id: string) => string;
28
+ }
29
+ export declare namespace CommandIDs {
30
+ const showSelectors = "shortcutui:showSelectors";
31
+ const resetAll = "shortcutui:resetAll";
32
+ }
33
+ /** State for TopNav component */
34
+ export interface ITopNavProps {
35
+ resetShortcuts: Function;
36
+ updateSearchQuery: Function;
37
+ toggleSelectors: Function;
38
+ showSelectors: boolean;
39
+ updateSort: Function;
40
+ currentSort: string;
41
+ width: number;
42
+ external: IShortcutUIexternal;
43
+ }
44
+ /** React component for top navigation */
45
+ export declare class TopNav extends React.Component<ITopNavProps> {
46
+ menu: Menu;
47
+ constructor(props: ITopNavProps);
48
+ addMenuCommands(): void;
49
+ getSize: (width: number) => UISize;
50
+ getShortCutTitleItem(title: string): JSX.Element;
51
+ render(): JSX.Element;
52
+ }
@@ -0,0 +1,143 @@
1
+ import * as React from 'react';
2
+ import { classes } from 'typestyle';
3
+ import { CellStyle } from '../componentStyle/ShortcutItemStyle';
4
+ import { AdvancedOptionsContainerStyle, AdvancedOptionsLinkStyle, AdvancedOptionsSmallStyle, AdvancedOptionsStyle, altIconStyle, commandIconStyle, controlIconStyle, HeaderRowContainerStyle, HeaderRowStyle, SearchContainerStyle, SearchStyle, SymbolsRowStyle, SymbolsSmallStyle, SymbolsStyle, TopNavStyle, TopStyle } from '../componentStyle/TopNavStyle';
5
+ import { ShortcutTitleItem } from './ShortcutTitleItem';
6
+ export var CommandIDs;
7
+ (function (CommandIDs) {
8
+ CommandIDs.showSelectors = 'shortcutui:showSelectors';
9
+ CommandIDs.resetAll = 'shortcutui:resetAll';
10
+ })(CommandIDs || (CommandIDs = {}));
11
+ class Symbols extends React.Component {
12
+ getRegularSymbols() {
13
+ return (React.createElement("div", { className: SymbolsStyle },
14
+ React.createElement("div", { className: SymbolsRowStyle },
15
+ React.createElement("div", null, "Cmd \u2318"),
16
+ React.createElement("div", null, "Alt \u2325"),
17
+ React.createElement("div", null, "Ctrl \u2303"),
18
+ React.createElement("div", null, "Shift \u21E7"))));
19
+ }
20
+ getSmallSymbols() {
21
+ return (React.createElement("div", { className: classes(SymbolsStyle, SymbolsSmallStyle) },
22
+ React.createElement("div", { className: SymbolsRowStyle },
23
+ React.createElement("span", null, "Cmd "),
24
+ React.createElement("span", { className: commandIconStyle }, "\u2318"),
25
+ React.createElement("span", null, "Alt "),
26
+ React.createElement("span", { className: altIconStyle }, "\u2325")),
27
+ React.createElement("div", { className: SymbolsRowStyle },
28
+ React.createElement("span", null, "Ctrl "),
29
+ React.createElement("span", { className: controlIconStyle }, "\u2303"),
30
+ React.createElement("span", null, "Shift "),
31
+ React.createElement("span", null, "\u21E7"))));
32
+ }
33
+ getTinySymbols() {
34
+ return (React.createElement("div", { className: classes(SymbolsStyle, SymbolsSmallStyle) },
35
+ React.createElement("div", { className: SymbolsRowStyle },
36
+ React.createElement("span", null, "Cmd"),
37
+ React.createElement("span", null, "\u2318")),
38
+ React.createElement("div", { className: SymbolsRowStyle },
39
+ React.createElement("span", null, "Alt"),
40
+ React.createElement("span", null, "\u2325")),
41
+ React.createElement("div", { className: SymbolsRowStyle },
42
+ React.createElement("span", null, "Ctrl"),
43
+ React.createElement("span", null, "\u2303")),
44
+ React.createElement("div", { className: SymbolsRowStyle },
45
+ React.createElement("span", null, "Shift"),
46
+ React.createElement("span", null, "\u21E7"))));
47
+ }
48
+ render() {
49
+ switch (this.props.size) {
50
+ case 0 /* Regular */:
51
+ return this.getRegularSymbols();
52
+ case 1 /* Small */:
53
+ return this.getSmallSymbols();
54
+ case 2 /* Tiny */:
55
+ return this.getTinySymbols();
56
+ }
57
+ }
58
+ }
59
+ class AdvancedOptions extends React.Component {
60
+ render() {
61
+ const trans = this.props.translator.load('jupyterlab');
62
+ if (this.props.size === 0 /* Regular */) {
63
+ return (React.createElement("div", { className: AdvancedOptionsContainerStyle },
64
+ React.createElement("div", { className: AdvancedOptionsStyle },
65
+ React.createElement("a", { className: AdvancedOptionsLinkStyle(this.props.size), onClick: () => this.props.toggleSelectors() }, this.props.showSelectors
66
+ ? trans.__('Hide Selectors')
67
+ : trans.__('Show Selectors')),
68
+ React.createElement("a", { className: classes(AdvancedOptionsLinkStyle(this.props.size)), onClick: () => this.props.resetShortcuts() }, trans.__('Reset All')))));
69
+ }
70
+ else {
71
+ return (React.createElement("div", { className: classes(AdvancedOptionsStyle, AdvancedOptionsSmallStyle) },
72
+ React.createElement("a", { className: AdvancedOptionsLinkStyle(this.props.size), onClick: () => this.props.toggleSelectors() }, this.props.showSelectors
73
+ ? trans.__('Hide Selectors')
74
+ : trans.__('Show Selectors')),
75
+ React.createElement("a", { className: classes(AdvancedOptionsLinkStyle(this.props.size)), onClick: () => this.props.resetShortcuts() }, trans.__('Reset All'))));
76
+ }
77
+ }
78
+ }
79
+ /** React component for top navigation */
80
+ export class TopNav extends React.Component {
81
+ constructor(props) {
82
+ super(props);
83
+ this.getSize = (width) => {
84
+ if (width < 730) {
85
+ return 2 /* Tiny */;
86
+ }
87
+ else if (width < 1260) {
88
+ return 1 /* Small */;
89
+ }
90
+ else {
91
+ return 0 /* Regular */;
92
+ }
93
+ };
94
+ this.addMenuCommands();
95
+ this.menu = this.props.external.createMenu();
96
+ this.menu.addItem({ command: CommandIDs.showSelectors });
97
+ this.menu.addItem({ command: CommandIDs.resetAll });
98
+ }
99
+ addMenuCommands() {
100
+ const trans = this.props.external.translator.load('jupyterlab');
101
+ if (!this.props.external.hasCommand(CommandIDs.showSelectors)) {
102
+ this.props.external.addCommand(CommandIDs.showSelectors, {
103
+ label: trans.__('Toggle Selectors'),
104
+ caption: trans.__('Toggle command selectors'),
105
+ execute: () => {
106
+ this.props.toggleSelectors();
107
+ }
108
+ });
109
+ }
110
+ if (!this.props.external.hasCommand(CommandIDs.resetAll)) {
111
+ this.props.external.addCommand(CommandIDs.resetAll, {
112
+ label: trans.__('Reset All'),
113
+ caption: trans.__('Reset all shortcuts'),
114
+ execute: () => {
115
+ this.props.resetShortcuts();
116
+ }
117
+ });
118
+ }
119
+ }
120
+ getShortCutTitleItem(title) {
121
+ return (React.createElement("div", { className: CellStyle },
122
+ React.createElement(ShortcutTitleItem, { title: title, updateSort: this.props.updateSort, active: this.props.currentSort })));
123
+ }
124
+ render() {
125
+ const trans = this.props.external.translator.load('jupyterlab');
126
+ return (React.createElement("div", { className: TopStyle },
127
+ React.createElement("div", { className: TopNavStyle },
128
+ React.createElement(Symbols, { size: this.getSize(this.props.width) }),
129
+ React.createElement("div", { className: SearchContainerStyle },
130
+ React.createElement("input", { onChange: event => this.props.updateSearchQuery(event), className: SearchStyle, placeholder: trans.__('Search') })),
131
+ React.createElement(AdvancedOptions, { size: this.getSize(this.props.width), toggleSelectors: this.props.toggleSelectors, showSelectors: this.props.showSelectors, resetShortcuts: this.props.resetShortcuts, menu: this.menu, translator: this.props.external.translator })),
132
+ React.createElement("div", { className: HeaderRowContainerStyle },
133
+ React.createElement("div", { className: HeaderRowStyle },
134
+ this.getShortCutTitleItem(trans.__('Category')),
135
+ this.getShortCutTitleItem(trans.__('Command')),
136
+ React.createElement("div", { className: CellStyle },
137
+ React.createElement("div", { className: "title-div" }, trans.__('Shortcut'))),
138
+ this.getShortCutTitleItem(trans.__('Source')),
139
+ this.props.showSelectors &&
140
+ this.getShortCutTitleItem(trans.__('Selectors'))))));
141
+ }
142
+ }
143
+ //# sourceMappingURL=TopNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopNav.js","sourceRoot":"","sources":["../../src/components/TopNav.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './ShortcutUI';
2
+ export { IShortcutUIexternal } from './TopNav';
@@ -0,0 +1,2 @@
1
+ export * from './ShortcutUI';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC"}
package/lib/index.js CHANGED
@@ -6,8 +6,24 @@
6
6
  */
7
7
  import { ISettingRegistry, SettingRegistry } from '@jupyterlab/settingregistry';
8
8
  import { ITranslator } from '@jupyterlab/translation';
9
+ import { IFormComponentRegistry } from '@jupyterlab/ui-components';
9
10
  import { JSONExt } from '@lumino/coreutils';
10
11
  import { DisposableSet } from '@lumino/disposable';
12
+ import { Menu } from '@lumino/widgets';
13
+ import { renderShortCut } from './renderer';
14
+ function getExternalForJupyterLab(settingRegistry, app, translator) {
15
+ const { commands } = app;
16
+ const shortcutPluginLocation = '@jupyterlab/shortcuts-extension:shortcuts';
17
+ return {
18
+ translator,
19
+ getAllShortCutSettings: () => settingRegistry.reload(shortcutPluginLocation),
20
+ removeShortCut: (key) => settingRegistry.remove(shortcutPluginLocation, key),
21
+ createMenu: () => new Menu({ commands }),
22
+ hasCommand: (id) => commands.hasCommand(id),
23
+ addCommand: (id, options) => commands.addCommand(id, options),
24
+ getLabel: (id) => commands.label(id)
25
+ };
26
+ }
11
27
  /**
12
28
  * The default shortcuts extension.
13
29
  *
@@ -40,11 +56,17 @@ import { DisposableSet } from '@lumino/disposable';
40
56
  const shortcuts = {
41
57
  id: '@jupyterlab/shortcuts-extension:shortcuts',
42
58
  requires: [ISettingRegistry, ITranslator],
43
- activate: async (app, registry, translator) => {
59
+ optional: [IFormComponentRegistry],
60
+ activate: async (app, registry, translator, editorRegistry) => {
44
61
  const trans = translator.load('jupyterlab');
45
62
  const { commands } = app;
46
63
  let canonical;
47
64
  let loaded = {};
65
+ if (editorRegistry) {
66
+ editorRegistry.addRenderer('shortcuts', (props) => {
67
+ return renderShortCut(Object.assign({ external: getExternalForJupyterLab(registry, app, translator) }, props));
68
+ });
69
+ }
48
70
  /**
49
71
  * Populate the plugin's schema defaults.
50
72
  */