@theia/core 1.18.0-next.de7b81be → 1.20.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 (291) hide show
  1. package/LICENSE +642 -0
  2. package/README.md +3 -2
  3. package/lib/browser/about-dialog.d.ts.map +1 -1
  4. package/lib/browser/about-dialog.js +1 -1
  5. package/lib/browser/about-dialog.js.map +1 -1
  6. package/lib/browser/authentication-service.d.ts.map +1 -1
  7. package/lib/browser/authentication-service.js +1 -1
  8. package/lib/browser/authentication-service.js.map +1 -1
  9. package/lib/browser/color-registry.d.ts +3 -69
  10. package/lib/browser/color-registry.d.ts.map +1 -1
  11. package/lib/browser/color-registry.js +13 -27
  12. package/lib/browser/color-registry.js.map +1 -1
  13. package/lib/browser/common-frontend-contribution.d.ts +7 -0
  14. package/lib/browser/common-frontend-contribution.d.ts.map +1 -1
  15. package/lib/browser/common-frontend-contribution.js +138 -121
  16. package/lib/browser/common-frontend-contribution.js.map +1 -1
  17. package/lib/browser/core-preferences.d.ts +2 -0
  18. package/lib/browser/core-preferences.d.ts.map +1 -1
  19. package/lib/browser/core-preferences.js +33 -18
  20. package/lib/browser/core-preferences.js.map +1 -1
  21. package/lib/browser/dialogs.d.ts +6 -0
  22. package/lib/browser/dialogs.d.ts.map +1 -1
  23. package/lib/browser/dialogs.js +10 -3
  24. package/lib/browser/dialogs.js.map +1 -1
  25. package/lib/browser/frontend-application-module.d.ts.map +1 -1
  26. package/lib/browser/frontend-application-module.js +3 -0
  27. package/lib/browser/frontend-application-module.js.map +1 -1
  28. package/lib/browser/frontend-application.d.ts +6 -0
  29. package/lib/browser/frontend-application.d.ts.map +1 -1
  30. package/lib/browser/frontend-application.js +13 -0
  31. package/lib/browser/frontend-application.js.map +1 -1
  32. package/lib/browser/index.d.ts +1 -0
  33. package/lib/browser/index.d.ts.map +1 -1
  34. package/lib/browser/index.js +1 -0
  35. package/lib/browser/index.js.map +1 -1
  36. package/lib/browser/keybinding.spec.js +5 -0
  37. package/lib/browser/keybinding.spec.js.map +1 -1
  38. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.d.ts.map +1 -1
  39. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js +16 -11
  40. package/lib/browser/keyboard/browser-keyboard-frontend-contribution.js.map +1 -1
  41. package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts +1 -1
  42. package/lib/browser/keyboard/browser-keyboard-layout-provider.d.ts.map +1 -1
  43. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js +6 -4
  44. package/lib/browser/keyboard/browser-keyboard-layout-provider.spec.js.map +1 -1
  45. package/lib/browser/keyboard/keys.d.ts +2 -251
  46. package/lib/browser/keyboard/keys.d.ts.map +1 -1
  47. package/lib/browser/keyboard/keys.js +12 -614
  48. package/lib/browser/keyboard/keys.js.map +1 -1
  49. package/lib/browser/menu/browser-context-menu-renderer.d.ts +1 -1
  50. package/lib/browser/menu/browser-context-menu-renderer.d.ts.map +1 -1
  51. package/lib/browser/menu/browser-menu-plugin.d.ts +3 -0
  52. package/lib/browser/menu/browser-menu-plugin.d.ts.map +1 -1
  53. package/lib/browser/menu/browser-menu-plugin.js +24 -4
  54. package/lib/browser/menu/browser-menu-plugin.js.map +1 -1
  55. package/lib/browser/messaging/ws-connection-provider.d.ts +3 -3
  56. package/lib/browser/messaging/ws-connection-provider.d.ts.map +1 -1
  57. package/lib/browser/messaging/ws-connection-provider.js +14 -4
  58. package/lib/browser/messaging/ws-connection-provider.js.map +1 -1
  59. package/lib/browser/{nls.d.ts → nls-loader.d.ts} +1 -6
  60. package/lib/browser/nls-loader.d.ts.map +1 -0
  61. package/lib/browser/nls-loader.js +29 -0
  62. package/lib/browser/nls-loader.js.map +1 -0
  63. package/lib/browser/progress-status-bar-item.d.ts +1 -2
  64. package/lib/browser/progress-status-bar-item.d.ts.map +1 -1
  65. package/lib/browser/progress-status-bar-item.js.map +1 -1
  66. package/lib/browser/quick-input/quick-command-frontend-contribution.d.ts.map +1 -1
  67. package/lib/browser/quick-input/quick-command-frontend-contribution.js +2 -1
  68. package/lib/browser/quick-input/quick-command-frontend-contribution.js.map +1 -1
  69. package/lib/browser/quick-input/quick-command-service.d.ts.map +1 -1
  70. package/lib/browser/quick-input/quick-command-service.js +2 -2
  71. package/lib/browser/quick-input/quick-command-service.js.map +1 -1
  72. package/lib/browser/quick-input/quick-input-service.d.ts +1 -201
  73. package/lib/browser/quick-input/quick-input-service.d.ts.map +1 -1
  74. package/lib/browser/quick-input/quick-input-service.js +11 -93
  75. package/lib/browser/quick-input/quick-input-service.js.map +1 -1
  76. package/lib/browser/quick-input/quick-view-service.d.ts +1 -2
  77. package/lib/browser/quick-input/quick-view-service.d.ts.map +1 -1
  78. package/lib/browser/quick-input/quick-view-service.js.map +1 -1
  79. package/lib/browser/shell/application-shell.d.ts +3 -1
  80. package/lib/browser/shell/application-shell.d.ts.map +1 -1
  81. package/lib/browser/shell/application-shell.js +1 -2
  82. package/lib/browser/shell/application-shell.js.map +1 -1
  83. package/lib/browser/shell/shell-layout-restorer.d.ts.map +1 -1
  84. package/lib/browser/shell/shell-layout-restorer.js +5 -3
  85. package/lib/browser/shell/shell-layout-restorer.js.map +1 -1
  86. package/lib/browser/shell/tab-bar-decorator.d.ts +1 -1
  87. package/lib/browser/shell/tab-bar-decorator.d.ts.map +1 -1
  88. package/lib/browser/shell/tab-bar-decorator.js.map +1 -1
  89. package/lib/browser/shell/tab-bar-toolbar.d.ts.map +1 -1
  90. package/lib/browser/shell/tab-bar-toolbar.js +2 -1
  91. package/lib/browser/shell/tab-bar-toolbar.js.map +1 -1
  92. package/lib/browser/shell/tab-bars.d.ts +14 -1
  93. package/lib/browser/shell/tab-bars.d.ts.map +1 -1
  94. package/lib/browser/shell/tab-bars.js +99 -7
  95. package/lib/browser/shell/tab-bars.js.map +1 -1
  96. package/lib/browser/status-bar/status-bar.d.ts +3 -1
  97. package/lib/browser/status-bar/status-bar.d.ts.map +1 -1
  98. package/lib/browser/status-bar/status-bar.js +16 -2
  99. package/lib/browser/status-bar/status-bar.js.map +1 -1
  100. package/lib/browser/storage-service.spec.js +1 -1
  101. package/lib/browser/storage-service.spec.js.map +1 -1
  102. package/lib/browser/theming.d.ts +5 -14
  103. package/lib/browser/theming.d.ts.map +1 -1
  104. package/lib/browser/theming.js +14 -0
  105. package/lib/browser/theming.js.map +1 -1
  106. package/lib/browser/tooltip-service.d.ts +52 -0
  107. package/lib/browser/tooltip-service.d.ts.map +1 -0
  108. package/lib/browser/tooltip-service.js +89 -0
  109. package/lib/browser/tooltip-service.js.map +1 -0
  110. package/lib/browser/tree/tree-model.d.ts.map +1 -1
  111. package/lib/browser/tree/tree-widget.js +1 -1
  112. package/lib/browser/view-container.d.ts +55 -14
  113. package/lib/browser/view-container.d.ts.map +1 -1
  114. package/lib/browser/view-container.js +284 -66
  115. package/lib/browser/view-container.js.map +1 -1
  116. package/lib/browser/window/default-window-service.js +2 -2
  117. package/lib/browser/window/default-window-service.js.map +1 -1
  118. package/lib/browser/window/window-service.d.ts +1 -7
  119. package/lib/browser/window/window-service.d.ts.map +1 -1
  120. package/lib/browser/window/window-service.js +1 -5
  121. package/lib/browser/window/window-service.js.map +1 -1
  122. package/lib/browser/window-contribution.d.ts.map +1 -1
  123. package/lib/browser/window-contribution.js +2 -2
  124. package/lib/browser/window-contribution.js.map +1 -1
  125. package/lib/common/cancellation.d.ts +3 -0
  126. package/lib/common/cancellation.d.ts.map +1 -1
  127. package/lib/common/cancellation.js +8 -1
  128. package/lib/common/cancellation.js.map +1 -1
  129. package/lib/common/color.d.ts +84 -0
  130. package/lib/common/color.d.ts.map +1 -0
  131. package/lib/common/color.js +44 -0
  132. package/lib/common/color.js.map +1 -0
  133. package/lib/common/command.d.ts +1 -0
  134. package/lib/common/command.d.ts.map +1 -1
  135. package/lib/common/command.js +5 -1
  136. package/lib/common/command.js.map +1 -1
  137. package/lib/common/i18n/localization.d.ts +14 -0
  138. package/lib/common/i18n/localization.d.ts.map +1 -1
  139. package/lib/common/i18n/localization.js +54 -1
  140. package/lib/common/i18n/localization.js.map +1 -1
  141. package/lib/common/index.d.ts +1 -0
  142. package/lib/common/index.d.ts.map +1 -1
  143. package/lib/common/index.js +1 -0
  144. package/lib/common/index.js.map +1 -1
  145. package/lib/common/keys.d.ts +269 -0
  146. package/lib/common/keys.d.ts.map +1 -0
  147. package/lib/common/keys.js +634 -0
  148. package/lib/common/keys.js.map +1 -0
  149. package/lib/common/messaging/abstract-connection-provider.d.ts +1 -1
  150. package/lib/common/messaging/abstract-connection-provider.d.ts.map +1 -1
  151. package/lib/common/messaging/abstract-connection-provider.js +3 -1
  152. package/lib/common/messaging/abstract-connection-provider.js.map +1 -1
  153. package/lib/common/messaging/proxy-factory.js +1 -1
  154. package/lib/common/messaging/proxy-factory.js.map +1 -1
  155. package/lib/common/nls.d.ts +28 -0
  156. package/lib/common/nls.d.ts.map +1 -0
  157. package/lib/common/nls.js +91 -0
  158. package/lib/common/nls.js.map +1 -0
  159. package/lib/common/path.d.ts +6 -0
  160. package/lib/common/path.d.ts.map +1 -1
  161. package/lib/common/path.js +16 -4
  162. package/lib/common/path.js.map +1 -1
  163. package/lib/common/path.spec.js +12 -0
  164. package/lib/common/path.spec.js.map +1 -1
  165. package/lib/common/promise-util.d.ts +2 -2
  166. package/lib/common/promise-util.d.ts.map +1 -1
  167. package/lib/common/promise-util.js.map +1 -1
  168. package/lib/common/quick-pick-service.d.ts +219 -1
  169. package/lib/common/quick-pick-service.d.ts.map +1 -1
  170. package/lib/common/quick-pick-service.js +108 -1
  171. package/lib/common/quick-pick-service.js.map +1 -1
  172. package/lib/common/theme.d.ts +30 -0
  173. package/lib/common/theme.d.ts.map +1 -0
  174. package/lib/common/theme.js +18 -0
  175. package/lib/common/theme.js.map +1 -0
  176. package/lib/common/window.d.ts +29 -0
  177. package/lib/common/window.d.ts.map +1 -0
  178. package/lib/common/window.js +23 -0
  179. package/lib/common/window.js.map +1 -0
  180. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts +9 -5
  181. package/lib/electron-browser/menu/electron-context-menu-renderer.d.ts.map +1 -1
  182. package/lib/electron-browser/menu/electron-context-menu-renderer.js +40 -15
  183. package/lib/electron-browser/menu/electron-context-menu-renderer.js.map +1 -1
  184. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts +5 -8
  185. package/lib/electron-browser/menu/electron-main-menu-factory.d.ts.map +1 -1
  186. package/lib/electron-browser/menu/electron-main-menu-factory.js +10 -17
  187. package/lib/electron-browser/menu/electron-main-menu-factory.js.map +1 -1
  188. package/lib/electron-browser/menu/electron-menu-contribution.d.ts +15 -7
  189. package/lib/electron-browser/menu/electron-menu-contribution.d.ts.map +1 -1
  190. package/lib/electron-browser/menu/electron-menu-contribution.js +112 -42
  191. package/lib/electron-browser/menu/electron-menu-contribution.js.map +1 -1
  192. package/lib/electron-browser/window/electron-window-preferences.d.ts +1 -0
  193. package/lib/electron-browser/window/electron-window-preferences.d.ts.map +1 -1
  194. package/lib/electron-browser/window/electron-window-preferences.js +12 -1
  195. package/lib/electron-browser/window/electron-window-preferences.js.map +1 -1
  196. package/lib/electron-browser/window/electron-window-service.d.ts +1 -1
  197. package/lib/electron-browser/window/electron-window-service.d.ts.map +1 -1
  198. package/lib/electron-common/electron-main-window-service.d.ts +1 -1
  199. package/lib/electron-common/electron-main-window-service.d.ts.map +1 -1
  200. package/lib/electron-common/messaging/electron-messages.d.ts +20 -0
  201. package/lib/electron-common/messaging/electron-messages.d.ts.map +1 -0
  202. package/lib/electron-common/messaging/electron-messages.js +23 -0
  203. package/lib/electron-common/messaging/electron-messages.js.map +1 -0
  204. package/lib/electron-main/electron-main-application.d.ts +6 -0
  205. package/lib/electron-main/electron-main-application.d.ts.map +1 -1
  206. package/lib/electron-main/electron-main-application.js +80 -23
  207. package/lib/electron-main/electron-main-application.js.map +1 -1
  208. package/lib/electron-main/electron-main-window-service-impl.d.ts +1 -1
  209. package/lib/electron-main/electron-main-window-service-impl.d.ts.map +1 -1
  210. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts +1 -1
  211. package/lib/electron-main/messaging/electron-messaging-contribution.d.ts.map +1 -1
  212. package/lib/electron-main/messaging/electron-messaging-contribution.js +1 -2
  213. package/lib/electron-main/messaging/electron-messaging-contribution.js.map +1 -1
  214. package/package.json +13 -9
  215. package/shared/@theia/application-package/lib/api.d.ts +1 -0
  216. package/shared/@theia/application-package/lib/api.js +1 -0
  217. package/src/browser/about-dialog.tsx +2 -2
  218. package/src/browser/authentication-service.ts +1 -2
  219. package/src/browser/color-registry.ts +3 -85
  220. package/src/browser/common-frontend-contribution.ts +116 -99
  221. package/src/browser/core-preferences.ts +37 -18
  222. package/src/browser/dialogs.ts +10 -3
  223. package/src/browser/frontend-application-module.ts +4 -0
  224. package/src/browser/frontend-application.ts +13 -0
  225. package/src/browser/index.ts +1 -0
  226. package/src/browser/keybinding.spec.ts +8 -1
  227. package/src/browser/keyboard/browser-keyboard-frontend-contribution.ts +16 -11
  228. package/src/browser/keyboard/browser-keyboard-layout-provider.spec.ts +10 -4
  229. package/src/browser/keyboard/keys.ts +2 -675
  230. package/src/browser/menu/browser-context-menu-renderer.ts +1 -1
  231. package/src/browser/menu/browser-menu-plugin.ts +25 -5
  232. package/src/browser/messaging/ws-connection-provider.ts +13 -4
  233. package/src/browser/nls-loader.ts +26 -0
  234. package/src/browser/progress-status-bar-item.ts +1 -2
  235. package/src/browser/quick-input/quick-command-frontend-contribution.ts +2 -2
  236. package/src/browser/quick-input/quick-command-service.ts +2 -2
  237. package/src/browser/quick-input/quick-input-service.ts +1 -278
  238. package/src/browser/quick-input/quick-view-service.ts +1 -2
  239. package/src/browser/shell/application-shell.ts +4 -3
  240. package/src/browser/shell/shell-layout-restorer.ts +4 -3
  241. package/src/browser/shell/tab-bar-decorator.ts +1 -1
  242. package/src/browser/shell/tab-bar-toolbar.tsx +3 -1
  243. package/src/browser/shell/tab-bars.ts +103 -8
  244. package/src/browser/status-bar/status-bar.tsx +16 -1
  245. package/src/browser/storage-service.spec.ts +1 -1
  246. package/src/browser/style/alert-messages.css +1 -0
  247. package/src/browser/style/index.css +5 -0
  248. package/src/browser/style/menus.css +10 -1
  249. package/src/browser/style/sidepanel.css +9 -3
  250. package/src/browser/style/tabs.css +30 -0
  251. package/src/browser/style/tooltip.css +28 -0
  252. package/src/browser/style/view-container.css +9 -9
  253. package/src/browser/theming.ts +6 -17
  254. package/src/browser/tooltip-service.tsx +98 -0
  255. package/src/browser/tree/tree-model.ts +1 -1
  256. package/src/browser/tree/tree-widget.tsx +1 -1
  257. package/src/browser/view-container.ts +312 -80
  258. package/src/browser/window/default-window-service.ts +2 -2
  259. package/src/browser/window/window-service.ts +1 -9
  260. package/src/browser/window-contribution.ts +2 -2
  261. package/src/common/cancellation.ts +7 -0
  262. package/src/common/color.ts +100 -0
  263. package/src/common/command.ts +11 -1
  264. package/src/common/i18n/localization.ts +54 -0
  265. package/src/common/i18n/nls.metadata.json +20421 -0
  266. package/src/common/index.ts +1 -0
  267. package/src/common/keys.ts +693 -0
  268. package/src/common/messaging/abstract-connection-provider.ts +3 -1
  269. package/src/common/messaging/proxy-factory.ts +1 -1
  270. package/src/common/nls.ts +104 -0
  271. package/src/common/path.spec.ts +15 -0
  272. package/src/common/path.ts +16 -4
  273. package/src/common/promise-util.ts +3 -3
  274. package/src/common/quick-pick-service.ts +299 -3
  275. package/src/common/theme.ts +32 -0
  276. package/src/common/window.ts +30 -0
  277. package/src/electron-browser/menu/electron-context-menu-renderer.ts +38 -16
  278. package/src/electron-browser/menu/electron-main-menu-factory.ts +10 -15
  279. package/src/electron-browser/menu/electron-menu-contribution.ts +129 -39
  280. package/src/electron-browser/menu/electron-menu-style.css +84 -0
  281. package/src/electron-browser/window/electron-window-preferences.ts +13 -1
  282. package/src/electron-browser/window/electron-window-service.ts +1 -1
  283. package/src/electron-common/electron-main-window-service.ts +1 -1
  284. package/src/electron-common/messaging/electron-messages.ts +20 -0
  285. package/src/electron-main/electron-main-application.ts +86 -20
  286. package/src/electron-main/electron-main-window-service-impl.ts +1 -1
  287. package/src/electron-main/messaging/electron-messaging-contribution.ts +1 -2
  288. package/lib/browser/nls.d.ts.map +0 -1
  289. package/lib/browser/nls.js +0 -64
  290. package/lib/browser/nls.js.map +0 -1
  291. package/src/browser/nls.ts +0 -65
@@ -25,6 +25,7 @@ import { FrontendApplicationStateService } from './frontend-application-state';
25
25
  import { preventNavigation, parseCssTime, animationFrame } from './browser';
26
26
  import { CorePreferences } from './core-preferences';
27
27
  import { WindowService } from './window/window-service';
28
+ import { TooltipService } from './tooltip-service';
28
29
 
29
30
  /**
30
31
  * Clients can implement to get a callback for contributing widgets to a shell on start.
@@ -100,6 +101,9 @@ export class FrontendApplication {
100
101
  @inject(WindowService)
101
102
  protected readonly windowsService: WindowService;
102
103
 
104
+ @inject(TooltipService)
105
+ protected readonly tooltipService: TooltipService;
106
+
103
107
  constructor(
104
108
  @inject(CommandRegistry) protected readonly commands: CommandRegistry,
105
109
  @inject(MenuModelRegistry) protected readonly menus: MenuModelRegistry,
@@ -130,6 +134,7 @@ export class FrontendApplication {
130
134
 
131
135
  const host = await this.getHost();
132
136
  this.attachShell(host);
137
+ this.attachTooltip(host);
133
138
  await animationFrame();
134
139
  this.stateService.state = 'attached_shell';
135
140
 
@@ -221,6 +226,13 @@ export class FrontendApplication {
221
226
  Widget.attach(this.shell, host, ref);
222
227
  }
223
228
 
229
+ /**
230
+ * Attach the tooltip container to the host element.
231
+ */
232
+ protected attachTooltip(host: HTMLElement): void {
233
+ this.tooltipService.attachTo(host);
234
+ }
235
+
224
236
  /**
225
237
  * If a startup indicator is present, it is first hidden with the `theia-hidden` CSS class and then
226
238
  * removed after a while. The delay until removal is taken from the CSS transition duration.
@@ -231,6 +243,7 @@ export class FrontendApplication {
231
243
  return new Promise(resolve => {
232
244
  window.requestAnimationFrame(() => {
233
245
  startupElem.classList.add('theia-hidden');
246
+ console.log(`Finished loading frontend application after ${(performance.now() / 1000).toFixed(3)} seconds`);
234
247
  const preloadStyle = window.getComputedStyle(startupElem);
235
248
  const transitionDuration = parseCssTime(preloadStyle.transitionDuration, 0);
236
249
  window.setTimeout(() => {
@@ -40,3 +40,4 @@ export * from './diff-uris';
40
40
  export * from './core-preferences';
41
41
  export * from './view-container';
42
42
  export * from './breadcrumbs';
43
+ export * from './tooltip-service';
@@ -36,6 +36,9 @@ import * as os from '../common/os';
36
36
  import * as chai from 'chai';
37
37
  import * as sinon from 'sinon';
38
38
  import { Emitter, Event } from '../common/event';
39
+ import { bindPreferenceService } from './frontend-application-bindings';
40
+ import { FrontendApplicationConfigProvider } from './frontend-application-config-provider';
41
+ import { ApplicationProps } from '@theia/application-package/lib/';
39
42
 
40
43
  disableJSDOM();
41
44
 
@@ -87,6 +90,7 @@ before(async () => {
87
90
  bind(ContextKeyService).toSelf().inSingletonScope();
88
91
  bind(FrontendApplicationStateService).toSelf().inSingletonScope();
89
92
  bind(CorePreferences).toConstantValue(<CorePreferences>{});
93
+ bindPreferenceService(bind);
90
94
  });
91
95
 
92
96
  testContainer.load(module);
@@ -102,6 +106,10 @@ describe('keybindings', () => {
102
106
 
103
107
  before(() => {
104
108
  disableJSDOM = enableJSDOM();
109
+ FrontendApplicationConfigProvider.set({
110
+ ...ApplicationProps.DEFAULT.frontend.config,
111
+ 'applicationName': 'test'
112
+ });
105
113
  });
106
114
 
107
115
  after(() => {
@@ -537,4 +545,3 @@ function isKeyBindingRegistered(keybinding: Keybinding): boolean {
537
545
  );
538
546
  return keyBindingFound;
539
547
  }
540
-
@@ -19,16 +19,18 @@ import { isOSX } from '../../common/os';
19
19
  import { CommandContribution, CommandRegistry, Command } from '../../common/command';
20
20
  import { BrowserKeyboardLayoutProvider, KeyboardLayoutData } from './browser-keyboard-layout-provider';
21
21
  import { QuickPickValue, QuickInputService, QuickPickItem } from '../quick-input';
22
+ import { nls } from '../../common/nls';
22
23
 
23
24
  export namespace KeyboardCommands {
24
25
 
25
26
  const KEYBOARD_CATEGORY = 'Keyboard';
27
+ const KEYBOARD_CATEGORY_KEY = nls.getDefaultKey(KEYBOARD_CATEGORY);
26
28
 
27
- export const CHOOSE_KEYBOARD_LAYOUT: Command = {
29
+ export const CHOOSE_KEYBOARD_LAYOUT = Command.toLocalizedCommand({
28
30
  id: 'core.keyboard.choose',
29
31
  category: KEYBOARD_CATEGORY,
30
32
  label: 'Choose Keyboard Layout',
31
- };
33
+ }, 'theia/core/keyboard/choose', KEYBOARD_CATEGORY_KEY);
32
34
 
33
35
  }
34
36
 
@@ -50,9 +52,9 @@ export class BrowserKeyboardFrontendContribution implements CommandContribution
50
52
  protected async chooseLayout(): Promise<KeyboardLayoutData | undefined> {
51
53
  const current = this.layoutProvider.currentLayoutData;
52
54
  const autodetect: QuickPickValue<'autodetect'> = {
53
- label: 'Auto-detect',
54
- description: this.layoutProvider.currentLayoutSource !== 'user-choice' ? `(current: ${current.name})` : undefined,
55
- detail: 'Try to detect the keyboard layout from browser information and pressed keys.',
55
+ label: nls.localizeByDefault('Auto-detect'),
56
+ description: this.layoutProvider.currentLayoutSource !== 'user-choice' ? nls.localize('theia/core/keyboard/current', '(current: {0})', current.name) : undefined,
57
+ detail: nls.localize('theia/core/keyboard/tryDetect', 'Try to detect the keyboard layout from browser information and pressed keys.'),
56
58
  value: 'autodetect'
57
59
  };
58
60
  const pcLayouts = this.layoutProvider.allLayoutData
@@ -64,20 +66,22 @@ export class BrowserKeyboardFrontendContribution implements CommandContribution
64
66
  .sort((a, b) => compare(a.name, b.name))
65
67
  .map(layout => this.toQuickPickValue(layout, current === layout));
66
68
  let layouts: Array<QuickPickValue<KeyboardLayoutData | 'autodetect'> | QuickPickItem>;
69
+ const macKeyboards = nls.localize('theia/core/keyboard/mac', 'Mac Keyboards');
70
+ const pcKeyboards = nls.localize('theia/core/keyboard/pc', 'PC Keyboards');
67
71
  if (isOSX) {
68
72
  layouts = [
69
73
  autodetect,
70
- { type: 'separator', label: 'Mac Keyboards' }, ...macLayouts,
71
- { type: 'separator', label: 'PC Keyboards' }, ...pcLayouts
74
+ { type: 'separator', label: macKeyboards }, ...macLayouts,
75
+ { type: 'separator', label: pcKeyboards }, ...pcLayouts
72
76
  ];
73
77
  } else {
74
78
  layouts = [
75
79
  autodetect,
76
- { type: 'separator', label: 'PC Keyboards' }, ...pcLayouts,
77
- { type: 'separator', label: 'Mac Keyboards' }, ...macLayouts
80
+ { type: 'separator', label: pcKeyboards }, ...pcLayouts,
81
+ { type: 'separator', label: macKeyboards }, ...macLayouts
78
82
  ];
79
83
  }
80
- const selectedItem = await this.quickInputService?.showQuickPick(layouts, { placeholder: 'Choose a keyboard layout' });
84
+ const selectedItem = await this.quickInputService?.showQuickPick(layouts, { placeholder: nls.localize('theia/core/keyboard/chooseLayout', 'Choose a keyboard layout') });
81
85
  if (selectedItem && ('value' in selectedItem)) {
82
86
  return this.layoutProvider.setLayoutData(selectedItem.value);
83
87
  }
@@ -86,7 +90,8 @@ export class BrowserKeyboardFrontendContribution implements CommandContribution
86
90
  protected toQuickPickValue(layout: KeyboardLayoutData, isCurrent: boolean): QuickPickValue<KeyboardLayoutData> {
87
91
  return {
88
92
  label: layout.name,
89
- description: `${layout.hardware === 'mac' ? 'Mac' : 'PC'} (${layout.language})${isCurrent ? ' - current layout' : ''}`,
93
+ description:
94
+ `${layout.hardware === 'mac' ? 'Mac' : 'PC'} (${layout.language})${isCurrent ? nls.localize('theia/core/keyboard/currentLayout', ' - current layout') : ''}`,
90
95
  value: layout
91
96
  };
92
97
  }
@@ -14,6 +14,10 @@
14
14
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
15
15
  ********************************************************************************/
16
16
 
17
+ import { enableJSDOM } from '../test/jsdom';
18
+
19
+ let disableJSDOM = enableJSDOM();
20
+
17
21
  import { Container, injectable } from 'inversify';
18
22
  import type { IMacKeyboardLayoutInfo } from 'native-keymap';
19
23
  import * as chai from 'chai';
@@ -26,11 +30,15 @@ import { WindowService } from '../window/window-service';
26
30
  import { BrowserKeyboardLayoutProvider } from './browser-keyboard-layout-provider';
27
31
  import { Key } from './keys';
28
32
 
33
+ disableJSDOM();
34
+
29
35
  describe('browser keyboard layout provider', function (): void {
30
36
 
31
37
  let stubOSX: sinon.SinonStub;
32
38
  let stubWindows: sinon.SinonStub;
33
- let stubNavigator: sinon.SinonStub;
39
+
40
+ before(() => disableJSDOM = enableJSDOM());
41
+ after(() => disableJSDOM());
34
42
 
35
43
  const setup = (system: 'mac' | 'win' | 'linux') => {
36
44
  switch (system) {
@@ -47,7 +55,6 @@ describe('browser keyboard layout provider', function (): void {
47
55
  stubWindows = sinon.stub(os, 'isWindows').value(false);
48
56
  }
49
57
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
50
- stubNavigator = sinon.stub(global, 'navigator' as any).value({});
51
58
  const container = new Container();
52
59
  container.bind(BrowserKeyboardLayoutProvider).toSelf();
53
60
  container.bind(ILogger).to(MockLogger);
@@ -61,7 +68,6 @@ describe('browser keyboard layout provider', function (): void {
61
68
  afterEach(() => {
62
69
  stubOSX.restore();
63
70
  stubWindows.restore();
64
- stubNavigator.restore();
65
71
  });
66
72
 
67
73
  it('detects German Mac layout', async () => {
@@ -83,7 +89,7 @@ describe('browser keyboard layout provider', function (): void {
83
89
  currentLayout = l;
84
90
  });
85
91
 
86
- chai.expect((currentLayout.info as IMacKeyboardLayoutInfo).id).to.equal('com.apple.keylayout.US');
92
+ chai.expect((currentLayout.info as IMacKeyboardLayoutInfo).id).to.equal('com.apple.keylayout.German');
87
93
  service.validateKey({ code: Key.SEMICOLON.code, character: 'm' });
88
94
  chai.expect((currentLayout.info as IMacKeyboardLayoutInfo).id).to.equal('com.apple.keylayout.French');
89
95
  });