Skip to content

Commit cef9ab5

Browse files
committed
Deploying to gh-pages from @ b942712 🚀
1 parent 6f4c3b6 commit cef9ab5

578 files changed

Lines changed: 6233 additions & 3363 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

3rdparty/index.html

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -69,23 +69,23 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="dat.gui.min.js">📄</a></td><td><a href="dat.gui.min.js">dat.gui.min.js</a></td><td><a href="dat.gui.min.js">49k</a></td><td><a href="dat.gui.min.js">2026-05-02</a></td></tr>
73-
<tr><td><a href="dat.gui.module.js">📄</a></td><td><a href="dat.gui.module.js">dat.gui.module.js</a></td><td><a href="dat.gui.module.js">85k</a></td><td><a href="dat.gui.module.js">2026-05-02</a></td></tr>
74-
<tr><td><a href="jquery-3.3.1.slim.min.js">📄</a></td><td><a href="jquery-3.3.1.slim.min.js">jquery-3.3.1.slim.min.js</a></td><td><a href="jquery-3.3.1.slim.min.js">68k</a></td><td><a href="jquery-3.3.1.slim.min.js">2026-05-02</a></td></tr>
75-
<tr><td><a href="lzma.js">📄</a></td><td><a href="lzma.js">lzma.js</a></td><td><a href="lzma.js">5k</a></td><td><a href="lzma.js">2026-05-02</a></td></tr>
76-
<tr><td><a href="lzma_worker.js">📄</a></td><td><a href="lzma_worker.js">lzma_worker.js</a></td><td><a href="lzma_worker.js">134k</a></td><td><a href="lzma_worker.js">2026-05-02</a></td></tr>
77-
<tr><td><a href="model-viewer.3.3.0.min.js">📄</a></td><td><a href="model-viewer.3.3.0.min.js">model-viewer.3.3.0.min.js</a></td><td><a href="model-viewer.3.3.0.min.js">881k</a></td><td><a href="model-viewer.3.3.0.min.js">2026-05-02</a></td></tr>
78-
<tr><td><a href="muigui-0.x.module.js">📄</a></td><td><a href="muigui-0.x.module.js">muigui-0.x.module.js</a></td><td><a href="muigui-0.x.module.js">106k</a></td><td><a href="muigui-0.x.module.js">2026-05-02</a></td></tr>
79-
<tr><td><a href="pixel-perfect.js">📄</a></td><td><a href="pixel-perfect.js">pixel-perfect.js</a></td><td><a href="pixel-perfect.js">2k</a></td><td><a href="pixel-perfect.js">2026-05-02</a></td></tr>
80-
<tr><td><a href="split.min.js">📄</a></td><td><a href="split.min.js">split.min.js</a></td><td><a href="split.min.js">7k</a></td><td><a href="split.min.js">2026-05-02</a></td></tr>
81-
<tr><td><a href="svg.esm.js">📄</a></td><td><a href="svg.esm.js">svg.esm.js</a></td><td><a href="svg.esm.js">173k</a></td><td><a href="svg.esm.js">2026-05-02</a></td></tr>
82-
<tr><td><a href="three.js">📁</a></td><td><a href="three.js">three.js</a></td><td><a href="three.js"></a></td><td><a href="three.js">2026-05-02</a></td></tr>
83-
<tr><td><a href="tweakpane-3.1.7.min.js">📄</a></td><td><a href="tweakpane-3.1.7.min.js">tweakpane-3.1.7.min.js</a></td><td><a href="tweakpane-3.1.7.min.js">143k</a></td><td><a href="tweakpane-3.1.7.min.js">2026-05-02</a></td></tr>
84-
<tr><td><a href="twgl-full.module.js">📄</a></td><td><a href="twgl-full.module.js">twgl-full.module.js</a></td><td><a href="twgl-full.module.js">361k</a></td><td><a href="twgl-full.module.js">2026-05-02</a></td></tr>
85-
<tr><td><a href="webgpu-utils-1.x.module.js">📄</a></td><td><a href="webgpu-utils-1.x.module.js">webgpu-utils-1.x.module.js</a></td><td><a href="webgpu-utils-1.x.module.js">304k</a></td><td><a href="webgpu-utils-1.x.module.js">2026-05-02</a></td></tr>
86-
<tr><td><a href="webgpu-utils-2.x.module.js">📄</a></td><td><a href="webgpu-utils-2.x.module.js">webgpu-utils-2.x.module.js</a></td><td><a href="webgpu-utils-2.x.module.js">314k</a></td><td><a href="webgpu-utils-2.x.module.js">2026-05-02</a></td></tr>
87-
<tr><td><a href="webgpu-utils.module.js">📄</a></td><td><a href="webgpu-utils.module.js">webgpu-utils.module.js</a></td><td><a href="webgpu-utils.module.js">204k</a></td><td><a href="webgpu-utils.module.js">2026-05-02</a></td></tr>
88-
<tr><td><a href="wgpu-matrix.module.js">📄</a></td><td><a href="wgpu-matrix.module.js">wgpu-matrix.module.js</a></td><td><a href="wgpu-matrix.module.js">183k</a></td><td><a href="wgpu-matrix.module.js">2026-05-02</a></td></tr>
72+
<tr><td><a href="dat.gui.min.js">📄</a></td><td><a href="dat.gui.min.js">dat.gui.min.js</a></td><td><a href="dat.gui.min.js">49k</a></td><td><a href="dat.gui.min.js">2026-05-03</a></td></tr>
73+
<tr><td><a href="dat.gui.module.js">📄</a></td><td><a href="dat.gui.module.js">dat.gui.module.js</a></td><td><a href="dat.gui.module.js">85k</a></td><td><a href="dat.gui.module.js">2026-05-03</a></td></tr>
74+
<tr><td><a href="jquery-3.3.1.slim.min.js">📄</a></td><td><a href="jquery-3.3.1.slim.min.js">jquery-3.3.1.slim.min.js</a></td><td><a href="jquery-3.3.1.slim.min.js">68k</a></td><td><a href="jquery-3.3.1.slim.min.js">2026-05-03</a></td></tr>
75+
<tr><td><a href="lzma.js">📄</a></td><td><a href="lzma.js">lzma.js</a></td><td><a href="lzma.js">5k</a></td><td><a href="lzma.js">2026-05-03</a></td></tr>
76+
<tr><td><a href="lzma_worker.js">📄</a></td><td><a href="lzma_worker.js">lzma_worker.js</a></td><td><a href="lzma_worker.js">134k</a></td><td><a href="lzma_worker.js">2026-05-03</a></td></tr>
77+
<tr><td><a href="model-viewer.3.3.0.min.js">📄</a></td><td><a href="model-viewer.3.3.0.min.js">model-viewer.3.3.0.min.js</a></td><td><a href="model-viewer.3.3.0.min.js">881k</a></td><td><a href="model-viewer.3.3.0.min.js">2026-05-03</a></td></tr>
78+
<tr><td><a href="muigui-0.x.module.js">📄</a></td><td><a href="muigui-0.x.module.js">muigui-0.x.module.js</a></td><td><a href="muigui-0.x.module.js">106k</a></td><td><a href="muigui-0.x.module.js">2026-05-03</a></td></tr>
79+
<tr><td><a href="pixel-perfect.js">📄</a></td><td><a href="pixel-perfect.js">pixel-perfect.js</a></td><td><a href="pixel-perfect.js">2k</a></td><td><a href="pixel-perfect.js">2026-05-03</a></td></tr>
80+
<tr><td><a href="split.min.js">📄</a></td><td><a href="split.min.js">split.min.js</a></td><td><a href="split.min.js">7k</a></td><td><a href="split.min.js">2026-05-03</a></td></tr>
81+
<tr><td><a href="svg.esm.js">📄</a></td><td><a href="svg.esm.js">svg.esm.js</a></td><td><a href="svg.esm.js">173k</a></td><td><a href="svg.esm.js">2026-05-03</a></td></tr>
82+
<tr><td><a href="three.js">📁</a></td><td><a href="three.js">three.js</a></td><td><a href="three.js"></a></td><td><a href="three.js">2026-05-03</a></td></tr>
83+
<tr><td><a href="tweakpane-3.1.7.min.js">📄</a></td><td><a href="tweakpane-3.1.7.min.js">tweakpane-3.1.7.min.js</a></td><td><a href="tweakpane-3.1.7.min.js">143k</a></td><td><a href="tweakpane-3.1.7.min.js">2026-05-03</a></td></tr>
84+
<tr><td><a href="twgl-full.module.js">📄</a></td><td><a href="twgl-full.module.js">twgl-full.module.js</a></td><td><a href="twgl-full.module.js">361k</a></td><td><a href="twgl-full.module.js">2026-05-03</a></td></tr>
85+
<tr><td><a href="webgpu-utils-1.x.module.js">📄</a></td><td><a href="webgpu-utils-1.x.module.js">webgpu-utils-1.x.module.js</a></td><td><a href="webgpu-utils-1.x.module.js">304k</a></td><td><a href="webgpu-utils-1.x.module.js">2026-05-03</a></td></tr>
86+
<tr><td><a href="webgpu-utils-2.x.module.js">📄</a></td><td><a href="webgpu-utils-2.x.module.js">webgpu-utils-2.x.module.js</a></td><td><a href="webgpu-utils-2.x.module.js">314k</a></td><td><a href="webgpu-utils-2.x.module.js">2026-05-03</a></td></tr>
87+
<tr><td><a href="webgpu-utils.module.js">📄</a></td><td><a href="webgpu-utils.module.js">webgpu-utils.module.js</a></td><td><a href="webgpu-utils.module.js">204k</a></td><td><a href="webgpu-utils.module.js">2026-05-03</a></td></tr>
88+
<tr><td><a href="wgpu-matrix.module.js">📄</a></td><td><a href="wgpu-matrix.module.js">wgpu-matrix.module.js</a></td><td><a href="wgpu-matrix.module.js">183k</a></td><td><a href="wgpu-matrix.module.js">2026-05-03</a></td></tr>
8989
</tbody>
9090
</table>
9191
</body>

3rdparty/three.js/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="r182">📁</a></td><td><a href="r182">r182</a></td><td><a href="r182"></a></td><td><a href="r182">2026-05-02</a></td></tr>
72+
<tr><td><a href="r182">📁</a></td><td><a href="r182">r182</a></td><td><a href="r182"></a></td><td><a href="r182">2026-05-03</a></td></tr>
7373
</tbody>
7474
</table>
7575
</body>

3rdparty/three.js/r182/build/index.html

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -69,14 +69,14 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="three.core.js">📄</a></td><td><a href="three.core.js">three.core.js</a></td><td><a href="three.core.js">1mb</a></td><td><a href="three.core.js">2026-05-02</a></td></tr>
73-
<tr><td><a href="three.core.min.js">📄</a></td><td><a href="three.core.min.js">three.core.min.js</a></td><td><a href="three.core.min.js">372k</a></td><td><a href="three.core.min.js">2026-05-02</a></td></tr>
74-
<tr><td><a href="three.tsl.js">📄</a></td><td><a href="three.tsl.js">three.tsl.js</a></td><td><a href="three.tsl.js">33k</a></td><td><a href="three.tsl.js">2026-05-02</a></td></tr>
75-
<tr><td><a href="three.tsl.min.js">📄</a></td><td><a href="three.tsl.min.js">three.tsl.min.js</a></td><td><a href="three.tsl.min.js">23k</a></td><td><a href="three.tsl.min.js">2026-05-02</a></td></tr>
76-
<tr><td><a href="three.webgpu.js">📄</a></td><td><a href="three.webgpu.js">three.webgpu.js</a></td><td><a href="three.webgpu.js">2mb</a></td><td><a href="three.webgpu.js">2026-05-02</a></td></tr>
77-
<tr><td><a href="three.webgpu.min.js">📄</a></td><td><a href="three.webgpu.min.js">three.webgpu.min.js</a></td><td><a href="three.webgpu.min.js">602k</a></td><td><a href="three.webgpu.min.js">2026-05-02</a></td></tr>
78-
<tr><td><a href="three.webgpu.nodes.js">📄</a></td><td><a href="three.webgpu.nodes.js">three.webgpu.nodes.js</a></td><td><a href="three.webgpu.nodes.js">2mb</a></td><td><a href="three.webgpu.nodes.js">2026-05-02</a></td></tr>
79-
<tr><td><a href="three.webgpu.nodes.min.js">📄</a></td><td><a href="three.webgpu.nodes.min.js">three.webgpu.nodes.min.js</a></td><td><a href="three.webgpu.nodes.min.js">601k</a></td><td><a href="three.webgpu.nodes.min.js">2026-05-02</a></td></tr>
72+
<tr><td><a href="three.core.js">📄</a></td><td><a href="three.core.js">three.core.js</a></td><td><a href="three.core.js">1mb</a></td><td><a href="three.core.js">2026-05-03</a></td></tr>
73+
<tr><td><a href="three.core.min.js">📄</a></td><td><a href="three.core.min.js">three.core.min.js</a></td><td><a href="three.core.min.js">372k</a></td><td><a href="three.core.min.js">2026-05-03</a></td></tr>
74+
<tr><td><a href="three.tsl.js">📄</a></td><td><a href="three.tsl.js">three.tsl.js</a></td><td><a href="three.tsl.js">33k</a></td><td><a href="three.tsl.js">2026-05-03</a></td></tr>
75+
<tr><td><a href="three.tsl.min.js">📄</a></td><td><a href="three.tsl.min.js">three.tsl.min.js</a></td><td><a href="three.tsl.min.js">23k</a></td><td><a href="three.tsl.min.js">2026-05-03</a></td></tr>
76+
<tr><td><a href="three.webgpu.js">📄</a></td><td><a href="three.webgpu.js">three.webgpu.js</a></td><td><a href="three.webgpu.js">2mb</a></td><td><a href="three.webgpu.js">2026-05-03</a></td></tr>
77+
<tr><td><a href="three.webgpu.min.js">📄</a></td><td><a href="three.webgpu.min.js">three.webgpu.min.js</a></td><td><a href="three.webgpu.min.js">602k</a></td><td><a href="three.webgpu.min.js">2026-05-03</a></td></tr>
78+
<tr><td><a href="three.webgpu.nodes.js">📄</a></td><td><a href="three.webgpu.nodes.js">three.webgpu.nodes.js</a></td><td><a href="three.webgpu.nodes.js">2mb</a></td><td><a href="three.webgpu.nodes.js">2026-05-03</a></td></tr>
79+
<tr><td><a href="three.webgpu.nodes.min.js">📄</a></td><td><a href="three.webgpu.nodes.min.js">three.webgpu.nodes.min.js</a></td><td><a href="three.webgpu.nodes.min.js">601k</a></td><td><a href="three.webgpu.nodes.min.js">2026-05-03</a></td></tr>
8080
</tbody>
8181
</table>
8282
</body>

3rdparty/three.js/r182/examples/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="jsm">📁</a></td><td><a href="jsm">jsm</a></td><td><a href="jsm"></a></td><td><a href="jsm">2026-05-02</a></td></tr>
72+
<tr><td><a href="jsm">📁</a></td><td><a href="jsm">jsm</a></td><td><a href="jsm"></a></td><td><a href="jsm">2026-05-03</a></td></tr>
7373
</tbody>
7474
</table>
7575
</body>

3rdparty/three.js/r182/examples/jsm/controls/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="OrbitControls.js">📄</a></td><td><a href="OrbitControls.js">OrbitControls.js</a></td><td><a href="OrbitControls.js">38k</a></td><td><a href="OrbitControls.js">2026-05-02</a></td></tr>
72+
<tr><td><a href="OrbitControls.js">📄</a></td><td><a href="OrbitControls.js">OrbitControls.js</a></td><td><a href="OrbitControls.js">38k</a></td><td><a href="OrbitControls.js">2026-05-03</a></td></tr>
7373
</tbody>
7474
</table>
7575
</body>

3rdparty/three.js/r182/examples/jsm/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="controls">📁</a></td><td><a href="controls">controls</a></td><td><a href="controls"></a></td><td><a href="controls">2026-05-02</a></td></tr>
73-
<tr><td><a href="renderers">📁</a></td><td><a href="renderers">renderers</a></td><td><a href="renderers"></a></td><td><a href="renderers">2026-05-02</a></td></tr>
72+
<tr><td><a href="controls">📁</a></td><td><a href="controls">controls</a></td><td><a href="controls"></a></td><td><a href="controls">2026-05-03</a></td></tr>
73+
<tr><td><a href="renderers">📁</a></td><td><a href="renderers">renderers</a></td><td><a href="renderers"></a></td><td><a href="renderers">2026-05-03</a></td></tr>
7474
</tbody>
7575
</table>
7676
</body>

3rdparty/three.js/r182/examples/jsm/renderers/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="CSS2DRenderer.js">📄</a></td><td><a href="CSS2DRenderer.js">CSS2DRenderer.js</a></td><td><a href="CSS2DRenderer.js">7k</a></td><td><a href="CSS2DRenderer.js">2026-05-02</a></td></tr>
72+
<tr><td><a href="CSS2DRenderer.js">📄</a></td><td><a href="CSS2DRenderer.js">CSS2DRenderer.js</a></td><td><a href="CSS2DRenderer.js">7k</a></td><td><a href="CSS2DRenderer.js">2026-05-03</a></td></tr>
7373
</tbody>
7474
</table>
7575
</body>

3rdparty/three.js/r182/index.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@
6969
<tr><th></th><th>filename</th><th>size</th><th>date</th></tr>
7070
</thead>
7171
<tbody>
72-
<tr><td><a href="build">📁</a></td><td><a href="build">build</a></td><td><a href="build"></a></td><td><a href="build">2026-05-02</a></td></tr>
73-
<tr><td><a href="examples">📁</a></td><td><a href="examples">examples</a></td><td><a href="examples"></a></td><td><a href="examples">2026-05-02</a></td></tr>
72+
<tr><td><a href="build">📁</a></td><td><a href="build">build</a></td><td><a href="build"></a></td><td><a href="build">2026-05-03</a></td></tr>
73+
<tr><td><a href="examples">📁</a></td><td><a href="examples">examples</a></td><td><a href="examples"></a></td><td><a href="examples">2026-05-03</a></td></tr>
7474
</tbody>
7575
</table>
7676
</body>

Gruntfile.js

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,93 @@ const webgpuTypesPath = path.join(__dirname, 'node_modules', '@webgpu', 'types')
1818
const dataDir = require('./build/appdata')('servez-cli');
1919
const Servez = require('servez-lib');
2020

21+
// Seems hacky, should probably register something in lesson-builder
22+
const Handlebars = require('handlebars');
23+
const hanson = require('hanson');
24+
Handlebars.registerHelper('toc-steps', function(options) {
25+
if (!options || !options.hash || !options.hash.list) {
26+
return '';
27+
}
28+
29+
const listFilename = path.basename(options.hash.list);
30+
const lessonsDir = path.resolve(path.join(process.cwd(), 'webgpu/lessons'));
31+
const expectedPrefix = lessonsDir + path.sep;
32+
const resolvedListPath = path.resolve(lessonsDir, listFilename);
33+
34+
if (!resolvedListPath.startsWith(expectedPrefix)) {
35+
throw new Error(`Security Error: Path traversal detected for ${resolvedListPath}`);
36+
}
37+
38+
if (!fs.existsSync(resolvedListPath)) {
39+
throw new Error(`List file not found: ${resolvedListPath}`);
40+
}
41+
42+
const listContent = fs.readFileSync(resolvedListPath, 'utf-8');
43+
const articleFilenames = hanson.parse(listContent);
44+
45+
if (!Array.isArray(articleFilenames)) {
46+
throw new Error(`Expected array in hanson file: ${resolvedListPath}`);
47+
}
48+
49+
const root = options.data && options.data.root ? options.data.root : this;
50+
const currentLang = root.lang || 'en';
51+
const currentContentFileName = root.contentFileName || '';
52+
const currentBasename = path.basename(currentContentFileName);
53+
const hereText = root.here || '(here)';
54+
55+
const lis = articleFilenames.map((rawFilename) => {
56+
const sanitizedFilename = path.basename(rawFilename);
57+
58+
// Check for localized file first, then fallback to English
59+
let mdPath = path.resolve(lessonsDir, currentLang === 'en' ? '' : currentLang, sanitizedFilename);
60+
const expectedMdPrefix = path.resolve(lessonsDir, currentLang === 'en' ? '' : currentLang) + path.sep;
61+
62+
if (!mdPath.startsWith(expectedMdPrefix)) {
63+
throw new Error(`Security Error: Path traversal detected for ${mdPath}`);
64+
}
65+
66+
if (!fs.existsSync(mdPath)) {
67+
mdPath = path.resolve(lessonsDir, sanitizedFilename);
68+
if (!mdPath.startsWith(expectedPrefix)) {
69+
throw new Error(`Security Error: Path traversal detected for ${mdPath}`);
70+
}
71+
}
72+
73+
let title = sanitizedFilename;
74+
const htmlFilename = sanitizedFilename.replace(/\.md$/, '.html');
75+
let href = `${(currentLang === 'en' ? '' : '../')}${htmlFilename}`;
76+
if (fs.existsSync(mdPath)) {
77+
href = htmlFilename;
78+
const content = fs.readFileSync(mdPath, 'utf-8');
79+
const lines = content.split('\n');
80+
let headerTitle = '';
81+
let headerToc = '';
82+
for (const rawLine of lines) {
83+
const line = rawLine.trim();
84+
const m = /([A-Z0-9_-]+): (.*?)$/i.exec(line);
85+
if (!m) {
86+
break;
87+
}
88+
const key = m[1].toLowerCase();
89+
if (key === 'title') {
90+
headerTitle = m[2];
91+
} else if (key === 'toc') {
92+
headerToc = m[2];
93+
}
94+
}
95+
title = headerToc || headerTitle || title;
96+
}
97+
98+
const escapedTitle = Handlebars.escapeExpression(title);
99+
const isCurrent = sanitizedFilename === currentBasename;
100+
const suffix = isCurrent ? ` ⬅ ${Handlebars.escapeExpression(hereText)}` : '';
101+
102+
return ` <li><a href="${href}">${escapedTitle}</a>${suffix}</li>`;
103+
});
104+
105+
return new Handlebars.SafeString(`<ol>\n${lis.join('\n')}\n</ol>`);
106+
});
107+
21108
module.exports = function(grunt) {
22109

23110
require('load-grunt-tasks')(grunt);

0 commit comments

Comments
 (0)