* 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.