Compare commits

...

41 Commits
10.0.0 ... main

Author SHA1 Message Date
dependabot[bot]
2c6c705018
Bump @rollup/plugin-node-resolve from 16.0.0 to 16.0.1 (#577)
Bumps [@rollup/plugin-node-resolve](https://github.com/rollup/plugins/tree/HEAD/packages/node-resolve) from 16.0.0 to 16.0.1.
- [Changelog](https://github.com/rollup/plugins/blob/master/packages/node-resolve/CHANGELOG.md)
- [Commits](https://github.com/rollup/plugins/commits/node-resolve-v16.0.1/packages/node-resolve)

---
updated-dependencies:
- dependency-name: "@rollup/plugin-node-resolve"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 14:29:28 +02:00
dependabot[bot]
dedf3ef1f7
Bump esptool-js from 0.5.3 to 0.5.4 (#556)
* Bump esptool-js from 0.5.3 to 0.5.4

Bumps [esptool-js](https://github.com/espressif/esptool-js) from 0.5.3 to 0.5.4.
- [Release notes](https://github.com/espressif/esptool-js/releases)
- [Commits](https://github.com/espressif/esptool-js/compare/v0.5.3...v0.5.4)

---
updated-dependencies:
- dependency-name: esptool-js
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

* hard reset

---------

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Paulus Schoutsen <balloob@gmail.com>
2025-03-07 12:52:14 -05:00
Sebastien Vermeille
11a1574849
Add nspanelmanager project to list (#551) 2025-03-07 11:54:22 -05:00
dependabot[bot]
c1b2732ca9
Bump rollup from 4.34.8 to 4.34.9 (#572) 2025-03-04 07:14:59 +01:00
dependabot[bot]
479c496240
Bump @types/w3c-web-serial from 1.0.7 to 1.0.8 (#570) 2025-03-04 07:14:40 +01:00
dependabot[bot]
003bd76912
Bump prettier from 3.5.2 to 3.5.3 (#571) 2025-03-04 07:10:03 +01:00
dependabot[bot]
789ad03a6f
Bump typescript from 5.7.3 to 5.8.2 (#569) 2025-03-03 23:06:29 +01:00
dependabot[bot]
ab718869a0
Bump prettier from 3.5.1 to 3.5.2 (#568)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-25 01:44:24 +01:00
dependabot[bot]
f301c4c055
Bump prettier from 3.4.2 to 3.5.1 (#567)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 00:58:50 +01:00
dependabot[bot]
50e3fe5771
Bump rollup from 4.34.1 to 4.34.8 (#566)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 00:58:37 +01:00
dependabot[bot]
b25f250c90
Bump @babel/preset-env from 7.26.7 to 7.26.9 (#565)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-21 00:58:27 +01:00
dependabot[bot]
c2894b8f4c
Bump typescript from 5.7.2 to 5.7.3 (#549)
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.2 to 5.7.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.2...v5.7.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-06 20:34:44 +01:00
dependabot[bot]
e06c3f3f1a
Bump rollup from 4.32.0 to 4.34.1 (#560)
Bumps [rollup](https://github.com/rollup/rollup) from 4.32.0 to 4.34.1.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.32.0...v4.34.1)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-02-06 20:32:43 +01:00
dependabot[bot]
b46f3f298d
Bump rollup from 4.29.1 to 4.32.0 (#557)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-28 14:06:04 +01:00
dependabot[bot]
7bc7959cf3
Bump @babel/preset-env from 7.26.0 to 7.26.7 (#558)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-28 14:05:02 +01:00
Ryan Kulp
bd670d1510
project - TRMNL (#547)
Co-authored-by: Ryan Kulp <ryanckulp@gmail.com>
2024-12-31 07:50:56 +13:00
Paulus Schoutsen
ce5650244d
Migrate to native reset when available (#544) 2024-12-22 23:36:34 -05:00
Paulus Schoutsen
cd74083edf
Fix missing icons (#543) 2024-12-22 14:22:41 -05:00
Paulus Schoutsen
b328166ea4
Update more branding to be OHF (#542) 2024-12-22 14:21:58 -05:00
Paulus Schoutsen
350a696012
Update esptool.js to 0.5.3 (#541) 2024-12-22 14:21:50 -05:00
Paulus Schoutsen
a7c3d303b5 10.1.0 2024-12-22 19:15:14 +00:00
Spencer Owen
f943773ae2
Add openspool logo (#531) 2024-12-17 16:50:52 -05:00
Paulus Schoutsen
32a9ff78ea
Update deps (#540) 2024-12-17 16:49:00 -05:00
dependabot[bot]
a0a98026cd
Bump prettier from 3.4.1 to 3.4.2 (#536)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 23:45:16 +01:00
dependabot[bot]
b3547b5abf
Bump prettier from 3.3.3 to 3.4.1 (#534)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-06 21:21:07 +01:00
dependabot[bot]
a77da4285f
Bump @babel/preset-env from 7.24.5 to 7.26.0 (#532)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-26 10:53:42 +01:00
dependabot[bot]
2ec657d2ce
Bump @rollup/plugin-node-resolve from 15.2.3 to 15.3.0 (#530)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-19 08:42:32 +01:00
dependabot[bot]
21535c6d98
Bump @rollup/plugin-typescript from 11.1.6 to 12.1.1 (#522)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-12 09:15:52 +01:00
dependabot[bot]
8c4bf5ca3b
Bump @rollup/plugin-commonjs from 25.0.7 to 28.0.1 (#524)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-12 08:57:25 +01:00
dependabot[bot]
0434b154da
Bump prettier from 3.2.5 to 3.3.3 (#523)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-12 08:51:47 +01:00
dependabot[bot]
2e3589a938
Bump serve from 14.2.3 to 14.2.4 (#525)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-12 08:27:42 +01:00
dependabot[bot]
95ab287d67
Bump typescript from 5.3.3 to 5.4.5 (#500)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-08 20:17:17 +01:00
dependabot[bot]
5d19b2d5f3
Bump serve from 14.2.1 to 14.2.3 (#511)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-08 19:21:15 +01:00
dependabot[bot]
052c7828c0
Bump @babel/preset-env from 7.23.9 to 7.24.5 (#510)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-08 19:20:58 +01:00
dependabot[bot]
c71d7a347c
Bump rollup from 4.12.0 to 4.17.2 (#512)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-08 19:19:45 +01:00
Darren Griffin
6b2ff90895
Add OHF logo to README (#519) 2024-09-30 19:16:54 +02:00
Peter Zich
b7b4b5beba
Use PORT env var to customize script/develop port (#502) 2024-06-04 21:27:01 -04:00
Peter Zich
9261c2c24e
Create TimestampTransformer and use it in EwtConsole (#501) 2024-04-18 14:43:27 +12:00
dependabot[bot]
ec35b6aa69
Bump rollup from 4.10.0 to 4.12.0 (#478)
Bumps [rollup](https://github.com/rollup/rollup) from 4.10.0 to 4.12.0.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.10.0...v4.12.0)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-24 16:55:23 -05:00
Paulus Schoutsen
10c47dc916
Update develop 2024-02-15 11:02:11 -05:00
Paulus Schoutsen
df7b4c69e0
Switch to preset-env for babel (#476) 2024-02-13 12:00:45 -05:00
26 changed files with 3202 additions and 1248 deletions

View File

@ -66,3 +66,5 @@ Example manifest:
## Development
Run `script/develop`. This starts a server. Open it on http://localhost:5001.
[![ESPHome - A project from the Open Home Foundation](https://www.openhomefoundation.org/badges/esphome.png)](https://www.openhomefoundation.org/)

View File

@ -281,6 +281,24 @@
</div>
<div class="name">OpenEpaperLink</div>
</a>
<a href="https://openspool.io" target="_blank" class="project">
<div class="logo">
<img src="static/logos/openspool.png" alt="OpenSpool logo" />
</div>
<div class="name">OpenSpool</div>
</a>
<a href="https://usetrmnl.com/flash" target="_blank" class="project">
<div class="logo">
<img src="static/logos/trmnl.png" alt="TRMNL logo" />
</div>
<div class="name">TRMNL</div>
</a>
<a href="https://nspanelmanager.com" target="_blank" class="project">
<div class="logo">
<img src="static/logos/nspanelmanager.svg" alt="NSPanelManager logo" />
</div>
<div class="name">NSPanel Manager</div>
</a>
</div>
<h2>How it works</h2>
@ -581,7 +599,9 @@ button.overrides = {
<div class="footer">
<div class="initiative">
ESP Web Tools is a project by
<a href="https://esphome.io">ESPHome</a>.<br />
<a href="https://esphome.io">ESPHome</a>,
<a href="https://www.openhomefoundation.org">Open Home Foundation</a
>.<br />
Development is funded by
<a href="https://www.nabucasa.com">Nabu Casa</a>.
</div>

4109
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
{
"name": "esp-web-tools",
"version": "10.0.1",
"version": "10.1.0",
"description": "Web tools for ESP devices",
"main": "dist/install-button.js",
"repository": "https://github.com/esphome/esp-web-tools",
@ -10,26 +10,25 @@
"prepublishOnly": "script/build"
},
"devDependencies": {
"@babel/plugin-proposal-class-properties": "^7.18.6",
"@babel/plugin-transform-logical-assignment-operators": "^7.23.4",
"@babel/preset-env": "^7.26.0",
"@rollup/plugin-babel": "^6.0.4",
"@rollup/plugin-commonjs": "^25.0.7",
"@rollup/plugin-commonjs": "^28.0.2",
"@rollup/plugin-json": "^6.1.0",
"@rollup/plugin-node-resolve": "^15.2.3",
"@rollup/plugin-node-resolve": "^16.0.0",
"@rollup/plugin-terser": "^0.4.4",
"@rollup/plugin-typescript": "^11.1.6",
"@types/w3c-web-serial": "^1.0.6",
"prettier": "^3.2.5",
"rollup": "^4.10.0",
"serve": "^14.2.1",
"typescript": "^5.3.3"
"@rollup/plugin-typescript": "^12.1.2",
"@types/w3c-web-serial": "^1.0.7",
"prettier": "^3.4.2",
"rollup": "^4.29.1",
"serve": "^14.2.4",
"typescript": "^5.7.2"
},
"dependencies": {
"@material/web": "^1.2.0",
"esptool-js": "^0.4.1",
"@material/web": "^2.2.0",
"esptool-js": "^0.5.3",
"improv-wifi-serial-sdk": "^2.5.0",
"lit": "^3.1.2",
"lit": "^3.2.1",
"pako": "^2.1.0",
"tslib": "^2.6.2"
"tslib": "^2.8.1"
}
}

View File

@ -20,9 +20,16 @@ const config = {
}),
babel({
babelHelpers: "bundled",
plugins: [
"@babel/plugin-proposal-class-properties",
"@babel/plugin-transform-logical-assignment-operators",
presets: [
[
"@babel/preset-env",
{
targets: {
// We use unpkg as CDN and it doesn't bundle modern syntax
chrome: "84",
},
},
],
],
}),
json(),

View File

@ -1,6 +1,10 @@
# Stop on errors
set -e
if [ -z "$PORT" ]; then
PORT=5001
fi
cd "$(dirname "$0")/.."
rm -rf dist
@ -9,8 +13,8 @@ rm -rf dist
trap "kill 0" EXIT
# Run tsc once as rollup expects those files
tsc || true
npm exec -- tsc || true
npm exec -- serve -p 5001 &
npm exec -- serve -p "$PORT" &
npm exec -- tsc --watch &
npm exec -- rollup -c --watch

View File

@ -1,5 +1,5 @@
import { Checkbox } from "@material/web/checkbox/internal/checkbox.js";
import { styles } from "@material/web/checkbox/internal/checkbox-styles.css.js";
import { styles } from "@material/web/checkbox/internal/checkbox-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,5 +1,5 @@
import { CircularProgress } from "@material/web/progress/internal/circular-progress.js";
import { styles } from "@material/web/progress/internal/circular-progress-styles.css.js";
import { styles } from "@material/web/progress/internal/circular-progress-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,5 +1,5 @@
import { Dialog } from "@material/web/dialog/internal/dialog.js";
import { styles } from "@material/web/dialog/internal/dialog-styles.css";
import { styles } from "@material/web/dialog/internal/dialog-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,5 +1,5 @@
import { Divider } from "@material/web/divider/internal/divider.js";
import { styles } from "@material/web/divider/internal/divider-styles.css.js";
import { styles } from "@material/web/divider/internal/divider-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,6 +1,6 @@
import { FilledSelect } from "@material/web/select/internal/filled-select.js";
import { styles } from "@material/web/select/internal/filled-select-styles.css.js";
import { styles as sharedStyles } from "@material/web/select/internal/shared-styles.css.js";
import { styles } from "@material/web/select/internal/filled-select-styles.js";
import { styles as sharedStyles } from "@material/web/select/internal/shared-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,6 +1,6 @@
import { styles as filledStyles } from "@material/web/textfield/internal/filled-styles.css.js";
import { styles as filledStyles } from "@material/web/textfield/internal/filled-styles.js";
import { FilledTextField } from "@material/web/textfield/internal/filled-text-field.js";
import { styles as sharedStyles } from "@material/web/textfield/internal/shared-styles.css.js";
import { styles as sharedStyles } from "@material/web/textfield/internal/shared-styles.js";
import { literal } from "lit/static-html.js";
declare global {

View File

@ -1,6 +1,6 @@
import { IconButton } from "@material/web/iconbutton/internal/icon-button.js";
import { styles as sharedStyles } from "@material/web/iconbutton/internal/shared-styles.css.js";
import { styles } from "@material/web/iconbutton/internal/standard-styles.css.js";
import { styles as sharedStyles } from "@material/web/iconbutton/internal/shared-styles.js";
import { styles } from "@material/web/iconbutton/internal/standard-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,5 +1,5 @@
import { ListItemEl as ListItem } from "@material/web/list/internal/listitem/list-item.js";
import { styles } from "@material/web/list/internal/listitem/list-item-styles.css.js";
import { styles } from "@material/web/list/internal/listitem/list-item-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,5 +1,5 @@
import { List } from "@material/web/list/internal/list.js";
import { styles } from "@material/web/list/internal/list-styles.css.js";
import { styles } from "@material/web/list/internal/list-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,4 +1,4 @@
import { styles } from "@material/web/menu/internal/menuitem/menu-item-styles.css.js";
import { styles } from "@material/web/menu/internal/menuitem/menu-item-styles.js";
import { SelectOptionEl } from "@material/web/select/internal/selectoption/select-option.js";
declare global {

View File

@ -1,6 +1,6 @@
import { styles as sharedStyles } from "@material/web/button/internal/shared-styles.css.js";
import { styles as sharedStyles } from "@material/web/button/internal/shared-styles.js";
import { TextButton } from "@material/web/button/internal/text-button.js";
import { styles as textStyles } from "@material/web/button/internal/text-styles.css.js";
import { styles as textStyles } from "@material/web/button/internal/text-styles.js";
declare global {
interface HTMLElementTagNameMap {

View File

@ -1,6 +1,7 @@
import { ColoredConsole, coloredConsoleStyles } from "../util/console-color";
import { sleep } from "../util/sleep";
import { LineBreakTransformer } from "../util/line-break-transformer";
import { TimestampTransformer } from "../util/timestamp-transformer";
import { Logger } from "../const";
export class EwtConsole extends HTMLElement {
@ -95,6 +96,7 @@ export class EwtConsole extends HTMLElement {
signal: abortSignal,
})
.pipeThrough(new TransformStream(new LineBreakTransformer()))
.pipeThrough(new TransformStream(new TimestampTransformer()))
.pipeTo(
new WritableStream({
write: (chunk) => {

View File

@ -6,20 +6,7 @@ import {
Manifest,
FlashStateType,
} from "./const";
import { sleep } from "./util/sleep";
const resetTransport = async (transport: Transport) => {
await transport.device.setSignals({
dataTerminalReady: false,
requestToSend: true,
});
await sleep(250);
await transport.device.setSignals({
dataTerminalReady: false,
requestToSend: false,
});
await sleep(250);
};
import { hardReset } from "./util/reset";
export const flash = async (
onEvent: (state: FlashState) => void,
@ -67,27 +54,14 @@ export const flash = async (
"Failed to initialize. Try resetting your device or holding the BOOT button while clicking INSTALL.",
details: { error: FlashError.FAILED_INITIALIZING, details: err },
});
await resetTransport(transport);
await hardReset(transport);
await transport.disconnect();
return;
}
chipFamily = esploader.chip.CHIP_NAME as any;
if (!esploader.chip.ROM_TEXT) {
fireStateEvent({
state: FlashStateType.ERROR,
message: `Chip ${chipFamily} is not supported`,
details: {
error: FlashError.NOT_SUPPORTED,
details: `Chip ${chipFamily} is not supported`,
},
});
await resetTransport(transport);
await transport.disconnect();
return;
}
fireStateEvent({
state: FlashStateType.INITIALIZING,
message: `Initialized. Found ${chipFamily}`,
@ -102,7 +76,7 @@ export const flash = async (
message: `Your ${chipFamily} board is not supported.`,
details: { error: FlashError.NOT_SUPPORTED, details: chipFamily },
});
await resetTransport(transport);
await hardReset(transport);
await transport.disconnect();
return;
}
@ -149,7 +123,7 @@ export const flash = async (
details: err.message,
},
});
await resetTransport(transport);
await hardReset(transport);
await transport.disconnect();
return;
}
@ -227,7 +201,7 @@ export const flash = async (
message: err.message,
details: { error: FlashError.WRITE_FAILED, details: err },
});
await resetTransport(transport);
await hardReset(transport);
await transport.disconnect();
return;
}
@ -242,9 +216,8 @@ export const flash = async (
},
});
await sleep(100);
console.log("HARD RESET");
await resetTransport(transport);
await hardReset(transport);
console.log("DISCONNECT");
await transport.disconnect();

View File

@ -17,6 +17,8 @@ import "./pages/ewt-page-message";
import {
closeIcon,
listItemConsole,
listItemEraseUserData,
listItemFundDevelopment,
listItemHomeAssistant,
listItemInstallIcon,
listItemVisitDevice,
@ -40,7 +42,7 @@ import { version } from "./version";
import type { EwFilledSelect } from "./components/ew-filled-select";
console.log(
`ESP Web Tools ${version} by Nabu Casa; https://esphome.github.io/esp-web-tools/`,
`ESP Web Tools ${version} by Open Home Foundation; https://esphome.github.io/esp-web-tools/`,
);
const ERROR_ICON = "⚠️";
@ -279,6 +281,7 @@ export class EwtInstallDialog extends LitElement {
href=${this._manifest.funding_url}
target="_blank"
>
${listItemFundDevelopment}
<div slot="headline">Fund Development</div>
</ew-list-item>
`
@ -290,6 +293,7 @@ export class EwtInstallDialog extends LitElement {
class="danger"
@click=${() => this._startInstall(true)}
>
${listItemEraseUserData}
<div slot="headline">Erase User Data</div>
</ew-list-item>
`

View File

@ -28,6 +28,7 @@ export class ColoredConsole {
}
addLine(line: string) {
// @ts-expect-error
const re = /(?:\033|\\033)(?:\[(.*?)[@-~]|\].*?(?:\007|\033\\))/g;
let i = 0;

17
src/util/reset.ts Normal file
View File

@ -0,0 +1,17 @@
import { Transport } from "esptool-js";
import { sleep } from "./sleep";
export const hardReset = async (transport: Transport) => {
console.log("Triggering reset");
await transport.device.setSignals({
dataTerminalReady: false,
requestToSend: true,
});
await sleep(250);
await transport.device.setSignals({
dataTerminalReady: false,
requestToSend: false,
});
await sleep(250);
await new Promise((resolve) => setTimeout(resolve, 1000));
};

View File

@ -0,0 +1,12 @@
export class TimestampTransformer implements Transformer<string, string> {
transform(
chunk: string,
controller: TransformStreamDefaultController<string>,
) {
const date = new Date();
const h = date.getHours().toString().padStart(2, "0");
const m = date.getMinutes().toString().padStart(2, "0");
const s = date.getSeconds().toString().padStart(2, "0");
controller.enqueue(`[${h}:${m}:${s}]${chunk}`);
}
}

View File

@ -0,0 +1,156 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="95.541344mm"
height="29.999447mm"
viewBox="0 0 95.54134 29.999447"
version="1.1"
id="svg5"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="logo.svg"
inkscape:export-filename="/home/erik/Documents/Projekt/NSPanel Manager/Logos/logo250.png"
inkscape:export-xdpi="76.010269"
inkscape:export-ydpi="76.010269"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#000000"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="1"
inkscape:pagecheckerboard="false"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.3404872"
inkscape:cx="174.5634"
inkscape:cy="71.988753"
inkscape:window-width="1366"
inkscape:window-height="704"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="layer2"
showguides="true"
inkscape:guide-bbox="true"
fit-margin-top="5"
fit-margin-left="7"
fit-margin-right="7"
fit-margin-bottom="5" />
<defs
id="defs2" />
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
style="display:inline"
transform="translate(-23.806324,-37.155967)">
<rect
style="fill:#000000;stroke:#000000;stroke-width:0.264583"
id="rect91625"
width="16.863066"
height="1.0996726"
x="30.938616"
y="59.758064" />
<rect
style="fill:#000000;stroke:#000000;stroke-width:0.473039"
id="rect91761"
width="66.510048"
height="0.89121634"
x="31.042845"
y="42.392487" />
<rect
style="fill:#000000;stroke:#000000;stroke-width:0.34752"
id="rect91763"
width="31.46484"
height="1.0167363"
x="80.709068"
y="59.79953" />
</g>
<g
inkscape:groupmode="layer"
id="layer2"
inkscape:label="Layer 2"
style="display:inline"
transform="translate(-23.806324,-37.155967)">
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:0;font-family:sans-serif;letter-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="64.189873"
y="56.76144"
id="text39249"><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:13.4056px;line-height:0.55;font-family:Hamlin;-inkscape-font-specification:'Hamlin, Normal';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
x="64.189873"
y="56.76144"
id="tspan62001">NSPANEL</tspan><tspan
sodipodi:role="line"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-size:4.93889px;line-height:1.55;font-family:Hamlin;-inkscape-font-specification:'Hamlin Bold';font-variant-ligatures:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-east-asian:normal;text-align:center;text-anchor:middle;fill:#000000;stroke-width:0.264583"
x="64.189873"
y="62.091209"
id="tspan73527">MANAGER</tspan></text>
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="Layer 3"
transform="translate(-23.806324,-37.155967)">
<g
id="g91894"
transform="matrix(0.15910033,0,0,0.15910033,102.25849,44.830316)">
<g
inkscape:label="Layer 1"
id="layer1-1"
transform="translate(-30.269979,-9.7200098)"
style="display:inline;fill:#ffc101;fill-opacity:1">
<path
style="fill:#ffc101;fill-opacity:1;stroke-width:0.103892"
d="m 55.789326,41.355207 -7.50621,-0.0036 c -8.143469,-0.0039 -15.508914,-0.135689 -16.902471,-0.302478 -0.482408,-0.05774 -0.940146,-0.168019 -1.017198,-0.245069 -0.115522,-0.115523 -0.121188,-0.512246 -0.03231,-2.261925 0.23677,-4.661121 1.011239,-7.815267 2.954845,-12.034057 2.163281,-4.695621 5.19604,-8.340625 9.101253,-10.938592 2.710535,-1.8032 6.982591,-3.536303 9.582241,-3.887359 0.270422,-0.03652 0.543941,-0.129371 0.60782,-0.20634 0.06388,-0.07697 0.286764,-0.168201 0.495299,-0.202735 0.208537,-0.03453 0.449284,-0.09017 0.534995,-0.123628 0.168484,-0.06577 0.381034,-0.08553 1.215776,-0.112981 l 0.540477,-0.01778 0.03093,-0.649326 0.03093,-0.6493272 h 1.610329 1.610329 l 0.03093,0.6493272 0.03093,0.649326 0.540477,0.01778 c 0.834742,0.02745 1.047292,0.04721 1.215776,0.112981 0.08571,0.03346 0.326458,0.08909 0.534995,0.123628 0.208535,0.03453 0.43142,0.125765 0.495299,0.202735 0.06388,0.07697 0.337398,0.169823 0.60782,0.20634 1.199505,0.161981 3.423686,0.820696 4.997483,1.480058 3.507719,1.469604 6.221358,3.303143 8.667596,5.856479 2.140092,2.233788 3.602852,4.416791 5.018415,7.489412 1.943606,4.21879 2.718075,7.372936 2.954845,12.034057 0.08888,1.749679 0.08321,2.146402 -0.03231,2.261925 -0.07705,0.07705 -0.53479,0.187332 -1.017198,0.245069 -1.393557,0.166789 -8.759002,0.298597 -16.902471,0.302478 l -7.50621,0.0036 z"
id="path1465"
inkscape:connector-curvature="0"
inkscape:export-xdpi="15.183412"
inkscape:export-ydpi="15.183412"
sodipodi:nodetypes="csssssssssscccccccccscssssssssccc" />
</g>
<g
inkscape:label="Layer 1 copy"
id="g2878"
transform="translate(-30.269979,-9.7200098)"
style="display:inline">
<path
style="fill:#000000;fill-opacity:1;stroke-width:0.103892"
d="m 54.334834,101.13608 c -3.956539,-0.21732 -5.98252,-0.58093 -6.463066,-1.159955 -0.09761,-0.11762 -0.123549,-0.57148 -0.09916,-1.73541 0.02799,-1.33577 0.008,-1.59689 -0.130816,-1.71212 -0.09011,-0.0748 -0.16384,-0.29294 -0.16384,-0.48477 0,-0.30436 0.05486,-0.37678 0.430667,-0.5685 0.694102,-0.3541 2.301256,-0.71174 4.060659,-0.9036 l 1.638312,-0.17866 V 70.783119 c 0,-15.670705 -0.03494,-23.609951 -0.103892,-23.609951 -0.05714,0 -0.103892,-0.0935 -0.103892,-0.207784 0,-0.194592 0.06926,-0.207784 1.090868,-0.207784 0.900399,0 1.090868,-0.02721 1.090868,-0.155839 0,-0.08571 0.04675,-0.155838 0.103892,-0.155838 0.06644,0 0.103892,-3.463072 0.103892,-5.090716 l 2.493412,-2e-6 c 0,1.627644 0.03746,5.090716 0.103892,5.090716 0.05714,0 0.103892,0.07013 0.103892,0.155838 0,0.128629 0.190469,0.155839 1.090868,0.155839 1.021606,0 1.090868,0.01319 1.090868,0.207784 0,0.114281 -0.04675,0.207784 -0.103892,0.207784 -0.06896,0 -0.103892,7.939246 -0.103892,23.609951 v 23.609948 l 1.638312,0.17866 c 1.759403,0.19186 3.366557,0.54949 4.060659,0.9036 0.375812,0.19172 0.430667,0.26413 0.430667,0.5685 0,0.19183 -0.07373,0.40998 -0.16384,0.48476 -0.138668,0.11509 -0.158971,0.37643 -0.132144,1.70097 0.01743,0.86075 -0.0055,1.62411 -0.05099,1.69635 -0.27864,0.442605 -1.632284,0.804945 -3.803075,1.017985 -1.460176,0.14331 -6.726732,0.26812 -8.109225,0.19219 z"
id="path2876"
inkscape:connector-curvature="0"
inkscape:export-xdpi="15.183412"
inkscape:export-ydpi="15.183412"
sodipodi:nodetypes="ssssssscssssssccsssssscssssscsss" />
</g>
<g
id="layer3-5"
inkscape:label="Layer 3">
<circle
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:17.1351;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
id="path1510"
cx="34.837666"
cy="55.072739"
r="1.2872558" />
</g>
<g
id="layer2-9"
inkscape:label="Layer 2">
<rect
style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-width:12.8043;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:0;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
id="rect1508"
width="1.3904994"
height="22.681686"
x="34.147842"
y="31.601988" />
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
static/logos/openspool.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 213 KiB

BIN
static/logos/trmnl.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB