- From: Chris Blouch <cblouch@aol.com>
- Date: Tue, 08 Apr 2008 11:53:19 -0400
- To: Chris Blouch <chris.blouch@corp.aol.com>
- CC: "Evans, Donald" <Donald.Evans@corp.aol.com>, wai-xtech@w3.org, "Wlodkowski, Thomas" <Thomas.Wlodkowski@corp.aol.com>, Earl.Johnson@Sun.COM, Jon Gunderson <jongund@uiuc.edu>, Becky Gibson <Becky_Gibson@notesdev.ibm.com>, Joseph Scheuhammer <clown@utoronto.ca>, "Schnabel, Stefan" <stefan.schnabel@sap.com>, schwer@us.ibm.com, Al Gilman <Alfred.S.Gilman@IEEE.org>
- Message-ID: <47FB94EF.9070302@aol.com>
Updated with some of the items from last time. I have included an issues
list at the end so we don't miss any of the discussion points. I have
also moved the changelog to the end as it is starting to grow as long as
the actual content :)
Date Picker Widget
Purpose:
Choose a date as input in an easy to navigate manner. This widget does
not address selection of time ranges within a date, which, in the web
world, is often performed via a separate UI process.
Behavior:
Like other widgets the calendar widget receives focus to become active
by tabbing into it. Once focused is received it is placed on todays date
in a grid of days and weeks. A grid embodies the same representational
metaphors for both visual and aural navigation. This gives extra lift to
the solution by aligning it with mainstream objects.
There are two modalities for selection:
Singleton - boolean - When true the calendar will only allow one date to
be picked at a time. When false the user can pick multiple dates.
Contiguous (Available only if Singleton is false) - boolean - When true
the user can only pick two dates and all the days contained between them
are also selected automatically. When false the user can pick multiple
dates which do not needs to be siblings.
Navigation:
Arrowing up and down goes to the same day of the week in the previous or
next week respectively. If the user advances past the end of the month
they continue into the next or previous month as appropriate. Visually
the grid might flip from month to month but audibly arrowing is a
continuum of dates. When passing the epoch of one month to another, the
month entered should announce
<Monthname>[<"NO"|XX> days selected.]
The days selected would only be announced if we are in a multi-select mode.
Going left and right advances one day to the next, also in a continuum.
Visually focus is moved from day to day and wraps from row to row in a
grid of days and weeks.
Home takes you to the first day in a month while End takes you to the
last day in a month.
PageUp advances a month and PageDown retreats a month. As mentioned
before, advancing or retreating a month should announce the month along
with selected days if in a multiselect mode. When changing months focus
should stick to the week and day as the user cycles through. For
example, if they are currently focused on 8 Tuesday April 2008 and
advance a month, they should sill be on the Second Tuesday but in May,
which is May 13. This new date should be announced to the user.
Control+PageUp advances a year while Control+PageDown retreats a year
and should announce
<Year>[<"NO"|XX> days selected.]
The days selected would only be announced if we are in a multi-select
mode. The user focus should stick to the same date in the next year.
We do not need another shortcut for changing weeks because it is already
just hitting the up and down arrow.
Unavailability:
The widget should also recognize some dates as not being available such
as weekends or holidays. The API is not defined here but should include
exclusion of certain days of the week, dates in the past, ranges of
dates and discontinuous sets of dates. These dates are announced as Not
Available or Available as appropriate in the localized language. We
assume the user most often will be hunting for an open available date so
we suggest announcing Not Available early on so the user knows to just
skip forward or back to another date. If the widget is instructed to
make all dates in the past unavailable, if the user attempts a
navigation method that would take them into the past, the command is
ignored and the user is taken to Today's date. Today would announce
"Dates in the past are not selectable"
in addition to the regular information about that date.
Announcing:
The data points for a single day is spoken from specific/interesting to
general/ordinary. These terms would be localized for the target
audience. Different ATs may want to expose preferences to reorder the
elements or taper off the verbosity.
[Selected][Not Available] NumericDate DayOfWeek Month NumericYear [Not
Selected][Available][X of Y]
As the user navigates they can quickly hear the number and if they allow
speech to go on long enough they can get the day or more detail. If the
date is already selected that is stated. If we are in contiguous mode we
also announce which position this date holds in the set as "X of Y"
where X is the selected date's position and Y is the size of the set.
The earliest date is announced as 1 and the last date is announced as
the size of the set. If the date is not already selected then "Not
Selected" is stated at the end. The assumption is that being selected is
important to the user so they would want to know that right away. The
majority of dates are not selected so hearing that over and over would
be tedious, but still important at points of interest. The first focus
on today's date would read all the details out in full unless the users
starts interacting. Reasonable combinations are:
Selected NumericDate DayofWeek Month NumericYear [X of Y]
NumericDate DayofWeek Month NumericYear Not Selected Available
Not Available NumericDate DayofWeek Month NumericYear
Selection:
Pressing the space key selects a date.
In singleton mode this deselects the previous choice. We assume the user
knows what they are doing and the change is easily reversed so we simply
announce the unselection asas part of the new selection.
Selected NumericDate DayofWeek Month NumericYear [Previous date
NumericDate DayofWeek Month NumericYear Unselected]
In discontiguous mode the space acts as a toggle so we could be either
selecting or deselecting and simply announce the current state as
previously described.
In contiguous mode the space nails down the tail of the snake and then
shift+arrows moves the head to select a set of dates. This is similar to
the keyboard behavior in selecting a range of text in a word processor.
Pressing space on another date starts a new snake. As each date is
navigated for the head we announce the date and the number of members in
the set. If Unavailable dates are included in the range, they are not
included in the count of selected days.
Selected NumericDate DayofWeek Month NumericYear [X days selected]
More Items for discussion:
{Headers}
There could be a header to the widget containing equivalent links to
advance and retreat years and months along with the title showing which
month and year the last focused date is contained in. To reach the
header the user would need to navigate out of the calendar date picker
section. Once in the header the same keys move through the month and
year increment/decrement controls.
{Header pull downs}
Some calendar widgets represented the current Month and Year as
pull-down menus in the header with the current month/year selected. You
then use standard navigation to change the selected month or year from
these menus.
{Year entry}
Some calendar widgets have the year as an editable text field so the
user can just type in 2018 to jump to that date rather than incrementing
or messing with a menu. Might swing to far on the capability/complexity
trade off.
{Additional keys}
There are many other keys defined in some desktop applications but I
didn't know if they are of great utility or not. More keystrokes is more
cognitive load and more client-side code. That said, here is a list of
additional keystrokes beyond the baseline previously discussed
control+alt+home - first day of the current week
control+alt+end - last day of the current week
control+alt+t - Jump focus to today - how to internationalize?
{Submit}
Do we need a submit key in either the multiselect or singleton modes?
{Tree View}
Al suggested consideration of a tree view which I'm assuming would need
an alternate keyboard navigation. Should we pursue this branch?
CB
Update 4/8
- Tried to generalize AT behavior description for order of content
revelation
- Added section about singleton and contiguous modes
- Added unavailability section
- Changed selection from enter to space
- added contiguous and discontiguous selection methods
- Reorganized into major sections
- Removed all modal dialogs and other tweaks that try to capture Al's
comments
- Changed keys to ones not needing localization
Update 3/25
- added announcing number of days selected when switching from Month to
Month or Year to Year
- added announcing availability of the selected date to the spoken
description
- added announcing the month and its attributes when the user crosses a
month boundary
- clarified combinations allowed for availability and selected
- added implementation detail about supporting a passed in list of
unavailable dates
- added section about navigation into the past
Update 3/4
- added commentary about alignment with mainstream objects
- added section of additional keys we might want to consider
- added continuity of grid focus when changing months and years
Received on Tuesday, 8 April 2008 15:54:07 UTC