From 8555cea8a8d35454b39013911e65ef3c6baf9d4d Mon Sep 17 00:00:00 2001 From: Theis Pieter Hollebeek Date: Wed, 15 Oct 2025 11:59:06 +0200 Subject: [PATCH] dev.ts, remove prevent default --- deno.jsonc | 3 ++ deno.lock | 114 ++++++++++++++++++++++++++++++++++++++++++++ dev.ts | 57 ++++++++++++++++++++++ docs/build.ts | 4 +- src/asset_editor.js | 2 +- src/index.js | 7 ++- 6 files changed, 180 insertions(+), 7 deletions(-) create mode 100644 deno.lock create mode 100644 dev.ts diff --git a/deno.jsonc b/deno.jsonc index 1e34d89..b719421 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -3,6 +3,9 @@ "indentWidth": 4, "lineWidth": 100 }, + "tasks": { + "dev": "deno run -A dev.ts" + }, "exclude": ["./docs"], "lib": ["dom", "dom.iterable", "dom.asynciterable", "deno.ns"] } diff --git a/deno.lock b/deno.lock new file mode 100644 index 0000000..b8431b0 --- /dev/null +++ b/deno.lock @@ -0,0 +1,114 @@ +{ + "version": "5", + "specifiers": { + "jsr:@std/cli@^1.0.12": "1.0.13", + "jsr:@std/cli@^1.0.23": "1.0.23", + "jsr:@std/encoding@^1.0.10": "1.0.10", + "jsr:@std/encoding@^1.0.7": "1.0.7", + "jsr:@std/fmt@^1.0.5": "1.0.5", + "jsr:@std/fmt@^1.0.8": "1.0.8", + "jsr:@std/fs@^1.0.19": "1.0.19", + "jsr:@std/html@^1.0.3": "1.0.3", + "jsr:@std/html@^1.0.5": "1.0.5", + "jsr:@std/http@*": "1.0.13", + "jsr:@std/http@1.0.21": "1.0.21", + "jsr:@std/internal@^1.0.10": "1.0.12", + "jsr:@std/media-types@^1.1.0": "1.1.0", + "jsr:@std/net@^1.0.4": "1.0.4", + "jsr:@std/net@^1.0.6": "1.0.6", + "jsr:@std/path@^1.0.8": "1.0.8", + "jsr:@std/path@^1.1.2": "1.1.2", + "jsr:@std/streams@^1.0.13": "1.0.13", + "jsr:@std/streams@^1.0.9": "1.0.9" + }, + "jsr": { + "@std/cli@1.0.13": { + "integrity": "5db2d95ab2dca3bca9fb6ad3c19908c314e93d6391c8b026725e4892d4615a69" + }, + "@std/cli@1.0.23": { + "integrity": "bf95b7a9425ba2af1ae5a6359daf58c508f2decf711a76ed2993cd352498ccca" + }, + "@std/encoding@1.0.7": { + "integrity": "f631247c1698fef289f2de9e2a33d571e46133b38d042905e3eac3715030a82d" + }, + "@std/encoding@1.0.10": { + "integrity": "8783c6384a2d13abd5e9e87a7ae0520a30e9f56aeeaa3bdf910a3eaaf5c811a1" + }, + "@std/fmt@1.0.5": { + "integrity": "0cfab43364bc36650d83c425cd6d99910fc20c4576631149f0f987eddede1a4d" + }, + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" + }, + "@std/fs@1.0.19": { + "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06" + }, + "@std/html@1.0.3": { + "integrity": "7a0ac35e050431fb49d44e61c8b8aac1ebd55937e0dc9ec6409aa4bab39a7988" + }, + "@std/html@1.0.5": { + "integrity": "4e2d693f474cae8c16a920fa5e15a3b72267b94b84667f11a50c6dd1cb18d35e" + }, + "@std/http@1.0.13": { + "integrity": "d29618b982f7ae44380111f7e5b43da59b15db64101198bb5f77100d44eb1e1e", + "dependencies": [ + "jsr:@std/cli@^1.0.12", + "jsr:@std/encoding@^1.0.7", + "jsr:@std/fmt@^1.0.5", + "jsr:@std/html@^1.0.3", + "jsr:@std/media-types", + "jsr:@std/net@^1.0.4", + "jsr:@std/path@^1.0.8", + "jsr:@std/streams@^1.0.9" + ] + }, + "@std/http@1.0.21": { + "integrity": "abb5c747651ee6e3ea6139858fd9b1810d2c97f53a5e6722f3b6d27a6d263edc", + "dependencies": [ + "jsr:@std/cli@^1.0.23", + "jsr:@std/encoding@^1.0.10", + "jsr:@std/fmt@^1.0.8", + "jsr:@std/fs", + "jsr:@std/html@^1.0.5", + "jsr:@std/media-types", + "jsr:@std/net@^1.0.6", + "jsr:@std/path@^1.1.2", + "jsr:@std/streams@^1.0.13" + ] + }, + "@std/internal@1.0.12": { + "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + }, + "@std/media-types@1.1.0": { + "integrity": "c9d093f0c05c3512932b330e3cc1fe1d627b301db33a4c2c2185c02471d6eaa4" + }, + "@std/net@1.0.4": { + "integrity": "2f403b455ebbccf83d8a027d29c5a9e3a2452fea39bb2da7f2c04af09c8bc852" + }, + "@std/net@1.0.6": { + "integrity": "110735f93e95bb9feb95790a8b1d1bf69ec0dc74f3f97a00a76ea5efea25500c" + }, + "@std/path@1.0.8": { + "integrity": "548fa456bb6a04d3c1a1e7477986b6cffbce95102d0bb447c67c4ee70e0364be" + }, + "@std/path@1.1.2": { + "integrity": "c0b13b97dfe06546d5e16bf3966b1cadf92e1cc83e56ba5476ad8b498d9e3038", + "dependencies": [ + "jsr:@std/internal" + ] + }, + "@std/streams@1.0.9": { + "integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035" + }, + "@std/streams@1.0.13": { + "integrity": "772d208cd0d3e5dac7c1d9e6cdb25842846d136eea4a41a62e44ed4ab0c8dd9e" + } + }, + "workspace": { + "packageJson": { + "dependencies": [ + "npm:@types/ace@^0.0.52" + ] + } + } +} diff --git a/dev.ts b/dev.ts new file mode 100644 index 0000000..459a043 --- /dev/null +++ b/dev.ts @@ -0,0 +1,57 @@ +// deno-lint-ignore no-import-prefix +import { serveDir } from "jsr:@std/http@1.0.21/file-server"; + +type Addr = { + hostname: string; + port: number; +}; + +function alertListening(addr: Addr) { + console.log(`Listening on http://${addr.hostname}:${addr.port}/`); +} + +async function buildDocs() { + console.log("building docs"); + await new Deno.Command("deno", { + args: ["task", "build"], + cwd: "docs", + }).output(); + console.log("done"); +} + +async function watchAndBuildDocs() { + let changeOccurred = true; + let running = false; + setInterval(async () => { + if (!changeOccurred || running) { + return; + } + running = true; + await buildDocs(); + changeOccurred = false; + running = false; + }, 250); + const watcher = Deno.watchFs(["docs/src"]); + for await (const _ of watcher) { + changeOccurred = true; + } +} + +function serveDist(addr: Addr) { + Deno.serve({ + port: addr.port, + hostname: addr.hostname, + onListen: (_) => alertListening(addr), + }, (req: Request) => { + return serveDir(req, { quiet: true, showIndex: true }); + }); +} + +if (import.meta.main) { + await buildDocs(); + watchAndBuildDocs(); + serveDist({ + hostname: "0.0.0.0", + port: 8180, + }); +} diff --git a/docs/build.ts b/docs/build.ts index e6e4e21..8abe622 100644 --- a/docs/build.ts +++ b/docs/build.ts @@ -14,13 +14,13 @@ function injectIntoTemplate( dirComponents.push(`${name}.html`); } if (dirComponents.length > 0) { - breadcrumbs.push(`root`); + breadcrumbs.push(`root`); } else { breadcrumbs.push(`root`); } for (let i = 0; i < dirComponents.length; ++i) { const component = dirComponents[i]; - const href = "/-/" + dirComponents.filter((_, idx) => idx <= i).join("/"); + const href = "/docs/-/" + dirComponents.filter((_, idx) => idx <= i).join("/"); if (i < dirComponents.length - 1) { breadcrumbs.push(`${component}`); } else { diff --git a/src/asset_editor.js b/src/asset_editor.js index a10e24a..94d177f 100644 --- a/src/asset_editor.js +++ b/src/asset_editor.js @@ -99,7 +99,7 @@ export class AssetEditor { this.renderList(); } - async setPreview(asset) { + setPreview(asset) { this.previewedName = asset.name; this.preview.title.textContent = asset.name; diff --git a/src/index.js b/src/index.js index decd921..5a2459e 100644 --- a/src/index.js +++ b/src/index.js @@ -101,7 +101,7 @@ runButton.onclick = async () => { } }; -exportButton.onclick = async () => { +exportButton.onclick = () => { projectSaveHandler.exportProject(); }; @@ -122,10 +122,9 @@ addEventListener("keydown", (ev) => { toggleAssetEditorButton.addEventListener("click", () => assetEditor.toggleEditor()); -window.ondragover = (ev) => ev.preventDefault(); -window.ondrop = (ev) => ev.preventDefault(); +globalThis.ondragover = (ev) => ev.preventDefault(); +globalThis.ondrop = (ev) => ev.preventDefault(); -dropZone.onclick = (ev) => ev.preventDefault(); dropZone.ondragover = (ev) => ev.preventDefault(); dropZone.ondrop = async (ev) => { for (const file of ev.dataTransfer.files) {