@codingame/monaco-vscode-1b4486de-4fe4-59c4-9e6d-34f265ff6625-common 17.2.1 → 18.0.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.
- package/package.json +8 -8
- package/vscode/src/vs/workbench/contrib/externalUriOpener/common/externalUriOpenerService.js +4 -4
- package/vscode/src/vs/workbench/contrib/remote/browser/remoteExplorer.js +17 -17
- package/vscode/src/vs/workbench/contrib/remote/browser/remoteIcons.js +17 -17
- package/vscode/src/vs/workbench/contrib/remote/browser/tunnelView.d.ts +1 -1
- package/vscode/src/vs/workbench/contrib/remote/browser/tunnelView.js +62 -62
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@codingame/monaco-vscode-1b4486de-4fe4-59c4-9e6d-34f265ff6625-common",
|
3
|
-
"version": "
|
3
|
+
"version": "18.0.0",
|
4
4
|
"private": false,
|
5
5
|
"description": "VSCode public API plugged on the monaco editor - common package (remote-agent, view-common)",
|
6
6
|
"keywords": [],
|
@@ -15,13 +15,13 @@
|
|
15
15
|
},
|
16
16
|
"type": "module",
|
17
17
|
"dependencies": {
|
18
|
-
"@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common": "
|
19
|
-
"@codingame/monaco-vscode-422642f2-7e3a-5c1c-9e1e-1d3ef1817346-common": "
|
20
|
-
"@codingame/monaco-vscode-
|
21
|
-
"@codingame/monaco-vscode-
|
22
|
-
"@codingame/monaco-vscode-
|
23
|
-
"@codingame/monaco-vscode-
|
24
|
-
"@codingame/monaco-vscode-
|
18
|
+
"@codingame/monaco-vscode-2a94c04a-b85b-5669-b06b-89c1bfa11cb9-common": "18.0.0",
|
19
|
+
"@codingame/monaco-vscode-422642f2-7e3a-5c1c-9e1e-1d3ef1817346-common": "18.0.0",
|
20
|
+
"@codingame/monaco-vscode-501b06ab-3f58-516b-8a1a-c29d375d3da4-common": "18.0.0",
|
21
|
+
"@codingame/monaco-vscode-937ecbdf-94c7-5b16-aefa-ad78ae557a93-common": "18.0.0",
|
22
|
+
"@codingame/monaco-vscode-9a1a5840-af83-5d07-a156-ba32a36c5c4b-common": "18.0.0",
|
23
|
+
"@codingame/monaco-vscode-a8d3bd74-e63e-5327-96e8-4f931661e329-common": "18.0.0",
|
24
|
+
"@codingame/monaco-vscode-api": "18.0.0"
|
25
25
|
},
|
26
26
|
"exports": {
|
27
27
|
".": {
|
package/vscode/src/vs/workbench/contrib/externalUriOpener/common/externalUriOpenerService.js
CHANGED
@@ -128,15 +128,15 @@ let ExternalUriOpenerService = class ExternalUriOpenerService extends Disposable
|
|
128
128
|
}));
|
129
129
|
items.push({
|
130
130
|
label: isWeb
|
131
|
-
? ( localize(
|
132
|
-
: ( localize(
|
131
|
+
? ( localize(6942, 'Open in new browser window'))
|
132
|
+
: ( localize(6943, 'Open in default browser')),
|
133
133
|
opener: undefined
|
134
134
|
}, { type: 'separator' }, {
|
135
|
-
label: ( localize(
|
135
|
+
label: ( localize(6944, "Configure default opener...")),
|
136
136
|
opener: 'configureDefault'
|
137
137
|
});
|
138
138
|
const picked = await this.quickInputService.pick(items, {
|
139
|
-
placeHolder: ( localize(
|
139
|
+
placeHolder: ( localize(6945, "How would you like to open: {0}", (targetUri.toString())))
|
140
140
|
});
|
141
141
|
if (!picked) {
|
142
142
|
return true;
|
@@ -24,8 +24,8 @@ import { OperatingSystem, isWeb } from '@codingame/monaco-vscode-api/vscode/vs/b
|
|
24
24
|
import { TunnelPrivacyId } from '@codingame/monaco-vscode-api/vscode/vs/platform/tunnel/common/tunnel';
|
25
25
|
import { ITunnelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/tunnel/common/tunnel.service';
|
26
26
|
import { SyncDescriptor } from '@codingame/monaco-vscode-api/vscode/vs/platform/instantiation/common/descriptors';
|
27
|
-
import { ViewPaneContainer } from '@codingame/monaco-vscode-
|
28
|
-
import { NumberBadge } from '@codingame/monaco-vscode-
|
27
|
+
import { ViewPaneContainer } from '@codingame/monaco-vscode-a8d3bd74-e63e-5327-96e8-4f931661e329-common/vscode/vs/workbench/browser/parts/views/viewPaneContainer';
|
28
|
+
import { NumberBadge } from '@codingame/monaco-vscode-937ecbdf-94c7-5b16-aefa-ad78ae557a93-common/vscode/vs/workbench/services/activity/common/activity';
|
29
29
|
import { IActivityService } from '@codingame/monaco-vscode-api/vscode/vs/workbench/services/activity/common/activity.service';
|
30
30
|
import { portsViewIcon } from './remoteIcons.js';
|
31
31
|
import { Event } from '@codingame/monaco-vscode-api/vscode/vs/base/common/event';
|
@@ -54,12 +54,12 @@ let ForwardedPortsView = class ForwardedPortsView extends Disposable {
|
|
54
54
|
this.hasPortsInSession = false;
|
55
55
|
this._register(( Registry.as(Extensions.ViewsRegistry)).registerViewWelcomeContent(TUNNEL_VIEW_ID, {
|
56
56
|
content: this.environmentService.remoteAuthority ? ( localize(
|
57
|
-
|
57
|
+
9148,
|
58
58
|
"No forwarded ports. Forward a port to access your running services locally.\n[Forward a Port]({0})",
|
59
59
|
`command:${ForwardPortAction.INLINE_ID}`
|
60
60
|
))
|
61
61
|
: ( localize(
|
62
|
-
|
62
|
+
9149,
|
63
63
|
"No forwarded ports. Forward a port to access your locally running services over the internet.\n[Forward a Port]({0})",
|
64
64
|
`command:${ForwardPortAction.INLINE_ID}`
|
65
65
|
)),
|
@@ -75,7 +75,7 @@ let ForwardedPortsView = class ForwardedPortsView extends Disposable {
|
|
75
75
|
async getViewContainer() {
|
76
76
|
return ( Registry.as(Extensions.ViewContainersRegistry)).registerViewContainer({
|
77
77
|
id: TUNNEL_VIEW_CONTAINER_ID,
|
78
|
-
title: ( localize2(
|
78
|
+
title: ( localize2(9150, "Ports")),
|
79
79
|
icon: portsViewIcon,
|
80
80
|
ctorDescriptor: ( new SyncDescriptor(
|
81
81
|
ViewPaneContainer,
|
@@ -132,7 +132,7 @@ let ForwardedPortsView = class ForwardedPortsView extends Disposable {
|
|
132
132
|
this.activityBadge.value = this.activityService.showViewActivity(TUNNEL_VIEW_ID, {
|
133
133
|
badge: ( new NumberBadge(
|
134
134
|
this.remoteExplorerService.tunnelModel.forwarded.size,
|
135
|
-
n => n === 1 ? ( localize(
|
135
|
+
n => n === 1 ? ( localize(9151, "1 forwarded port")) : ( localize(9152, "{0} forwarded ports", n))
|
136
136
|
))
|
137
137
|
});
|
138
138
|
}
|
@@ -156,19 +156,19 @@ let ForwardedPortsView = class ForwardedPortsView extends Disposable {
|
|
156
156
|
const count = this.remoteExplorerService.tunnelModel.forwarded.size + this.remoteExplorerService.tunnelModel.detected.size;
|
157
157
|
const text = `${count}`;
|
158
158
|
if (count === 0) {
|
159
|
-
tooltip = ( localize(
|
159
|
+
tooltip = ( localize(9153, "No Ports Forwarded"));
|
160
160
|
}
|
161
161
|
else {
|
162
162
|
const allTunnels = Array.from(( this.remoteExplorerService.tunnelModel.forwarded.values()));
|
163
163
|
allTunnels.push(...Array.from(( this.remoteExplorerService.tunnelModel.detected.values())));
|
164
164
|
tooltip = ( localize(
|
165
|
-
|
165
|
+
9154,
|
166
166
|
"Forwarded Ports: {0}",
|
167
167
|
( allTunnels.map(forwarded => forwarded.remotePort)).join(', ')
|
168
168
|
));
|
169
169
|
}
|
170
170
|
return {
|
171
|
-
name: ( localize(
|
171
|
+
name: ( localize(9155, "Forwarded Ports")),
|
172
172
|
text: `$(radio-tower) ${text}`,
|
173
173
|
ariaLabel: tooltip,
|
174
174
|
tooltip,
|
@@ -273,19 +273,19 @@ let AutomaticPortForwarding = class AutomaticPortForwarding extends Disposable {
|
|
273
273
|
await this.configurationService.updateValue(PORT_AUTO_SOURCE_SETTING, PORT_AUTO_SOURCE_SETTING_HYBRID);
|
274
274
|
this.notificationService.notify({
|
275
275
|
message: ( localize(
|
276
|
-
|
276
|
+
9156,
|
277
277
|
"Over 20 ports have been automatically forwarded. The `process` based automatic port forwarding has been switched to `hybrid` in settings. Some ports may no longer be detected."
|
278
278
|
)),
|
279
279
|
severity: Severity.Warning,
|
280
280
|
actions: {
|
281
281
|
primary: [
|
282
|
-
( new Action('switchBack', ( localize(
|
282
|
+
( new Action('switchBack', ( localize(9157, "Undo")), undefined, true, async () => {
|
283
283
|
await this.configurationService.updateValue(PORT_AUTO_SOURCE_SETTING, PORT_AUTO_SOURCE_SETTING_PROCESS);
|
284
284
|
await this.configurationService.updateValue(PORT_AUTO_FALLBACK_SETTING, 0, ConfigurationTarget.WORKSPACE);
|
285
285
|
this.portListener?.dispose();
|
286
286
|
this.portListener = undefined;
|
287
287
|
})),
|
288
|
-
( new Action('showPortSourceSetting', ( localize(
|
288
|
+
( new Action('showPortSourceSetting', ( localize(9158, "Show Setting")), undefined, true, async () => {
|
289
289
|
await this.preferencesService.openSettings({
|
290
290
|
query: 'remote.autoForwardPortsSource'
|
291
291
|
});
|
@@ -495,14 +495,14 @@ class OnAutoForwardedAction extends Disposable {
|
|
495
495
|
const properties = await this.remoteExplorerService.tunnelModel.getAttributes([{ host: tunnel.tunnelRemoteHost, port: tunnel.tunnelRemotePort }], false);
|
496
496
|
const label = properties?.get(tunnel.tunnelRemotePort)?.label;
|
497
497
|
return localize(
|
498
|
-
|
498
|
+
9159,
|
499
499
|
"Your application{0} running on port {1} is available. ",
|
500
500
|
label ? ` (${label})` : '',
|
501
501
|
tunnel.tunnelRemotePort
|
502
502
|
);
|
503
503
|
}
|
504
504
|
linkMessage() {
|
505
|
-
return localize(
|
505
|
+
return localize(9160, "[See all forwarded ports]({0})", `command:${TunnelPanel.ID}.focus`);
|
506
506
|
}
|
507
507
|
async showNotification(tunnel) {
|
508
508
|
if (!(await this.hostService.hadLastFocus())) {
|
@@ -516,7 +516,7 @@ class OnAutoForwardedAction extends Disposable {
|
|
516
516
|
}
|
517
517
|
if ((tunnel.tunnelLocalPort !== tunnel.tunnelRemotePort) && this.tunnelService.canElevate && this.tunnelService.isPortPrivileged(tunnel.tunnelRemotePort)) {
|
518
518
|
message += ( localize(
|
519
|
-
|
519
|
+
9161,
|
520
520
|
"You'll need to run as superuser to use port {0} locally. ",
|
521
521
|
tunnel.tunnelRemotePort
|
522
522
|
));
|
@@ -536,7 +536,7 @@ class OnAutoForwardedAction extends Disposable {
|
|
536
536
|
}
|
537
537
|
makePublicChoice(tunnel) {
|
538
538
|
return {
|
539
|
-
label: ( localize(
|
539
|
+
label: ( localize(9162, "Make Public")),
|
540
540
|
run: async () => {
|
541
541
|
const oldTunnelDetails = mapHasAddressLocalhostOrAllInterfaces(this.remoteExplorerService.tunnelModel.forwarded, tunnel.tunnelRemoteHost, tunnel.tunnelRemotePort);
|
542
542
|
await this.remoteExplorerService.close({ host: tunnel.tunnelRemoteHost, port: tunnel.tunnelRemotePort }, TunnelCloseReason.Other);
|
@@ -567,7 +567,7 @@ class OnAutoForwardedAction extends Disposable {
|
|
567
567
|
}
|
568
568
|
elevateChoice(tunnel) {
|
569
569
|
return {
|
570
|
-
label: ( localize(
|
570
|
+
label: ( localize(9163, "Use Port {0} as Sudo...", tunnel.tunnelRemotePort)),
|
571
571
|
run: async () => {
|
572
572
|
await this.remoteExplorerService.close({ host: tunnel.tunnelRemoteHost, port: tunnel.tunnelRemotePort }, TunnelCloseReason.Other);
|
573
573
|
const newTunnel = await this.remoteExplorerService.forward({
|
@@ -3,22 +3,22 @@ import { localize } from '@codingame/monaco-vscode-api/vscode/vs/nls';
|
|
3
3
|
import { Codicon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/codicons';
|
4
4
|
import { registerIcon } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/iconRegistry';
|
5
5
|
|
6
|
-
const getStartedIcon = registerIcon('remote-explorer-get-started', Codicon.star, ( localize(
|
7
|
-
const documentationIcon = registerIcon('remote-explorer-documentation', Codicon.book, ( localize(
|
8
|
-
registerIcon('remote-explorer-feedback', Codicon.twitter, ( localize(
|
9
|
-
const reviewIssuesIcon = registerIcon('remote-explorer-review-issues', Codicon.issues, ( localize(
|
10
|
-
const reportIssuesIcon = registerIcon('remote-explorer-report-issues', Codicon.comment, ( localize(
|
11
|
-
const remoteExplorerViewIcon = registerIcon('remote-explorer-view-icon', Codicon.remoteExplorer, ( localize(
|
12
|
-
const portsViewIcon = registerIcon('ports-view-icon', Codicon.plug, ( localize(
|
13
|
-
registerIcon('ports-view-icon', Codicon.plug, ( localize(
|
14
|
-
const privatePortIcon = registerIcon('private-ports-view-icon', Codicon.lock, ( localize(
|
15
|
-
const forwardPortIcon = registerIcon('ports-forward-icon', Codicon.plus, ( localize(
|
16
|
-
const stopForwardIcon = registerIcon('ports-stop-forward-icon', Codicon.x, ( localize(
|
17
|
-
const openBrowserIcon = registerIcon('ports-open-browser-icon', Codicon.globe, ( localize(
|
18
|
-
const openPreviewIcon = registerIcon('ports-open-preview-icon', Codicon.openPreview, ( localize(
|
19
|
-
const copyAddressIcon = registerIcon('ports-copy-address-icon', Codicon.clippy, ( localize(
|
20
|
-
const labelPortIcon = registerIcon('ports-label-icon', Codicon.tag, ( localize(
|
21
|
-
const forwardedPortWithoutProcessIcon = registerIcon('ports-forwarded-without-process-icon', Codicon.circleOutline, ( localize(
|
22
|
-
const forwardedPortWithProcessIcon = registerIcon('ports-forwarded-with-process-icon', Codicon.circleFilled, ( localize(
|
6
|
+
const getStartedIcon = registerIcon('remote-explorer-get-started', Codicon.star, ( localize(9164, 'Getting started icon in the remote explorer view.')));
|
7
|
+
const documentationIcon = registerIcon('remote-explorer-documentation', Codicon.book, ( localize(9165, 'Documentation icon in the remote explorer view.')));
|
8
|
+
registerIcon('remote-explorer-feedback', Codicon.twitter, ( localize(9166, 'Feedback icon in the remote explorer view.')));
|
9
|
+
const reviewIssuesIcon = registerIcon('remote-explorer-review-issues', Codicon.issues, ( localize(9167, 'Review issue icon in the remote explorer view.')));
|
10
|
+
const reportIssuesIcon = registerIcon('remote-explorer-report-issues', Codicon.comment, ( localize(9168, 'Report issue icon in the remote explorer view.')));
|
11
|
+
const remoteExplorerViewIcon = registerIcon('remote-explorer-view-icon', Codicon.remoteExplorer, ( localize(9169, 'View icon of the remote explorer view.')));
|
12
|
+
const portsViewIcon = registerIcon('ports-view-icon', Codicon.plug, ( localize(9170, 'View icon of the remote ports view.')));
|
13
|
+
registerIcon('ports-view-icon', Codicon.plug, ( localize(9171, 'Icon representing a remote port.')));
|
14
|
+
const privatePortIcon = registerIcon('private-ports-view-icon', Codicon.lock, ( localize(9172, 'Icon representing a private remote port.')));
|
15
|
+
const forwardPortIcon = registerIcon('ports-forward-icon', Codicon.plus, ( localize(9173, 'Icon for the forward action.')));
|
16
|
+
const stopForwardIcon = registerIcon('ports-stop-forward-icon', Codicon.x, ( localize(9174, 'Icon for the stop forwarding action.')));
|
17
|
+
const openBrowserIcon = registerIcon('ports-open-browser-icon', Codicon.globe, ( localize(9175, 'Icon for the open browser action.')));
|
18
|
+
const openPreviewIcon = registerIcon('ports-open-preview-icon', Codicon.openPreview, ( localize(9176, 'Icon for the open preview action.')));
|
19
|
+
const copyAddressIcon = registerIcon('ports-copy-address-icon', Codicon.clippy, ( localize(9177, 'Icon for the copy local address action.')));
|
20
|
+
const labelPortIcon = registerIcon('ports-label-icon', Codicon.tag, ( localize(9178, 'Icon for the label port action.')));
|
21
|
+
const forwardedPortWithoutProcessIcon = registerIcon('ports-forwarded-without-process-icon', Codicon.circleOutline, ( localize(9179, 'Icon for forwarded ports that don\'t have a running process.')));
|
22
|
+
const forwardedPortWithProcessIcon = registerIcon('ports-forwarded-with-process-icon', Codicon.circleFilled, ( localize(9180, 'Icon for forwarded ports that do have a running process.')));
|
23
23
|
|
24
24
|
export { copyAddressIcon, documentationIcon, forwardPortIcon, forwardedPortWithProcessIcon, forwardedPortWithoutProcessIcon, getStartedIcon, labelPortIcon, openBrowserIcon, openPreviewIcon, portsViewIcon, privatePortIcon, remoteExplorerViewIcon, reportIssuesIcon, reviewIssuesIcon, stopForwardIcon };
|
@@ -19,7 +19,7 @@ import { TunnelType, ITunnelItem } from "@codingame/monaco-vscode-api/vscode/vs/
|
|
19
19
|
import { IRemoteExplorerService } from "@codingame/monaco-vscode-api/vscode/vs/workbench/services/remote/common/remoteExplorerService.service";
|
20
20
|
import { IThemeService } from "@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service";
|
21
21
|
import { ThemeIcon } from "@codingame/monaco-vscode-api/vscode/vs/base/common/themables";
|
22
|
-
import { ViewPane, IViewPaneOptions } from "@codingame/monaco-vscode-
|
22
|
+
import { ViewPane, IViewPaneOptions } from "@codingame/monaco-vscode-501b06ab-3f58-516b-8a1a-c29d375d3da4-common/vscode/vs/workbench/browser/parts/views/viewPane";
|
23
23
|
import { URI } from "@codingame/monaco-vscode-api/vscode/vs/base/common/uri";
|
24
24
|
import { TunnelPrivacyId, TunnelProtocol } from "@codingame/monaco-vscode-api/vscode/vs/platform/tunnel/common/tunnel";
|
25
25
|
import { ITunnelService } from "@codingame/monaco-vscode-api/vscode/vs/platform/tunnel/common/tunnel.service";
|
@@ -36,7 +36,7 @@ import { createSingleCallFunction } from '@codingame/monaco-vscode-api/vscode/vs
|
|
36
36
|
import { KeyCode, KeyMod } from '@codingame/monaco-vscode-api/vscode/vs/base/common/keyCodes';
|
37
37
|
import { IThemeService } from '@codingame/monaco-vscode-api/vscode/vs/platform/theme/common/themeService.service';
|
38
38
|
import { ThemeIcon } from '@codingame/monaco-vscode-api/vscode/vs/base/common/themables';
|
39
|
-
import { ViewPane } from '@codingame/monaco-vscode-
|
39
|
+
import { ViewPane } from '@codingame/monaco-vscode-501b06ab-3f58-516b-8a1a-c29d375d3da4-common/vscode/vs/workbench/browser/parts/views/viewPane';
|
40
40
|
import { URI } from '@codingame/monaco-vscode-api/vscode/vs/base/common/uri';
|
41
41
|
import { TunnelPrivacyId, TunnelProtocol, isLocalhost, isAllInterfaces } from '@codingame/monaco-vscode-api/vscode/vs/platform/tunnel/common/tunnel';
|
42
42
|
import { ITunnelService } from '@codingame/monaco-vscode-api/vscode/vs/platform/tunnel/common/tunnel.service';
|
@@ -87,7 +87,7 @@ let TunnelViewModel = class TunnelViewModel {
|
|
87
87
|
this.tunnelService = tunnelService;
|
88
88
|
this._candidates = ( new Map());
|
89
89
|
this.input = {
|
90
|
-
label: ( localize(
|
90
|
+
label: ( localize(9210, "Add Port")),
|
91
91
|
icon: undefined,
|
92
92
|
tunnelType: TunnelType.Add,
|
93
93
|
hasRunningProcess: false,
|
@@ -105,7 +105,7 @@ let TunnelViewModel = class TunnelViewModel {
|
|
105
105
|
privacy: {
|
106
106
|
id: TunnelPrivacyId.Private,
|
107
107
|
themeIcon: privatePortIcon.id,
|
108
|
-
label: ( localize(
|
108
|
+
label: ( localize(9211, "Private"))
|
109
109
|
},
|
110
110
|
strip: () => undefined
|
111
111
|
};
|
@@ -193,8 +193,8 @@ class IconColumn {
|
|
193
193
|
}
|
194
194
|
class PortColumn {
|
195
195
|
constructor() {
|
196
|
-
this.label = ( localize(
|
197
|
-
this.tooltip = ( localize(
|
196
|
+
this.label = ( localize(9212, "Port"));
|
197
|
+
this.tooltip = ( localize(9213, "The label and remote port number of the forwarded port."));
|
198
198
|
this.weight = 1;
|
199
199
|
this.templateId = 'actionbar';
|
200
200
|
}
|
@@ -216,8 +216,8 @@ class PortColumn {
|
|
216
216
|
}
|
217
217
|
class LocalAddressColumn {
|
218
218
|
constructor() {
|
219
|
-
this.label = ( localize(
|
220
|
-
this.tooltip = ( localize(
|
219
|
+
this.label = ( localize(9214, "Forwarded Address"));
|
220
|
+
this.tooltip = ( localize(9215, "The address that the forwarded port is available at."));
|
221
221
|
this.weight = 1;
|
222
222
|
this.templateId = 'actionbar';
|
223
223
|
}
|
@@ -245,18 +245,18 @@ class LocalAddressColumn {
|
|
245
245
|
let clickLabel = '';
|
246
246
|
if (editorConf.multiCursorModifier === 'ctrlCmd') {
|
247
247
|
if (isMacintosh) {
|
248
|
-
clickLabel = ( localize(
|
248
|
+
clickLabel = ( localize(9216, "option + click"));
|
249
249
|
}
|
250
250
|
else {
|
251
|
-
clickLabel = ( localize(
|
251
|
+
clickLabel = ( localize(9217, "alt + click"));
|
252
252
|
}
|
253
253
|
}
|
254
254
|
else {
|
255
255
|
if (isMacintosh) {
|
256
|
-
clickLabel = ( localize(
|
256
|
+
clickLabel = ( localize(9218, "cmd + click"));
|
257
257
|
}
|
258
258
|
else {
|
259
|
-
clickLabel = ( localize(
|
259
|
+
clickLabel = ( localize(9219, "ctrl + click"));
|
260
260
|
}
|
261
261
|
}
|
262
262
|
const markdown = ( new MarkdownString('', true));
|
@@ -267,8 +267,8 @@ class LocalAddressColumn {
|
|
267
267
|
}
|
268
268
|
class RunningProcessColumn {
|
269
269
|
constructor() {
|
270
|
-
this.label = ( localize(
|
271
|
-
this.tooltip = ( localize(
|
270
|
+
this.label = ( localize(9220, "Running Process"));
|
271
|
+
this.tooltip = ( localize(9221, "The command line of the process that is using the port."));
|
272
272
|
this.weight = 2;
|
273
273
|
this.templateId = 'actionbar';
|
274
274
|
}
|
@@ -282,9 +282,9 @@ class RunningProcessColumn {
|
|
282
282
|
}
|
283
283
|
class OriginColumn {
|
284
284
|
constructor() {
|
285
|
-
this.label = ( localize(
|
285
|
+
this.label = ( localize(9222, "Origin"));
|
286
286
|
this.tooltip = ( localize(
|
287
|
-
|
287
|
+
9223,
|
288
288
|
"The source that a forwarded port originates from. Can be an extension, user forwarded, statically forwarded, or automatically forwarded."
|
289
289
|
));
|
290
290
|
this.weight = 1;
|
@@ -301,8 +301,8 @@ class OriginColumn {
|
|
301
301
|
}
|
302
302
|
class PrivacyColumn {
|
303
303
|
constructor() {
|
304
|
-
this.label = ( localize(
|
305
|
-
this.tooltip = ( localize(
|
304
|
+
this.label = ( localize(9224, "Visibility"));
|
305
|
+
this.tooltip = ( localize(9225, "The availability of the forwarded port."));
|
306
306
|
this.weight = 1;
|
307
307
|
this.templateId = 'actionbar';
|
308
308
|
}
|
@@ -462,7 +462,7 @@ let ActionBarRenderer = class ActionBarRenderer extends Disposable {
|
|
462
462
|
container.style.paddingLeft = '5px';
|
463
463
|
const value = editableData.startingValue || '';
|
464
464
|
const inputBox = ( new InputBox(container, this.contextViewService, {
|
465
|
-
ariaLabel: ( localize(
|
465
|
+
ariaLabel: ( localize(9226, "Press Enter to confirm or Escape to cancel.")),
|
466
466
|
validationOptions: {
|
467
467
|
validation: (value) => {
|
468
468
|
const message = editableData.validationMessage(value);
|
@@ -520,7 +520,7 @@ let ActionBarRenderer = class ActionBarRenderer extends Disposable {
|
|
520
520
|
done(false, false);
|
521
521
|
});
|
522
522
|
}
|
523
|
-
disposeElement(element, index, templateData
|
523
|
+
disposeElement(element, index, templateData) {
|
524
524
|
templateData.elementDisposable.dispose();
|
525
525
|
}
|
526
526
|
disposeTemplate(templateData) {
|
@@ -627,7 +627,7 @@ class TunnelItem {
|
|
627
627
|
}
|
628
628
|
}
|
629
629
|
else if (this.hasRunningProcess) {
|
630
|
-
description = ( localize(
|
630
|
+
description = ( localize(9227, "Process information unavailable"));
|
631
631
|
}
|
632
632
|
return description;
|
633
633
|
}
|
@@ -635,7 +635,7 @@ class TunnelItem {
|
|
635
635
|
let information;
|
636
636
|
if (this.localAddress) {
|
637
637
|
information = ( localize(
|
638
|
-
|
638
|
+
9228,
|
639
639
|
"Remote port {0}:{1} forwarded to local address {2}. ",
|
640
640
|
this.remoteHost,
|
641
641
|
this.remotePort,
|
@@ -644,7 +644,7 @@ class TunnelItem {
|
|
644
644
|
}
|
645
645
|
else {
|
646
646
|
information = ( localize(
|
647
|
-
|
647
|
+
9229,
|
648
648
|
"Remote port {0}:{1} not forwarded. ",
|
649
649
|
this.remoteHost,
|
650
650
|
this.remotePort
|
@@ -655,8 +655,8 @@ class TunnelItem {
|
|
655
655
|
get iconTooltip() {
|
656
656
|
const isAdd = this.tunnelType === TunnelType.Add;
|
657
657
|
if (!isAdd) {
|
658
|
-
return `${this.processDescription ? ( localize(
|
659
|
-
( localize(
|
658
|
+
return `${this.processDescription ? ( localize(9230, "Port has running process.")) :
|
659
|
+
( localize(9231, "No running process."))}`;
|
660
660
|
}
|
661
661
|
else {
|
662
662
|
return this.label;
|
@@ -665,7 +665,7 @@ class TunnelItem {
|
|
665
665
|
get portTooltip() {
|
666
666
|
const isAdd = this.tunnelType === TunnelType.Add;
|
667
667
|
if (!isAdd) {
|
668
|
-
return `${this.name ? ( localize(
|
668
|
+
return `${this.name ? ( localize(9232, "Port labeled {0}. ", this.name)) : ''}`;
|
669
669
|
}
|
670
670
|
else {
|
671
671
|
return '';
|
@@ -683,14 +683,14 @@ class TunnelItem {
|
|
683
683
|
{
|
684
684
|
id: '',
|
685
685
|
themeIcon: Codicon.question.id,
|
686
|
-
label: ( localize(
|
686
|
+
label: ( localize(9233, "Unknown"))
|
687
687
|
};
|
688
688
|
}
|
689
689
|
else {
|
690
690
|
return {
|
691
691
|
id: TunnelPrivacyId.Private,
|
692
692
|
themeIcon: privatePortIcon.id,
|
693
|
-
label: ( localize(
|
693
|
+
label: ( localize(9211, "Private"))
|
694
694
|
};
|
695
695
|
}
|
696
696
|
}
|
@@ -700,7 +700,7 @@ const TunnelCloseableContextKey = ( new RawContextKey('tunnelCloseable', false,
|
|
700
700
|
const TunnelPrivacyContextKey = ( new RawContextKey('tunnelPrivacy', undefined, true));
|
701
701
|
const TunnelPrivacyEnabledContextKey = ( new RawContextKey('tunnelPrivacyEnabled', false, true));
|
702
702
|
const TunnelProtocolContextKey = ( new RawContextKey('tunnelProtocol', TunnelProtocol.Http, true));
|
703
|
-
const TunnelViewFocusContextKey = ( new RawContextKey('tunnelViewFocus', false, ( localize(
|
703
|
+
const TunnelViewFocusContextKey = ( new RawContextKey('tunnelViewFocus', false, ( localize(9234, "Whether the Ports view has focus."))));
|
704
704
|
const TunnelViewSelectionKeyName = 'tunnelViewSelection';
|
705
705
|
const TunnelViewSelectionContextKey = ( new RawContextKey(TunnelViewSelectionKeyName, undefined, true));
|
706
706
|
const TunnelViewMultiSelectionKeyName = 'tunnelViewMultiSelection';
|
@@ -710,7 +710,7 @@ const ProtocolChangeableContextKey = ( new RawContextKey('protocolChangable', tr
|
|
710
710
|
let TunnelPanel = class TunnelPanel extends ViewPane {
|
711
711
|
static { TunnelPanel_1 = this; }
|
712
712
|
static { this.ID = TUNNEL_VIEW_ID; }
|
713
|
-
static { this.TITLE = ( localize2(
|
713
|
+
static { this.TITLE = ( localize2(9235, "Ports")); }
|
714
714
|
constructor(viewModel, options, keybindingService, contextMenuService, contextKeyService, configurationService, instantiationService, viewDescriptorService, openerService, quickInputService, commandService, menuService, themeService, remoteExplorerService, hoverService, tunnelService, contextViewService) {
|
715
715
|
super(options, keybindingService, contextMenuService, configurationService, contextKeyService, viewDescriptorService, instantiationService, openerService, themeService, hoverService);
|
716
716
|
this.viewModel = viewModel;
|
@@ -824,7 +824,7 @@ let TunnelPanel = class TunnelPanel extends ViewPane {
|
|
824
824
|
return item.label;
|
825
825
|
}
|
826
826
|
},
|
827
|
-
getWidgetAriaLabel: () => ( localize(
|
827
|
+
getWidgetAriaLabel: () => ( localize(9236, "Tunnel View"))
|
828
828
|
},
|
829
829
|
openOnSingleClick: true
|
830
830
|
});
|
@@ -1038,7 +1038,7 @@ function isITunnelItem(item) {
|
|
1038
1038
|
var LabelTunnelAction;
|
1039
1039
|
(function (LabelTunnelAction) {
|
1040
1040
|
LabelTunnelAction.ID = 'remote.tunnel.label';
|
1041
|
-
LabelTunnelAction.LABEL = ( localize(
|
1041
|
+
LabelTunnelAction.LABEL = ( localize(9237, "Set Port Label"));
|
1042
1042
|
LabelTunnelAction.COMMAND_ID_KEYWORD = 'label';
|
1043
1043
|
function handler() {
|
1044
1044
|
return async (accessor, arg) => {
|
@@ -1070,7 +1070,7 @@ var LabelTunnelAction;
|
|
1070
1070
|
resolve(changed ? { port: tunnelItem.remotePort, label: value } : undefined);
|
1071
1071
|
},
|
1072
1072
|
validationMessage: () => null,
|
1073
|
-
placeholder: ( localize(
|
1073
|
+
placeholder: ( localize(9238, "Port label")),
|
1074
1074
|
startingValue
|
1075
1075
|
});
|
1076
1076
|
}));
|
@@ -1080,18 +1080,18 @@ var LabelTunnelAction;
|
|
1080
1080
|
}
|
1081
1081
|
LabelTunnelAction.handler = handler;
|
1082
1082
|
})(LabelTunnelAction || (LabelTunnelAction = {}));
|
1083
|
-
const invalidPortString = ( localize(
|
1083
|
+
const invalidPortString = ( localize(9239, "Forwarded port should be a number or a host:port."));
|
1084
1084
|
const maxPortNumber = 65536;
|
1085
|
-
const invalidPortNumberString = ( localize(
|
1086
|
-
const requiresSudoString = ( localize(
|
1087
|
-
const alreadyForwarded = ( localize(
|
1085
|
+
const invalidPortNumberString = ( localize(9240, "Port number must be \u2265 0 and < {0}.", maxPortNumber));
|
1086
|
+
const requiresSudoString = ( localize(9241, "May Require Sudo"));
|
1087
|
+
const alreadyForwarded = ( localize(9242, "Port is already forwarded"));
|
1088
1088
|
var ForwardPortAction;
|
1089
1089
|
(function (ForwardPortAction) {
|
1090
1090
|
ForwardPortAction.INLINE_ID = 'remote.tunnel.forwardInline';
|
1091
1091
|
ForwardPortAction.COMMANDPALETTE_ID = 'remote.tunnel.forwardCommandPalette';
|
1092
|
-
ForwardPortAction.LABEL = ( localize2(
|
1093
|
-
ForwardPortAction.TREEITEM_LABEL = ( localize(
|
1094
|
-
const forwardPrompt = ( localize(
|
1092
|
+
ForwardPortAction.LABEL = ( localize2(9243, "Forward a Port"));
|
1093
|
+
ForwardPortAction.TREEITEM_LABEL = ( localize(9244, "Forward Port"));
|
1094
|
+
const forwardPrompt = ( localize(9245, "Port number or address (eg. 3000 or 10.10.10.10:2000)."));
|
1095
1095
|
function validateInput(remoteExplorerService, tunnelService, value, canElevate) {
|
1096
1096
|
const parsed = parseAddress(value);
|
1097
1097
|
if (!parsed) {
|
@@ -1111,14 +1111,14 @@ var ForwardPortAction;
|
|
1111
1111
|
function error(notificationService, tunnelOrError, host, port) {
|
1112
1112
|
if (!tunnelOrError) {
|
1113
1113
|
notificationService.warn(( localize(
|
1114
|
-
|
1114
|
+
9246,
|
1115
1115
|
"Unable to forward {0}:{1}. The host may not be available or that remote port may already be forwarded",
|
1116
1116
|
host,
|
1117
1117
|
port
|
1118
1118
|
)));
|
1119
1119
|
}
|
1120
1120
|
else if (typeof tunnelOrError === 'string') {
|
1121
|
-
notificationService.warn(( localize(
|
1121
|
+
notificationService.warn(( localize(9247, "Unable to forward {0}:{1}. {2}", host, port, tunnelOrError)));
|
1122
1122
|
}
|
1123
1123
|
}
|
1124
1124
|
function inlineHandler() {
|
@@ -1178,7 +1178,7 @@ function makeTunnelPicks(tunnels, remoteExplorerService, tunnelService) {
|
|
1178
1178
|
if (picks.length === 0) {
|
1179
1179
|
picks.push({
|
1180
1180
|
label: ( localize(
|
1181
|
-
|
1181
|
+
9248,
|
1182
1182
|
"No ports currently forwarded. Try running the {0} command",
|
1183
1183
|
ForwardPortAction.LABEL.value
|
1184
1184
|
))
|
@@ -1190,7 +1190,7 @@ var ClosePortAction;
|
|
1190
1190
|
(function (ClosePortAction) {
|
1191
1191
|
ClosePortAction.INLINE_ID = 'remote.tunnel.closeInline';
|
1192
1192
|
ClosePortAction.COMMANDPALETTE_ID = 'remote.tunnel.closeCommandPalette';
|
1193
|
-
ClosePortAction.LABEL = ( localize2(
|
1193
|
+
ClosePortAction.LABEL = ( localize2(9249, "Stop Forwarding Port"));
|
1194
1194
|
function inlineHandler() {
|
1195
1195
|
return async (accessor, arg) => {
|
1196
1196
|
const contextKeyService = accessor.get(IContextKeyService);
|
@@ -1231,7 +1231,7 @@ var ClosePortAction;
|
|
1231
1231
|
const tunnelService = accessor.get(ITunnelService);
|
1232
1232
|
const commandService = accessor.get(ICommandService);
|
1233
1233
|
const picks = makeTunnelPicks(Array.from(( remoteExplorerService.tunnelModel.forwarded.values())).filter(tunnel => tunnel.closeable), remoteExplorerService, tunnelService);
|
1234
|
-
const result = await quickInputService.pick(picks, { placeHolder: ( localize(
|
1234
|
+
const result = await quickInputService.pick(picks, { placeHolder: ( localize(9250, "Choose a port to stop forwarding")) });
|
1235
1235
|
if (result && result.tunnel) {
|
1236
1236
|
await remoteExplorerService.close({ host: result.tunnel.remoteHost, port: result.tunnel.remotePort }, TunnelCloseReason.User);
|
1237
1237
|
}
|
@@ -1245,7 +1245,7 @@ var ClosePortAction;
|
|
1245
1245
|
var OpenPortInBrowserAction;
|
1246
1246
|
(function (OpenPortInBrowserAction) {
|
1247
1247
|
OpenPortInBrowserAction.ID = 'remote.tunnel.open';
|
1248
|
-
OpenPortInBrowserAction.LABEL = ( localize(
|
1248
|
+
OpenPortInBrowserAction.LABEL = ( localize(9251, "Open in Browser"));
|
1249
1249
|
function handler() {
|
1250
1250
|
return async (accessor, arg) => {
|
1251
1251
|
let key;
|
@@ -1275,7 +1275,7 @@ var OpenPortInBrowserAction;
|
|
1275
1275
|
var OpenPortInPreviewAction;
|
1276
1276
|
(function (OpenPortInPreviewAction) {
|
1277
1277
|
OpenPortInPreviewAction.ID = 'remote.tunnel.openPreview';
|
1278
|
-
OpenPortInPreviewAction.LABEL = ( localize(
|
1278
|
+
OpenPortInPreviewAction.LABEL = ( localize(9252, "Preview in Editor"));
|
1279
1279
|
function handler() {
|
1280
1280
|
return async (accessor, arg) => {
|
1281
1281
|
let key;
|
@@ -1312,7 +1312,7 @@ var OpenPortInPreviewAction;
|
|
1312
1312
|
var OpenPortInBrowserCommandPaletteAction;
|
1313
1313
|
(function (OpenPortInBrowserCommandPaletteAction) {
|
1314
1314
|
OpenPortInBrowserCommandPaletteAction.ID = 'remote.tunnel.openCommandPalette';
|
1315
|
-
OpenPortInBrowserCommandPaletteAction.LABEL = ( localize(
|
1315
|
+
OpenPortInBrowserCommandPaletteAction.LABEL = ( localize(9253, "Open Port in Browser"));
|
1316
1316
|
function handler() {
|
1317
1317
|
return async (accessor, arg) => {
|
1318
1318
|
const remoteExplorerService = accessor.get(IRemoteExplorerService);
|
@@ -1331,15 +1331,15 @@ var OpenPortInBrowserCommandPaletteAction;
|
|
1331
1331
|
}));
|
1332
1332
|
if (options.length === 0) {
|
1333
1333
|
options.push({
|
1334
|
-
label: ( localize(
|
1334
|
+
label: ( localize(9254, "No ports currently forwarded. Open the Ports view to get started."))
|
1335
1335
|
});
|
1336
1336
|
}
|
1337
1337
|
else {
|
1338
1338
|
options.push({
|
1339
|
-
label: ( localize(
|
1339
|
+
label: ( localize(9255, "Open the Ports view..."))
|
1340
1340
|
});
|
1341
1341
|
}
|
1342
|
-
const picked = await quickPickService.pick(options, { placeHolder: ( localize(
|
1342
|
+
const picked = await quickPickService.pick(options, { placeHolder: ( localize(9256, "Choose the port to open")) });
|
1343
1343
|
if (picked && picked.tunnel) {
|
1344
1344
|
return OpenPortInBrowserAction.run(model, openerService, makeAddress(picked.tunnel.remoteHost, picked.tunnel.remotePort));
|
1345
1345
|
}
|
@@ -1354,8 +1354,8 @@ var CopyAddressAction;
|
|
1354
1354
|
(function (CopyAddressAction) {
|
1355
1355
|
CopyAddressAction.INLINE_ID = 'remote.tunnel.copyAddressInline';
|
1356
1356
|
CopyAddressAction.COMMANDPALETTE_ID = 'remote.tunnel.copyAddressCommandPalette';
|
1357
|
-
CopyAddressAction.INLINE_LABEL = ( localize(
|
1358
|
-
CopyAddressAction.COMMANDPALETTE_LABEL = ( localize(
|
1357
|
+
CopyAddressAction.INLINE_LABEL = ( localize(9257, "Copy Local Address"));
|
1358
|
+
CopyAddressAction.COMMANDPALETTE_LABEL = ( localize(9258, "Copy Forwarded Port Address"));
|
1359
1359
|
async function copyAddress(remoteExplorerService, clipboardService, tunnelItem) {
|
1360
1360
|
const address = remoteExplorerService.tunnelModel.address(tunnelItem.remoteHost, tunnelItem.remotePort);
|
1361
1361
|
if (address) {
|
@@ -1387,7 +1387,7 @@ var CopyAddressAction;
|
|
1387
1387
|
const commandService = accessor.get(ICommandService);
|
1388
1388
|
const clipboardService = accessor.get(IClipboardService);
|
1389
1389
|
const tunnels = Array.from(( remoteExplorerService.tunnelModel.forwarded.values())).concat(Array.from(( remoteExplorerService.tunnelModel.detected.values())));
|
1390
|
-
const result = await quickInputService.pick(makeTunnelPicks(tunnels, remoteExplorerService, tunnelService), { placeHolder: ( localize(
|
1390
|
+
const result = await quickInputService.pick(makeTunnelPicks(tunnels, remoteExplorerService, tunnelService), { placeHolder: ( localize(9259, "Choose a forwarded port")) });
|
1391
1391
|
if (result && result.tunnel) {
|
1392
1392
|
await copyAddress(remoteExplorerService, clipboardService, result.tunnel);
|
1393
1393
|
}
|
@@ -1401,10 +1401,10 @@ var CopyAddressAction;
|
|
1401
1401
|
var ChangeLocalPortAction;
|
1402
1402
|
(function (ChangeLocalPortAction) {
|
1403
1403
|
ChangeLocalPortAction.ID = 'remote.tunnel.changeLocalPort';
|
1404
|
-
ChangeLocalPortAction.LABEL = ( localize(
|
1404
|
+
ChangeLocalPortAction.LABEL = ( localize(9260, "Change Local Address Port"));
|
1405
1405
|
function validateInput(tunnelService, value, canElevate) {
|
1406
1406
|
if (!value.match(/^[0-9]+$/)) {
|
1407
|
-
return { content: ( localize(
|
1407
|
+
return { content: ( localize(9261, "Local port should be a number.")), severity: Severity.Error };
|
1408
1408
|
}
|
1409
1409
|
else if (Number(value) >= maxPortNumber) {
|
1410
1410
|
return { content: invalidPortNumberString, severity: Severity.Error };
|
@@ -1448,7 +1448,7 @@ var ChangeLocalPortAction;
|
|
1448
1448
|
});
|
1449
1449
|
if (newForward && (typeof newForward !== 'string') && newForward.tunnelLocalPort !== numberValue) {
|
1450
1450
|
notificationService.warn(( localize(
|
1451
|
-
|
1451
|
+
9262,
|
1452
1452
|
"The local port {0} is not available. Port number {1} has been used instead",
|
1453
1453
|
value,
|
1454
1454
|
newForward.tunnelLocalPort ?? newForward.localAddress
|
@@ -1457,7 +1457,7 @@ var ChangeLocalPortAction;
|
|
1457
1457
|
}
|
1458
1458
|
},
|
1459
1459
|
validationMessage: (value) => validateInput(tunnelService, value, tunnelService.canElevate),
|
1460
|
-
placeholder: ( localize(
|
1460
|
+
placeholder: ( localize(9263, "New local port"))
|
1461
1461
|
});
|
1462
1462
|
}
|
1463
1463
|
};
|
@@ -1489,8 +1489,8 @@ var SetTunnelProtocolAction;
|
|
1489
1489
|
(function (SetTunnelProtocolAction) {
|
1490
1490
|
SetTunnelProtocolAction.ID_HTTP = 'remote.tunnel.setProtocolHttp';
|
1491
1491
|
SetTunnelProtocolAction.ID_HTTPS = 'remote.tunnel.setProtocolHttps';
|
1492
|
-
SetTunnelProtocolAction.LABEL_HTTP = ( localize(
|
1493
|
-
SetTunnelProtocolAction.LABEL_HTTPS = ( localize(
|
1492
|
+
SetTunnelProtocolAction.LABEL_HTTP = ( localize(9264, "HTTP"));
|
1493
|
+
SetTunnelProtocolAction.LABEL_HTTPS = ( localize(9265, "HTTPS"));
|
1494
1494
|
async function handler(arg, protocol, remoteExplorerService, environmentService) {
|
1495
1495
|
if (isITunnelItem(arg)) {
|
1496
1496
|
const attributes = {
|
@@ -1637,14 +1637,14 @@ MenuRegistry.appendMenuItem(MenuId.TunnelContext, ({
|
|
1637
1637
|
group: '2_localaddress',
|
1638
1638
|
order: 2,
|
1639
1639
|
submenu: MenuId.TunnelPrivacy,
|
1640
|
-
title: ( localize(
|
1640
|
+
title: ( localize(9266, "Port Visibility")),
|
1641
1641
|
when: ( ContextKeyExpr.and(isForwardedExpr, TunnelPrivacyEnabledContextKey))
|
1642
1642
|
}));
|
1643
1643
|
MenuRegistry.appendMenuItem(MenuId.TunnelContext, ({
|
1644
1644
|
group: '2_localaddress',
|
1645
1645
|
order: 3,
|
1646
1646
|
submenu: MenuId.TunnelProtocol,
|
1647
|
-
title: ( localize(
|
1647
|
+
title: ( localize(9267, "Change Port Protocol")),
|
1648
1648
|
when: ( ContextKeyExpr.and(isForwardedExpr, isNotMultiSelectionExpr, ProtocolChangeableContextKey))
|
1649
1649
|
}));
|
1650
1650
|
MenuRegistry.appendMenuItem(MenuId.TunnelContext, ({
|
@@ -1738,7 +1738,7 @@ MenuRegistry.appendMenuItem(MenuId.TunnelLocalAddressInline, ({
|
|
1738
1738
|
when: isForwardedOrDetectedExpr
|
1739
1739
|
}));
|
1740
1740
|
registerColor('ports.iconRunningProcessForeground', STATUS_BAR_REMOTE_ITEM_BACKGROUND, ( localize(
|
1741
|
-
|
1741
|
+
9268,
|
1742
1742
|
"The color of the icon for a port that has an associated running process."
|
1743
1743
|
)));
|
1744
1744
|
|