Zoom moves into a new Accessibility section (the section keeps its
section-zoom id, which layout plugins anchor to) next to:
- Message text size, 80 to 200 %, separate from Zoom: messages, threads,
forum posts, code blocks and the message boxes.
- Line spacing (normal, relaxed, loose) and letter spacing (normal, wide).
- Font: the theme's, the system's, Atkinson Hyperlegible or OpenDyslexic,
self-hosted under SIL OFL 1.1 with their licenses in /fonts.
- High contrast: secondary text and borders pulled toward each theme's own
text color, and a thick focus ring.
- Reduce motion: follow system, on or off. One html.reduce-motion class now
covers every animation, the theme effects, the shimmering role colors,
smooth scrolling, and GIFs, animated emoji and profile pictures, which
wait for hover or tap. The old prefers-reduced-motion rules use it too.
- Underline links, and larger click targets.
Everything is per device and applied by theme-init.js before first paint,
which hands the same read/apply functions to the settings page.
Also: keyboard focus rings, keyboard-reachable settings nav rows,
aria-labels on the icon buttons in the channel header and message box, and
aria-pressed on the picker buttons.
Co-authored-by: ancsemi <ancsemi@gmail.com>
Default Theme in Appearance & Welcome and the theme in Defaults for New
Members were stored separately, so a new member saw one on the sign-in page
and the other once the shared defaults applied. Sharing a theme now also sets
the Default Theme (when it is a built-in or a published custom theme),
changing the Default Theme updates the shared theme, choosing None removes it
from the shared set, and unpublishing a custom default drops it from both.
The shared version is untouched, so nobody is re-sent defaults.
When a self-destructing message expires, its files have always been moved
to deleted-attachments for the retention window, so a moderator can
recover something abusive that was posted on a short timer. That is the
right default for community servers, but small servers where everyone
trusts each other may want those files gone for good when the timer
runs out.
A new "Keep self-destructed attachments" toggle sits under "Keep deleted
files for (days)" in Admin settings, Cleanup. It is on by default, so
nothing changes for existing servers. When it is on, the files are held
for the same retention period as other deleted attachments. When it is
off, the sweep deletes them directly instead of holding them.
Only an explicit off deletes for good. If the setting can't be read (for
example, a busy database), the files are still held, so a read failure
never destroys evidence. The server only accepts true or false for the
setting.
This commit also fixes a loophole that let anyone stop a self-destructing
message's attachments from being removed, just by quoting the message or
linking its attachments before the timer ran out. The message went away,
but its attachments stayed in uploads for good.
Self-destructing messages can no longer be replied to or quoted by
anyone, mods included, so the sender can't accidentally undo their own
self-destruct either. The server also drops a reply to one. Mods can
still keep a message by pinning or protecting it, which removes the
timer as before and allows replies and quotes again. When the timer
runs out, a link to the attachments posted in any other message no
longer keeps them. The link text stays, but it stops working.
Co-authored-by: bo0sted <mc526+github@proton.me>
The Braid and Compact switches become a single picker: Original (Haven's
own layout) and every <Name>Layout.plugin.js on the server, one at a time.
A new layout plugin shows up without any change to Haven, so alternative
sidebars can ship as layouts while Original stays the default. The picker
shows the chosen layout even while it waits (Compact needs a wide window,
Braid waits for Mod Mode), and follows Braid's own shortcut and menu.
theme-authoring.md says what a plugin needs to appear there.
On the light base the accent, link and status colors kept their dark-mode
brightness, so yellow, green and cyan mentions, links and warnings all but
vanished (about 1.2:1). They are now darkened until they reach about 3:1
(4.5:1 for links). The automatic black or white button text applies only
in light mode, so dark Custom and RGB look exactly as before. The first
frame is painted from the last palette shown, so light mode no longer
flashes dark on every load. Also: the switch sits below the color picker
instead of over it, borders match Daylight's, the color base is read once
instead of on every RGB tick, the preview page has the switch, and the
cache busters are bumped.
Haven Desktop's next release can skip Chromium's VA-API driver blocklist for
screen sharing (Desktop #57), off by default. This puts that setting in
Settings so nobody has to edit config.json. It shows only in Haven Desktop on
Linux, and only when the Desktop build has the setting, and says a restart is
needed after a change.
The native GStreamer screen share path is gone: in a peer-to-peer mesh every
hardware and OS combination behaved differently, and keeping them in step cost
more than it saved. Screen sharing uses Chromium's own capture everywhere.
- Screen share bitrate is a setting: a stepper from 300 to 10,000 Kbps or
unlimited, with press-and-hold repeat and typed entry. Changes apply live,
including to a share going through the voice relay (debounced, so a hold
becomes one update). The default stays 1080p at 30 fps with an 8,000 Kbps cap.
- Black screen share tiles on GPU encoders: the sharer asks for a fresh
keyframe after negotiation, and the watchdog only re-adopts tracks a tile is
not already showing.
- Relay screen publishing is serialized and tied to the share it was started
for, so a stop, a new share or a relay restart can never publish a stale
producer, and a failed first publish retries on its own.