588 Commits

Author SHA1 Message Date
Storm Dragon d51cb1aa90 Changed shortcuts a bit, added a mute/unmute shortcut to control+alt+t. 2025-11-28 01:10:56 -05:00
Storm Dragon 6f1cb957c3 Add keyboard shortcuts for some actions. 2025-11-28 00:52:24 -05:00
Storm Dragon 5e4b9ae439 Fixed problems with radio button grouping. Also added headings to chat area. 2025-11-28 00:11:51 -05:00
Storm Dragon ef2eeb073f Fix accessibility labels and context menu activation
Add descriptive ARIA labels to unlabeled controls and fix keyboard
activation for context menu items.

Changes:
- Add aria-label to chat message textarea ("Message or /command")
- Add aria-labels to Enable/Disable buttons ("Enable/Disable camera and microphone")
- Fix Enter/Space key activation in context menus by clicking parent <li> element

The context menu fix ensures that keyboard users can properly activate
menu items with Enter or Space. Previously, these keys had no effect
because the click handler is attached to the parent <li> element, not
the focused <div>.
2025-11-27 00:55:11 -05:00
Storm Dragon c0929247e7 Add keyboard navigation and accessibility to context menus
This commit makes the Contextual library menus fully keyboard accessible.
Previously, context menus (user menu and chat message menu) were only
usable with a mouse.

Changes:
- Add makeContextualMenuAccessible() helper function
  * Adds ARIA role="menu" to menu container
  * Adds role="menuitem" to each menu item
  * Makes menu items focusable with tabindex
  * Automatically focuses first menu item when opened

- Add keyboard navigation support
  * Arrow Up/Down: Navigate between menu items
  * Enter/Space: Activate selected menu item
  * Escape: Close menu

- Apply to both context menus
  * User menu (click/Enter on username)
  * Chat message menu (double-click on message)

- Focus management
  * First item automatically focused when menu opens
  * Roving tabindex for efficient keyboard navigation
  * Menu closes and returns focus after activation

This makes context menus fully accessible to keyboard and screen reader
users. They can now navigate menus with arrow keys and activate items
with Enter or Space.
2025-11-27 00:33:44 -05:00
Storm Dragon 3c58e13c11 Add keyboard navigation support and raise hand commands
This commit adds comprehensive keyboard navigation support for all
interactive elements and adds slash commands for raising hands.

Changes:
- Add /raisehand and /unraisehand slash commands
  * Previously only accessible via context menu
  * Now keyboard users can raise/lower hand from chat input
  * Shows up in /help command list

- Add keyboard event handlers (Enter/Space) for all interactive elements
  * User list items now respond to keyboard (open context menu)
  * Sidebar collapse button supports keyboard
  * Settings panel open/close supports keyboard
  * Video show/hide buttons support keyboard
  * Chat show/hide buttons support keyboard
  * All buttons now have role="button" and tabindex where needed

- Add keyboard support for chat resizer
  * Made resizer focusable with tabindex="0"
  * Added role="separator" and aria-label
  * Left/Right arrow keys resize chat panel
  * 20px step per keypress
  * Maintains minimum width constraint

These changes make Galene fully keyboard-accessible. Users who cannot
use a mouse can now navigate all controls using Tab, Enter, Space, and
arrow keys.
2025-11-27 00:31:21 -05:00
Storm Dragon 82ab7e553d Add additional accessibility improvements (quick wins)
This commit adds more accessibility enhancements that improve usability
for screen reader and keyboard users with minimal code changes.

Changes:
- Add aria-labels to all icon-only buttons
  * Show/hide video and chat toggle buttons
  * Video controls (play, volume, pip, fullscreen, stop)
  * Chat submit button (send message)
  * All buttons converted from spans/divs to proper button elements

- Add aria-label to volume slider
  * Screen readers can now identify the volume control

- Increase error message timeout from 4s to 8s
  * Gives screen reader users more time to read error messages
  * Messages still dismissible with close button

- Add semantic HTML landmarks
  * Changed main div to <main> element
  * Changed settings sidebar div to <aside> with aria-label
  * Added role="region" and aria-label to chat area
  * Left sidebar already uses <nav> element

- Fix typo and improve close button
  * Fixed id from "clodeside" to "closeside"
  * Converted close button from anchor to button element
  * Added aria-label "Close settings"

These changes improve navigation for screen reader users through proper
landmarks and ensure all interactive elements are properly labeled.
2025-11-27 00:11:44 -05:00
Storm Dragon e03c0be0f7 Add accessibility improvements for screen readers and keyboard navigation
This commit addresses critical accessibility issues that prevent blind users
and keyboard-only users from using Galene effectively.

Changes:
- Convert navigation buttons from divs to proper button elements with ARIA labels
  * Mute button now has aria-pressed state and updates label (Mute/Unmute)
  * Share screen button has proper aria-label
  * More options button has aria-label and aria-haspopup
  * Collapse sidebar button converted to proper button element
  * Close chat button converted to proper button element

- Add visible focus indicators for keyboard navigation
  * Restore focus outlines for all interactive elements
  * Add consistent 2px blue outline for buttons, inputs, selects, and links
  * Remove outline: none that was blocking keyboard users

- Add aria-live region for chat messages
  * New messages announced to screen readers in real-time
  * History messages not announced to avoid spam on page load
  * Includes .sr-only CSS class for screen-reader-only content

- Add aria-labels to video stream elements
  * Video containers labeled with username
  * Video elements labeled to identify stream owner
  * Helps screen reader users identify which video belongs to whom

- Add raised hand notifications for screen readers
  * Announces when users raise their hand
  * User list items show status (hand raised, camera on, microphone on)
  * Does not announce when you raise your own hand
  * Updates aria-label on user elements with full status

These changes make Galene significantly more accessible for users who rely
on screen readers or keyboard navigation.
2025-11-27 00:04:33 -05:00
Juliusz Chroboczek 594e1c2032 Remove references to form.active.
HTMLFormElement does not have an "active" member.
2025-08-22 12:18:37 +02:00
Juliusz Chroboczek 7bf098a57c Use binaryType=blob for file transfer.
This was the intended behaviour, but the default value changed
at some point.  This should in principle allow receiving files
larger than available RAM.
2025-08-21 22:55:41 +02:00
Juliusz Chroboczek bcd4b09a17 Fix typo in error message. 2025-08-10 18:44:28 +02:00
Juliusz Chroboczek e6e750d06d Improve error handling in background blur worker. 2025-08-10 16:47:16 +02:00
Juliusz Chroboczek 49dd875ad7 Improve error handling in workerSendReceive. 2025-08-10 16:24:06 +02:00
Juliusz Chroboczek c782102567 Remove stray debugging message. 2025-08-10 16:22:28 +02:00
Juliusz Chroboczek b88e2f4d93 Implement /sharescreen.
Also rename /stopshare to /unsharescreen.
2025-07-30 14:18:44 +02:00
Etienne Vidal 3408b68145 Remove trailing blank lines from static/index.html. 2025-06-05 14:00:05 +00:00
Juliusz Chroboczek c32286c42f Add rotate filter. 2025-04-08 15:22:56 +02:00
Juliusz Chroboczek c17cca15e9 Minor cleanups in galene.js. 2025-03-23 22:14:56 +01:00
Juliusz Chroboczek 3f5cdc7653 Fix typo in setMediaStatus.
The warning would never trigger.
2025-03-23 22:14:15 +01:00
Juliusz Chroboczek 48b9e82d3d Fix syntax of typing in protocol.js. 2025-03-23 22:05:54 +01:00
Juliusz Chroboczek 9617c68fd6 Work around TypeScript being too smart. 2025-03-23 12:43:47 +01:00
Juliusz Chroboczek 43de0cd559 Revert "Move chat button to the left on mobile."
This reverts commit 6f6cce94fa.

Reason for commit: this caused the chat button to disappear on mobile.
2025-03-08 18:26:57 +01:00
Juliusz Chroboczek 5fa945b073 Implement background blur on Safari.
Safari doesn't implement filtered drawing on HTML canvas,
it silently ignores the "filter" property of Context2D.
We implement our own blurring by scaling the background down
and then back up.
2025-01-19 11:49:23 +01:00
Juliusz Chroboczek edd91a8f3f Delay opening safariStream until after join.
Also close the stream when we leave.
2025-01-18 02:42:34 +01:00
Juliusz Chroboczek c465157eb5 Update fontawesome to 6.7.2. 2025-01-12 00:31:15 +01:00
Juliusz Chroboczek 7ae11a8e54 More precise typing in TransferredFile.event. 2025-01-05 23:36:11 +01:00
Juliusz Chroboczek b077ae786f Add some documentation to galene.js. 2025-01-05 23:30:16 +01:00
Juliusz Chroboczek b537a9299d Fix tsconfig to ignore node types. 2025-01-04 01:13:49 +01:00
Sacha Chua d44178c3cb Don't unmute until camera/microphone are enabled 2025-01-03 18:24:14 -05:00
jjsa 90f2892187 Style the invite dialog. 2025-01-01 21:31:34 +01:00
Juliusz Chroboczek e8b12d3729 Fix client-side selective clearChat.
We were correctly clearing the chat on the server side, but
we were leaving stray entries in the client.

Thanks to J.-J. Sarton.
2024-12-24 01:06:10 +01:00
Juliusz Chroboczek 21e63dcc97 Display warning on ICE failures. 2024-12-19 23:07:58 +01:00
Juliusz Chroboczek d0a0ffe8d4 Add missing copyright notice. 2024-12-16 14:58:57 +01:00
Juliusz Chroboczek 8dc2924369 Disable background blur on Safari. 2024-12-15 16:28:10 +01:00
Juliusz Chroboczek f81094abda Call addFilters asynchronously.
Since we now make HTTP requests from addFilter, this makes
startup slightly faster.
2024-12-15 15:30:22 +01:00
Juliusz Chroboczek 084cd3da1f Don't fail findUpMedia when serverConnection is null.
This avoids throwing if the user changes their setting before
login.  Thanks to Jean-Jacques Sarton.
2024-12-15 14:16:48 +01:00
Juliusz Chroboczek 0a14b78d67 Move MediaPipe initialisation to filter init.
We used to initialise MediaPipe at worker start, which prevented
us from handling errors.  We now do it at filter init, and stop
the stream with an error message if initialisation fails.
2024-12-14 14:53:23 +01:00
Juliusz Chroboczek 3fbe274785 Handle errors in filter init.
We used to ignore errors in filter init, which could cause us
to send unblurred videos to the server.
2024-12-14 13:31:56 +01:00
Juliusz Chroboczek 2c72a27453 Improve background blur blending.
We used blur the image then mask, which caused a halo around
the foreground.  We now mask then blur.
2024-12-14 02:25:04 +01:00
Juliusz Chroboczek bf46a9d6c1 Close the image segmenter result.
This doesn't currently do anything useful, since we're running
tflite on the CPU, but might avoid bugs if we get GPU support.
2024-12-13 22:59:53 +01:00
Juliusz Chroboczek a38676c9f6 Replace var with let. 2024-12-13 18:08:56 +01:00
Juliusz Chroboczek 39c063a9d5 Use ImageBitmap.close when no longer needed.
This should free the underlying textures without waiting
for a GC to happen.
2024-12-13 15:54:52 +01:00
Juliusz Chroboczek 5bb54803dc Make background blur optional. 2024-12-13 11:27:16 +01:00
Juliusz Chroboczek a00b77fc8f Add predicate support to filters. 2024-12-13 11:27:16 +01:00
Juliusz Chroboczek a70a9a13ed Implement background blur. 2024-12-13 11:27:16 +01:00
Juliusz Chroboczek 38807d5f6b Make filters run asynchronously.
Drop a frame if a filter takes too long to run.
2024-12-12 15:42:05 +01:00
Juliusz Chroboczek 361ec64922 Widen configuration menus. 2024-12-12 14:24:11 +01:00
jjsa c040dd2a1d Toastify style moved to galene.css 2024-12-02 15:28:19 +01:00
Juliusz Chroboczek 192e6de6ef Remove onicecandidate callback when closing file transfer.
This avoids an unsightly warning when an ICE candidate arrives
late.
2024-12-02 13:52:57 +01:00
Juliusz Chroboczek 86eeb3d8cf Protect against sending a file to oneself.
When a user sends a file to oneself (which is only possible
as a chat command), then the two file transfer data structures
have the same id, which causes confusion.  We used to detect
this case too late, detect it earlier.

Thanks to J.-J. Sarton for the report.
2024-12-01 21:40:50 +01:00