During the drupal installation, after requirements check some messages are shown. They can be status message indicating that a particular thing is ok or error messages containing information to fix the problem.

At this time, a blind user must ensure that everything is ok browsing all them.

My proposal is to group these messages in a table, maybe with these columns:
1. "Status": it should indicate "ok" or "error";
2. "requirement": it should indicate the requirement the message refers to;
3. Message: the content of the message.

In addition to this, I think we could place error messages in the first rows of the table, so that it can be really easier and faster to find them!

What do you think about this?

Comments

falcon03’s picture

Category: bug » feature

This is to clarify that this issue is an accessibility enhancement request, not a bug...

mgifford’s picture

StatusFileSize
new142.71 KB

Yes, having table headers here would sure be useful. Currently there's 3 columns. 1) Status Icon, 2) Requirement title, 3) Requirement description.

<table class="system-status-report"><tbody><tr class="ok"><td class="status-icon"><div title="OK"><span class="element-invisible">OK</span></div></td><td class="status-title">Web server</td><td class="status-value">Apache/2.2.17 (Ubuntu)</td></tr>
...
<tr class="error"><td class="status-icon"><div title="Error"><span class="element-invisible">Error</span></div></td><td class="status-title">Default settings file</td><td class="status-value">The default settings file does not exist.<div class="description">The Drupal installer requires that the <em>./sites/default/default.settings.php</em> file not be modified in any way from the original download.</div></td></tr>

So you'd like the order of these items to be restructured so that the outstanding items are more readily available.

Visually each row with an error message is red if it has an error. Furthermore there's an icon in the first column that is provided with an alternate text for the screen reader user. It's obvious to a sighted user (I think) what the problems are. I'm not sure how to best give an equivalent experience to a blind user.

falcon03’s picture

Priority: Normal » Major

Hi mgifford,

so, you're saying that there is a table in that page?

I must say that, using a screen reader, I didn't think it at all!

So, in my opinion, the solution is more easier to find than waht I thought:
1. Use appropriate headers for cells;
2. Show error messages before the remaining ones (maybe adding a little description to let users know this facility).

I didn't look at source code at all... I'm sorry! :(

mgifford’s picture

Title: after requirements check, group messages into a table. » Add Table Headers to Requirements Check & Prioritize Errors at Top
Issue tags: +#d8ux

Reporting the error is the first start. I'm changing the title so that it's clear what needs to happen.

I think there might be some UX issues in changing the order of the the messages. I also think that the new TH's will also be visible by default which will change the UI, so tagging accordingly.

Bojhan’s picture

Title: Add Table Headers to Requirements Check & Prioritize Errors at Top » No table header on install requirements & prioritize errors
Category: feature » bug
Priority: Major » Normal

Seems like this is just a bug. There is no table header, and there is no clear reason why we don't have them here.

I am not really excited about moving errors on top. People debugging, will refresh the page and fixate on the location where they previously saw the bug. If that location is variable, as errors move down and up from the top it will be hard to quickly scan this table if you resolved the bug.

mgifford’s picture

Potentially we could use a status box for this, but for sighted users this would be a pain as it would just push the content they want down below the screen.

However, I suppose we could have an error that's available on focus to allow folks to jump right to the row with the error.

mgifford’s picture

Status: Active » Needs review
StatusFileSize
new54.16 KB
new667 bytes

Ok, so here's a patch & a screen shot.

falcon03’s picture

Hi mgifford,

thank you very much! This patch is amazing and makes installing drupal easier for blind people...

To hide table headers from sighted users (if we really need to do it), could we apply to them the "element-invisible" css class? This should solve the problem, if we do not want to change the current UI...

For prioritizing errors, instead, I think we have two choices:

  1. Place them in the first rows of the table; when the user refreshes the page to check if they have been fixed, only eventual errors should be shown, otherwise a message informing him/her that "all problems have been fixed and he/she can just click save and continue to proceed";
  2. Leave errors where they are but, immediately below the table, show a message that could let an user understand if there are some errors (with the invitation to check the table to find the problems causing them) or everything is ok.
Bojhan’s picture

Could you expand on those suggestions, I don't really understand what they mean in actual changes to the UI.

falcon03’s picture

Hi Bojhan,

what should I clarify?

The problem with table headers or with error prioritizing?

Bojhan’s picture

@falcon03 Both :D. 1. Does that mean we change the position of the rows, depending on if its an error or not? 2. Like an actual drupal error message.

Don't we have a solution for this, in all tables?

mgifford’s picture

mgifford’s picture

Issue tags: +a11ySprint
falcon03’s picture

@mgifford. I was wondering: if we split the "prioritizing errors" from the "table headers" one, committing this patch will be a piece of cache... Won't it?

We can always discuss prioritizing errors in another issue!

Any thoughts?

sebsebseb123’s picture

Title: No table header on install requirements & prioritize errors » No table header on install requirements
StatusFileSize
new1.75 KB

Hi All,

So, the patch works.

Unfortunately, it adds a visible header to the table... which would make this a UI change. So, we've added the "element-invisible" class to hide it from visibility, while keeping this accessible.

Sadly, this results in webkit rendering the table incorrectly. So, CSS has been modified in the "Seven" theme. This renders the border around the table in a slightly different way. In fact, "Seven" theme makes reference to a known issue with webkit rendering tables incorrectly:
/**
* Exception for webkit bug with the right border of the last cell
* in some tables, since it's webkit only, we can use :last-child
*/
tr td:last-child {
border-right: 1px solid #bebfb9; /* LTR */
}

...this patch removes the need for that.

mparker17’s picture

Lol @sebsebseb123, I created a patch almost exactly the same at the same time. :P

Does it make sense to use Status, Component, and Details as the table header text? I feel like those describe the contents of the table a bit better than Status, Title, and Description. Thoughts?

Status: Needs review » Needs work

The last submitted patch, system-requirements-headers-1811128-16.patch, failed testing.

mparker17’s picture

That was weird... re-testing.

mparker17’s picture

Status: Needs work » Needs review
falcon03’s picture

@mparker17#17: Yes, I agree with you.

If someone could update the patch and give a feedback from a sighted point-of-view, I'll review it later this morning...

mparker17’s picture

StatusFileSize
new1.75 KB

Re-rolled with new column headers.

falcon03’s picture

OK, something crazy is happening.

After applying the patch, Voiceover "thinks" that the table has only a column (with 12 rows).

I tried reviewing the markup, but everything looks god. I validated it with achecker.ca against WCAG 2.0 AAA and it didn't fail.

But this is not a mac os X bug: the example at
http://www.w3schools.com/tags/tryit.asp?filename=tryhtml_tbody
works as expected.

I have to admit that I've seen no line endings between table cells and rows (but I don't know what is our code standard for this) (maybe they were deleted by Safari).

Any idea on what the problem is?

falcon03’s picture

mgifford’s picture

@falcon03 do you have access to a Windows box where you could test this for NVDA or something like that?

Would like to have some other folks look over this and see if we can figure out what the issue is. Hopefully it was just a glitch somewhere.

EDIT - I did try this in a fresh install and VO gave me the required headings without difficulty. Status, Components & Details were read to me no problem.

mgifford’s picture

mgifford’s picture

Status: Needs review » Reviewed & tested by the community
StatusFileSize
new508.64 KB

@falcon03 I'm marking this RTBC as it is at least a semantic improvement. With my testing with VoiceOver (both in November & today), I had no trouble seeing the headers. I've got a very basic use of VoiceOver, so perhaps I'm missing something.

Anyways, I'm attaching an image with the visuals that VoiceOver provides of the headings. When we can replicate the problem, I hope we can re-address it. Might just be a ghost in the machine though.

The code here is better semantically and works for me.

catch’s picture

Status: Reviewed & tested by the community » Fixed

Looks sensible. Committed/pushed to 8.x.

mgifford’s picture

excellent! Thanks @catch

mparker17’s picture

Woot, my second Drupal core patch! Thanks everyone!

echoz’s picture

Status: Fixed » Needs work
StatusFileSize
new21.63 KB

Removing the top border on the table element is too generic, needs to target only where needed. Where the patch does this:

-  border: 1px solid #bebfb9;
+  border-right: 1px solid #bebfb9;
+  border-bottom: 1px solid #bebfb9;

is on the element selector "table". Screenshot attached of an effected table (configure format filter) and it likely effected others.

mgifford’s picture

Status: Needs work » Closed (fixed)

Think someone fixed that already in the latest git:

table {
  width: 100%;
  font-size: 0.923em;
  margin: 0 0 10px;
  border-right: 1px solid #bebfb9;
  border-bottom: 1px solid #bebfb9;
}
echoz’s picture

Status: Closed (fixed) » Needs work

#mgifford that is from the patch here from #22 that was just committed, that I am reporting about in #31, quoting the diff from the patch that *removed* the border-top, which I found to break at least the table in my screenshot.

mgifford’s picture

Can you write a patch to fix it?

echoz’s picture

The only reason I just reported and did not write a patch, is I figured you guys who had worked on it were already familiar with the issue details, and I would have to spend time discovering what you already had been through, so I assumed it might be easier for the original author. It's not just put the border back, it's make it work for the original issue and not step on tables unseen from that screen.

mparker17’s picture

I'm spinning up a Drupal 8 site now... I'll see if I can come up with a patch to fix that.

echoz’s picture

Yay, thanks mparker17. Just from looking at the previous patch, it seems just keep the original border on the generic table element and isolate all the border changes to table.system-status-report

mparker17’s picture

Hmm... that CSS was written to get rid of a double-border at the top of the table. The table header row is invisible except to screen-readers, but there's a border on both the top of the table and the top of each regular row in the table: hence the double-border. See @sebsebseb123's comments in #16.

I'm too tired to come up with an effective solution right now, but I'll endevour to tackle this in the morning.

mparker17’s picture

StatusFileSize
new36.31 KB

So, on my local D8 install, I reverted all the CSS changes in the patch from #22 and I get something that looks like the attached screenshot in Chromium 24 and Opera 12.13. It works fine in Firefox 19; haven't tested in IE 9 or 10 yet.

I don't know why the border shows up on the first column and not any other.

I tried a number of things... moving the element-invisible class to the thead element, moving it to the td elements, no change.

Deleting the table header entirely makes it work, but the whole point of this issue is to add a table header to make the table more accessible to users of screen readers, so that's not acceptable.

I could get the border to reappear around the whole table again by adding table.system-status-report { border-collapse: separate; }, but that removes the lines between rows in the table in all browsers.

It seems implausible that we've found a bug because it happens in two rendering engines (Webkit and Presto).

Any suggestions would be greatly appreciated!

falcon03’s picture

YAY, I found what makes Voiceover go crazy (see comment#23 for details).

We shouldn't assign the element-invisible class to the row containing the headings (just like the patch does now) nor to each table heading (each

element). The only way to use the element-invisible class that voiceover "likes" is wrapping the content of the heading into a span element, which we should assign the element-invisible class to.

Could this be a solution for the border problems too?

Can we apply the needed changes in this issue or do we need to open a follow-up? Let me know; I can write the needed patch :-)

mgifford’s picture

Status: Needs work » Needs review
Issue tags: -Accessibility, -#d8ux, -a11ySprint

Status: Needs review » Needs work
Issue tags: +Accessibility, +#d8ux, +a11ySprint

The last submitted patch, statusreport_headers-1811128-22.patch, failed testing.

falcon03’s picture

@mgifford: Tests fail because the patch was committed in #28. Re-rolling to apply my suggestions right now.

falcon03’s picture

Status: Needs work » Needs review
StatusFileSize
new934 bytes

Here's the patch. Unfortunately I don't have my mac to test it right now, but it seems that headings are not working on a Windows + Firefox + NVDA environment.

However, I am just wondering: why don't we use theme_table() to theme the status report?

mgifford’s picture

Often with the installation is kept pretty light so that it doesn't depend on leveraging the rest of Drupal. I'm assuming that the theme_table() just hasn't been loaded in the installation.

Unfortunately the <tr> row is visible. That might need to be <tr class="element-invisible"> so that the row doesn't display.

falcon03’s picture

@mgifford: looking at various issues in the issue queue, I can notice that we need a reliable way to hide borders visually. I am not a CSS expert, but maybe the element-invisible class is not the proper way. What about a "no-border" class, something like:

.no-border{
border: none;
}

Something like that shouldn't make screen readers go crazy, I hope...
What do you think?

mgifford’s picture

StatusFileSize
new960 bytes

I could get this to read out in VO, but if that works, then we can probably remove some of the others:
$output .= '<thead class="element-invisible"><tr>';

mgifford’s picture

Issue tags: -Accessibility, -#d8ux, -a11ySprint
mgifford’s picture

Issue tags: +Accessibility, +#d8ux, +a11ySprint
falcon03’s picture

Status: Needs review » Postponed
Issue tags: +Novice

I think this issue is postponed on
#2002336: Introduce a CSS class to hide borders of fieldset elements
. The CSS class could help us hiding borders from the headings without making screen readers go crazy.

mgifford’s picture

mgifford’s picture

StatusFileSize
new950 bytes

fixing element-invisible in last patch.

mparker17’s picture

Status: Postponed » Needs review

We'll have to mark it as "needs review" in order for Testbot to notice it.

mgifford’s picture

True, but that's waiting on #2002336-14: Introduce a CSS class to hide borders of fieldset elements

If you have a chance, please review that patch.

mgifford’s picture

Issue tags: -Novice, -Accessibility, -#d8ux, -a11ySprint

Status: Needs review » Needs work

The last submitted patch, statusreport-fix_tableheader-52.patch, failed testing.

mgifford’s picture

Issue summary: View changes
Status: Needs work » Needs review
StatusFileSize
new746 bytes

In #2099761: Introduce a class to hide borders for tables I proposed adding a .table-unboxed class that emulated what was done in #2002336: Introduce a CSS class to hide borders of fieldset elements.

It's also worth noting the move to this twig file:
/core/modules/system/templates/status-report.html.twig

But this still needs testing to verify that it is an improvement for screen readers.

mgifford’s picture

Status: Needs review » Needs work

Patch needs re-roll.

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

  • catch committed 4f6facb on 8.3.x
    Issue #1811128 by mgifford, sebsebseb123, mparker17: Fixed No table...

  • catch committed 4f6facb on 8.3.x
    Issue #1811128 by mgifford, sebsebseb123, mparker17: Fixed No table...

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

BarisW’s picture

Status: Needs work » Fixed

This can be closed

BarisW’s picture

Status: Fixed » Needs work

My fault, the commits were not related to the patch.

BarisW’s picture

Issue tags: +Novice
BarisW’s picture

Issue tags: +Needs re-roll

  • catch committed 4f6facb on 8.4.x
    Issue #1811128 by mgifford, sebsebseb123, mparker17: Fixed No table...

  • catch committed 4f6facb on 8.4.x
    Issue #1811128 by mgifford, sebsebseb123, mparker17: Fixed No table...
mgifford’s picture

Version: 8.2.x-dev » 8.4.x-dev
mgifford’s picture

@BarisW I took a look at this and the whole structure of the status-report.html.twig seems to have changed to:

    <tr class="system-status-report__entry system-status-report__entry--{{ requirement.severity_status }} color-{{ requirement.severity_status }}">
      {% if requirement.severity_status in ['warning', 'error'] %}
        <th class="system-status-report__status-title system-status-report__status-icon system-status-report__status-icon--{{ requirement.severity_status }}">
          <span class="visually-hidden">{{ requirement.severity_title }}</span>
      {% else %}
        <th class="system-status-report__status-title">
      {% endif %}
        {{ requirement.title }}
      </th>
      <td>
        {{ requirement.value }}
        {% if requirement.description %}
          <div class="description">{{ requirement.description }}</div>
        {% endif %}
      </td>
    </tr>

I suspect that this would override any heading information for that table related to the columns below.

This is an old screenshot, but helps focus on what we're trying to address in this long thread.
Old screenshot

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.0-alpha1 will be released the week of July 31, 2017, which means new developments and disruptive changes should now be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.0-alpha1 will be released the week of January 17, 2018, which means new developments and disruptive changes should now be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.7.x-dev

Drupal 8.6.0-alpha1 will be released the week of July 16, 2018, which means new developments and disruptive changes should now be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.7.x-dev » 8.8.x-dev

Drupal 8.7.0-alpha1 will be released the week of March 11, 2019, which means new developments and disruptive changes should now be targeted against the 8.8.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

ultrabob’s picture

StatusFileSize
new284.14 KB

I had a look at this just now, and it appears that the structure has changed yet again, and no longer uses tables. @mgifford are the issues in this ticket still relevant given the current state of the template?

{% for group in grouped_requirements %}
  <h3 id="{{ group.type }}">{{ group.title }}</h3>
  {% for requirement in group.items %}
    <details>
      <summary role="button">
        {% if requirement.severity_title  %}
          <span class="visually-hidden">{{ requirement.severity_title }}</span>
        {% endif %}
        {{ requirement.title }}
      </summary>
      {{ requirement.value }}
      {% if requirement.description %}
        <div>{{ requirement.description }}</div>
      {% endif %}
    </details>
  {% endfor %}
{% endfor %}

Here is a screenshot:

System Requirements Check Error Screenshot

ultrabob’s picture

Issue tags: +Seattle2019
mgifford’s picture

Status: Needs work » Closed (outdated)

Thanks @ultrabob - it is nice to be able to close this issue.

Removing the tables fixes the accessibility problem here.

Thanks for checking the latest code.