Skip to content

Commit 6fece46

Browse files
committed
Refactor template string with handlebars.
- Refactor static routing, template vars. - Fixed issue where JSON entities may be unescaped - Updated web manifest schema, route handler. - Clean up issues surrounding static paths, types. - Removed static path helper. - Fixed issue where locals may change during request handling. - Added missing types. - Fixed issue where body theme color is stale.
1 parent 8066da1 commit 6fece46

37 files changed

+638
-367
lines changed

ci/build/build-code-server.sh

+4-7
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,10 @@ main() {
2525
fi
2626

2727
parcel build \
28-
--public-url "." \
29-
--out-dir dist \
30-
$([[ $MINIFY ]] || echo --no-minify) \
31-
src/browser/register.ts \
32-
src/browser/serviceWorker.ts \
33-
src/browser/pages/login.ts \
34-
src/browser/pages/vscode.ts
28+
--public-url "/static/" \
29+
--out-dir dist/public \
30+
"$([[ $MINIFY ]] || echo --no-minify)" \
31+
src/browser/**/*.ts
3532
}
3633

3734
main "$@"

ci/build/build-release.sh

+2-3
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,9 @@ bundle_code_server() {
3838

3939
# For source maps and images.
4040
mkdir -p "$RELEASE_PATH/src/browser"
41-
rsync src/browser/media/ "$RELEASE_PATH/src/browser/media"
41+
rsync src/browser/public/**/* "$RELEASE_PATH/src/browser/media"
4242
mkdir -p "$RELEASE_PATH/src/browser/pages"
43-
rsync src/browser/pages/*.html "$RELEASE_PATH/src/browser/pages"
44-
rsync src/browser/robots.txt "$RELEASE_PATH/src/browser"
43+
rsync src/browser/views/**/*.handlebars "$RELEASE_PATH/src/browser/views"
4544

4645
# Adds the commit to package.json
4746
jq --slurp '.[0] * .[1]' package.json <(

ci/dev/watch.ts

+8-16
Original file line numberDiff line numberDiff line change
@@ -172,22 +172,14 @@ class Watcher {
172172
}
173173
}
174174

175-
private createBundler(out = "dist"): Bundler {
176-
return new Bundler(
177-
[
178-
path.join(this.rootPath, "src/browser/register.ts"),
179-
path.join(this.rootPath, "src/browser/serviceWorker.ts"),
180-
path.join(this.rootPath, "src/browser/pages/login.ts"),
181-
path.join(this.rootPath, "src/browser/pages/vscode.ts"),
182-
],
183-
{
184-
outDir: path.join(this.rootPath, out),
185-
cacheDir: path.join(this.rootPath, ".cache"),
186-
minify: !!process.env.MINIFY,
187-
logLevel: 1,
188-
publicUrl: ".",
189-
},
190-
)
175+
private createBundler(out = "dist/public"): Bundler {
176+
return new Bundler([path.join(this.rootPath, "src/browser/**/*.ts")], {
177+
outDir: path.join(this.rootPath, out),
178+
cacheDir: path.join(this.rootPath, ".cache"),
179+
minify: !!process.env.MINIFY,
180+
logLevel: 1,
181+
publicUrl: "/static/",
182+
})
191183
}
192184
}
193185

package.json

+4
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,9 @@
3232
"devDependencies": {
3333
"@types/body-parser": "^1.19.0",
3434
"@types/cookie-parser": "^1.4.2",
35+
"@types/entities": "^1.1.1",
3536
"@types/express": "^4.17.8",
37+
"@types/express-handlebars": "^3.1.0",
3638
"@types/fs-extra": "^8.0.1",
3739
"@types/http-proxy": "^1.17.4",
3840
"@types/js-yaml": "^3.12.3",
@@ -71,8 +73,10 @@
7173
"@coder/logger": "1.1.16",
7274
"body-parser": "^1.19.0",
7375
"cookie-parser": "^1.4.5",
76+
"entities": "^2.1.0",
7477
"env-paths": "^2.2.0",
7578
"express": "^4.17.1",
79+
"express-handlebars": "^5.2.0",
7680
"fs-extra": "^9.0.1",
7781
"http-proxy": "^1.18.0",
7882
"httpolyglot": "^0.1.2",

src/browser/main.ts

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import "./views/error/index.css"
2+
import "./views/global.css"
3+
import "./views/login/index.css"
4+
5+
import { getOptions, normalize } from "../common/util"
6+
7+
const options = getOptions()
8+
9+
if ("serviceWorker" in navigator) {
10+
const path = normalize(`${options.base}/serviceWorker.js`)
11+
navigator.serviceWorker
12+
.register(path, {
13+
scope: (options.base ?? "") + "/",
14+
})
15+
.then(() => console.debug("[Code Server Service Worker] registered"))
16+
}

src/browser/media/manifest.json

-40
This file was deleted.

src/browser/pages/login.ts

-7
This file was deleted.

src/browser/pages/vscode.html

-59
This file was deleted.

src/browser/pages/vscode.ts

-56
This file was deleted.
File renamed without changes.
File renamed without changes.

src/browser/register.ts

-18
This file was deleted.

src/browser/serviceWorker.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/* eslint-disable @typescript-eslint/no-explicit-any */
22

33
self.addEventListener("install", () => {
4-
console.log("[Service Worker] install")
4+
console.debug("[Code Server Service Worker] install")
55
})
66

77
self.addEventListener("activate", (event: any) => {
File renamed without changes.

src/browser/pages/error.html renamed to src/browser/views/error/index.handlebars

+8-8
Original file line numberDiff line numberDiff line change
@@ -10,23 +10,23 @@
1010
http-equiv="Content-Security-Policy"
1111
content="style-src 'self'; manifest-src 'self'; img-src 'self' data:; font-src 'self' data:;"
1212
/>
13-
<title>{{ERROR_TITLE}} - code-server</title>
14-
<link rel="icon" href="{{CS_STATIC_BASE}}/src/browser/media/favicon.ico" type="image/x-icon" />
15-
<link rel="manifest" href="{{CS_STATIC_BASE}}/src/browser/media/manifest.json" crossorigin="use-credentials" />
16-
<link rel="apple-touch-icon" href="{{CS_STATIC_BASE}}/src/browser/media/pwa-icon-384.png" />
17-
<link href="{{CS_STATIC_BASE}}/dist/register.css" rel="stylesheet" />
18-
<meta id="coder-options" data-settings="{{OPTIONS}}" />
13+
<title>{{ERROR_TITLE}} — Code Server</title>
14+
<link rel="icon" href="{{assetPath base '/static/media/favicon.ico'}}" type="image/x-icon" />
15+
<link rel="manifest" href="{{assetPath base '/code-server.webmanifest'}}" crossorigin="use-credentials" />
16+
<link rel="apple-touch-icon" href="{{assetPath base '/static/media/pwa-icon-384.png'}}" />
17+
<link href="{{assetPath base '/static/main.css'}}" rel="stylesheet" />
18+
<meta id="coder-options" data-settings="{{{json coderOptions}}}" />
1919
</head>
2020
<body>
2121
<div class="center-container">
2222
<div class="error-display">
2323
<h2 class="header">{{ERROR_HEADER}}</h2>
2424
<div class="body">{{ERROR_BODY}}</div>
2525
<div class="links">
26-
<a class="link" href="{{BASE}}{{TO}}">go home</a>
26+
<a class="link" href="{{HOME_PATH}}">Go home</a>
2727
</div>
2828
</div>
2929
</div>
30-
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/dist/register.js"></script>
30+
<script data-cfasync="false" src="{{assetPath base '/static/main.js'}}"></script>
3131
</body>
3232
</html>
File renamed without changes.
File renamed without changes.

src/browser/pages/login.html renamed to src/browser/views/login/index.handlebars

+15-11
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,21 @@
1010
http-equiv="Content-Security-Policy"
1111
content="style-src 'self'; script-src 'self' 'unsafe-inline'; manifest-src 'self'; img-src 'self' data:; font-src 'self' data:;"
1212
/>
13-
<title>code-server login</title>
14-
<link rel="icon" href="{{CS_STATIC_BASE}}/src/browser/media/favicon.ico" type="image/x-icon" />
15-
<link rel="manifest" href="{{CS_STATIC_BASE}}/src/browser/media/manifest.json" crossorigin="use-credentials" />
16-
<link rel="apple-touch-icon" href="{{CS_STATIC_BASE}}/src/browser/media/pwa-icon-384.png" />
17-
<link href="{{CS_STATIC_BASE}}/dist/register.css" rel="stylesheet" />
18-
<meta id="coder-options" data-settings="{{OPTIONS}}" />
13+
<title>Login — Code Server</title>
14+
15+
<link rel="icon" href="{{assetPath base '/static/media/favicon.ico'}}" type="image/x-icon" />
16+
<link rel="manifest" href="{{assetPath base '/code-server.webmanifest'}}" crossorigin="use-credentials" />
17+
<link rel="apple-touch-icon" href="{{assetPath base '/static/src/browser/media/pwa-icon-384.png'}}" />
18+
<link href="{{assetPath base '/static/main.css'}}" rel="stylesheet" />
19+
<meta id="coder-options" data-settings="{{{json coderOptions}}}" />
1920
</head>
2021
<body>
2122
<div class="center-container">
2223
<div class="card-box">
2324
<div class="header">
2425
<h1 class="main">Welcome to code-server</h1>
25-
<div class="sub">Please log in below. {{PASSWORD_MSG}}</div>
26+
<div class="sub">Please log in below.</div>
27+
<div class="sub">{{PASSWORD_MSG}}</div>
2628
</div>
2729
<div class="content">
2830
<form class="login-form" method="post">
@@ -40,12 +42,14 @@ <h1 class="main">Welcome to code-server</h1>
4042
/>
4143
<input class="submit -button" value="SUBMIT" type="submit" />
4244
</div>
43-
{{ERROR}}
45+
46+
{{#if ERROR}}
47+
<div class="error">{{ERROR}}</div>
48+
{{/if}}
4449
</form>
4550
</div>
4651
</div>
4752
</div>
4853
</body>
49-
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/dist/register.js"></script>
50-
<script data-cfasync="false" src="{{CS_STATIC_BASE}}/dist/pages/login.js"></script>
51-
</html>
54+
<script data-cfasync="false" src="{{assetPath base '/static/main.js'}}"></script>
55+
</html>
File renamed without changes.

0 commit comments

Comments
 (0)