Skip to content

Commit 133127d

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 133127d

3 files changed

Lines changed: 37 additions & 0 deletions

File tree

_sass/styles.scss

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -739,6 +739,11 @@ 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+
742747
.gamepad-device-details > summary {
743748
align-items: center;
744749
cursor: pointer;
@@ -847,6 +852,12 @@ table tr:nth-child(2n) {
847852
padding: 0.65rem 0.85rem;
848853
}
849854

855+
.gamepad-tester.has-gamepad .gamepad-browser-warning {
856+
margin-top: 0.75rem !important;
857+
max-width: none;
858+
padding: 0.55rem 0.75rem;
859+
}
860+
850861
.gamepad-tester.has-gamepad .gamepad-selector-panel {
851862
display: grid;
852863
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" hidden>
40+
<i class="fas fa-triangle-exclamation mt-1" aria-hidden="true"></i>
41+
<output aria-live="polite">
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+
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=1704419" target="_blank" rel="noopener noreferrer">Mozilla bug 1704419</a>
45+
</output>
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)