Give each row in a table a heading

The first columns of our tables are always headings for the
subsequent columns, even though they go horizontally.

HTML has the `<th>` tag, which doesn’t just have to be used for headings
along the top of a table. So this commit changes the first column to be
a `<th>`.

This then allows us to style these elements differently, specifically
making them 50% wide. This makes pages like the dashboard align more
nicely.
This commit is contained in:
Chris Hill-Scott
2016-06-08 13:41:02 +01:00
parent b1852f4b78
commit d213e2cc67
5 changed files with 41 additions and 15 deletions

View File

@@ -1,5 +1,6 @@
.table { .table {
margin-bottom: $gutter; margin-bottom: $gutter;
width: 100%;
} }
.table-heading { .table-heading {
@@ -13,6 +14,16 @@
} }
} }
.table-row {
th {
width: 52.5%;
a {
max-height: 1.25em;
}
}
}
%table-field, %table-field,
.table-field { .table-field {
@@ -77,6 +88,10 @@
width: 15px; width: 15px;
} }
&-date {
white-space: nowrap;
}
p { p {
margin: 0 0 5px 0; margin: 0 0 5px 0;
} }

View File

@@ -3,8 +3,7 @@
table { table {
th { th {
@include core-16; @include core-16;
padding-top: 0; border-bottom: 0;
border: 0;
} }
td { td {

View File

@@ -55,12 +55,24 @@
</td> </td>
{%- endmacro %} {%- endmacro %}
{% macro row_heading() -%}
<th class="table-field">
<span>{{ caller() }}</span>
</th>
{%- endmacro %}
{% macro index_field(text) -%} {% macro index_field(text) -%}
<td class="table-field-index"> <td class="table-field-index">
<span>{{ text }}</span> <span>{{ text }}</span>
</td> </td>
{%- endmacro %} {%- endmacro %}
{% macro date_field(text) -%}
<td class="table-field-date">
<span>{{ text }}</span>
</td>
{% endmacro %}
{% macro text_field(text) -%} {% macro text_field(text) -%}
{% call field() %} {% call field() %}
{{ text }} {{ text }}

View File

@@ -1,4 +1,4 @@
{% from "components/table.html" import list_table, field, right_aligned_field_heading %} {% from "components/table.html" import list_table, field, right_aligned_field_heading, row_heading %}
{% from "components/big-number.html" import big_number %} {% from "components/big-number.html" import big_number %}
{% call(item, row_number) list_table( {% call(item, row_number) list_table(
@@ -8,28 +8,28 @@
empty_message='You havent sent any batch messages yet', empty_message='You havent sent any batch messages yet',
field_headings=[ field_headings=[
'File', 'File',
right_aligned_field_heading('Sending'), 'Sending',
right_aligned_field_heading('Delivered'), 'Delivered',
right_aligned_field_heading('Failed') 'Failed'
], ],
field_headings_visible=True field_headings_visible=True
) %} ) %}
{% call field() %} {% call row_heading() %}
<div class="file-list"> <div class="file-list">
<a class="file-list-filename" href="{{ url_for('.view_job', service_id=current_service.id, job_id=item.id) }}">{{ item.original_file_name }}</a> <a class="file-list-filename" href="{{ url_for('.view_job', service_id=current_service.id, job_id=item.id) }}">{{ item.original_file_name }}</a>
<span class="file-list-hint">Uploaded {{ item.created_at|format_datetime_short }}</span> <span class="file-list-hint">Uploaded {{ item.created_at|format_datetime_short }}</span>
</div </div
{% endcall %} {% endcall %}
{% call field(align='right') %} {% call field() %}
{{ big_number( {{ big_number(
item.get('notifications_sent', 0) - item.get('notifications_delivered', 0) - item.get('notifications_failed', 0), item.get('notifications_sent', 0) - item.get('notifications_delivered', 0) - item.get('notifications_failed', 0),
smaller=True smaller=True
) }} ) }}
{% endcall %} {% endcall %}
{% call field(align='right') %} {% call field() %}
{{ big_number(item.get('notifications_delivered', 0), smaller=True) }} {{ big_number(item.get('notifications_delivered', 0), smaller=True) }}
{% endcall %} {% endcall %}
{% call field(align='right', status='error' if 0 else '') %} {% call field(status='error' if 0 else '') %}
{{ big_number(item.get('notifications_failed', 0), smaller=True) }} {{ big_number(item.get('notifications_failed', 0), smaller=True) }}
{% endcall %} {% endcall %}
{% endcall %} {% endcall %}

View File

@@ -1,5 +1,5 @@
{% extends "withnav_template.html" %} {% extends "withnav_template.html" %}
{% from "components/table.html" import list_table, field, text_field, link_field, right_aligned_field_heading, hidden_field_heading %} {% from "components/table.html" import list_table, field, text_field, link_field, right_aligned_field_heading, hidden_field_heading, row_heading, date_field %}
{% from "components/previous-next-navigation.html" import previous_next_navigation %} {% from "components/previous-next-navigation.html" import previous_next_navigation %}
{% from "components/page-footer.html" import page_footer %} {% from "components/page-footer.html" import page_footer %}
{% from "components/pill.html" import pill %} {% from "components/pill.html" import pill %}
@@ -46,19 +46,19 @@
caption="Recent activity", caption="Recent activity",
caption_visible=False, caption_visible=False,
empty_message='No messages found', empty_message='No messages found',
field_headings=['Recipient', 'Error', 'Status', 'Started'], field_headings=['Recipient', 'Started', 'Status'],
field_headings_visible=False field_headings_visible=False
) %} ) %}
{% call field() %} {% call row_heading() %}
<p> <p>
{{ item.to }} {{ item.to }}
</p> </p>
<p class="hint"> <p class="hint">
{% if item.job %} {% if item.job %}
From <a class="truncated" href="{{ url_for(".view_job", service_id=current_service.id, job_id=item.job.id) }}">{{ item.job.original_file_name }}</a> From <a href="{{ url_for(".view_job", service_id=current_service.id, job_id=item.job.id) }}">{{ item.job.original_file_name }}</a>
{% else %} {% else %}
<a class="truncated" href="{{ url_for('.view_template_version', service_id=current_service.id, template_id=item.template.id, version=item.template_version) }}">{{ item.template.name }}</a> <a href="{{ url_for('.view_template_version', service_id=current_service.id, template_id=item.template.id, version=item.template_version) }}">{{ item.template.name }}</a>
from an API call from an API call
{% endif %} {% endif %}
</p> </p>