As a first step towards a simpler Web API, convert `SourceAPI` from
a class to a constant object, under the assumption that `SourceAPI`
isn't a public Ruffle API and as such is safe to be changed.
As a result the different `ruffle-core` users don't need to construct
a new `SourceAPI` instance before calling `PublicAPI.negotiate()`.
It seems Mobile Safari on iOS refuses to allow selection of any files
when the "accept" attribute doesn't contain any file types it
recognizes. To fix this, detect when the demo is running on an iOS
device and remove the "accept" attribute from the file input in that
case.
Fixes: 2d0c76c06f ("demo: Only accepts .swf and .spl files")
* web: Don't load a random SWF Instead, show a prompt to select or drag an SWF.
* web: Refactor webpack.config.js
* demo: Refactor index.js
* demo: Cleanup CSS
The indexing into the list of sample SWFs could be incorrect
depending on the order of the JSON data. Now we store the SWF info
directly on the option element for easy access, regardless of order.
This commit adds HTML Opt-Groups separating Games and Animations on the web demo sample dropdown menu. There are also a few tiny styling changes. Mainly the addition of a transition duration to the logo image, as well as changing "max-device-width" to "max-width" on a media query so that the "mobile" view is shown if you scale down the window on desktop browsers.