245 lines
14 KiB
Diff
245 lines
14 KiB
Diff
Modify Help: Getting Started
|
|
|
|
This modifies some text on the Getting Started page and adds text about using
|
|
code-server on a team.
|
|
|
|
It is enabled by default but can be overriden using the cli flag
|
|
`--disable-getting-started-override`.
|
|
|
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/gettingStarted.ts
|
|
@@ -3,7 +3,7 @@
|
|
* Licensed under the MIT License. See License.txt in the project root for license information.
|
|
*--------------------------------------------------------------------------------------------*/
|
|
|
|
-import { $, Dimension, addDisposableListener, append, clearNode, getWindow, reset } from 'vs/base/browser/dom';
|
|
+import { $, Dimension, addDisposableListener, append, clearNode, getWindow, reset, prepend } from 'vs/base/browser/dom';
|
|
import { renderFormattedText } from 'vs/base/browser/formattedTextRenderer';
|
|
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
|
|
import { Button } from 'vs/base/browser/ui/button/button';
|
|
@@ -58,7 +58,7 @@ import { IRecentFolder, IRecentWorkspace
|
|
import { OpenRecentAction } from 'vs/workbench/browser/actions/windowActions';
|
|
import { OpenFileFolderAction, OpenFolderAction, OpenFolderViaWorkspaceAction } from 'vs/workbench/browser/actions/workspaceActions';
|
|
import { EditorPane } from 'vs/workbench/browser/parts/editor/editorPane';
|
|
-import { WorkbenchStateContext } from 'vs/workbench/common/contextkeys';
|
|
+import { IsEnabledCoderGettingStarted, WorkbenchStateContext } from 'vs/workbench/common/contextkeys';
|
|
import { IEditorOpenContext, IEditorSerializer } from 'vs/workbench/common/editor';
|
|
import { IWebviewElement, IWebviewService } from 'vs/workbench/contrib/webview/browser/webview';
|
|
import { IFeaturedExtensionsService } from 'vs/workbench/contrib/welcomeGettingStarted/browser/featuredExtensionService';
|
|
@@ -793,6 +793,72 @@ export class GettingStartedPage extends
|
|
$('p.subtitle.description', {}, localize({ key: 'gettingStarted.editingEvolved', comment: ['Shown as subtitle on the Welcome page.'] }, "Editing evolved"))
|
|
);
|
|
|
|
+ let gettingStartedCoder: HTMLElement = $('.header', {});
|
|
+ if (this.contextService.contextMatchesRules(IsEnabledCoderGettingStarted)) {
|
|
+ gettingStartedCoder = $('.gettingStartedCategory', {},
|
|
+ $('h2', {
|
|
+ style: 'margin-bottom: 12px',
|
|
+ }, 'Next Up'),
|
|
+ $('a', {
|
|
+ href: 'https://cdr.co/code-server-to-coder',
|
|
+ target: '_blank',
|
|
+ },
|
|
+ $('button', {
|
|
+ style: [
|
|
+ 'padding: 10px 16px ',
|
|
+ 'border-radius: 4px',
|
|
+ 'background: linear-gradient(94.04deg, #7934DA 0%, #4D52E0 101.2%)',
|
|
+ 'color: white',
|
|
+ 'overflow: hidden',
|
|
+ 'margin-right: 14px',
|
|
+ ].join(';'),
|
|
+ },
|
|
+ $('h3', {
|
|
+ style: [
|
|
+ 'margin: 0px 0px 6px',
|
|
+ 'font-weight: 500',
|
|
+ ].join(';'),
|
|
+ }, 'Deploy code-server for your team'),
|
|
+ $('p', {
|
|
+ style: [
|
|
+ 'margin: 0',
|
|
+ 'font-size: 13px',
|
|
+ 'color: #dcdee2',
|
|
+ ].join(';'),
|
|
+ }, 'Provision software development environments on your infrastructure with Coder.'),
|
|
+ $('p', {
|
|
+ style: [
|
|
+ 'margin-top: 8px',
|
|
+ 'font-size: 13px',
|
|
+ 'color: #dcdee2',
|
|
+ ].join(';'),
|
|
+ }, 'Coder is a self-service portal which provisions via Terraform—Linux, macOS, Windows, x86, ARM, and, of course, Kubernetes based infrastructure.'),
|
|
+ $('p', {
|
|
+ style: [
|
|
+ 'margin: 0',
|
|
+ 'margin-top: 8px',
|
|
+ 'font-size: 13px',
|
|
+ 'display: flex',
|
|
+ 'align-items: center',
|
|
+ ].join(';'),
|
|
+ }, 'Get started ', $('span', {
|
|
+ class: ThemeIcon.asClassName(Codicon.arrowRight),
|
|
+ style: [
|
|
+ 'color: white',
|
|
+ 'margin-left: 8px',
|
|
+ ].join(';'),
|
|
+ })),
|
|
+ $('img', {
|
|
+ src: './_static/src/browser/media/templates.png',
|
|
+ style: [
|
|
+ 'margin-bottom: -65px',
|
|
+ ].join(';'),
|
|
+ }),
|
|
+ ),
|
|
+ ),
|
|
+ );
|
|
+ }
|
|
+
|
|
const leftColumn = $('.categories-column.categories-column-left', {},);
|
|
const rightColumn = $('.categories-column.categories-column-right', {},);
|
|
|
|
@@ -842,6 +908,9 @@ export class GettingStartedPage extends
|
|
recentList.setLimit(5);
|
|
reset(leftColumn, startList.getDomElement(), recentList.getDomElement());
|
|
}
|
|
+ if (this.contextService.contextMatchesRules(IsEnabledCoderGettingStarted)) {
|
|
+ prepend(rightColumn, gettingStartedCoder)
|
|
+ }
|
|
};
|
|
|
|
featuredExtensionList.onDidChange(layoutFeaturedExtension);
|
|
Index: code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css
|
|
+++ code-server/lib/vscode/src/vs/workbench/contrib/welcomeGettingStarted/browser/media/gettingStarted.css
|
|
@@ -60,6 +60,15 @@
|
|
display: block;
|
|
}
|
|
|
|
+.monaco-workbench .part.editor > .content .gettingStartedContainer .coder {
|
|
+ margin-bottom: 0.2em;
|
|
+}
|
|
+
|
|
+.monaco-workbench .part.editor > .content .gettingStartedContainer .coder-coder {
|
|
+ font-size: 1em;
|
|
+ margin-top: 0.2em;
|
|
+}
|
|
+
|
|
.monaco-workbench.hc-black .part.editor > .content .gettingStartedContainer .subtitle,
|
|
.monaco-workbench.hc-light .part.editor > .content .gettingStartedContainer .subtitle {
|
|
font-weight: 200;
|
|
Index: code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/browser/web.api.ts
|
|
@@ -292,6 +292,11 @@ export interface IWorkbenchConstructionO
|
|
*/
|
|
readonly isEnabledFileUploads?: boolean
|
|
|
|
+ /**
|
|
+ * Whether to use Coder's custom Getting Started text.
|
|
+ */
|
|
+ readonly isEnabledCoderGettingStarted?: boolean
|
|
+
|
|
//#endregion
|
|
|
|
//#region Profile options
|
|
Index: code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/services/environment/browser/environmentService.ts
|
|
@@ -44,6 +44,11 @@ export interface IBrowserWorkbenchEnviro
|
|
readonly isEnabledFileUploads?: boolean;
|
|
|
|
/**
|
|
+ * Enable Coder's custom getting started text.
|
|
+ */
|
|
+ readonly isEnabledCoderGettingStarted?: boolean;
|
|
+
|
|
+ /**
|
|
* Gets whether a resolver extension is expected for the environment.
|
|
*/
|
|
readonly expectsResolverExtension: boolean;
|
|
@@ -135,6 +140,13 @@ export class BrowserWorkbenchEnvironment
|
|
return this.options.isEnabledFileUploads;
|
|
}
|
|
|
|
+ get isEnabledCoderGettingStarted(): boolean {
|
|
+ if (typeof this.options.isEnabledCoderGettingStarted === "undefined") {
|
|
+ throw new Error('isEnabledCoderGettingStarted was not provided to the browser');
|
|
+ }
|
|
+ return this.options.isEnabledCoderGettingStarted;
|
|
+ }
|
|
+
|
|
@memoize
|
|
get argvResource(): URI { return joinPath(this.userRoamingDataHome, 'argv.json'); }
|
|
|
|
Index: code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/serverEnvironmentService.ts
|
|
@@ -19,6 +19,7 @@ export const serverOptions: OptionDescri
|
|
'disable-file-downloads': { type: 'boolean' },
|
|
'disable-file-uploads': { type: 'boolean' },
|
|
'locale': { type: 'string' },
|
|
+ 'disable-getting-started-override': { type: 'boolean' },
|
|
|
|
/* ----- server setup ----- */
|
|
|
|
@@ -104,6 +105,7 @@ export interface ServerParsedArgs {
|
|
'disable-file-downloads'?: boolean;
|
|
'disable-file-uploads'?: boolean;
|
|
'locale'?: string
|
|
+ 'disable-getting-started-override'?: boolean,
|
|
|
|
/* ----- server setup ----- */
|
|
|
|
Index: code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
+++ code-server/lib/vscode/src/vs/server/node/webClientServer.ts
|
|
@@ -336,6 +336,7 @@ export class WebClientServer {
|
|
userDataPath: this._environmentService.userDataPath,
|
|
isEnabledFileDownloads: !this._environmentService.args['disable-file-downloads'],
|
|
isEnabledFileUploads: !this._environmentService.args['disable-file-uploads'],
|
|
+ isEnabledCoderGettingStarted: !this._environmentService.args['disable-getting-started-override'],
|
|
_wrapWebWorkerExtHostInIframe,
|
|
developmentOptions: { enableSmokeTestDriver: this._environmentService.args['enable-smoke-test-driver'] ? true : undefined, logLevel: this._logService.getLevel() },
|
|
settingsSyncOptions: !this._environmentService.isBuilt && this._environmentService.args['enable-sync'] ? { enabled: true } : undefined,
|
|
Index: code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/browser/contextkeys.ts
|
|
@@ -7,7 +7,7 @@ import { Event } from 'vs/base/common/ev
|
|
import { Disposable } from 'vs/base/common/lifecycle';
|
|
import { IContextKeyService, IContextKey, setConstant as setConstantContextKey } from 'vs/platform/contextkey/common/contextkey';
|
|
import { InputFocusedContext, IsMacContext, IsLinuxContext, IsWindowsContext, IsWebContext, IsMacNativeContext, IsDevelopmentContext, IsIOSContext, ProductQualityContext, IsMobileContext } from 'vs/platform/contextkey/common/contextkeys';
|
|
-import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, MainEditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, ActiveEditorCanToggleReadonlyContext, applyAvailableEditorIds, TitleBarVisibleContext, TitleBarStyleContext, MultipleEditorGroupsContext, IsAuxiliaryWindowFocusedContext, ActiveCompareEditorOriginalWriteableContext, IsEnabledFileDownloads, IsEnabledFileUploads } from 'vs/workbench/common/contextkeys';
|
|
+import { SplitEditorsVertically, InEditorZenModeContext, ActiveEditorCanRevertContext, ActiveEditorGroupLockedContext, ActiveEditorCanSplitInGroupContext, SideBySideEditorActiveContext, AuxiliaryBarVisibleContext, SideBarVisibleContext, PanelAlignmentContext, PanelMaximizedContext, PanelVisibleContext, ActiveEditorContext, EditorsVisibleContext, TextCompareEditorVisibleContext, TextCompareEditorActiveContext, ActiveEditorGroupEmptyContext, EmbedderIdentifierContext, EditorTabsVisibleContext, IsCenteredLayoutContext, ActiveEditorGroupIndexContext, ActiveEditorGroupLastContext, ActiveEditorReadonlyContext, MainEditorAreaVisibleContext, ActiveEditorAvailableEditorIdsContext, DirtyWorkingCopiesContext, EmptyWorkspaceSupportContext, EnterMultiRootWorkspaceSupportContext, HasWebFileSystemAccess, IsMainWindowFullscreenContext, OpenFolderWorkspaceSupportContext, RemoteNameContext, VirtualWorkspaceContext, WorkbenchStateContext, WorkspaceFolderCountContext, PanelPositionContext, TemporaryWorkspaceContext, ActiveEditorCanToggleReadonlyContext, applyAvailableEditorIds, TitleBarVisibleContext, TitleBarStyleContext, MultipleEditorGroupsContext, IsAuxiliaryWindowFocusedContext, ActiveCompareEditorOriginalWriteableContext, IsEnabledFileDownloads, IsEnabledFileUploads, IsEnabledCoderGettingStarted, } from 'vs/workbench/common/contextkeys';
|
|
import { TEXT_DIFF_EDITOR_ID, EditorInputCapabilities, SIDE_BY_SIDE_EDITOR_ID, EditorResourceAccessor, SideBySideEditor } from 'vs/workbench/common/editor';
|
|
import { trackFocus, addDisposableListener, EventType, onDidRegisterWindow, getActiveWindow } from 'vs/base/browser/dom';
|
|
import { preferredSideBySideGroupDirection, GroupDirection, IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
|
|
@@ -227,6 +227,7 @@ export class WorkbenchContextKeysHandler
|
|
// code-server
|
|
IsEnabledFileDownloads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileDownloads ?? true)
|
|
IsEnabledFileUploads.bindTo(this.contextKeyService).set(this.environmentService.isEnabledFileUploads ?? true)
|
|
+ IsEnabledCoderGettingStarted.bindTo(this.contextKeyService).set(this.environmentService.isEnabledCoderGettingStarted ?? true)
|
|
|
|
this.registerListeners();
|
|
}
|
|
Index: code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts
|
|
===================================================================
|
|
--- code-server.orig/lib/vscode/src/vs/workbench/common/contextkeys.ts
|
|
+++ code-server/lib/vscode/src/vs/workbench/common/contextkeys.ts
|
|
@@ -42,6 +42,7 @@ export const EmbedderIdentifierContext =
|
|
|
|
export const IsEnabledFileDownloads = new RawContextKey<boolean>('isEnabledFileDownloads', true, true);
|
|
export const IsEnabledFileUploads = new RawContextKey<boolean>('isEnabledFileUploads', true, true);
|
|
+export const IsEnabledCoderGettingStarted = new RawContextKey<boolean>('isEnabledCoderGettingStarted', true, true);
|
|
|
|
//#endregion
|
|
|