HoneyBar: kein zweiter Punkt, der auf dieselbe Seite fuehrt

This commit is contained in:
marc committed 2026-09-01 01:12:02 +02:00
1 parent 75df4e0833
commit aec042a8c9
4 files changed
+35 -38

No files matched your search

+5 -2
View File
@@ -43,8 +43,11 @@ Eine Annahme von damals hat sich nicht gehalten: „ohne sie zu verlassen"
schreibt, und die HoneyBar darf in einer fremden App nicht schreiben — die
Sitzung kommt über die Site-Grenze nicht mit, und selbst unter einer Domain
liegt das CSRF-Prüfwort in einem Cookie, das nur HoneyOS' eigene Seiten lesen.
Also reicht die HoneyBar die Frage als `?einstellungen=1` an den Schreibtisch
weiter. Ein Klick, ein Seitenwechsel — dort, wo man angemeldet ist.
Die HoneyBar hat die Frage deshalb als `?einstellungen=1` an den Schreibtisch
weitergereicht. **Auch das ist seit dem 01.09.2026 weg** (Marcs Einwand): Wenn
der Punkt ohnehin nur weiterleitet, ist er neben „Schreibtisch" keine zweite
Möglichkeit, sondern dieselbe mit einem Zwischenschritt weniger. Das Bar-Menü
trägt jetzt Schreibtisch und Einklappen, sonst nichts.
**Abmelden ist ganz aus den Leisten verschwunden** und steht unten in den
Einstellungen (Marcs Entscheidung, 29.08.2026). Aus fremden Apps war es ohnehin
+16 -12
View File
@@ -554,21 +554,25 @@ Das `■ HONEYOS` links ist ein Menü — auf dem Schreibtisch wie in jeder App:
| in der HoneyBar (fremde App) | auf dem Schreibtisch |
|---|---|
| Schreibtisch | Über HoneyOS |
| Einstellungen … | Einstellungen |
| HoneyBar einklappen | Terminal-/Desktop-Modus |
| HoneyBar einklappen | Einstellungen |
| — | Terminal-/Desktop-Modus |
Rechts daneben klappt ein Pfeil die App-Liste auf — in beiden Leisten gleich.
Das Zahnrad, das dort früher stand, ist weg: Einstellungen stehen jetzt links
im Systemmenü, wo sie in jeder App auch stehen.
Das Zahnrad, das dort früher stand, ist weg: Auf dem Schreibtisch stehen die
Einstellungen links im Systemmenü; in einer fremden App gibt es sie nicht,
sondern nur den Weg dorthin.
**In den Apps sind die Punkte Links auf den Schreibtisch, keine Handlungen** —
und das ist eine Grenze, keine Bequemlichkeit. Einstellungen schreiben, und
dafür braucht der Server die HoneyOS-Sitzung: Aus einer fremden Site schickt der
Browser sie nicht mit, und selbst unter einer Domain liegt das CSRF-Prüfwort in
einem Cookie, das nur HoneyOS' eigene Seiten lesen dürfen. Also stellt die
HoneyBar die Frage in der Adresse (`?einstellungen=1`), und der Schreibtisch
beantwortet sie: Er macht dasselbe Feld auf, das auch `[S]` öffnet, und nimmt
den Anhang danach wieder aus der Adresse.
**In den Apps ist „Schreibtisch" ein Link, keine Handlung** — und das ist eine
Grenze, keine Bequemlichkeit. Einstellungen schreiben, und dafür braucht der
Server die HoneyOS-Sitzung: Aus einer fremden Site schickt der Browser sie nicht
mit, und selbst unter einer Domain liegt das CSRF-Prüfwort in einem Cookie, das
nur HoneyOS' eigene Seiten lesen dürfen.
Deshalb stand dort lange ein zweiter Punkt „Einstellungen …", der auf dieselbe
Seite führte, nur mit geöffnetem Feld. **Er ist weg** (01.09.2026): Zwei Türen
in denselben Raum sind keine zwei Wege. Wer etwas einstellen will, ist damit
ohnehin auf dem Schreibtisch, und dort steht das Feld einen Klick — oder `[S]` —
entfernt.
**Abmelden steht in den Einstellungen, ganz unten — und sonst nirgends.** Nicht
in der HoneyBar fremder Apps, nicht im Systemmenü, nicht im Startmenü. Es ist
+14 -15
View File
@@ -259,7 +259,6 @@
<div class="menu sys" id="sysmenu" role="menu">
<div class="head">honeyos</div>
<a id="mHome" role="menuitem">Schreibtisch</a>
<a id="mSettings" role="menuitem">Einstellungen &hellip;</a>
<hr />
<button id="hide" role="menuitem">HoneyBar einklappen</button>
</div>
@@ -469,25 +468,25 @@
}
/**
* Die zwei Wege ins System. Beides sind Links auf den Schreibtisch, keine
* Aktionen hier — und das ist keine Bequemlichkeit, sondern die Grenze:
* Der eine Weg ins System: ein Link auf den Schreibtisch, keine Aktion hier.
*
* Einstellungen **schreiben**. Dafuer braucht der Server die HoneyOS-Sitzung,
* und die schickt der Browser aus einer fremden App nicht mit; liegt alles
* unter einer Domain, kommt sie zwar mit, aber das CSRF-Prüfwort steht in
* einem Cookie der HoneyOS-Adresse, das dieses Skript von hier aus nicht
* lesen darf.
* Das ist keine Bequemlichkeit, sondern die Grenze: Einstellungen
* **schreiben**. Dafuer braucht der Server die HoneyOS-Sitzung, und die
* schickt der Browser aus einer fremden App nicht mit; liegt alles unter
* einer Domain, kommt sie zwar mit, aber das CSRF-Prüfwort steht in einem
* Cookie der HoneyOS-Adresse, das dieses Skript von hier aus nicht lesen darf.
*
* Hier stand deshalb lange ein zweiter Punkt „Einstellungen …", der auf
* dieselbe Seite fuehrte, nur mit geoeffnetem Feld. **Weg damit** (Marcs
* Einwand, 01.09.2026): Zwei Tueren in denselben Raum sind keine zwei Wege.
* Wer eine Einstellung aendern will, ist ohnehin auf dem Schreibtisch, und
* dort steht sie einen Klick oder ein [S] entfernt.
*
* Abmelden steht hier bewusst gar nicht: Es gehoert dorthin, wo man sich
* angemeldet hat. Wer es aus einer App heraus braucht, geht ueber
* „Einstellungen …" — dort unten steht der Knopf.
* angemeldet hat — unten in den Einstellungen.
*/
function systemZiele() {
const heim = new URL(homeUrl, location.href);
root.getElementById("mHome").href = heim.href;
const einst = new URL(homeUrl, location.href);
einst.search = "einstellungen=1";
root.getElementById("mSettings").href = einst.href;
root.getElementById("mHome").href = new URL(homeUrl, location.href).href;
}
/**
-9
View File
@@ -1208,15 +1208,6 @@ async function main() {
if (e.target === $("modal")) closeModal();
});
// Was die HoneyBar aus einer fremden App herüberreicht: Sie darf selbst
// nichts schreiben (siehe honeybar.js), also stellt sie die Frage in der
// Adresse und der Schreibtisch beantwortet sie. Danach kommt die Adresse
// weg — ein Neuladen soll die Einstellungen nicht wieder aufreißen.
if (new URLSearchParams(location.search).get("einstellungen") === "1") {
history.replaceState(null, "", location.pathname);
openSettings();
}
window.addEventListener("keydown", (e) => {
if (e.metaKey || e.ctrlKey || e.altKey) return;
const typing = /^(INPUT|TEXTAREA|SELECT)$/.test(e.target.tagName);