From f3caa230494d049e207608e1dfc1ccfb61b628b0 Mon Sep 17 00:00:00 2001
From: ckaz <kazzer@uni-leipzig.de>
Date: Wed, 24 Jun 2020 09:20:16 +0200
Subject: [PATCH] refs #17621 [master] responsive tables

* for details see issue/17621_new

co-authored by: "Alexander Purr <purr@ub.uni-leipzig.de>"
---
 local/languages/de.ini                        |   4 +-
 local/languages/en.ini                        |   4 +-
 themes/finc/scss/_customMixins.scss           |  71 +++++++-
 themes/finc/scss/compiled.scss                |  47 ++++++
 .../DefaultRecord/collection-info.phtml       |   7 +-
 .../DefaultRecord/collection-record.phtml     |  18 ++
 .../RecordDriver/DefaultRecord/core.phtml     |   5 +-
 .../templates/RecordDriver/SolrAI/core.phtml  |   5 +-
 .../RecordDriver/SolrLido/core.phtml          |   5 +-
 .../RecordDriver/SolrMarc/core.phtml          |   5 +-
 .../templates/RecordTab/description.phtml     |   6 +-
 .../templates/RecordTab/descriptionlido.phtml |   8 +-
 .../templates/RecordTab/holdingsils.phtml     |  13 +-
 .../RecordTab/holdingsils/standard.phtml      |   6 +-
 .../RecordTab/holdingsworldcat.phtml          |  34 ++++
 .../templates/RecordTab/staffviewai.phtml     |  11 +-
 .../templates/RecordTab/staffviewarray.phtml  |  19 +++
 .../templates/RecordTab/staffviewmarc.phtml   |   7 +-
 themes/finc/templates/RecordTab/topics.phtml  |   6 +-
 themes/finc/templates/ajax/status-full.phtml  |  42 +++++
 themes/finc/templates/alphabrowse/home.phtml  | 152 +++++++++++++++++
 themes/finc/templates/librarycards/home.phtml |   1 +
 themes/finc/templates/myresearch/fines.phtml  |   7 +-
 .../finc/templates/myresearch/profile.phtml   | 156 +++++++++---------
 .../finc/templates/search/history-table.phtml |  59 +++++++
 .../templates/search/list-authorfacets.phtml  |  16 ++
 .../templates/search/reservessearch.phtml     |  91 ++++++++++
 27 files changed, 684 insertions(+), 121 deletions(-)
 create mode 100644 themes/finc/templates/RecordDriver/DefaultRecord/collection-record.phtml
 create mode 100644 themes/finc/templates/RecordTab/holdingsworldcat.phtml
 create mode 100644 themes/finc/templates/RecordTab/staffviewarray.phtml
 create mode 100644 themes/finc/templates/ajax/status-full.phtml
 create mode 100644 themes/finc/templates/alphabrowse/home.phtml
 create mode 100644 themes/finc/templates/search/history-table.phtml
 create mode 100644 themes/finc/templates/search/list-authorfacets.phtml
 create mode 100644 themes/finc/templates/search/reservessearch.phtml

diff --git a/local/languages/de.ini b/local/languages/de.ini
index 82a15b7d53e..a7308e4a403 100644
--- a/local/languages/de.ini
+++ b/local/languages/de.ini
@@ -2000,4 +2000,6 @@ Skip to search = "Weiter zum Suchbereich"
 ; Overwrite, only in de.ini necessary:
 Search type = "Suchtyp"
 
-License = "Lizenz"
\ No newline at end of file
+License = "Lizenz"
+
+fine_date_short = "Gebühr fällig"
\ No newline at end of file
diff --git a/local/languages/en.ini b/local/languages/en.ini
index 68a6044ffef..9f40eb2a5a4 100644
--- a/local/languages/en.ini
+++ b/local/languages/en.ini
@@ -2096,4 +2096,6 @@ Modal_description = "This is a dialog window which overlays the main content of
 ; #17598
 Skip to search = "Skip to search"
 
-License = "License"
\ No newline at end of file
+License = "License"
+
+fine_date_short = "Fine Date"
\ No newline at end of file
diff --git a/themes/finc/scss/_customMixins.scss b/themes/finc/scss/_customMixins.scss
index 33043b15314..2dd5bb11a87 100644
--- a/themes/finc/scss/_customMixins.scss
+++ b/themes/finc/scss/_customMixins.scss
@@ -37,4 +37,73 @@
   padding: 0;
   position: absolute;
   width: auto;
-}
\ No newline at end of file
+}
+
+// Responsive data tables mixin
+
+@mixin table-resp-data {
+  thead,
+  tbody,
+  th,
+  td,
+  tr {
+    display: block;
+    width: 100%;
+  }
+
+  // Hide table headers/footers but avoid display: none; for accessibility
+  thead tr,
+  tfoot tr > th,
+  tr th {
+    border: 0;
+    left: -9999px;
+    position: absolute;
+    top: -9999px;
+  }
+
+  tr {
+    border: $border-default-styles;
+    border-bottom: 0;
+    margin-bottom: 6px;
+
+    &:last-of-type {
+      border-bottom: $border-default-styles;
+    }
+  }
+
+  // remove ghost borders
+  &.table {
+    border-color: transparent;
+  }
+
+  tbody > tr > td,
+  td {
+    // Make td behave like a "row", add padding for "columns"
+    border: 0;
+    border-bottom: $border-default-styles;
+    padding-left: calc(50% + 10px);
+    position: relative;
+    text-align: left;
+    white-space: normal;
+  }
+
+  td::before {
+    // make data titles behave like table headers // top+left values mimic padding
+    content: attr(data-title);
+    font-weight: bold;
+    left: 6px;
+    overflow: hidden; // required for Ellipsis
+    padding-right: 10px;
+    position: absolute;
+    text-align: left;
+    text-overflow: ellipsis; // required for Ellipsis
+    top: 6px; // required for Ellipsis (was top: 6px)
+    white-space: nowrap; // required for Ellipsis
+    width: calc(50% - 20px); // required for Ellipsis
+  }
+
+  // Insert nbsp on XS to prevent empty, collapsing cells
+  td::after {
+    content: '\00a0';
+  }
+}
diff --git a/themes/finc/scss/compiled.scss b/themes/finc/scss/compiled.scss
index 93a7d5980ad..d601b8632b3 100644
--- a/themes/finc/scss/compiled.scss
+++ b/themes/finc/scss/compiled.scss
@@ -246,6 +246,38 @@ h4 {
   width: 100%;
 }
 
+//// Responsive data tables for small (xs) resolution (e.g. search history table)
+@media screen and (max-width: $screen-xs-max) {
+  // Force table around, exc. solrMarc staffview
+  .table-resp-data:not(.citation) {
+    display: flex;
+    max-width: 90vw !important;
+  }
+
+  .table-resp-data {
+    border: 0;
+    display: block;
+  }
+
+  // .table-resp-data (default) -- is applied to XS
+  .table-resp-data {
+    @include table-resp-data;
+  }
+
+  // limit width for staff view
+  .tab-pane.details-tab.active {
+    max-width: 80vw;
+    overflow-x: auto;
+  }
+}
+
+//// Responsive data tables for medium (md) resolution (e.g. fines table)
+@media screen and (max-width: $screen-md-max) {
+  .table-resp-data-md {
+    @include table-resp-data;
+  }
+}
+
 // TABLES - END
 
 // FORMS
@@ -1766,8 +1798,23 @@ footer {
   border-left: 1px solid $nav-tabs-border-color;
   border-right: 1px solid $nav-tabs-border-color;
   padding: ($grid-gutter-width / 2);
+
+  // make long ai-Links break to prevent overspilling content on XS
+  a {
+    word-break: break-word;
+  }
 }
 
+/////// Format items in availability column
+.availability-column {
+  @media only screen and (max-width: $screen-sm-max) {
+    a {
+      display: block;
+      margin-top: 6px;
+      word-break: break-word;
+    }
+  }
+}
 //////// Tab-content active needs to display 'inline-block' top display the border correctly (or content will bleed over)
 .tab-content > .active {
   display: inline-block;
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml
index 5af52c580f7..d5ce34fdcc0 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/collection-info.phtml
@@ -49,11 +49,12 @@
     $fields = $formatter->getData($driver, $formatter->getDefaults('collection-info'));
     ?>
     <?php if (!empty($fields)): ?>
-      <?php /* finc: we use 'collapse in' to initially hide the content, CK */ ?>
-      <table id="collectionInfo" class="table table-striped collapse in">
+      <?php /* finc: we use 'collapse in' to initially hide the content,
+            we also include responsive data table - CK */ ?>
+      <table id="collectionInfo" class="table table-striped table-resp-data collapse in">
         <caption class="sr-only"><?=$this->transEsc('Bibliographic Details')?></caption>
         <?php foreach ($fields as $current): ?>
-          <tr><th><?=$this->transEsc($current['label'])?>:</th><td><?=$current['value']?></td></tr>
+          <tr><th><?=$this->transEsc($current['label'])?>:</th><td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td></tr>
         <?php endforeach; ?>
       </table>
     <?php endif; ?>
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/collection-record.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/collection-record.phtml
new file mode 100644
index 00000000000..0b79440ae62
--- /dev/null
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/collection-record.phtml
@@ -0,0 +1,18 @@
+<!-- finc: recordDriver - DefaultRecord - collection-record -->
+<h2><?=$this->escapeHtml($this->driver->getShortTitle() . ' ' . $this->driver->getSubtitle() . ' ' . $this->driver->getTitleSection())?></h2>
+<a href="<?=$this->recordLink()->getUrl($this->driver)?>"><?=$this->transEsc('View Full ' . ($this->driver->isCollection() ? 'Collection' : 'Record'))?></a>
+
+<?php
+  $formatter = $this->recordDataFormatter();
+  $fields = $formatter->getData($driver, $formatter->getDefaults('collection-record'));
+?>
+<?php if (!empty($fields)): ?>
+    <?php /* include responsive data table - CK */ ?>
+  <table class="table table-striped table-resp-data">
+    <caption class="sr-only"><?=$this->transEsc('Bibliographic Details')?></caption>
+    <?php foreach ($fields as $current): ?>
+      <tr><th><?=$this->transEsc($current['label'])?>:</th><td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td></tr>
+    <?php endforeach; ?>
+  </table>
+<?php endif; ?>
+<!-- finc: recordDriver - DefaultRecord - collection-record - END -->
diff --git a/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml b/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml
index a411bc91d4a..a2dfff1cc2c 100644
--- a/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml
+++ b/themes/finc/templates/RecordDriver/DefaultRecord/core.phtml
@@ -70,12 +70,13 @@
     $coreFields = $formatter->getData($driver, $formatter->getDefaults('core'));
     ?>
     <?php if (!empty($coreFields)): ?>
-      <table class="table table-striped">
+        <?php /* include responsive data table - CK */ ?>
+      <table class="table table-striped table-resp-data">
         <caption class="sr-only"><?=$this->transEsc('Bibliographic Details')?></caption>
         <?php foreach ($coreFields as $current): ?>
           <tr>
             <th><?=$this->transEsc($current['label'])?>:</th>
-            <td><?=$current['value']?></td>
+            <td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td>
           </tr>
         <?php endforeach; ?>
       </table>
diff --git a/themes/finc/templates/RecordDriver/SolrAI/core.phtml b/themes/finc/templates/RecordDriver/SolrAI/core.phtml
index fe6c9ef6189..b5bfed99524 100644
--- a/themes/finc/templates/RecordDriver/SolrAI/core.phtml
+++ b/themes/finc/templates/RecordDriver/SolrAI/core.phtml
@@ -70,13 +70,14 @@
       $coreFields = $formatter->getData($driver, $formatter->getDefaults('core-ai'));
       ?>
       <?php if (!empty($coreFields)): ?>
-        <table class="table table-striped">
+        <?php /* include responsive data table - CK */ ?>
+      <table class="table table-striped table-resp-data">
           <caption class="sr-only"><?=$this->transEsc('Bibliographic Details')?></caption>
           <?php foreach ($coreFields as $current): ?>
             <?php if ($current['label'] == null): ?>
               <?=$current['value']?>
             <?php else: ?>
-              <tr><th><?=$this->transEsc($current['label'])?>:</th><td><?=$current['value']?></td></tr>
+              <tr><th><?=$this->transEsc($current['label'])?>:</th><td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td></tr>
             <?php endif; ?>
           <?php endforeach; ?>
         </table>
diff --git a/themes/finc/templates/RecordDriver/SolrLido/core.phtml b/themes/finc/templates/RecordDriver/SolrLido/core.phtml
index b4675a25177..5ab8df4ee07 100644
--- a/themes/finc/templates/RecordDriver/SolrLido/core.phtml
+++ b/themes/finc/templates/RecordDriver/SolrLido/core.phtml
@@ -88,7 +88,8 @@
     $coreFields = $formatter->getData($driver, $formatter->getDefaults('core-lido'));
     ?>
     <?php if (!empty($coreFields)): ?>
-      <table class="table table-striped">
+        <?php /* include responsive data table - CK */ ?>
+      <table class="table table-striped table-resp-data">
         <caption class="sr-only"><?=$this->transEsc('Bibliographic Details')?></caption>
         <?php foreach ($coreFields as $current): ?>
           <?php if ($current['label'] == null): ?>
@@ -96,7 +97,7 @@
           <?php else: ?>
             <tr>
               <th><?=$this->transEsc($current['label'])?>:</th>
-              <td><?=$current['value']?></td>
+              <td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td>
             </tr>
           <?php endif; ?>
         <?php endforeach; ?>
diff --git a/themes/finc/templates/RecordDriver/SolrMarc/core.phtml b/themes/finc/templates/RecordDriver/SolrMarc/core.phtml
index f27404394fd..2992f968984 100644
--- a/themes/finc/templates/RecordDriver/SolrMarc/core.phtml
+++ b/themes/finc/templates/RecordDriver/SolrMarc/core.phtml
@@ -72,7 +72,8 @@
       $coreFields = $formatter->getData($driver, $formatter->getDefaults('core-marc'));
       ?>
       <?php if (!empty($coreFields)): ?>
-        <table class="table table-striped">
+        <?php /* include responsive data table - CK */ ?>
+      <table class="table table-striped table-resp-data">
           <caption class="sr-only"><?=$this->transEsc('Bibliographic Details')?></caption>
           <?php foreach ($coreFields as $current): ?>
             <?php if ($current['label'] == null): ?>
@@ -80,7 +81,7 @@
             <?php else: ?>
               <tr>
                 <th><?=$this->transEsc($current['label'])?>:</th>
-                <td><?=$current['value']?></td>
+                <td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td>
               </tr>
             <?php endif; ?>
           <?php endforeach; ?>
diff --git a/themes/finc/templates/RecordTab/description.phtml b/themes/finc/templates/RecordTab/description.phtml
index d8f9f722d31..cea530c6973 100644
--- a/themes/finc/templates/RecordTab/description.phtml
+++ b/themes/finc/templates/RecordTab/description.phtml
@@ -6,14 +6,14 @@ $this->headTitle($this->translate('Description') . ': ' . $this->driver->getBrea
 $formatter = $this->recordDataFormatter();
 $mainFields = $formatter->getData($driver, $formatter->getDefaults('description'));
 ?>
-<?php /* finc: remove schema tag here but keep in core,*/ ?>
-<table class="table table-striped">
+<?php /* finc: remove schema tag here but keep in core, include responsive data table - CK */ ?>
+<table class="table table-striped table-resp-data">
   <?php
   /* Table gets filled via recordDriver/.../data-... templates as referenced in RecordDataFormatterFactory */ ?>
   <caption class="sr-only"><?=$this->transEsc('Description')?></caption>
   <?php if (!empty($mainFields)): ?>
     <?php foreach ($mainFields as $current): ?>
-      <tr><th><?=$this->transEsc($current['label'])?>:</th><td><?=$current['value']?></td></tr>
+      <tr><th><?=$this->transEsc($current['label'])?>:</th><td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td></tr>
     <?php endforeach; ?>
   <?php else: ?>
     <tr><td><?=$this->transEsc('no_description')?></td></tr>
diff --git a/themes/finc/templates/RecordTab/descriptionlido.phtml b/themes/finc/templates/RecordTab/descriptionlido.phtml
index c6dd3bdeb2d..b02580e4cce 100644
--- a/themes/finc/templates/RecordTab/descriptionlido.phtml
+++ b/themes/finc/templates/RecordTab/descriptionlido.phtml
@@ -7,14 +7,14 @@ $formatter = $this->recordDataFormatter();
 $mainFields = $formatter->getData($driver, $formatter->getDefaults('description-lido'));
 ?>
 <?php /*
- This next table originally in table "Display Main Details" in DefaultRecord/core templates, compare with core and with description.phtml! CK
- /* finc: remove schema tag here but keep in core,*/
+ This next table originally in table "Display Main Details" in DefaultRecord/core templates, compare with core and with description.phtml!
+ finc: remove schema tag here but keep in core, include responsive data table - CK */
 ?>
-<table class="table table-striped">
+<table class="table table-striped table-resp-data">
   <caption class="sr-only"><?= $this->transEsc('Description') ?></caption>
   <?php if (!empty($mainFields)): ?>
     <?php foreach ($mainFields as $current): ?>
-      <tr><th><?=$this->transEsc($current['label'])?>:</th><td><?=$current['value']?></td></tr>
+      <tr><th><?=$this->transEsc($current['label'])?>:</th><td data-title="<?= $this->transEsc($current['label']) ?>:"><?=$current['value']?></td></tr>
     <?php endforeach; ?>
   <?php else: ?>
     <tr><td><?=$this->transEsc('no_description')?></td></tr>
diff --git a/themes/finc/templates/RecordTab/holdingsils.phtml b/themes/finc/templates/RecordTab/holdingsils.phtml
index a30510273da..3a14112478b 100644
--- a/themes/finc/templates/RecordTab/holdingsils.phtml
+++ b/themes/finc/templates/RecordTab/holdingsils.phtml
@@ -103,8 +103,8 @@ if (!empty($holdingTitleHold)): ?>
   <?php if (isset($holding['locationid'])): ?>
     <?=$this->branchInfo($this->driver)->getBranchInfo($holding['locationid']);?>
   <?php endif; ?>
-  <?php /* finc: this next section produces an empty table in some cases - the table borders collapse, producing a thick line - should be solved more elegantly - Fixme - CK*/ ?>
-  <table class="table table-striped">
+  <?php /* finc: this next section produces an empty table in some cases - the table borders collapse, producing a thick line - should be solved more elegantly - Fixme - , include responsive data table - CK */ ?>
+  <table class="table table-striped table-resp-data">
     <caption class="sr-only"><?=$this->transEsc('holdings_details_from', ['%%location%%' => $this->transEsc($holding['location'])])?></caption>
     <?php /* finc: change order and structure of table #13606 - VE */ ?>
     <?php foreach ($holding['items'] as $row): ?>
@@ -131,7 +131,7 @@ if (!empty($holdingTitleHold)): ?>
         <th>
           <?=$this->transEsc("Call Number")?>:
         </th>
-        <td>
+        <td data-title="<?= $this->transEsc("Call Number") ?>:">
           <?php foreach ($callNos as $callNo): ?>
             <?=$this->escapeHtml($callNo)?>
             <br />
@@ -143,7 +143,7 @@ if (!empty($holdingTitleHold)): ?>
       <tr>
         <?php // Translation for summary is a special case for backwards-compatibility ?>
         <th><?=$textFieldName == 'summary' ? $this->transEsc("Volume Holdings") : $this->transEsc(ucfirst($textFieldName))?>:</th>
-        <td>
+        <td data-title="<?= $this->transEsc("Volume Holdings") ?>:">
           <?php foreach ($textFields as $current): ?>
             <?=$this->escapeHtml($current)?><br/>
           <?php endforeach; ?>
@@ -154,7 +154,7 @@ if (!empty($holdingTitleHold)): ?>
     <?php if (!empty($holding['purchase_history'])): ?>
       <tr>
         <th><?=$this->transEsc("Most Recent Received Issues")?>:</th>
-        <td>
+        <td data-title="<?= $this->transEsc("Most Recent Received Issues") ?>:">
           <?php foreach ($holding['purchase_history'] as $current): ?>
             <?=$this->escapeHtml($current['issue'])?><br/>
           <?php endforeach; ?>
@@ -184,7 +184,8 @@ if (!empty($holdingTitleHold)): ?>
 <?php $history = $this->driver->getRealTimeHistory(); ?>
 <?php if (is_array($history) && !empty($history)): ?>
   <h3><?=$this->transEsc("Most Recent Received Issues")?></h3>
-  <table class="table table-striped">
+    <?php /* include responsive data table - CK */ ?>
+  <table class="table table-striped table-resp-data">
     <?php foreach ($history as $row): ?>
       <tr>
         <td><?=$this->escapeHtml($row['issue'])?></td>
diff --git a/themes/finc/templates/RecordTab/holdingsils/standard.phtml b/themes/finc/templates/RecordTab/holdingsils/standard.phtml
index 91e177f3400..9842a0a0d71 100644
--- a/themes/finc/templates/RecordTab/holdingsils/standard.phtml
+++ b/themes/finc/templates/RecordTab/holdingsils/standard.phtml
@@ -16,10 +16,10 @@
       <?php endif; ?>
     </th>
     */ ?>
-  <td class="availability-column">
+  <td data-title="<?=$this->transEsc('Availability')?>" class="availability-column">
     <?php if ($holding['reserve'] == "Y"): ?>
       <link property="availability" href="http://schema.org/InStoreOnly"/>
-      <?=$this->transEsc("On Reserve - Ask at Circulation Desk")?><br/>
+      <?=$this->transEsc("On Reserve - Ask at Circulation Desk")?><br><br>
     <?php endif; ?>
     <?php if ($holding['use_unknown_message'] ?? false): ?>
       <span class="text-muted"><?=$this->transEsc("status_unknown_message")?></span>
@@ -68,7 +68,7 @@
         <?=$this->relais()->renderButtonIfActive($this->driver ?? null)?>
       <?php endif; ?>
   </td>
-  <td class="notes">
+  <td data-title="<?=$this->transEsc('Notes')?>" class="notes">
     <?php if (isset($holding['item_notes'])): ?>
       <div class="item-notes">
         <strong><?=$this->transEsc("Item Notes")?>:</strong>
diff --git a/themes/finc/templates/RecordTab/holdingsworldcat.phtml b/themes/finc/templates/RecordTab/holdingsworldcat.phtml
new file mode 100644
index 00000000000..b2feb101316
--- /dev/null
+++ b/themes/finc/templates/RecordTab/holdingsworldcat.phtml
@@ -0,0 +1,34 @@
+<!-- finc: recordTab - holdingswordlcat -->
+<?php $holdings = $this->tab->getHoldings(); ?>
+<?php if (isset($holdings->diagnostic->message)): ?>
+  <p><?=$this->escapeHtml($holdings->diagnostic->message)?></p>
+<?php elseif ($holdings && count($holdings) > 0): ?>
+  <h3><?=$this->transEsc('Holdings at Other Libraries')?></h3>
+    <?php /* include responsive data table - CK */ ?>
+  <table class="table table-striped table-resp-data">
+    <?php foreach ($holdings as $holding): ?>
+      <tr>
+        <th colspan="2">
+          <?php if (isset($holding->electronicAddress->text) && !empty($holding->electronicAddress->text)): ?>
+            <a href="<?=$this->escapeHtmlAttr($holding->electronicAddress->text)?>"><?=$this->escapeHtml($holding->physicalLocation)?></a>
+          <?php else: ?>
+            <?=$this->escapeHtml($holding->physicalLocation)?>
+          <?php endif; ?>
+        </th>
+      </tr>
+      <?php if (!empty($holding->physicalAddress->text)): ?>
+        <tr>
+          <th><?=$this->transEsc('Address')?>: </th>
+          <td data-title="<?= $this->transEsc('Address') ?>:"><?=$this->escapeHtml($holding->physicalAddress->text)?></td>
+        </tr>
+      <?php endif; ?>
+      <?php if (isset($holding->holdingSimple->copiesSummary->copiesCount)): ?>
+        <tr>
+          <th><?=$this->transEsc('Copies')?>: </th>
+          <td data-title="<?= $this->transEsc('Copies') ?>:"><?=$this->escapeHtml($holding->holdingSimple->copiesSummary->copiesCount)?></td>
+        </tr>
+      <?php endif; ?>
+    <?php endforeach; ?>
+  </table>
+<?php endif; ?>
+<!-- finc: recordTab - holdingswordlcat - END -->
\ No newline at end of file
diff --git a/themes/finc/templates/RecordTab/staffviewai.phtml b/themes/finc/templates/RecordTab/staffviewai.phtml
index ed6fb81a856..d38b62fdc2e 100644
--- a/themes/finc/templates/RecordTab/staffviewai.phtml
+++ b/themes/finc/templates/RecordTab/staffviewai.phtml
@@ -3,11 +3,12 @@
 // Set page title.
 $this->headTitle($this->translate('Staff View') . ': ' . $this->driver->getBreadcrumb());
 ?>
-<table class="citation table table-striped">
+<?php /* include responsive data table - CK */ ?>
+<table class="citation table table-striped table-resp-data">
   <?php foreach ($this->driver->getAIRecord() as $field => $values): ?>
     <tr>
       <th><?=$this->escapeHtml($field)?></th>
-      <td>
+      <td data-title="<?= $this->escapeHtml($field) ?>:">
         <?php if (!is_array($values)) {
           $values = array($values);
         } ?>
@@ -21,7 +22,7 @@ $this->headTitle($this->translate('Staff View') . ': ' . $this->driver->getBread
   <?php if ($openURL = $this->driver->getOpenUrl()): ?>
     <tr>
       <th><?=$this->escapeHtml('openURL')?></th>
-      <td>
+      <td data-title="<?= $this->escapeHtml('openURL') ?>:">
         <?=$this->escapeHtml($openURL)?><br/>
       </td>
     </tr>
@@ -30,14 +31,14 @@ $this->headTitle($this->translate('Staff View') . ': ' . $this->driver->getBread
   if (!empty($fields)): ?>
     <tr>
       <th><?=$this->translate('SOLR')?></th>
-      <td></td>
+      <td data-title="<?= $this->escapeHtml('SOLR') ?>:"></td>
     </tr>
     <?php ksort($fields);
     foreach ($fields as $key => $values): ?>
       <?php if ($key === 'fullrecord') continue; ?>
       <tr>
         <th><?=$this->escapeHtml($key)?></th>
-        <td><?=$this->escapeHtml(is_array($values) ? implode(', ', $values) : $values)?></td>
+        <td data-title="<?= $this->escapeHtml($key) ?>:"><?=$this->escapeHtml(is_array($values) ? implode(', ', $values) : $values)?></td>
       </tr>
     <?php endforeach ?>
   <?php endif; ?>
diff --git a/themes/finc/templates/RecordTab/staffviewarray.phtml b/themes/finc/templates/RecordTab/staffviewarray.phtml
new file mode 100644
index 00000000000..c046901cfae
--- /dev/null
+++ b/themes/finc/templates/RecordTab/staffviewarray.phtml
@@ -0,0 +1,19 @@
+<!-- finc: recordtab - staffviewarray -->
+<?php
+    // Set page title.
+    $this->headTitle($this->translate('Staff View') . ': ' . $this->driver->getBreadcrumb());
+?>
+<?php /* include responsive data table - CK */ ?>
+<table class="citation table table-striped table-resp-data">
+  <?php foreach ($this->driver->getRawData() as $field => $values): ?>
+    <tr>
+      <th><?=$this->escapeHtml($field)?></th>
+      <td data-title="<?= $this->escapeHtml($field) ?>:">
+        <?php foreach ((array)$values as $value): ?>
+          <?=$this->escapeHtml(is_array($value) ? print_r($value, true) : $value)?><br />
+        <?php endforeach; ?>
+      </td>
+    </tr>
+  <?php endforeach; ?>
+</table>
+<!-- finc: recordtab - staffviewarray - END -->
diff --git a/themes/finc/templates/RecordTab/staffviewmarc.phtml b/themes/finc/templates/RecordTab/staffviewmarc.phtml
index 81a43575747..d18b65df2ed 100644
--- a/themes/finc/templates/RecordTab/staffviewmarc.phtml
+++ b/themes/finc/templates/RecordTab/staffviewmarc.phtml
@@ -8,21 +8,22 @@ $this->headTitle($this->translate('Staff View') . ': ' . $this->driver->getBread
 <?php if ($openURL = $this->driver->getOpenUrl()): ?>
   <tr>
     <th><?=$this->escapeHtml('openURL')?></th>
-    <td>
+    <td data-title="<?= $this->escapeHtml('openURL') ?>:">
       <?=$this->escapeHtml($openURL)?><br/>
     </td>
   </tr>
 <?php endif; ?>
 <?php $fields = $this->driver->getRawData();
 if (!empty($fields)): ?>
-  <table class="citation table table-striped">
+    <?php /* include responsive data table - CK */ ?>
+  <table class="citation table table-striped table-resp-data">
     <caption><?=$this->translate('SOLR')?></caption>
     <?php ksort($fields);
     foreach ($fields as $key => $values): ?>
       <?php if ($key === 'fullrecord') continue; ?>
       <tr>
         <th><?=$this->escapeHtml($key)?></th>
-        <td><?=$this->escapeHtml(is_array($values) ? implode(', ', $values) : $values)?></td>
+        <td data-title="<?= $this->escapeHtml($key) ?>:"><?=$this->escapeHtml(is_array($values) ? implode(', ', $values) : $values)?></td>
       </tr>
     <?php endforeach ?>
   </table>
diff --git a/themes/finc/templates/RecordTab/topics.phtml b/themes/finc/templates/RecordTab/topics.phtml
index d2792298ec0..13f6cd36929 100644
--- a/themes/finc/templates/RecordTab/topics.phtml
+++ b/themes/finc/templates/RecordTab/topics.phtml
@@ -4,7 +4,7 @@
 $this->headTitle($this->translate('Topics') . ': ' . $this->driver->getBreadcrumb());
 
 ?>
-<table class="table table-striped">
+<table class="table table-striped table-resp-data">
   <caption class="sr-only">
     <?=$this->transEsc('Topics')?>
   </caption>
@@ -12,7 +12,7 @@ $this->headTitle($this->translate('Topics') . ': ' . $this->driver->getBreadcrum
   <?php $contentDisplayed = true; ?>
   <tr>
     <th><?=$this->transEsc('RVK')?>:</th>
-    <td>
+    <td data-title="<?= $this->transEsc('RVK') ?>:">
       <?php $i = 0; foreach ($rvk as $item): ?>
         <?=($i>0?"<br />":"") //no linebreak after last item ?>
 		<?=$item['rvk']?>
@@ -40,7 +40,7 @@ $this->headTitle($this->translate('Topics') . ': ' . $this->driver->getBreadcrum
   <?php $contentDisplayed = true; ?>
   <tr>
     <th><?=$this->transEsc('Subjects')?>: </th>
-    <td>
+    <td data-title="<?= $this->transEsc('Subjects') ?>:">
     <?php foreach ($topics as $field): ?>
       <div class="subject-line" property="keywords">
         <?php $subject = ''; ?>
diff --git a/themes/finc/templates/ajax/status-full.phtml b/themes/finc/templates/ajax/status-full.phtml
new file mode 100644
index 00000000000..303067afd3f
--- /dev/null
+++ b/themes/finc/templates/ajax/status-full.phtml
@@ -0,0 +1,42 @@
+<!-- finc - templates - ajax - status-full -->
+<?php /* include responsive data table - CK */ ?>
+<table class="table table-condensed table-resp-data">
+  <tr>
+    <th><?=$this->transEsc('Location')?></th>
+    <th><?=$this->transEsc('Call Number')?></th>
+    <th><?=$this->transEsc('Status')?></th>
+  </tr>
+  <?php $i = 0; foreach ($this->statusItems as $item): ?>
+    <?php if (++$i == 5) break; // Show no more than 5 items ?>
+    <tr>
+      <td data-title="<?= $this->transEsc('Location') ?>:" class="fullLocation">
+        <?php $locationText = $this->transEsc('location_' . $item['location'], [], $item['location']); ?>
+        <?php if (isset($item['locationhref']) && $item['locationhref']): ?>
+          <a href="<?=$item['locationhref']?>" target="_blank"><?=$locationText?></a>
+        <?php else: ?>
+          <?=$locationText?>
+        <?php endif; ?>
+      </td>
+      <td data-title="<?= $this->transEsc('Call Number') ?>:" class="fullCallnumber">
+        <?php if ($this->callnumberHandler): ?>
+          <a href="<?=$this->url('alphabrowse-home') ?>?source=<?=$this->escapeHtmlAttr($this->callnumberHandler) ?>&amp;from=<?=$this->escapeHtmlAttr($item['callnumber']) ?>"><?=$this->escapeHtml($item['callnumber'])?></a>
+        <?php else: ?>
+          <?=$this->escapeHtml($item['callnumber'])?>
+        <?php endif; ?>
+      </td>
+      <td data-title="<?= $this->transEsc('Status') ?>:" class="fullAvailability">
+        <?php if (isset($item['use_unknown_message']) && $item['use_unknown_message']): ?>
+          <span><?=$this->transEsc("status_unknown_message")?></span>
+        <?php elseif ($item['availability']): ?>
+          <span class="text-success"><?=($item['reserve'] == 'Y') ? $this->transEsc("On Reserve") : $this->transEsc("Available")?></span>
+        <?php else: ?>
+          <span class="text-danger"><?=$this->transEsc($item['status'])?></span>
+        <?php endif; ?>
+      </td>
+    </tr>
+  <?php endforeach; ?>
+<?php if (count($this->statusItems) > 5): ?>
+  <tr><td colspan="3"><a href="<?=$this->url('record', ['id' => $this->statusItems[0]['id']])?>"><?=count($this->statusItems) - 5?> <?=$this->transEsc('more')?> ...</a></td></tr>
+<?php endif; ?>
+</table>
+<!-- finc - templates - ajax - status-full - END -->
diff --git a/themes/finc/templates/alphabrowse/home.phtml b/themes/finc/templates/alphabrowse/home.phtml
new file mode 100644
index 00000000000..4fb26be322b
--- /dev/null
+++ b/themes/finc/templates/alphabrowse/home.phtml
@@ -0,0 +1,152 @@
+<!-- finc - templates - alphabrowse - home -->
+<?php
+  $this->headTitle($this->translate('Browse the Collection Alphabetically'));
+  $this->layout()->breadcrumbs = '<a href="' . $this->url('alphabrowse-home') . '">' . $this->transEsc('Browse Alphabetically') . '</a>';
+  $baseQuery = ['source' => $this->source, 'from' => $this->from];
+
+  // Set up upper search box if necessary:
+  if ($this->searchbox()->alphaBrowseOptionsEnabled()) {
+    $this->layout()->searchbox = $this->context($this)->renderInContext(
+        'search/searchbox.phtml',
+        [
+          'lookfor' => $this->from,
+          'searchIndex' => 'AlphaBrowse:' . $this->source,
+        ]
+    );
+  }
+?>
+
+<?php /* LOAD THE LINK INFORMATION INTO $pageLinks, similar to smarty's {capture} */ ?>
+<?php ob_start(); ?>
+  <ul class="pager">
+    <?php if (isset($this->prevpage)): ?>
+      <li><a href="<?=$this->escapeHtmlAttr($this->url('alphabrowse-home', [], ['query' => $baseQuery + ['page' => $this->prevpage]]))?>"><span aria-hidden="true">&laquo;</span> <?=$this->transEsc('Prev')?></a></li>
+    <?php else: ?>
+      <li class="disabled"><a href="#"><span aria-hidden="true">&laquo;</span> <?=$this->transEsc('Prev')?></a></li>
+    <?php endif; ?>
+
+    <?php if (isset($this->nextpage)): ?>
+      <li><a href="<?=$this->escapeHtmlAttr($this->url('alphabrowse-home', [], ['query' => $baseQuery + ['page' => $this->nextpage]]))?>"><?=$this->transEsc('Next')?> <span aria-hidden="true">&raquo;</span></a></li>
+    <?php else: ?>
+      <li class="disabled"><a href="#"><?=$this->transEsc('Next')?> <span aria-hidden="true">&raquo;</span></a></li>
+    <?php endif; ?>
+  </ul>
+<?php $pageLinks = ob_get_contents(); ?>
+<?php ob_end_clean(); ?>
+
+<?php /* If the top search box is not configured to show alphabrowse, or if no option
+      is selected yet, set up a separate form: */ ?>
+<?php if (!$this->searchbox()->alphaBrowseOptionsEnabled() || empty($this->source)): ?>
+  <form class="form-inline" method="get" action="<?=$this->url('alphabrowse-home')?>" name="alphaBrowseForm" id="alphaBrowseForm">
+    <label for="alphaBrowseForm_source"><?=$this->transEsc('Browse Alphabetically') ?></label>
+    <select id="alphaBrowseForm_source" name="source" class="form-control">
+      <?php foreach ($this->alphaBrowseTypes as $key => $item): ?>
+        <option value="<?=$this->escapeHtmlAttr($key) ?>"<?php if ($this->source == $key): ?> selected="selected"<?php endif; ?>><?=$this->transEsc($item) ?></option>
+      <?php endforeach; ?>
+    </select>
+    <label for="alphaBrowseForm_from"><?=$this->transEsc('starting from') ?></label>
+    <input type="text" name="from" id="alphaBrowseForm_from" value="<?=$this->escapeHtmlAttr($this->from) ?>" class="form-control"/>
+    <input class="btn btn-primary" type="submit" value="<?=$this->transEsc('Browse') ?>"/>
+  </form>
+<?php endif; ?>
+
+<?php if ($this->result): ?>
+  <?=$pageLinks ?>
+    <?php /* include responsive data table - CK */ ?>
+  <table class="alphabrowse table table-striped table-resp-data">
+    <thead>
+      <tr>
+        <th class="<?=$this->source ?>">
+          <?=$this->transEsc("browse_" . $this->source) ?>
+        </th>
+        <?php foreach ($this->extras as $e): ?>
+          <th><?=$this->transEsc("browse_" . $e) ?></th>
+        <?php endforeach; ?>
+        <th class="titles"><?=$this->transEsc("alphabrowse_matches") ?></th>
+      </tr>
+    </thead>
+    <tbody>
+      <?php $row = 0; ?>
+      <?php foreach ($this->result['Browse']['items'] as $item): ?>
+        <?php if (isset($this->highlight_row) && $row == $this->highlight_row): ?>
+          <tr class="browse-match">
+          <?php if (isset($this->match_type) && ($this->match_type == "NONE")): ?>
+            <?php // this is the right row but query doesn't match value ?>
+            <td colspan="<?=count($this->extras) + 2;?>"><?=$this->transEsc('your_match_would_be_here')?></td>
+            </tr>
+            <tr>
+          <?php endif; ?>
+        <?php else: ?>
+          <tr>
+        <?php endif; ?>
+          <td data-title="<?=$this->transEsc('browse_' . $this->source) ?>" class="<?=$this->source ?>">
+            <b>
+              <?php if ($url = $this->alphabrowse()->getUrl($this->source, $item)): ?>
+                <a href="<?=$this->escapeHtmlAttr($url)?>"><?=$this->escapeHtml($item['heading'])?></a>
+              <?php else: ?>
+                <?=$this->escapeHtml($item['heading'])?>
+              <?php endif; ?>
+            </b>
+
+            <?php if (count($item['useInstead']) > 0): ?>
+              <div>
+                <?=$this->transEsc('Use instead') ?>:
+                <ul>
+                  <?php foreach ($item['useInstead'] as $heading): ?>
+                  <li><a href="<?=$this->escapeHtmlAttr($this->url('alphabrowse-home', [], ['query' => ['from' => $heading] + $baseQuery]))?>"><?=$this->escapeHtml($heading)?></a></li>
+                  <?php endforeach; ?>
+                </ul>
+              </div>
+            <?php endif; ?>
+
+            <?php if (count($item['seeAlso']) > 0): ?>
+              <div>
+                <?=$this->transEsc('See also') ?>:
+                <ul>
+                  <?php foreach ($item['seeAlso'] as $heading): ?>
+                  <li><a href="<?=$this->escapeHtmlAttr($this->url('alphabrowse-home', [], ['query' => ['from' => $heading] + $baseQuery]))?>"><?=$this->escapeHtml($heading)?></a></li>
+                  <?php endforeach; ?>
+                </ul>
+              </div>
+            <?php endif; ?>
+
+            <?php if ($item['note'] ?? false): ?>
+              <div>
+                <?=$this->transEsc('Note') ?>:
+                <ul>
+                  <li><?=$this->escapeHtml($item['note'])?></li>
+                </ul>
+              </div>
+            <?php endif; ?>
+          </td>
+
+          <?php foreach ($this->extras as $extraName): ?>
+            <td>
+              <?php
+                $extraDisplayArray = [];
+                foreach ($item['extras'][$extraName] as $j => $e):
+                  $extraDisplayArray = array_unique(array_merge($extraDisplayArray, $e));
+                endforeach;
+                echo empty($extraDisplayArray) ? '&nbsp;' : implode('<br />', $extraDisplayArray);
+              ?>
+            </td>
+          <?php endforeach; ?>
+
+          <td data-title="<?=$this->transEsc("browse_" . $e) ?>" class="titles">
+            <?php if ($item['count'] > 0): ?>
+              <?=$item['count']; ?>
+            <?php endif; ?>
+          </td>
+        </tr>
+        <?php $row++; ?>
+        <?php endforeach; ?>
+        <?php if (isset($this->highlight_end)): ?>
+          <tr class="browse-match">
+            <td colspan="<?=count($this->extras) + 2;?>"><?=$this->transEsc('your_match_would_be_here')?></td>
+          </tr>
+        <?php endif; ?>
+    </tbody>
+  </table>
+  <?= $pageLinks ?>
+<?php endif; ?>
+<!-- finc - templates - alphabrowse - home - END -->
diff --git a/themes/finc/templates/librarycards/home.phtml b/themes/finc/templates/librarycards/home.phtml
index c4fab442f3d..c9935519e9a 100644
--- a/themes/finc/templates/librarycards/home.phtml
+++ b/themes/finc/templates/librarycards/home.phtml
@@ -14,6 +14,7 @@
     <?php if ($this->libraryCards->count() == 0): ?>
       <div><?=$this->transEsc('You do not have any library cards')?></div>
     <?php else: ?>
+        <?php /* Table works without further responsiveness code inserted - CK */ ?>
       <table class="table table-striped">
         <caption class="sr-only">
           <?=$this->transEsc('Library Cards')?>
diff --git a/themes/finc/templates/myresearch/fines.phtml b/themes/finc/templates/myresearch/fines.phtml
index e158fe5e7fb..39ca35c02de 100644
--- a/themes/finc/templates/myresearch/fines.phtml
+++ b/themes/finc/templates/myresearch/fines.phtml
@@ -38,7 +38,7 @@
           $tableData['Checked Out'][] = $this->escapeHtml($record['checkout'] ?? '');
           $tableData['Due Date'][] = $this->escapeHtml($record['duedate'] ?? '');
           $tableData['Fine'][] = $this->escapeHtml($record['fine'] ?? '');
-          $tableData['Fine Date'][] = $this->escapeHtml($record['createdate'] ?? '');
+          $tableData['fine_date_short'][] = $this->escapeHtml($record['createdate'] ?? '');
           $tableData['Fee'][] = isset($record['amount'])
               ? $this->safeMoneyFormat($record['amount'] / 100.00) : '';
           $tableData['Balance'][] = isset($record['balance'])
@@ -64,7 +64,8 @@
       $columns = array_keys($tableData);
       $rowCount = count($this->fines);
     ?>
-    <table class="table table-striped">
+      <?php /* include responsive data table - CK */ ?>
+    <table class="table table-striped table-resp-data-md">
       <caption class="sr-only"><?=$this->transEsc('Your Fines')?></caption>
       <tr>
         <?php foreach ($columns as $header): ?>
@@ -74,7 +75,7 @@
       <?php for ($row = 0; $row < $rowCount; $row++): ?>
         <tr>
           <?php foreach ($columns as $column): ?>
-            <td><?=$tableData[$column][$row]?></td>
+            <td data-title="<?=$this->transEsc($column)?>"><?=$tableData[$column][$row]?></td>
           <?php endforeach; ?>
         </tr>
       <?php endfor; ?>
diff --git a/themes/finc/templates/myresearch/profile.phtml b/themes/finc/templates/myresearch/profile.phtml
index a0f1061fc6a..5e584f7e85a 100644
--- a/themes/finc/templates/myresearch/profile.phtml
+++ b/themes/finc/templates/myresearch/profile.phtml
@@ -1,98 +1,100 @@
 <!-- finc: myresearch - profile -->
 <?php
-// Set up page title:
-$this->headTitle($this->translate('My Profile'));
-
-// Set up breadcrumbs:
-$this->layout()->breadcrumbs = '<li><a href="' . $this->url('myresearch-home') . '">' . $this->transEsc('Your Account') . '</a></li> <li class="active">' . $this->transEsc('Profile') . '</li>';
-
-// Template for use by the renderArray helper:
-$arrTemplate = '<tr><th>%%LABEL%%:</th><td> %%VALUE%%</td></tr>';
+    // Set up page title:
+    $this->headTitle($this->translate('My Profile'));
+    
+    // Set up breadcrumbs:
+    $this->layout()->breadcrumbs = '<li><a href="' . $this->url('myresearch-home') . '">' . $this->transEsc('Your Account') . '</a></li> <li class="active">' . $this->transEsc('Profile') . '</li>';
+    
+    // Template for use by the renderArray helper:
+    $arrTemplate = '<tr><th>%%LABEL%%:</th><td> %%VALUE%%</td></tr>';
 ?>
 
-<div class="<?=$this->layoutClass('mainbody')?>">
-  <?php /* finc V5: toggler was missing, remove entire template (!) when fixed in BS3 theme - CK */ ?>
-  <?=$this->render('RecordDriver/DefaultRecord/offcanvas-toggler-myresearch'); ?>
-
-  <h1><?=$this->transEsc('Your Profile')?></h1>
-  <?=$this->flashmessages();?>
+<div class="<?= $this->layoutClass('mainbody') ?>">
+    <?php /* finc V5: toggler was missing, remove entire template (!) when fixed in BS3 theme - CK */ ?>
+    <?= $this->render('RecordDriver/DefaultRecord/offcanvas-toggler-myresearch'); ?>
 
+  <h1><?= $this->transEsc('Your Profile') ?></h1>
+    <?= $this->flashmessages(); ?>
+    
+    <?php /* works well without inserting resp data titles - CK */ ?>
   <table class="table table-striped">
-    <?=$this->renderArray(
-      $arrTemplate, $this->user,
-        [
-        $this->transEsc('First Name') => 'firstname',
-        $this->transEsc('Last Name') => 'lastname',
-        // finc: show e-mail in table below
-        // $this->transEsc('Email') => 'email',
-        ]
-    )?>
-    <?php if (count($this->pickup ?? []) > 1): // Skip form if only one location: ?>
+      <?= $this->renderArray(
+          $arrTemplate, $this->user,
+          [
+              $this->transEsc('First Name') => 'firstname',
+              $this->transEsc('Last Name') => 'lastname',
+              // finc: show e-mail in table below
+              // $this->transEsc('Email') => 'email',
+          ]
+      ) ?>
+      <?php if (count($this->pickup ?? []) > 1): // Skip form if only one location:  ?>
     <tr>
-      <th><?=$this->transEsc('Preferred Library')?>:</th>
-      <?php
-        $selected = (strlen($this->profile['home_library'] ?? '') > 0)
-        ? $this->profile['home_library'] : $this->defaultPickupLocation
-      ?>
+      <th><?= $this->transEsc('Preferred Library') ?>:</th>
+        <?php
+            $selected = (strlen($this->profile['home_library'] ?? '') > 0)
+                ? $this->profile['home_library'] : $this->defaultPickupLocation
+        ?>
       <td>
         <form id="profile_form" class="form-inline" method="post">
           <select id="home_library" name="home_library" class="form-control">
-            <?php foreach ($this->pickup as $lib): ?>
-              <option
-                value="<?=$this->escapeHtmlAttr($lib['locationID'])?>"<?=($selected == $lib['locationID']) ? ' selected="selected"' : ''?>><?=$this->transEsc('location_' . $lib['locationDisplay'], null, $lib['locationDisplay'])?></option>
-            <?php endforeach; ?>
+              <?php foreach ($this->pickup as $lib): ?>
+                <option
+                  value="<?= $this->escapeHtmlAttr($lib['locationID']) ?>"<?= ($selected == $lib['locationID']) ? ' selected="selected"' : '' ?>><?= $this->transEsc('location_' . $lib['locationDisplay'], null, $lib['locationDisplay']) ?></option>
+              <?php endforeach; ?>
           </select>
-          <input class="btn btn-default" type="submit" value="<?=$this->transEsc('Save')?>"/>
+          <input class="btn btn-default" type="submit" value="<?= $this->transEsc('Save') ?>"/>
         </form>
       </td>
-      <?php endif; ?>
+        <?php endif; ?>
   </table>
 
   <div id="account-actions">
-    <?php if ($this->auth()->getManager()->supportsPasswordChange()): ?>
-      <a class="btn btn-default" href="<?=$this->url('myresearch-changepassword') ?>">
-        <i class="fa fa-fw fa-lock" aria-hidden="true"></i> <?=$this->transEsc('Change Password') ?>
-      </a>
-    <?php endif; ?>
-
-    <?php if ($this->accountDeletion): ?>
-      <a class="btn btn-default" href="<?=$this->url('myresearch-deleteaccount') ?>" data-lightbox>
-        <i class="fa fa-times"></i> <?=$this->transEsc('delete_account_title') ?>
-      </a>
-    <?php endif; ?>
+      <?php if ($this->auth()->getManager()->supportsPasswordChange()): ?>
+        <a class="btn btn-default" href="<?= $this->url('myresearch-changepassword') ?>">
+          <i class="fa fa-fw fa-lock" aria-hidden="true"></i> <?= $this->transEsc('Change Password') ?>
+        </a>
+      <?php endif; ?>
+      
+      <?php if ($this->accountDeletion): ?>
+        <a class="btn btn-default" href="<?= $this->url('myresearch-deleteaccount') ?>" data-lightbox>
+          <i class="fa fa-times"></i> <?= $this->transEsc('delete_account_title') ?>
+        </a>
+      <?php endif; ?>
   </div>
-
-  <?php if (is_array($this->profile)): ?>
-    <h2><?=$this->transEsc('Library Catalog Profile')?></h2>
-    <p>
-      <?=$this->context($this)->renderInContext('librarycards/selectcard.phtml', ['user' => $this->user]); ?>
-    </p>
-    <table class="table table-striped">
-      <?=$this->renderArray(
-        $arrTemplate, $this->profile,
-        [
-          $this->transEsc('First Name') => 'firstname',
-          $this->transEsc('Last Name') => 'lastname',
-          $this->transEsc('Address') . ' 1' => 'address1',
-          $this->transEsc('Address') . ' 2' => 'address2',
-          $this->transEsc('Zip') => 'zip',
-          $this->transEsc('City') => 'city',
-          $this->transEsc('Country') => 'country',
-          // finc: show e-mail here
-          $this->transEsc('Email') => 'email',
-          $this->transEsc('Phone Number') => 'phone',
-          $this->transEsc('Mobile Number') => 'mobile_phone',
-          $this->transEsc('Group') => 'group',
-          $this->transEsc('Expires') => 'expiration_date'
-        ]
-      )?>
-  </table>
-  <?php elseif ('ils-none' !== $this->ils()->getOfflineMode() && $this->patronLoginView && !empty($this->patronLoginView->getTemplate())): ?>
-    <?=$this->partial($this->patronLoginView);?>
-  <?php endif; ?>
+    
+    <?php if (is_array($this->profile)): ?>
+      <h2><?= $this->transEsc('Library Catalog Profile') ?></h2>
+      <p>
+          <?= $this->context($this)->renderInContext('librarycards/selectcard.phtml', ['user' => $this->user]); ?>
+      </p>
+        <?php /* Table works without further responsiveness code inserted - CK */ ?>
+      <table class="table table-striped">
+          <?= $this->renderArray(
+              $arrTemplate, $this->profile,
+              [
+                  $this->transEsc('First Name') => 'firstname',
+                  $this->transEsc('Last Name') => 'lastname',
+                  $this->transEsc('Address') . ' 1' => 'address1',
+                  $this->transEsc('Address') . ' 2' => 'address2',
+                  $this->transEsc('Zip') => 'zip',
+                  $this->transEsc('City') => 'city',
+                  $this->transEsc('Country') => 'country',
+                  // finc: show e-mail here
+                  $this->transEsc('Email') => 'email',
+                  $this->transEsc('Phone Number') => 'phone',
+                  $this->transEsc('Mobile Number') => 'mobile_phone',
+                  $this->transEsc('Group') => 'group',
+                  $this->transEsc('Expires') => 'expiration_date'
+              ]
+          ) ?>
+      </table>
+    <?php elseif ('ils-none' !== $this->ils()->getOfflineMode() && $this->patronLoginView && !empty($this->patronLoginView->getTemplate())): ?>
+        <?= $this->partial($this->patronLoginView); ?>
+    <?php endif; ?>
 </div>
 
-<div class="<?=$this->layoutClass('sidebar')?>">
-  <?=$this->context($this)->renderInContext("myresearch/menu.phtml", ['active' => 'profile'])?>
+<div class="<?= $this->layoutClass('sidebar') ?>">
+    <?= $this->context($this)->renderInContext("myresearch/menu.phtml", ['active' => 'profile']) ?>
 </div>
 <!-- finc: myresearch - profile - END -->
diff --git a/themes/finc/templates/search/history-table.phtml b/themes/finc/templates/search/history-table.phtml
new file mode 100644
index 00000000000..296017e4c56
--- /dev/null
+++ b/themes/finc/templates/search/history-table.phtml
@@ -0,0 +1,59 @@
+<!-- finc - templates - search - history-table -->
+<?php $saveSupported = $this->accountCapabilities()->getSavedSearchSetting() === 'enabled'; ?>
+<?php /* include responsive data table - CK */ ?>
+<table class="table table-striped table-resp-data-md">
+  <tr>
+    <th><?= $this->transEsc("history_time") ?></th>
+    <th><?= $this->transEsc("history_search") ?></th>
+    <th><?= $this->transEsc("history_limits") ?></th>
+    <th><?= $this->transEsc("history_results") ?></th>
+      <?php if ($saveSupported): ?>
+        <th><?= $this->transEsc($this->showSaved ? "history_delete" : "history_save") ?></th><?php endif; ?>
+  </tr>
+    <?php foreach (($this->showSaved ? array_reverse($this->saved) : array_reverse($this->unsaved)) as $iteration => $info): ?>
+      <tr class="<?= $iteration % 2 == 1 ? 'even' : 'odd' ?>row">
+        <td data-title="<?= $this->transEsc('history_time') ?>:"><?= $this->escapeHtml($this->dateTime()->convertToDisplayDateAndTime("U", $info->getStartTime())) ?></td>
+
+        <td data-title="<?= $this->transEsc('history_search') ?>:">
+            <?= $this->historylabel($info->getParams()->getSearchClassId()) ?>
+          <a href="<?= $this->url($info->getOptions()->getSearchAction()) . $info->getUrlQuery()->getParams() ?>"><?php
+                  $desc = $info->getParams()->getDisplayQuery();
+                  echo empty($desc) ? $this->transEsc("history_empty_search") : $this->escapeHtml($desc);
+              ?></a>
+        </td>
+
+        <td data-title="<?= $this->transEsc('history_limits') ?>:">
+            <?php $info->getParams()->activateAllFacets();
+                foreach ($info->getParams()->getFilterList(true) as $field => $filters): ?>
+                    <?php foreach ($filters as $i => $filter): ?>
+                        <?php if ($filter['operator'] == 'NOT') echo $this->transEsc('NOT') . ' ';
+                        if ($filter['operator'] == 'OR' && $i > 0) echo $this->transEsc('OR') . ' '; ?>
+                    <strong><?= $this->transEsc($field) ?></strong>: <?= $this->escapeHtml($filter['displayText']) ?><br/>
+                    <?php endforeach; ?>
+                <?php endforeach; ?>
+            <?php foreach ($info->getParams()->getCheckboxFacets() as $facet): ?>
+                <?php if ($facet['selected']): ?>
+                <strong><?= $this->transEsc($facet['desc']) ?></strong><br/>
+                <?php endif; ?>
+            <?php endforeach; ?>
+        </td>
+
+        <td data-title="<?= $this->transEsc('history_results') ?>:"><?= $this->escapeHtml($this->localizedNumber($info->getResultTotal())) ?></td>
+          <?php if ($saveSupported): ?>
+
+            <td data-title="<?= $this->transEsc($this->showSaved ? "history_delete" : "history_save") ?>">
+                <?php if ($this->showSaved): ?>
+                  <a href="<?= $this->url('myresearch-savesearch') ?>?delete=<?= urlencode($info->getSearchId()) ?>&amp;mode=history"><i class="fa fa-remove"
+                                                                                                                                         aria-hidden="true"></i> <?= $this->transEsc('history_delete_link') ?>
+                  </a>
+                <?php else: ?>
+                  <a href="<?= $this->url('myresearch-savesearch') ?>?save=<?= urlencode($info->getSearchId()) ?>&amp;mode=history"><i class="fa fa-save"
+                                                                                                                                       aria-hidden="true"></i> <?= $this->transEsc("history_save_link") ?>
+                  </a>
+                <?php endif; ?>
+            </td>
+          <?php endif; ?>
+      </tr>
+    <?php endforeach; ?>
+</table>
+<!-- finc - templates - search - history-table - END -->
diff --git a/themes/finc/templates/search/list-authorfacets.phtml b/themes/finc/templates/search/list-authorfacets.phtml
new file mode 100644
index 00000000000..22d89f7d594
--- /dev/null
+++ b/themes/finc/templates/search/list-authorfacets.phtml
@@ -0,0 +1,16 @@
+<!-- finc - templates - search - list-authorfacets -->
+<?php /* include responsive data table - CK */ ?>
+<table class="table table-striped table-resp-data">
+  <tbody>
+    <tr>
+      <th><?=$this->transEsc("Author")?></th><th><?=$this->transEsc("sort_author_relevance")?></th>
+    </tr>
+    <?php foreach ($this->results->getResults() as $record): ?>
+    <tr>
+      <td data-title="<?=$this->transEsc('Author')?>"><a href="<?=$this->url('author-home')?>?author=<?=urlencode($record['value'])?>"><?=$this->escapeHtml($record['value'])?></a></td>
+      <td data-title="<?= $this->transEsc('sort_author_relevance') ?>:"><?=$this->escapeHtml($record['count'])?></td>
+    </tr>
+    <?php endforeach; ?>
+  </tbody>
+</table>
+<!-- finc - templates - search - list-authorfacets - END -->
diff --git a/themes/finc/templates/search/reservessearch.phtml b/themes/finc/templates/search/reservessearch.phtml
new file mode 100644
index 00000000000..a106b10f969
--- /dev/null
+++ b/themes/finc/templates/search/reservessearch.phtml
@@ -0,0 +1,91 @@
+<!-- finc - templates - search - reservessearch -->
+<?php
+    // Set up page title:
+    $this->headTitle($this->translate('Reserves Search'));
+    
+    // Set up breadcrumbs:
+    $this->layout()->breadcrumbs = '<li class="active">' . $this->transEsc('Reserves') . '</li>';
+    
+    // Convenience variables:
+    $reservesLookfor = $this->params->getDisplayQuery();
+    
+    $this->searchClassId = 'SolrReserves';
+?>
+
+<div class="<?= $this->layoutClass('mainbody') ?>">
+  <h3><?= $this->transEsc('Search For Items on Reserve') ?></h3>
+  <form class="form-inline" method="get" name="reservesSearchForm">
+    <label for="reservesSearchForm_lookfor"><?= $this->transEsc("Your search terms") ?></label>
+    <input id="reservesSearchForm_lookfor" type="text" name="lookfor" size="40"
+           value="<?= $this->escapeHtmlAttr($reservesLookfor) ?>" <?= $this->searchOptions('SolrReserves')->autocompleteEnabled() ? ' class="autocomplete searcher:SolrReserves type:Reserves"' : '' ?> />
+    <input class="btn btn-primary" type="submit" name="submit" value="<?= $this->transEsc("Find") ?>"/>
+  </form>
+  <script type="text/javascript">$("#reservesSearchForm_lookfor").focus()</script>
+
+  <div class="resulthead">
+    <div class="pull-left flip">
+        <?php $qtime = $this->results->getQuerySpeed(); ?>
+        <?php if (($recordTotal = $this->results->getResultTotal()) > 0): ?>
+            <?php
+            $transParams = [
+                '%%start%%' => $this->localizedNumber($this->results->getStartRecord()),
+                '%%end%%' => $this->localizedNumber($this->results->getEndRecord()),
+                '%%total%%' => $this->localizedNumber($recordTotal),
+                '%%lookfor%%' => $this->escapeHtml($reservesLookfor)
+            ];
+            ?>
+            <?= $this->translate('showing_results_of_for_html', $transParams); ?><?php if ($qtime): ?>,<?php endif; ?>
+        <?php endif; ?>
+        <?php if ($qtime): ?>
+            <?= $this->transEsc('query time') ?>: <?= $this->localizedNumber($qtime, 2) . $this->transEsc('seconds_abbrev') ?>
+        <?php endif; ?>
+    </div>
+      
+      <?php if ($recordTotal > 0): ?>
+        <div class="pull-right flip">
+            <?= $this->render('search/controls/sort.phtml') ?>
+        </div>
+      <?php endif; ?>
+  </div>
+    <?php if ($recordTotal < 1): ?>
+      <p class="error"><?= $this->translate('nohit_lookfor_html', ['%%lookfor%%' => $this->escapeHtml($reservesLookfor)]) ?></p>
+        <?php if (isset($this->parseError)): ?>
+        <p class="error"><?= $this->transEsc('nohit_parse_error') ?></p>
+        <?php endif; ?>
+    <?php else: ?>
+        <?php /* include responsive data table - CK */ ?>
+      <table class="table table-striped table-resp-data">
+        <tr>
+          <th class="department"><?= $this->transEsc('Department') ?></th>
+          <th class="course"><?= $this->transEsc('Course') ?></th>
+          <th class="instructor"><?= $this->transEsc('Instructor') ?></th>
+          <th class="items"><?= $this->transEsc('Items') ?></th>
+        </tr>
+          <?php foreach ($this->results->getResults() as $record): ?>
+              <?php
+              $url = $this->currentPath() . $this->escapeHtmlAttr(
+                      '?inst=' . urlencode($record->getInstructorId())
+                      . '&course=' . urlencode($record->getCourseId())
+                      . '&dept=' . urlencode($record->getDepartmentId())
+                  );
+              ?>
+            <tr>
+              <td data-title="<?= $this->transEsc("Department") ?>:" class="department"><a href="<?= $url ?>"><?= $this->escapeHtml($record->getDepartment()) ?></a></td>
+              <td data-title="<?= $this->transEsc("Course") ?>:" class="course"><a href="<?= $url ?>"><?= $this->escapeHtml($record->getCourse()) ?></a></td>
+              <td data-title="<?= $this->transEsc("Instructor") ?>:" class="instructor"><a href="<?= $url ?>"><?= $this->escapeHtml($record->getInstructor()) ?></a></td>
+              <td data-title="<?= $this->transEsc("Items") ?>:" class="items"><?= $this->escapeHtml($record->getItemCount()) ?></td>
+            </tr>
+          <?php endforeach; ?>
+      </table>
+        <?= $this->paginationControl($this->results->getPaginator(), 'Sliding', 'search/pagination.phtml', ['results' => $this->results]) ?>
+    <?php endif; ?>
+</div>
+
+<?php /* Narrow Search Options */ ?>
+<div class="<?= $this->layoutClass('sidebar') ?>">
+    <?php foreach ($this->results->getRecommendations('side') as $current): ?>
+        <?= $this->recommend($current) ?>
+    <?php endforeach; ?>
+</div>
+<?php /* End Narrow Search Options */ ?>
+<!-- finc - templates - search - reservessearch - END -->
-- 
GitLab