33 * Licensed under the MIT License. See License.txt in the project root for license information.
44 *--------------------------------------------------------------------------------------------*/
55
6- import { IWorkbenchConstructionOptions , create , ICredentialsProvider , IURLCallbackProvider , IWorkspaceProvider , IWorkspace , IWindowIndicator , IProductQualityChangeHandler , ISettingsSyncOptions } from 'vs/workbench/workbench.web.api' ;
6+ import { IWorkbenchConstructionOptions , create , ICredentialsProvider , IURLCallbackProvider , IWorkspaceProvider , IWorkspace , IWindowIndicator , IProductQualityChangeHandler , ISettingsSyncOptions , IHomeIndicator } from 'vs/workbench/workbench.web.api' ;
77import { URI , UriComponents } from 'vs/base/common/uri' ;
88import { Event , Emitter } from 'vs/base/common/event' ;
99import { generateUuid } from 'vs/base/common/uuid' ;
@@ -18,6 +18,7 @@ import { localize } from 'vs/nls';
1818import { Schemas } from 'vs/base/common/network' ;
1919import product from 'vs/platform/product/common/product' ;
2020import { encodePath } from 'vs/server/node/util' ;
21+ import { parseLogLevel } from 'vs/platform/log/common/log' ;
2122
2223function doCreateUri ( path : string , queryValues : Map < string , string > ) : URI {
2324 let query : string | undefined = undefined ;
@@ -422,6 +423,50 @@ class WindowIndicator implements IWindowIndicator {
422423 ...JSON . parse ( configElementAttribute ) ,
423424 } ;
424425
426+ // Find workspace to open and payload
427+ let foundWorkspace = false ;
428+ let workspace : IWorkspace ;
429+ let payload = Object . create ( null ) ;
430+ let logLevel : string | undefined = undefined ;
431+
432+ const query = new URL ( document . location . href ) . searchParams ;
433+ query . forEach ( ( value , key ) => {
434+ switch ( key ) {
435+
436+ // Folder
437+ case WorkspaceProvider . QUERY_PARAM_FOLDER :
438+ workspace = { folderUri : URI . parse ( value ) } ;
439+ foundWorkspace = true ;
440+ break ;
441+
442+ // Workspace
443+ case WorkspaceProvider . QUERY_PARAM_WORKSPACE :
444+ workspace = { workspaceUri : URI . parse ( value ) } ;
445+ foundWorkspace = true ;
446+ break ;
447+
448+ // Empty
449+ case WorkspaceProvider . QUERY_PARAM_EMPTY_WINDOW :
450+ workspace = undefined ;
451+ foundWorkspace = true ;
452+ break ;
453+
454+ // Payload
455+ case WorkspaceProvider . QUERY_PARAM_PAYLOAD :
456+ try {
457+ payload = JSON . parse ( value ) ;
458+ } catch ( error ) {
459+ console . error ( error ) ; // possible invalid JSON
460+ }
461+ break ;
462+
463+ // Log level
464+ case 'logLevel' :
465+ logLevel = value ;
466+ break ;
467+ }
468+ } ) ;
469+
425470 // Strip the protocol from the authority if it exists.
426471 const normalizeAuthority = ( authority : string ) : string => authority . replace ( / ^ h t t p s ? : \/ \/ / , '' ) ;
427472 if ( config . remoteAuthority ) {
@@ -434,11 +479,6 @@ class WindowIndicator implements IWindowIndicator {
434479 config . folderUri . authority = normalizeAuthority ( config . folderUri . authority ) ;
435480 }
436481
437- // Find workspace to open and payload
438- let foundWorkspace = false ;
439- let workspace : IWorkspace ;
440- let payload = config . workspaceProvider ?. payload || Object . create ( null ) ;
441-
442482 // If no workspace is provided through the URL, check for config attribute from server
443483 if ( ! foundWorkspace ) {
444484 if ( config . folderUri ) {
@@ -453,6 +493,14 @@ class WindowIndicator implements IWindowIndicator {
453493 // Workspace Provider
454494 const workspaceProvider = new WorkspaceProvider ( workspace , payload ) ;
455495
496+ // NOTE@coder : copied from upstream, modified to use our repo
497+ // Home Indicator
498+ const homeIndicator : IHomeIndicator = {
499+ href : 'https://github.com/cdr/code-server' ,
500+ icon : 'code' ,
501+ title : localize ( 'home' , "Home" )
502+ } ;
503+
456504 // Window indicator (unless connected to a remote)
457505 let windowIndicator : WindowIndicator | undefined = undefined ;
458506 if ( ! workspaceProvider . hasRemote ( ) ) {
@@ -495,14 +543,12 @@ class WindowIndicator implements IWindowIndicator {
495543 // Finally create workbench
496544 create ( document . body , {
497545 ...config ,
498- < << << << HEAD
499- = = === ==
500546 developmentOptions : {
501547 logLevel : logLevel ? parseLogLevel ( logLevel ) : undefined ,
502548 ...config . developmentOptions
503549 } ,
504- > >>> >>> 58 ce849223667f77dc0d6d7658870ca3f815e17f
505550 settingsSyncOptions,
551+ homeIndicator,
506552 windowIndicator,
507553 productQualityChangeHandler,
508554 workspaceProvider,
0 commit comments