@ -332,18 +332,18 @@ The main required features are:
Therefore, for desktop browsers:
Therefore, for desktop browsers:
* Gecko (Firefox): checked and works in v132, both with JS enabled (`mode 1`) and with JS disabled (`mode 3`).
* **Gecko** (Firefox): checked and works in v132, both with JS enabled (`mode 1`) and with JS disabled (`mode 3`).
Should work in `mode 1` starting with Firefox 63 (2018); should fall back plain old client-server mode in all versions,
Should work in `mode 1` starting with Firefox 63 (2018); should fall back plain old client-server mode in all versions,
although the design in Firefox 51 (2017) and older will probably not look very good due to the lack of the recent CSS features.
although the design in Firefox 51 (2017) and older will probably not look very good due to the lack of the recent CSS features.
* Blink (e.g. Chromium and Chromium-based browsers): superficially checked in Chromium 130, basic functionality seems to work in `mode 1`.
* **Blink** (e.g. Chromium and Chromium-based browsers): superficially checked in Chromium 130, basic functionality seems to work in `mode 1`.
Should work in `mode 1` starting with Chrome 67 (2018); should fall back to `mode 2` in Chrome plain old client-server mode in all versions,
Should work in `mode 1` starting with Chrome 67 (2018); should fall back to `mode 2` in Chrome plain old client-server mode in all versions,
although the design in Chrome 56 (2017) and older will probably not look very good due to the lack of the recent CSS features.
although the design in Chrome 56 (2017) and older will probably not look very good due to the lack of the recent CSS features.
* WebKit (e.g. qutebrowser, Konqueror, Epiphany and notably Safari): superficialy checked in [BadWolf](https://hacktivis.me/projects/badwolf) 1.3 / webkit2gtk-4.1 2.46.3,
* **WebKit** (e.g. qutebrowser, Konqueror, Epiphany and notably Safari): superficialy checked in [BadWolf](https://hacktivis.me/projects/badwolf) 1.3 / webkit2gtk-4.1 2.46.3,
basic functionality seems to work both with JS enabled (in `mode 2`) and with JS disabled (in `mode 3`).
basic functionality seems to work both with JS enabled (in `mode 2`) and with JS disabled (in `mode 3`).
Should work with JS enabled in `mode 2` in all browsers supporting custom elements (e.g. in Safari 10.1 (2017) and newer);
Should work with JS enabled in `mode 2` in all browsers supporting custom elements (e.g. in Safari 10.1 (2017) and newer);
should fall back to `mode 3` in older browsers, except that the design in Safari before 10.1 (2017) will not look very good (but will still be functional),
should fall back to `mode 3` in older browsers, except that the design in Safari before 10.1 (2017) will not look very good (but will still be functional),
and will probably become disfunctional in Safari before 3.1 (2008).
and will probably become disfunctional in Safari before 3.1 (2008).
* Servo: checked, does **not** work in nightly as of 2024-11-20 and as of 2024-11-25 (even progressive form doesn't work),
* **Servo**: checked, does **not** work in nightly as of 2024-11-20 and as of 2024-11-25 (even progressive form doesn't work),
and its developer tools host seemingly crashes on this page
and its developer tools host seemingly crashes on this page
(at least on the borrowed Windows machine; Servo is not packaged for Alpine, and its regular Linux builds don't run on Alpine).
(at least on the borrowed Windows machine; Servo is not packaged for Alpine, and its regular Linux builds don't run on Alpine).
I decided to _not_ disable dynamic features in Servo because:
I decided to _not_ disable dynamic features in Servo because:
@ -352,19 +352,17 @@ Therefore, for desktop browsers:
3. Gating offline JS mode for non-servo browsers only will mean that in the future, when servo is fixed,
3. Gating offline JS mode for non-servo browsers only will mean that in the future, when servo is fixed,
this demo will only work in client-server mode, just because servo once had a bug. Not ideal.
this demo will only work in client-server mode, just because servo once had a bug. Not ideal.
(Also not even attempting to use dynamic features in servo will make it more difficult to debug the problem in it.)
(Also not even attempting to use dynamic features in servo will make it more difficult to debug the problem in it.)
* EdgeHTML (classic MS Edge before they migrated to Chromium): not checked, should fall back to `mode 3` in all versions,
* **EdgeHTML** (classic MS Edge before they migrated to Chromium): not checked, should fall back to `mode 3` in all versions,
but the page will not look very pretty in Edge before 16 (2017).
but the page will not look very pretty in Edge before 16 (2017).
* Trident (Internet Explorer): not checked, should fall back to `mode 3`,
* **Trident** (Internet Explorer): not checked, should fall back to `mode 3`,
UI should be functional (not pretty) in IE8+ (2008) and dysfunctional in IE7 and lower
UI should be functional but not pretty.
(fixable by refactoring the approach to displaying/hiding elements to avoid the usage of `:not` selector,
* **links**: checked on 2.30, mostly functional:
but this is outside the scope of the task).
* links: checked on 2.30, mostly functional:
* Links doesn't support disabled buttons
* Links doesn't support disabled buttons
so all board fields are always clickable (even if they're already filled),
so all board fields are always clickable (even if they're already filled),
this does not cause any functional issues (clicking on the occupied field,
this does not cause any functional issues (clicking on the occupied field,
or clicking on an empty field when the game is over, does not change anything),
or clicking on an empty field when the game is over, does not change anything),
but still that's a poor UX.
but still that's a poor UX.
* elinks: checked on 0.17.1.1, mostly functional:
* **elinks**: checked on 0.17.1.1, mostly functional:
* elinks just like links does not support disabled buttons in 0.17.1.1,
* elinks just like links does not support disabled buttons in 0.17.1.1,
but this is fixed in https://github.com/rkd77/elinks/issues/341.
but this is fixed in https://github.com/rkd77/elinks/issues/341.
* elinks does not support `hidden` attribute and by default does not support `display: none` in 0.17.1.1,
* elinks does not support `hidden` attribute and by default does not support `display: none` in 0.17.1.1,
@ -372,6 +370,14 @@ Therefore, for desktop browsers:
Support for `hidden` attribute is already implemented in https://github.com/rkd77/elinks/issues/341,
Support for `hidden` attribute is already implemented in https://github.com/rkd77/elinks/issues/341,
and will automatically work in newer versions; in older versions, the user should add
and will automatically work in newer versions; in older versions, the user should add
`set document.css.ignore_display_none = 0` to their elinks config.
`set document.css.ignore_display_none = 0` to their elinks config.
* **lynx**: checked on 2.9.2, somewhat functional (mostly broken but can be used by those who wish):
* lynx just like links and elinks does not support disabled buttons;
* It does not support neither `hidden` attribute nor styles, so all (unused) templates are displayed;
* It displays the `value` of submit buttons along with their text, which means that, for example,
in every cell of the board along with its state (X/O/_) it also displays full serialized state of the next board.
* **w3m**: checked on 0.5.3.20230718 (the newest version that my distro has to offer),
broken due to https://git.sr.ht/~rkta/w3m/commit/5d9c728592de1c053e064e8db4452b0bface58e0,