forked from mirrors/gecko-dev
Done: - Provided spinner component with expected ARIA roles and properties for a Spinbutton pattern - Ensured the programmatic and on-screen visibility is handled when a Spinner dialog is opened/closed - Provided localized strings for controls of the Spinner - Updated markup of the Spinner dialog to ensure logical keyboard navigation and consistent on-screen presentation - Handled live region for the month-year button with and without spinners visible to avoid redundant announcements - Added tests for the month-year spinner and its localization Further patches: 1. Pt.4 - Ensure keyboard support in accordance with the ARIA Design Practices 1.2 Depends on D139980 Differential Revision: https://phabricator.services.mozilla.com/D139981
58 lines
2.4 KiB
HTML
58 lines
2.4 KiB
HTML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
|
- License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
|
- You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
|
|
|
<!DOCTYPE html [
|
|
<!ENTITY % htmlDTD PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
%htmlDTD;
|
|
]>
|
|
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
<head>
|
|
<link rel="stylesheet" href="chrome://global/skin/datetimeinputpickers.css"/>
|
|
<link rel="localization" href="toolkit/global/datepicker.ftl" />
|
|
<script src="chrome://global/content/bindings/datekeeper.js"></script>
|
|
<script src="chrome://global/content/bindings/spinner.js"></script>
|
|
<script src="chrome://global/content/bindings/calendar.js"></script>
|
|
<script src="chrome://global/content/bindings/datepicker.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="date-picker" role="dialog" data-l10n-id="date-picker-label" aria-modal="true">
|
|
<div class="calendar-container">
|
|
<div class="month-year-nav" data-l10n-id="date-spinner-label">
|
|
<button class="prev" data-l10n-id="date-picker-previous" />
|
|
<div class="month-year-container">
|
|
<button class="month-year" id="month-year-label" aria-live="polite" />
|
|
</div>
|
|
<template id="spinner-template">
|
|
<div class="spinner-container">
|
|
<button class="up"/>
|
|
<div class="spinner"></div>
|
|
<button class="down"/>
|
|
</div>
|
|
</template>
|
|
<div class="month-year-view"></div>
|
|
<button class="next" data-l10n-id="date-picker-next" />
|
|
</div>
|
|
<table role="grid" aria-labelledby="month-year-label">
|
|
<thead class="week-header"></thead>
|
|
<tbody class="days-view"></tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<script>
|
|
/* import-globals-from widgets/datepicker.js */
|
|
// Create a DatePicker instance and prepare to be
|
|
// initialized by the "DatePickerInit" event from datetimepopup.xml
|
|
const root = document.getElementById("date-picker");
|
|
new DatePicker({
|
|
monthYear: root.querySelector(".month-year"),
|
|
monthYearView: root.querySelector(".month-year-view"),
|
|
buttonPrev: root.querySelector(".prev"),
|
|
buttonNext: root.querySelector(".next"),
|
|
weekHeader: root.querySelector(".week-header"),
|
|
daysView: root.querySelector(".days-view"),
|
|
});
|
|
</script>
|
|
</body>
|
|
</html>
|