Skip to content

Commit 6cab654

Browse files
committed
feat(website): add TypeScript and JSX toggles on web demo
Allow the user to try out experimental TypeScript support right on the website.
1 parent 01b687d commit 6cab654

File tree

2 files changed

+51
-3
lines changed

2 files changed

+51
-3
lines changed

website/public/demo/demo.mjs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
// Copyright (C) 2020 Matthew "strager" Glazar
22
// See end of file for extended copyright information.
33

4-
import { createProcessFactoryAsync } from "../../wasm/quick-lint-js.js";
4+
import {
5+
LanguageOptions,
6+
createProcessFactoryAsync,
7+
} from "../../wasm/quick-lint-js.js";
58
import {} from "../error-box.mjs";
69

710
let codeInputElement = document.getElementById("code-input");
@@ -11,6 +14,9 @@ let codeInputMarksScrollerElement = document.getElementById(
1114
);
1215
let shadowCodeInputElement = document.getElementById("shadow-code-input");
1316

17+
let enableJSXElement = document.getElementById("enable-jsx");
18+
let enableTypeScriptElement = document.getElementById("enable-typescript");
19+
1420
codeInputElement.addEventListener("scroll", (event) => {
1521
synchronizeScrollingAndSize();
1622
});
@@ -158,6 +164,10 @@ createProcessFactoryAsync()
158164
let input = codeInputElement.value;
159165
let marks;
160166
try {
167+
doc.setLanguageOptions(
168+
(enableTypeScriptElement.checked ? LanguageOptions.TYPESCRIPT : 0) |
169+
(enableJSXElement.checked ? LanguageOptions.JSX : 0)
170+
);
161171
doc.setText(input);
162172
marks = doc.lint();
163173
} catch (e) {
@@ -171,6 +181,12 @@ createProcessFactoryAsync()
171181
lintAndUpdate();
172182
synchronizeScrollingAndSize();
173183
});
184+
enableTypeScriptElement.addEventListener("change", (_event) => {
185+
lintAndUpdate();
186+
});
187+
enableJSXElement.addEventListener("change", (_event) => {
188+
lintAndUpdate();
189+
});
174190
lintAndUpdate();
175191
})
176192
.catch((error) => {

website/public/demo/index.ejs.html

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,21 @@
7676
position: absolute;
7777
}
7878

79+
.checkbox-list {
80+
--checkbox-list-item-padding-x: 0.25rem;
81+
display: flex;
82+
flex-direction: row;
83+
flex-wrap: wrap;
84+
gap: 0.5rem;
85+
list-style-type: none;
86+
margin: 1rem calc(var(--checkbox-list-item-padding-x) * -1);
87+
padding: 0;
88+
}
89+
.checkbox-list label {
90+
white-space: nowrap;
91+
padding: 0.25rem var(--checkbox-list-item-padding-x);
92+
}
93+
7994
footer {
8095
border-top: 0;
8196
}
@@ -113,20 +128,37 @@ <h1>Demo</h1>
113128

114129
<p>
115130
See how quick-lint-js works right here in your browser! Paste your
116-
favorite buggy JavaScript code below:
131+
favorite buggy JavaScript or TypeScript code below:
117132
</p>
118133

134+
<ul class="checkbox-list">
135+
<li>
136+
<label
137+
><input type="checkbox" id="enable-typescript" checked /> TypeScript
138+
(experimental)</label
139+
>
140+
</li>
141+
<li>
142+
<label
143+
><input type="checkbox" id="enable-jsx" checked /> JSX/React</label
144+
>
145+
</li>
146+
</ul>
119147
<pre class="code-view" id="shadow-code-input"></pre>
120148
<pre
121149
class="code-view"
122150
id="code-input-marks-scroller"
123151
><pre id="code-input-marks"></pre></pre>
124152
<textarea class="code-view" id="code-input" spellcheck="false">
125-
const occupation = language + " coder";
153+
const occupation: string = language + " coder";
126154
const language = "JavaScript";
127155
occupation = "Senior " + occupation;
128156

129157
console.log(`Welcome, ${ocupation}!`);
158+
159+
function reactHello() {
160+
return &lt;h1 className="text-center"&gt;Hello, world!&lt;/h&gt;;
161+
}
130162
</textarea
131163
>
132164

0 commit comments

Comments
 (0)