Merge pull request #1129 from alphagov/aria-tabs-pill-navigation

Mark up ‘pill’ component as being tabs
This commit is contained in:
Chris Hill-Scott
2017-02-15 13:16:30 +00:00
committed by GitHub
10 changed files with 110 additions and 109 deletions

View File

@@ -2,24 +2,19 @@
display: flex; display: flex;
a, li {
span {
display: block;
width: 25%; width: 25%;
box-sizing: border-box;
float: left;
padding: 10px;
flex-grow: 1; flex-grow: 1;
text-align: left; text-align: left;
&:first-child {
margin-left: 0;
}
&:last-child {
margin-right: 0;
} }
a,
&-selected-item {
display: block;
float: left;
box-sizing: border-box;
width: 100%;
padding: 10px;
} }
a { a {
@@ -50,12 +45,18 @@
} }
} }
span { &-selected-item {
border: 2px solid $black; border: 2px solid $black;
outline: 1px solid rgba($white, 0.1); outline: 1px solid rgba($white, 0.1);
position: relative; position: relative;
z-index: 1000; z-index: 1000;
color: $text-colour; color: $text-colour;
&:focus {
z-index: 10;
outline: 3px solid $yellow;
}
} }
} }

View File

@@ -1,26 +1,27 @@
{% from 'components/big-number.html' import big_number %} {% from 'components/big-number.html' import big_number %}
{% macro pill( {% macro pill(
title,
items=[], items=[],
current_value=None, current_value=None,
big_number_args={'smaller': True} big_number_args={'smaller': True}
) %} ) %}
<nav role='navigation' class='pill' aria-labelledby="pill_{{title}}"> <ul role='tablist' class='pill'>
<h2 id="pill_{{title}}" class="visuallyhidden">{{title}}</h2>
{% for label, option, link, count in items %} {% for label, option, link, count in items %}
{% if current_value == option %} {% if current_value == option %}
<span aria-hidden="true"> <li aria-selected='true' role='tab'>
<div class='pill-selected-item' tabindex='0'>
{% else %} {% else %}
<li aria-selected='false' role='tab'>
<a href="{{ link }}"> <a href="{{ link }}">
{% endif %} {% endif %}
{{ big_number(count, **big_number_args) }} {{ big_number(count, **big_number_args) }}
<div class="pill-label">{{ label }}</div> <div class="pill-label">{{ label }}</div>
{% if current_value == option %} {% if current_value == option %}
</span> </div>
{% else %} {% else %}
</a> </a>
{% endif %} {% endif %}
</li>
{% endfor %} {% endfor %}
</nav> </ul>
{% endmacro %} {% endmacro %}

View File

@@ -61,19 +61,19 @@
{% set border = '' if border else 'table-field-noborder' %} {% set border = '' if border else 'table-field-noborder' %}
<td class="{{ [field_alignment, border]|join(' ') }}"> <td class="{{ [field_alignment, border]|join(' ') }}">
<span class="{{ 'table-field-status-' + status if status }}">{{ caller() }}</span> <div class="{{ 'table-field-status-' + status if status }}">{{ caller() }}</div>
</td> </td>
{%- endmacro %} {%- endmacro %}
{% macro row_heading() -%} {% macro row_heading() -%}
<th class="table-field"> <th class="table-field">
<span>{{ caller() }}</span> {{ caller() }}
</th> </th>
{%- endmacro %} {%- endmacro %}
{% macro index_field(text) -%} {% macro index_field(text) -%}
<td class="table-field-index"> <td class="table-field-index">
<span><span class="visually-hidden">Row </span>{{ text }}</span> <span class="visually-hidden">Row </span>{{ text }}
</td> </td>
{%- endmacro %} {%- endmacro %}

View File

@@ -1,5 +1,5 @@
{% from "components/pill.html" import pill %} {% from "components/pill.html" import pill %}
<div class="bottom-gutter ajax-block-container"> <div class="bottom-gutter ajax-block-container">
{{ pill('Status', counts, request.args.get('status', '')) }} {{ pill(counts, request.args.get('status', '')) }}
</div> </div>

View File

@@ -1,7 +1,7 @@
{% from "components/table.html" import list_table, field, right_aligned_field_heading, row_heading, notification_status_field %} {% from "components/table.html" import list_table, field, right_aligned_field_heading, row_heading, notification_status_field %}
{% from "components/page-footer.html" import page_footer %} {% from "components/page-footer.html" import page_footer %}
<div class="ajax-block-container"> <div class="ajax-block-container" aria-labelledby='pill-selected-item'>
{% if job.job_status == 'scheduled' %} {% if job.job_status == 'scheduled' %}
<p> <p>

View File

@@ -2,7 +2,6 @@
<div class='bottom-gutter ajax-block-container'> <div class='bottom-gutter ajax-block-container'>
{{ pill( {{ pill(
'Status',
status_filters, status_filters,
status status
) }} ) }}

View File

@@ -2,7 +2,7 @@
{% from "components/previous-next-navigation.html" import previous_next_navigation %} {% from "components/previous-next-navigation.html" import previous_next_navigation %}
{% from "components/table.html" import list_table, field, text_field, link_field, right_aligned_field_heading, hidden_field_heading, row_heading, notification_status_field %} {% from "components/table.html" import list_table, field, text_field, link_field, right_aligned_field_heading, hidden_field_heading, row_heading, notification_status_field %}
<div class="ajax-block-container"> <div class="ajax-block-container" id='pill-selected-item'>
{% if notifications %} {% if notifications %}
<div class='dashboard-table'> <div class='dashboard-table'>

View File

@@ -18,14 +18,13 @@
</h1> </h1>
<div class="bottom-gutter"> <div class="bottom-gutter">
{{ pill( {{ pill(
'financial year',
items=years, items=years,
current_value=selected_year, current_value=selected_year,
big_number_args={'smallest': True}, big_number_args={'smallest': True},
) }} ) }}
</div> </div>
{% if months %} {% if months %}
<div class="body-copy-table"> <div class="body-copy-table" id='pill-selected-item'>
{% call(month, row_index) list_table( {% call(month, row_index) list_table(
months, months,
caption="Total spend", caption="Total spend",

View File

@@ -13,9 +13,9 @@
<h2 class='heading-large'>Usage</h2> <h2 class='heading-large'>Usage</h2>
<div class="bottom-gutter"> <div class="bottom-gutter">
{{ pill('Year', years, selected_year, big_number_args={'smallest': True}) }} {{ pill(years, selected_year, big_number_args={'smallest': True}) }}
</div> </div>
<div id='pill-selected-item'>
<div class='grid-row'> <div class='grid-row'>
<div class='column-half'> <div class='column-half'>
<h2 class='heading-small'>Emails</h2> <h2 class='heading-small'>Emails</h2>
@@ -97,6 +97,7 @@
{% endcall %} {% endcall %}
</div> </div>
{% endif %} {% endif %}
</div>
<div class="grid-row"> <div class="grid-row">
<div class="column-half"> <div class="column-half">

View File

@@ -250,11 +250,11 @@ def test_usage_page(
page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser') page = BeautifulSoup(response.data.decode('utf-8'), 'html.parser')
cols = page.find_all('div', {'class': 'column-half'}) cols = page.find_all('div', {'class': 'column-half'})
nav = page.find('nav', {'class': 'pill'}) nav = page.find('ul', {'class': 'pill', 'role': 'tablist'})
nav_links = nav.find_all('a') nav_links = nav.find_all('a')
assert normalize_spaces(nav_links[0].text) == '2010 to 2011 financial year' assert normalize_spaces(nav_links[0].text) == '2010 to 2011 financial year'
assert normalize_spaces(nav.find('span').text) == '2011 to 2012 financial year' assert normalize_spaces(nav.find('li', {'aria-selected': 'true'}).text) == '2011 to 2012 financial year'
assert normalize_spaces(nav_links[1].text) == '2012 to 2013 financial year' assert normalize_spaces(nav_links[1].text) == '2012 to 2013 financial year'
assert '123' in cols[0].text assert '123' in cols[0].text