Go: store, auth, weather und config sind eigene Pakete unter internal/. Vorher lagen fuenf Dateien in einem Topf, und jede kannte jede. Web: os.js hatte 1425 Zeilen und alles darin. Jetzt core.js (Zustand, Server, Einstellungen), glyphs.js (die Pixelraster), js/widgets/ mit einem Widget je Datei, os.js nur noch die Ansichten. Stylesheet nach css/. Die HoneyBar bleibt eine einzelne Datei ohne Importe — sie wird von fremden Seiten mit einer Zeile eingebunden, da darf nichts nachladen. Nebenbei: Das gebaute Binary lag mit 9,8 MB im Repo und ist jetzt ignoriert. Und der Test gegen eine zweite Versionsnummer geht nicht mehr auf os.js, sondern durch alle .js — sonst haette ihn dieser Umbau still ausgehebelt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
245 lines
5.2 KiB
JavaScript
245 lines
5.2 KiB
JavaScript
/* Die Pixelsymbole von HoneyOS.
|
||
*
|
||
* Eigene Datei, weil sie Daten sind und nicht Verhalten: zwölf mal zwölf
|
||
* Zeichen je Symbol, mehr passiert hier nicht. Dieselben Raster stehen noch
|
||
* einmal in honeybar/honeybar.js — die soll eine einzelne Datei bleiben, die
|
||
* eine fremde App mit einer Zeile einbindet (siehe IDEAS 1.3).
|
||
*/
|
||
/* ── Pixel-Glyphen ─────────────────────────────────────────────────────────
|
||
* 12×12-Raster als Zeichenketten. Ein `#` ist ein Pixel. So bleiben die Icons
|
||
* im Retro-Raster statt aus einer Icon-Bibliothek zu kommen.
|
||
*/
|
||
export const GLYPHS = {
|
||
// Wettersymbole. Dieselben Namen wie in weather.go (wmo) und in der HoneyBar —
|
||
// solange 1.3 (geteilte Symbolquelle) nicht gebaut ist, stehen sie zweimal da.
|
||
sonne: [
|
||
"............",
|
||
".....##.....",
|
||
"..#..##..#..",
|
||
"...#....#...",
|
||
"....####....",
|
||
"..##....##..",
|
||
"..##....##..",
|
||
"....####....",
|
||
"...#....#...",
|
||
"..#..##..#..",
|
||
".....##.....",
|
||
"............",
|
||
],
|
||
heiter: [
|
||
"............",
|
||
"...##.......",
|
||
"..####..#...",
|
||
"...##..###..",
|
||
"......#####.",
|
||
"...####...#.",
|
||
"..#....##.#.",
|
||
".##........#",
|
||
"#..........#",
|
||
".##########.",
|
||
"............",
|
||
"............",
|
||
],
|
||
wolke: [
|
||
"............",
|
||
"....####....",
|
||
"...#....#...",
|
||
"..#......##.",
|
||
".##........#",
|
||
"##.........#",
|
||
"#..........#",
|
||
"#..........#",
|
||
".##########.",
|
||
"............",
|
||
"............",
|
||
"............",
|
||
],
|
||
nebel: [
|
||
"............",
|
||
"....####....",
|
||
"..##....##..",
|
||
".##.......#.",
|
||
"#..........#",
|
||
".##########.",
|
||
"............",
|
||
".#########..",
|
||
"............",
|
||
"..#########.",
|
||
"............",
|
||
".#########..",
|
||
],
|
||
regen: [
|
||
"............",
|
||
"....####....",
|
||
"...#....#...",
|
||
"..#......##.",
|
||
".##........#",
|
||
"##.........#",
|
||
".##########.",
|
||
"............",
|
||
"..#..#..#...",
|
||
".#..#..#....",
|
||
"..#..#..#...",
|
||
".#..#..#....",
|
||
],
|
||
schnee: [
|
||
"............",
|
||
"....####....",
|
||
"...#....#...",
|
||
"..#......##.",
|
||
".##........#",
|
||
"##.........#",
|
||
".##########.",
|
||
"............",
|
||
"..#...#...#.",
|
||
".#.#.#.#.#..",
|
||
"..#...#...#.",
|
||
"............",
|
||
],
|
||
gewitter: [
|
||
"............",
|
||
"....####....",
|
||
"...#....#...",
|
||
"..#......##.",
|
||
".##........#",
|
||
"##.........#",
|
||
".##########.",
|
||
"......##....",
|
||
".....##.....",
|
||
"....####....",
|
||
"......##....",
|
||
".....##.....",
|
||
],
|
||
|
||
cloud: [
|
||
"............",
|
||
"....####....",
|
||
"...#....#...",
|
||
"..#......##.",
|
||
".##........#",
|
||
"##.........#",
|
||
"#..........#",
|
||
"#..........#",
|
||
".##########.",
|
||
"............",
|
||
"............",
|
||
"............",
|
||
],
|
||
note: [
|
||
"..########..",
|
||
"..#......#..",
|
||
"..#.####.#..",
|
||
"..#......#..",
|
||
"..#.####.#..",
|
||
"..#......#..",
|
||
"..#.####.#..",
|
||
"..#......#..",
|
||
"..#.##...#..",
|
||
"..#......#..",
|
||
"..########..",
|
||
"............",
|
||
],
|
||
box: [
|
||
"............",
|
||
".##########.",
|
||
".#........#.",
|
||
".#........#.",
|
||
".#...##...#.",
|
||
".#..####..#.",
|
||
".#..####..#.",
|
||
".#...##...#.",
|
||
".#........#.",
|
||
".#........#.",
|
||
".##########.",
|
||
"............",
|
||
],
|
||
chip: [
|
||
"............",
|
||
"..#.#.#.#...",
|
||
".##########.",
|
||
".#........#.",
|
||
"##.######.##",
|
||
".#.#....#.#.",
|
||
"##.#....#.##",
|
||
".#.######.#.",
|
||
".#........#.",
|
||
".##########.",
|
||
"..#.#.#.#...",
|
||
"............",
|
||
],
|
||
gear: [
|
||
"....####....",
|
||
"..#.####.#..",
|
||
"..########..",
|
||
".####..####.",
|
||
"###......###",
|
||
"##........##",
|
||
"##........##",
|
||
"###......###",
|
||
".####..####.",
|
||
"..########..",
|
||
"..#.####.#..",
|
||
"....####....",
|
||
],
|
||
globe: [
|
||
"............",
|
||
"...######...",
|
||
"..#..#...#..",
|
||
".#...#....#.",
|
||
"############",
|
||
"#....#.....#",
|
||
"#....#.....#",
|
||
"############",
|
||
".#...#....#.",
|
||
"..#..#...#..",
|
||
"...######...",
|
||
"............",
|
||
],
|
||
disk: [
|
||
"............",
|
||
"############",
|
||
"#..######..#",
|
||
"#..#....#..#",
|
||
"#..#....#..#",
|
||
"#..######..#",
|
||
"#..........#",
|
||
"#.########.#",
|
||
"#.#......#.#",
|
||
"#.#......#.#",
|
||
"############",
|
||
"............",
|
||
],
|
||
folder: [
|
||
"............",
|
||
".####.......",
|
||
"#....#......",
|
||
"#.....######",
|
||
"#..........#",
|
||
"#..........#",
|
||
"#..........#",
|
||
"#..........#",
|
||
"#..........#",
|
||
"############",
|
||
"............",
|
||
"............",
|
||
],
|
||
};
|
||
|
||
export function glyphSvg(name) {
|
||
const grid = GLYPHS[name] || GLYPHS.box;
|
||
const rects = [];
|
||
grid.forEach((row, y) => {
|
||
// Waagerechte Läufe zusammenfassen: weniger Rechtecke, gleiches Bild.
|
||
let run = 0;
|
||
for (let x = 0; x <= row.length; x++) {
|
||
if (row[x] === "#") {
|
||
run++;
|
||
} else if (run) {
|
||
rects.push(`<rect x="${x - run}" y="${y}" width="${run}" height="1"/>`);
|
||
run = 0;
|
||
}
|
||
}
|
||
});
|
||
return `<svg viewBox="0 0 12 12" fill="currentColor" shape-rendering="crispEdges" aria-hidden="true">${rects.join("")}</svg>`;
|
||
}
|