Add moderation rules:
* You can apply rules in the settings.toml to enforce moderator restrictions on
certain users, e.g. to force their camera to always be NSFW or bar them from
sharing their webcam at all anymore.
Chat UI improvements around users blocking admin accounts:
* When a main website block is in place, the DMs button in the Who List shows
as greyed out with a cross through, as if that user had closed their DMs.
* Admin users are always able to watch the camera of people who have blocked
them. The broadcaster is not notified about the watch.
New operator commands:
* /cut username: to tell a user to turn off their webcam.
* /unmute-all: to lift all mutes on your side, e.g. so your moderator chatbot
can still see public messages from users who have blocked it.
* /help-advanced: moved the more dangerous admin command documentation here.
Miscellaneous fixes:
* The admin commands now tolerate an @ prefix in front of usernames.
* The /nsfw command won't fire unless the user's camera is actually active and
not marked as explicit.
* WebRTC functionality is now 100% working as intended for Safari and
iPad browsers!
* The legacy WebRTC API had properties like offerToReceiveVideo
available on createOffer(), to set up a receive-only channel, but the
modern WebRTC API had removed these and Safari only supports the
modern API.
* The modern solution for the same feature is to add a recvonly
transceiver to the connection in place of offering a local video/audio
stream to share.
* Try a new strategy to get Apple (iPad/iPhone) webcams to connect.
* "Apple compatibility mode" setting: on by default if iPad/iPhone is
detected or can be opted into in the chat settings Misc tab.
* In Apple compat mode: when you open someone else's webcam, you always
attach your local video on the WebRTC offer. This would normally make
your video auto-open on the remote side, but the previous commit
updates the chat page to ignore offered video if you did not opt-in to
auto-open your viewer's camera.
* This should satisfy the two-way video call limitation in Safari: the
iPad always shares its video and gets video from the person they are
watching.
* If the person they are watching did not auto-open your video: they
ignore the attached video on your offer and don't display it.
Spin out components for:
* MessageBox: draw a chat message in the chat history panel as well as reused
in the Report Modal.
* WhoListRow: provides a consistent UX for the Who List and Watching tab. On
the Watching tab, the video button is replaced with the boot from video.
Other changes:
* Move VideoFlag into its own separate ES module.
* Emoji available reactions are moved into MessageBox.
* On WhoListRow: usernames are clickable to also open their profile page.
* On WhoListRow: the Watching tab is now sortable and follows the user's
sort selection like the Online tab does.
Move some chat modals into external components:
* LoginModal
* ExplicitOpenModal
* ReportModal
* The Photo Modal was hoisted into the main index.html page, because it is not
a Vue component and relied on global onclick handlers and the DOM.
Spin off some external JS modules:
* isAppleWebkit moved to lib/browsers.js
* Local Storage management centralized and moved to lib/LocalStorage.js
This commit makes an initial port of the front-end over to a proper Vue
CLI application. It seems to work from surface level testing.
Changes made:
* Rename web/static to public/static to place it into the Vue build path
* Notes: web/static/js/BareRTC.js and web/templates/chat.html are now
deprecated
* Rename web/static/js/sounds.js into src/lib/sounds.js making it a
proper JavaScript module with exports.
* Fill out initial src/App.vue by copying and updating
web/templates/chat.html and web/static/js/BareRTC.js into this module.