Previously, the Ruffle configuration options weren't working properly
for polyfilled elements.
A polyfilled element can have specific configuration options which
overwrite the more general Ruffle configuration settings.
But the code handling those specific configuration options has
previously set some of them to default values if they haven't been
provided, therefore overwriting the more general configuration settings.
This has been fixed. A getPolyfillOptions function has been created and
returns a URLLoadOptions object, containing only the options that have
been set for the respective element. Helper functions have been adapted
to not return any default values anymore.
getPolyfillOptions is now used in all places where polyfilled options
need to be retrieved (therefore reducing duplicated code).
Documentation has been added to clarify that these options must not
contain any default values, since those would overwrite other
configuration settings with a lower priority.
The extension and demo code has been changed to clarify that no default
values are contained in the element configuration options.
The RuffleEmbed::attributeChangedCallback method has previously loaded
an SWF file only with the parameters and base options. This has been
fixed as well since it now also uses getPolyfillOptions.
When using RuffleObject::connectedCallback to load an SWF file, setting
an element config option to "" hasn't worked for most config options
before either. This has been fixed as well by using the new
getPolyfillOptions function.
The default WindowMode value of the default Ruffle web config has been
set to Window (as it is in the desktop version and according to the
documentation). It has previously been set to Opaque (which causes the
same functionality).
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.