Skip to content

Commit 3607e56

Browse files
fix(gamepad-tester): warn Firefox users about Switch mapping bug
Add a Nintendo Switch controller warning in the gamepad tester for Firefox versions earlier than 155, based on parsed browser major version and detected controller type. The warning links to Mozilla bug 1704419 and is shown/hidden dynamically as gamepads connect. Styling updates were added to keep the notice centered by default and compact within the active tester layout.
1 parent fa431db commit 3607e56

3 files changed

Lines changed: 47 additions & 0 deletions

File tree

_sass/styles.scss

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,21 @@ table tr:nth-child(2n) {
739739
padding: 0.8rem;
740740
}
741741

742+
.gamepad-browser-warning {
743+
margin-inline: auto;
744+
max-width: 46rem;
745+
}
746+
747+
.gamepad-browser-warning[hidden] {
748+
display: none;
749+
}
750+
751+
.gamepad-browser-warning a {
752+
font-weight: 600;
753+
overflow-wrap: anywhere;
754+
text-decoration: underline;
755+
}
756+
742757
.gamepad-device-details > summary {
743758
align-items: center;
744759
cursor: pointer;
@@ -847,6 +862,12 @@ table tr:nth-child(2n) {
847862
padding: 0.65rem 0.85rem;
848863
}
849864

865+
.gamepad-tester.has-gamepad .gamepad-browser-warning {
866+
margin-top: 0.75rem !important;
867+
max-width: none;
868+
padding: 0.55rem 0.75rem;
869+
}
870+
850871
.gamepad-tester.has-gamepad .gamepad-selector-panel {
851872
display: grid;
852873
grid-template-columns: 13rem minmax(0, 1fr);

assets/js/gamepad-tester.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ function createDPadButtonVisuals(shapes) {
55
}));
66
}
77

8+
const FIREFOX_SWITCH_GAMEPAD_FIXED_VERSION = 155;
9+
10+
function getFirefoxMajorVersion(userAgent) {
11+
const match = /\bFirefox\/(\d+)/.exec(userAgent);
12+
return match ? Number.parseInt(match[1], 10) : null;
13+
}
14+
815
document.addEventListener('DOMContentLoaded', function() {
916
const gamepadHelper = new GamepadHelper()
1017
const gamepadHelperVersion = globalThis.gamepadHelperVersion;
@@ -17,6 +24,8 @@ document.addEventListener('DOMContentLoaded', function() {
1724
const gamepadTester = document.getElementById('GamepadTester');
1825
const gamepadStatus = document.getElementById('gamepad-status');
1926
const gamepadStatusMessage = document.getElementById('gamepad-status-message');
27+
const firefoxSwitchWarning = document.getElementById('firefox-switch-warning');
28+
const firefoxMajorVersion = getFirefoxMajorVersion(navigator.userAgent);
2029
let gamepadVisualButtons = new Map();
2130
let gamepadVisualSticks = [];
2231
let gamepadVisualTriggers = new Map();
@@ -205,7 +214,15 @@ document.addEventListener('DOMContentLoaded', function() {
205214

206215
const gamepadIndices = Object.keys(gamepads);
207216
const hasGamepads = gamepadIndices.length > 0;
217+
const hasNintendoSwitchController = Object.values(gamepads).some(gamepad =>
218+
gamepadHelper.detectControllerType(gamepad.id) === gamepadHelper.CONTROLLER_TYPES.SWITCH
219+
);
208220
gamepadTester.classList.toggle('has-gamepad', hasGamepads);
221+
firefoxSwitchWarning.hidden = !(
222+
firefoxMajorVersion !== null
223+
&& firefoxMajorVersion < FIREFOX_SWITCH_GAMEPAD_FIXED_VERSION
224+
&& hasNintendoSwitchController
225+
);
209226

210227
if (hasGamepads) {
211228
gamepadSelectorContainer.style.removeProperty('display');

gamepad-tester.html

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,15 @@ <h2 class="display-6 fw-bolder mb-2">Gamepad Tester</h2>
3636
</p>
3737
</header>
3838

39+
<div id="firefox-switch-warning" class="gamepad-browser-warning gamepad-inline-notice mt-3" aria-live="polite" hidden>
40+
<i class="fas fa-triangle-exclamation mt-1" aria-hidden="true"></i>
41+
<span>
42+
Firefox versions before 155 can report incorrect buttons and axes for Nintendo Switch controllers.
43+
Update to Firefox 155 or later, or use another current browser.
44+
Details: <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1704419" target="_blank" rel="noopener noreferrer">https://bugzilla.mozilla.org/show_bug.cgi?id=1704419</a>
45+
</span>
46+
</div>
47+
3948
<section class="gamepad-selector-panel mt-4" id="gamepad-selector-container" style="display: none;" aria-labelledby="gamepad-selector-heading">
4049
<div class="gamepad-selector-heading">
4150
<div>

0 commit comments

Comments
 (0)