From 827c0c8387b12d26f268f75742020ad92b6788e7 Mon Sep 17 00:00:00 2001
From: Alexander Purr <purr@ub.uni-leipzig.de>
Date: Mon, 12 Apr 2021 17:27:45 +0200
Subject: [PATCH] refs #19274 [fid_bbi] accessibility fixes * use html lists
 for record listings * add aria-described by for checkboxes ** set label
 context

---
 themes/fid_bbi/scss/blocks/record-list.scss           | 11 +++++++++++
 themes/fid_bbi/scss/compiled.scss                     |  1 +
 .../RecordDriver/DefaultRecord/list-entry.phtml       |  8 +++++---
 themes/fid_bbi/templates/myresearch/mylist.phtml      |  3 ++-
 themes/fid_bbi/templates/record/checkbox.phtml        |  4 ++--
 themes/fid_bbi/templates/search/list-list.phtml       |  8 +++++---
 themes/fid_bbi/templates/search/results.phtml         |  2 ++
 7 files changed, 28 insertions(+), 9 deletions(-)
 create mode 100644 themes/fid_bbi/scss/blocks/record-list.scss

diff --git a/themes/fid_bbi/scss/blocks/record-list.scss b/themes/fid_bbi/scss/blocks/record-list.scss
new file mode 100644
index 00000000000..033a94b416f
--- /dev/null
+++ b/themes/fid_bbi/scss/blocks/record-list.scss
@@ -0,0 +1,11 @@
+//// Result List ol, ul that contains li.result or facet group that contains li.facet
+// comes from finc
+.record-list {
+  list-style: none;
+  margin: 0;
+  padding: 0;
+
+  li::before {
+    content: none;
+  }
+}
\ No newline at end of file
diff --git a/themes/fid_bbi/scss/compiled.scss b/themes/fid_bbi/scss/compiled.scss
index cf811b1949e..100aebd6f2a 100644
--- a/themes/fid_bbi/scss/compiled.scss
+++ b/themes/fid_bbi/scss/compiled.scss
@@ -47,6 +47,7 @@
 @import 'blocks/posts';
 @import 'blocks/post';
 @import 'blocks/record';
+@import 'blocks/record-list';
 @import 'blocks/result';
 @import 'blocks/results';
 @import 'blocks/rvk';
diff --git a/themes/fid_bbi/templates/RecordDriver/DefaultRecord/list-entry.phtml b/themes/fid_bbi/templates/RecordDriver/DefaultRecord/list-entry.phtml
index ef8b7a7490a..a9c2d072858 100644
--- a/themes/fid_bbi/templates/RecordDriver/DefaultRecord/list-entry.phtml
+++ b/themes/fid_bbi/templates/RecordDriver/DefaultRecord/list-entry.phtml
@@ -33,7 +33,7 @@ $formatIconMappings = json_decode(file_get_contents($formatIconMappingsFile), tr
 $icon = $formatIconMappings[$format] ?? 'unknown';
 ?>
 
-<div class="result<?php if ($this->driver->supportsAjaxStatus()): ?> ajaxItem<?php endif ?>">
+<li class="result<?php if ($this->driver->supportsAjaxStatus()): ?> ajaxItem<?php endif ?>">
   <input type="hidden" value="<?=$this->escapeHtmlAttr($id)?>" class="hiddenId"/>
   <input type="hidden" value="<?=$this->escapeHtmlAttr($source)?>" class="hiddenSource"/>
 
@@ -44,16 +44,18 @@ $icon = $formatIconMappings[$format] ?? 'unknown';
   <div class="result_details">
     <h3 class="result_title resultItemLine1">
       <?php $missing = $this->driver instanceof \VuFind\RecordDriver\Missing; ?>
+      <?php $describedById = $driver->getSourceIdentifier() . '|' . $driver->getUniqueId(); ?>
       <?php if (!$missing): ?>
         <a
           href="<?=$this->recordLink()->getUrl($this->driver)?>"
           class="getFull"
           data-view="<?=$this->params->getOptions()->getListViewOption()?>"
+          id="<?=$describedById?>"
         >
           <?=$this->record($this->driver)->getTitleHtml()?>
         </a>
       <?php else: ?>
-        <?=$this->record($this->driver)->getTitleHtml()?>
+        <span id="<?=$describedById?>"><?=$this->record($this->driver)->getTitleHtml()?></span>
       <?php endif; ?>
     </h3>
 
@@ -301,5 +303,5 @@ $icon = $formatIconMappings[$format] ?? 'unknown';
       <?php endif; ?>
     <?php endif; ?>
   </div>
-</div>
+</li>
 <!-- fid_bbi: RecordDriver - DefaultRecord - list-entry - END -->
diff --git a/themes/fid_bbi/templates/myresearch/mylist.phtml b/themes/fid_bbi/templates/myresearch/mylist.phtml
index 6313a08cfd0..ae75d713c5b 100644
--- a/themes/fid_bbi/templates/myresearch/mylist.phtml
+++ b/themes/fid_bbi/templates/myresearch/mylist.phtml
@@ -101,10 +101,11 @@ $user = $this->auth()->isLoggedIn();
         data-lightbox-onsubmit="bulkFormHandler"
       >
         <?=$this->context($this)->renderInContext('myresearch/bulk-action-buttons.phtml', ['idPrefix' => '', 'list' => $list ?? null, 'account' => $this->account])?>
-
+        <ul class="record-list">
         <?php foreach ($this->results->getResults() as $i => $current): ?>
           <?=$this->record($current)->getListEntry($list, $user)?>
         <?php endforeach; ?>
+        </ul>
       </form>
 
       <?=$this->paginationControl($this->results->getPaginator(), 'Sliding', 'search/pagination.phtml', ['results' => $this->results])?>
diff --git a/themes/fid_bbi/templates/record/checkbox.phtml b/themes/fid_bbi/templates/record/checkbox.phtml
index f320511608a..6dee80d9bff 100644
--- a/themes/fid_bbi/templates/record/checkbox.phtml
+++ b/themes/fid_bbi/templates/record/checkbox.phtml
@@ -9,7 +9,7 @@
  * @author Tobias Schäfer <ts@aspectis.net>
  */
 ?>
-
+<?php $label = isset($this->context) ? 'select_item_' . $this->context : 'select_item'; ?>
 <?php $id = 'checkbox-' . uniqid(); ?>
 <?php // NOTE: `class` is required by favorites list JS ?>
 <input
@@ -20,7 +20,7 @@
   value="<?=$this->id?>"
   <?=isset($this->formAttr) ? "form='$this->formAttr'" : ""?>
   aria-describedby="<?=$this->id?>"
-  aria-label="<?=$this->transEsc('select_item')?>"
+  aria-label="<?=$this->transEsc($label)?>"
 >
 <label for="<?=$id?>">
   <?php if (strlen($this->number ?? '') > 0): ?>
diff --git a/themes/fid_bbi/templates/search/list-list.phtml b/themes/fid_bbi/templates/search/list-list.phtml
index 6a90306f783..939c5cd06ee 100644
--- a/themes/fid_bbi/templates/search/list-list.phtml
+++ b/themes/fid_bbi/templates/search/list-list.phtml
@@ -6,11 +6,12 @@ if (!isset($this->indexStart)) {
 
 $i = $this->indexStart;
 ?>
-
+<?php $listStart = $this->results->getStartRecord() + $i - $this->indexStart; ?>
+<ol class="record-list" start="<?=$listStart?>">
 <?php foreach ($this->results->getResults() as $current): ?>
   <?php $i++; ?>
 
-  <div id="result<?=$i?>" class="result <?=$current->supportsAjaxStatus() ? 'ajaxItem': ''?>">
+  <li id="result<?=$i?>" class="result <?=$current->supportsAjaxStatus() ? 'ajaxItem': ''?>">
     <?php // TODO: Remove? ?>
     <?php $recordNumber = $this->results->getStartRecord() + $i - $this->indexStart; ?>
     <span id="jump<?=$recordNumber?>"></span>
@@ -20,8 +21,9 @@ $i = $this->indexStart;
     <?php endif; ?>
 
     <?=$this->record($current)->getSearchResult('list')?>
-  </div>
+  </li>
 
   <?php $i++; ?>
 <?php endforeach; ?>
+</ol>
 <!-- fid_bbi: search - list-list - END -->
diff --git a/themes/fid_bbi/templates/search/results.phtml b/themes/fid_bbi/templates/search/results.phtml
index 496cf3cfd50..9d79541f2cc 100644
--- a/themes/fid_bbi/templates/search/results.phtml
+++ b/themes/fid_bbi/templates/search/results.phtml
@@ -1,5 +1,7 @@
 <!-- fid_bbi: search - results -->
 <?php
+$this->context = 'search_result';
+
 $lookfor = $this->results->getUrlQuery()->isQuerySuppressed() ? '' : $this->params->getDisplayQuery();
 $recordTotal = $this->results->getResultTotal();
 
-- 
GitLab