LP1778972_OPAC_Redesign Numerous Updates Based on Feedback for usabilty and wider...
authorChris Burton <cburton@nflibrary.ca>
Tue, 8 Sep 2020 01:47:53 +0000 (21:47 -0400)
committerGalen Charlton <gmc@equinoxinitiative.org>
Thu, 10 Sep 2020 13:54:20 +0000 (09:54 -0400)
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
63 files changed:
Open-ILS/src/templates-bootstrap/opac/ReadMe.txt [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/advanced.tt2
Open-ILS/src/templates-bootstrap/opac/browse.tt2
Open-ILS/src/templates-bootstrap/opac/css/mediaQuery.css.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/css/style.css.tt2
Open-ILS/src/templates-bootstrap/opac/i18n_strings.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/mylist.tt2
Open-ILS/src/templates-bootstrap/opac/mylist/clear.tt2
Open-ILS/src/templates-bootstrap/opac/mylist/email.tt2
Open-ILS/src/templates-bootstrap/opac/mylist/print.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/charges.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/circ_history.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/circs.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/ebook_place_hold.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/hold_history.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/holds.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/holds/edit.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/list/update.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/lists.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/main.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/main_payments.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/messages/list.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/messages/single_message.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/prefs.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/prefs_my_lists.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/prefs_notify.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/prefs_settings.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/update_email.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/update_password.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/update_username.tt2
Open-ILS/src/templates-bootstrap/opac/parts/advanced/expert.tt2
Open-ILS/src/templates-bootstrap/opac/parts/advanced/global_row.tt2
Open-ILS/src/templates-bootstrap/opac/parts/advanced/numeric.tt2
Open-ILS/src/templates-bootstrap/opac/parts/advanced/search.tt2
Open-ILS/src/templates-bootstrap/opac/parts/anon_list.tt2
Open-ILS/src/templates-bootstrap/opac/parts/base.tt2
Open-ILS/src/templates-bootstrap/opac/parts/cart_nav.tt2
Open-ILS/src/templates-bootstrap/opac/parts/check_value_selector.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/parts/css/colors.tt2
Open-ILS/src/templates-bootstrap/opac/parts/footer.tt2
Open-ILS/src/templates-bootstrap/opac/parts/js.tt2
Open-ILS/src/templates-bootstrap/opac/parts/library/core_info.tt2
Open-ILS/src/templates-bootstrap/opac/parts/library/hours.tt2
Open-ILS/src/templates-bootstrap/opac/parts/locale_picker.tt2
Open-ILS/src/templates-bootstrap/opac/parts/login/form.tt2
Open-ILS/src/templates-bootstrap/opac/parts/login/login_modal.tt2
Open-ILS/src/templates-bootstrap/opac/parts/misc_util.tt2
Open-ILS/src/templates-bootstrap/opac/parts/myopac/base.tt2
Open-ILS/src/templates-bootstrap/opac/parts/place_hold.tt2
Open-ILS/src/templates-bootstrap/opac/parts/place_hold_result.tt2
Open-ILS/src/templates-bootstrap/opac/parts/qtype_selector.tt2
Open-ILS/src/templates-bootstrap/opac/parts/record/cnbrowse.tt2
Open-ILS/src/templates-bootstrap/opac/parts/record/extras.tt2
Open-ILS/src/templates-bootstrap/opac/parts/record/navigation.tt2
Open-ILS/src/templates-bootstrap/opac/parts/record/summary.tt2
Open-ILS/src/templates-bootstrap/opac/parts/result/lowhits.tt2
Open-ILS/src/templates-bootstrap/opac/parts/result/table.tt2
Open-ILS/src/templates-bootstrap/opac/parts/staff_saved_searches.tt2
Open-ILS/src/templates-bootstrap/opac/parts/topnav_links.tt2
Open-ILS/src/templates-bootstrap/opac/register.tt2
Open-ILS/src/templates-bootstrap/opac/results.tt2
Open-ILS/web/js/ui/default/opac/copyloc.js
Open-ILS/web/js/ui/default/opac/simple.js

diff --git a/Open-ILS/src/templates-bootstrap/opac/ReadMe.txt b/Open-ILS/src/templates-bootstrap/opac/ReadMe.txt
new file mode 100644 (file)
index 0000000..5fd954a
--- /dev/null
@@ -0,0 +1,20 @@
+/////////////////////DATEPICKER///////////////////////////////////////////
+ <div class="input-group date" data-provide="datepicker">
+    <input type="text" class="form-control" name="expire_time"  value="[% expire_time | html %]" data-date-format="mm/dd/yyyy">
+    <div class="input-group-addon">
+        <span class="glyphicon glyphicon-th"></span>
+    </div>
+</div>
+
+/////////////////////TOOLTIPS///////////////////////////////////////////
+<!--data-html allows use of HTML tags in the tooltip-->  
+ <a href="#" title="text to show on tooltip" data-html="true" data-toggle="tooltip">
+    <i class="fas fa-question-circle"></i>
+</a>
+<!--This is needed to activate the tooltips on the page and is activated Globally by default in js.tt2-->
+<script>
+jQuery(document).ready(function(){
+  jQuery('[data-toggle="tooltip"]').tooltip();
+});
+</script>
+
index 1ca21f6..30d27ab 100755 (executable)
     <span class="sr-only">[% l('Advanced Search') %]</span>
        <div class="container">    
         <div id="search-wrapper">    
-            [% IF pane == 'advanced' %]
-            <h1 class="h1 text-center pt-3">Advanced Search</h1>
-            <h2 class="text-center pt-3">Refine your search by filling out one or more fields to search by below.</h2>
-            [% ELSIF pane == 'numeric' %]
-            <h1 class="h1 text-center pt-3">Numeric Search</h1>
-            <h2 class="text-center pt-3">Search by a field and numeric identifier.</h2>
-            [% ELSIF pane == 'expert' %]
-            <h1 class="h1 text-center pt-3">Expert Search</h1>
-            <h2 class="text-center pt-3">Search the MARC record.</h2>
-            [% END %]
             <div class="mt-3">
                 <ul class="nav nav-tabs">
                 <li class="nav-item">
index 4ffbd16..dfc3ea9 100755 (executable)
@@ -50,7 +50,7 @@
                             arialabel=l('Select holding library') %]
                         [% l('Browse for [_1] starting with [_2] in [_3]', control_qtype, control_bterm, control_locg) %]
 
-                       <button id='search-submit-go' type="submit" class="btn btn-confirm my-2"/><i class="fas fa-book-reader"></i> [% l('Browse') %]</button>
+                       <button id='search-submit-go' type="submit" class="btn btn-confirm my-2"><i class="fas fa-book-reader"></i> [% l('Browse') %]</button>
                         <img id="browse-submit-spinner" 
                         src="[% ctx.media_prefix %]/opac/images/progressbar_green.gif[% ctx.cache_key %]"
                         class="hidden" style="width: 16px; height: 16px;" 
@@ -62,7 +62,7 @@
                 <div class="browse-pager text-center col-12">
                 <div class="mx-auto">
                     [% IF ctx.back_pivot %]
-                    <a class="btn btn-outline-primary btn-sm" href="[% mkurl('', {bpivot => ctx.back_pivot}) %]" onclick="$('browse-pager-spinner-[% id %]').className = '';">&larr; [%l ('Back') %]</a>
+                    <a class="btn btn-action btn-sm" href="[% mkurl('', {bpivot => ctx.back_pivot}) %]" onclick="$('browse-pager-spinner-[% id %]').className = '';">&larr; [%l ('Back') %]</a>
                     [% END %]
                     [% IF ctx.pager_shortcuts;
                         current_qtype = CGI.param('qtype') || 'title' %]
@@ -77,7 +77,7 @@
                         class="hidden" style="width: 16px; height: 16px;" 
                         alt="[% l('Search in progress icon') %]" />
                     [% IF ctx.forward_pivot %]
-                    <a class="btn btn-outline-primary btn-sm" href="[% mkurl('', {bpivot => ctx.forward_pivot}) %]" onclick="$('browse-pager-spinner-[% id %]').className = '';">[%l ('Next') %] &rarr;</a>
+                    <a class="btn btn-action btn-sm" href="[% mkurl('', {bpivot => ctx.forward_pivot}) %]" onclick="$('browse-pager-spinner-[% id %]').className = '';">[%l ('Next') %] &rarr;</a>
                     [% END %]
 
                    
diff --git a/Open-ILS/src/templates-bootstrap/opac/css/mediaQuery.css.tt2 b/Open-ILS/src/templates-bootstrap/opac/css/mediaQuery.css.tt2
new file mode 100644 (file)
index 0000000..e7fc909
--- /dev/null
@@ -0,0 +1,749 @@
+/*
+Mini Table Styling
+*/
+@media 
+only screen and (max-width: 650px)  {
+    .miniTable{
+        width: 100% !important;
+    }
+
+       /* Force table to not be like tables anymore */
+    .miniTable table, .miniTable thead, .miniTable tbody, .miniTable th, .miniTable td, .miniTable tr
+    { 
+               display: block; 
+    }
+    
+    .miniTable th{
+       display:none;
+    }
+       
+       /* Hide table headers (but not display: none;, for accessibility) */
+    .miniTable thead tr{ 
+               position: absolute;
+               top: -9999px;
+               left: -9999px;
+       }
+       
+    .miniTable tr
+     { 
+       border: 1px solid #ccc; 
+       margin: 10px 0px; 
+     }
+
+
+    .miniTable td
+    { 
+               border: none;
+               border-bottom: 1px solid #eee; 
+               position: relative;
+        padding-left: 50%; 
+        min-height:45px;
+        text-align: right;
+    }
+       
+    .miniTable td:before
+    { 
+               left: 6px;
+               width: 45%; 
+               padding-right: 10px; 
+               white-space: nowrap;
+        position: absolute;
+    }
+    .copyTable tr:nth-of-type(1):before { content: "Copy #1"; display: block; text-align:center; }
+       .copyTable tr:nth-of-type(2):before { content: "Copy #2"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(3):before { content: "Copy #3"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(4):before { content: "Copy #4"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(5):before { content: "Copy #5"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(6):before { content: "Copy #6"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(7):before { content: "Copy #7"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(8):before { content: "Copy #8"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(9):before { content: "Copy #9"; display: block; text-align:center;}
+       .copyTable tr:nth-of-type(10):before { content: "Copy #10"; display: block; text-align:center;}
+
+       .copyTable td:nth-of-type(1):before { content: "Library"; display: flex; }
+    .copyTable td:nth-of-type(2):before { content: "Call Number"; display: flex; }
+       .copyTable td:nth-of-type(3):before { content: "Barcode"; display: flex;}
+    .copyTable td:nth-of-type(4):before { content: "Shelving Location"; display: flex;}
+    .copyTable td:nth-of-type(5):before { content: "Status"; display: flex;}
+    .copyTable td:nth-of-type(6):before { content: "Due Date"; display: flex;}
+   
+    .holdingsTable tr:nth-of-type(1):before { content: "Copy #1"; display: block; text-align:center; }
+       .holdingsTable tr:nth-of-type(2):before { content: "Copy #2"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(3):before { content: "Copy #3"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(4):before { content: "Copy #4"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(5):before { content: "Copy #5"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(6):before { content: "Copy #6"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(7):before { content: "Copy #7"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(8):before { content: "Copy #8"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(9):before { content: "Copy #9"; display: block; text-align:center;}
+       .holdingsTable tr:nth-of-type(10):before { content: "Copy #10"; display: block; text-align:center;}
+
+
+    .holdingsTable td:nth-of-type(1):before { content: "Library"; display: flex; }
+    .holdingsTable td:nth-of-type(2):before { content: "Shelving location"; display: flex; }
+       .holdingsTable td:nth-of-type(3):before { content: "Call number"; display: flex;}
+    .holdingsTable td:nth-of-type(4):before { content: "Status"; display: flex;}
+
+       .chargesTable td:nth-of-type(1):before { content: "Select"; display: flex; }
+    .chargesTable td:nth-of-type(2):before { content: "Owed"; display: flex; }
+       .chargesTable td:nth-of-type(3):before { content: "Billing Type"; display: flex;}
+    .chargesTable td:nth-of-type(4):before { content: "Note"; display: flex;}
+    .chargesTable td:nth-of-type(5):before { content: "Date"; display: flex;}
+    
+    .chargesMainTable td:nth-of-type(1):before { content: "Select"; display: flex; }
+    .chargesMainTable td:nth-of-type(2):before { content: "Owed"; display: flex; }
+       .chargesMainTable td:nth-of-type(3):before { content: "Billing Type"; display: flex;}
+    .chargesMainTable td:nth-of-type(4):before { content: "Title"; display: flex;}
+    .chargesMainTable td:nth-of-type(5):before { content: "Checkout"; display: flex;}
+    .chargesMainTable td:nth-of-type(6):before { content: "Due"; display: flex;}
+    .chargesMainTable td:nth-of-type(7):before { content: "Returned/Renewed"; display: flex;}
+    
+    .activeHoldstable td:nth-of-type(1):before { content: "Select"; display: flex; }
+    .activeHoldstable td:nth-of-type(2):before { content: "Title"; display: flex; }
+       .activeHoldstable td:nth-of-type(3):before { content: "Author"; display: flex;}
+    .activeHoldstable td:nth-of-type(4):before { content: "Format"; display: flex;}
+    .activeHoldstable td:nth-of-type(5):before { content: "Pickup Location"; display: flex;}
+    .activeHoldstable td:nth-of-type(6):before { content: "Cancel If Not Filled By"; display: flex;}
+    .activeHoldstable td:nth-of-type(7):before { content: "Status"; display: flex;}
+    .activeHoldstable td:nth-of-type(8):before { content: "Notes"; display: flex;}
+    
+    .holdHistoryTable td:nth-of-type(1):before { content: "Title"; display: flex; }
+    .holdHistoryTable td:nth-of-type(2):before { content: "Author"; display: flex; }
+    .holdHistoryTable td:nth-of-type(3):before { content: "Format"; display: flex; }
+    .holdHistoryTable td:nth-of-type(4):before { content: "Pickup Location"; display: flex; }
+    .holdHistoryTable td:nth-of-type(5):before { content: "Status"; display: flex; }
+    
+    .paymentTable td:nth-of-type(1):before { content: "Payment Date"; display: flex; }
+    .paymentTable td:nth-of-type(2):before { content: "Payment For"; display: flex; }
+    .paymentTable td:nth-of-type(3):before { content: "Amount"; display: flex; }
+    .paymentTable td:nth-of-type(4):before { content: "Receipt"; display: flex; }
+    
+    .messagesTable td:nth-of-type(1):before { content: "Select"; display: flex; }
+    .messagesTable td:nth-of-type(2):before { content: "Date"; display: flex; }
+    .messagesTable td:nth-of-type(3):before { content: "Library"; display: flex; }
+    .messagesTable td:nth-of-type(4):before { content: "Subject"; display: flex; }
+    .messagesTable td:nth-of-type(5):before { content: ""; display: flex; }
+    
+    .circTable td:nth-of-type(1):before { content: "Select"; display: flex; }
+    .circTable td:nth-of-type(2):before { content: "Title"; display: flex; }
+    .circTable td:nth-of-type(3):before { content: "Author"; display: flex; }
+    .circTable td:nth-of-type(4):before { content: "Renewals Left"; display: flex; }
+    .circTable td:nth-of-type(5):before { content: "Due Date"; display: flex; }
+    .circTable td:nth-of-type(6):before { content: "Barcode"; display: flex; }
+    .circTable td:nth-of-type(7):before { content: "Call Number"; display: flex; }
+    
+    .circHistTable td:nth-of-type(1):before { content: "Select"; display: flex; }
+    .circHistTable td:nth-of-type(2):before { content: "Title"; display: flex; }
+    .circHistTable td:nth-of-type(3):before { content: "Author"; display: flex; }
+    .circHistTable td:nth-of-type(4):before { content: "Checkout Date"; display: flex; }
+    .circHistTable td:nth-of-type(5):before { content: "Due Date"; display: flex; }
+    .circHistTable td:nth-of-type(6):before { content: "Date Returned"; display: flex; }
+    .circHistTable td:nth-of-type(7):before { content: "Barcode"; display: flex; }
+    .circHistTable td:nth-of-type(8):before { content: "Call Number"; display: flex; }
+    
+    .bookbagTable td:nth-of-type(1):before { content: ""; display: flex; }
+    .bookbagTable td:nth-of-type(2):before { content: "Title"; display: flex; }
+    .bookbagTable td:nth-of-type(3):before { content: "Author(s)"; display: flex; }
+    .bookbagTable td:nth-of-type(4):before { content: "Local Call number"; display: flex; }
+    .bookbagTable td:nth-of-type(5):before { content: "Publication Date"; display: flex; }
+    .bookbagTable td:nth-of-type(6):before { content: "Format"; display: flex; }
+    .bookbagTable td:nth-of-type(7):before { content: "Notes"; display: flex; }
+    
+    .eholdsTable td:nth-of-type(1):before { content: "Title"; display: flex; }
+    .eholdsTable td:nth-of-type(2):before { content: "Author"; display: flex; }
+    .eholdsTable td:nth-of-type(3):before { content: "Expire Date"; display: flex; }
+    .eholdsTable td:nth-of-type(4):before { content: "Status"; display: flex; }
+    .eholdsTable td:nth-of-type(5):before { content: "Actions"; display: flex; }
+    
+    .eholdsreadyTable td:nth-of-type(1):before { content: "Title"; display: flex; }
+    .eholdsreadyTable td:nth-of-type(2):before { content: "Author"; display: flex; }
+    .eholdsreadyTable td:nth-of-type(3):before { content: "Expire Date"; display: flex; }
+    .eholdsreadyTable td:nth-of-type(4):before { content: "Actions"; display: flex; }
+    
+    .echeckoutTable td:nth-of-type(1):before { content: "Title"; display: flex; }
+    .echeckoutTable td:nth-of-type(2):before { content: "Author"; display: flex; }
+    .echeckoutTable td:nth-of-type(3):before { content: "Due Date"; display: flex; }
+    .echeckoutTable td:nth-of-type(4):before { content: "Actions"; display: flex; }
+    
+    .ecircsTable td:nth-of-type(1):before { content: "Title"; display: flex; }
+    .ecircsTable td:nth-of-type(2):before { content: "Author"; display: flex; }
+    .ecircsTable td:nth-of-type(3):before { content: "Due Date"; display: flex; }
+    .ecircsTable td:nth-of-type(4):before { content: "Actions"; display: flex; }
+
+    .bucketTable td:nth-of-type(2):before { content: "Title"; display: flex; text-align:left; }
+    .bucketTable td:nth-of-type(3):before { content: "Author"; display: flex; text-align:left; }
+    .bucketTable td:nth-of-type(4):before { content: "Call Number"; display: flex; text-align:left; }
+    
+    /*Media Style Additions*/
+    .fullRow{
+        padding: 5px !important;
+       text-align: center !important;
+       width: 100%;
+    }
+    
+    .paginateText{
+       display:none;
+       }
+
+    .modal-dialog {
+    max-width: 600px !important;
+    }
+
+}/*Micro Tables End*/
+
+@media only screen and (max-width: 600px) {
+    input, select {
+        font-size: [% css_fonts.size_big %];
+    }
+    span .nav_arrow_fix {
+        display: none;
+    }
+    #header {
+        padding: 0px;
+        margin: 0px;
+    }
+    #homesearch_main_logo img {
+        width:75%;
+    }
+    #format_selector {
+        display:none;
+    }
+    #your-acct-login {
+        padding: 0px;
+        padding-top: 5px;
+    }
+    #your-acct-login a {
+        margin: 0px;
+        padding: 5px;
+    }
+    #topnav_logo {
+        margin: 0;
+    }
+    #topnav_logo img {
+        width: 200px;
+    }
+    #gold-links-holder {
+        display: none;
+    }
+    #simple-detail-view-links {
+        display: none;
+    }
+    #acct_tabs a, #acct_fines_tabs a {
+       [% IF rtl == 't' -%]
+       border-radius: 6px 0px 0px 6px;
+       margin: 0px 0px 0px 5px;
+       [% ELSE -%]
+       border-radius: 6px 6px 0px 0px;
+       margin: 0px 5px 0px 0px;
+       [% END -%]
+       padding: 2px 4px 3px 4px;
+       font-size: [% css_fonts.size_base %];
+    }
+    .bookbag-controls-title-block {
+        [% IF rtl == 't' -%]
+        clear:right;
+        [% ELSE -%]
+        clear:left;
+        [% END -%]
+        width:90%;
+    }
+    .bookbag-controls-button-block {
+        [% IF rtl == 't' -%]
+        clear:right;
+        [% ELSE -%]
+        clear:left;
+        [% END -%]
+        width;90%;
+    }
+    .bookbag-specific {
+        [% IF rtl == 't' -%]
+        margin-right: 0px;
+        [% ELSE -%]
+        margin-left: 0px;
+        [% END -%]
+    }
+    .bookbag-specific div.sort {
+        [% IF rtl == 't' -%]
+        float: right;
+        text-align: right;
+        [% ELSE -%]
+        float: left;
+        text-align: left;
+        [% END -%]
+        width: 95%;
+        margin: 5px 0px 5px 0px;
+        border: 1px solid [% css_colors.accent_light %];
+        padding:5px;
+    }
+    .bookbag-specific div.meta {
+        [% IF rtl == 't' -%]
+        float: right;
+        margin-right:0px;
+        text-align: right;
+        [% ELSE -%]
+        float: left;
+        margin-left:0px;
+        text-align: left;
+        [% END -%]
+        width: 95%;
+        margin-bottom:5px;
+        padding:5px;
+    }
+    #bbag-edit-name {
+        [% IF rtl == 't' -%]
+        float: right;
+        [% ELSE -%]
+        float: left;
+        [% END -%]
+        width: 220px;
+    }
+    #bbag-edit-description {
+        width: 220px;
+        margin-top:5px;
+    }
+    .bbag-content {
+        padding:5px;
+        border:1px solid [% css_colors.accent_light %];
+    }
+    .bbag-action {
+        [% IF rtl == 't' -%]
+        margin-right:0px;
+        [% ELSE -%]
+        margin-left:0px;
+        [% END -%]
+        margin-bottom:5px;
+    }
+    .bbag-action-field {
+        width:230px;
+    }
+    .bookbag-specific div.sort select {
+        width:180px;
+    }
+    .bookbag-specific tr {
+        display: block;
+        border-bottom: 1px solid [% css_colors.border_standard %];
+    }
+    .bookbag-specific td.list_checkbox {
+        [% IF rtl == 't' -%]
+        padding-right: 0px !important;
+        [% ELSE -%]
+        padding-left: 0px !important;
+        [% END -%]
+    }
+    .bookbag-specific td.list_entry {
+        display: inline-block;
+        min-width: 5em;
+        [% IF rtl == 't' -%]
+        padding-right: 40% !important;
+        [% ELSE -%]
+        padding-left: 40% !important;
+        [% END -%]
+    }
+    .bookbag-specific td.list_entry:before {
+        content: attr(data-label);
+        position: absolute;
+        [% IF rtl == 't' -%]
+        right: 10px;
+        [% ELSE -%]
+        left: 10px;
+        [% END -%]
+    }
+    .bbag-navigate-list {
+        display: none;
+    }
+    .bbag-navigate-list-pages {
+        [% IF rtl == 't' -%]
+        text-align:left;
+        float:left;
+        [% ELSE -%]
+        text-align:right;
+        float:right;
+        [% END -%]
+    }
+    #dash_wrapper div {
+        background-color: transparent;
+        padding: 0px;
+    }
+    #dash_wrapper {
+        position: static;
+        top: auto;
+    }
+    #dash_wrapper .opac-button {
+        top: 0px;
+    }
+    .small_view_only, #filter_hits {
+        display: inline !important;
+    }
+    #dash_identity a {
+        [% IF rtl == 't' -%]
+        float:right;
+        [% ELSE -%]
+        float:left;
+        [% END -%]
+    }
+   
+    #holds_box form blockquote {
+        [% IF rtl == 't' -%]
+        margin-right: 10px;
+        margin-left: 2px;
+        [% ELSE -%]
+        margin-left: 10px;
+        margin-right: 2px;
+        [% END -%]
+    }
+    #holds_box form blockquote select {
+        width: 100%;
+    }
+    #myopac_sum_fines_placehold {
+        display:none;
+    }
+    #myopac_sum_fines {
+        display: none;
+    }
+    #list_description, #list_create_name {
+        width: 170px;
+    }
+    .results_header_lbl {
+        display: none;
+    }
+    .results_header_nav1 span.h1 {
+        display: none;
+    }
+    .preflib {
+        display: none;
+    }
+    .start_end_links_span {
+        display: block;
+    }
+    .invisible {
+        display: none;
+    }
+    .result_table_pic_header {
+        [% IF rtl == 't' -%]
+        padding-right: 0px !important;
+        padding-left: 5px;
+        [% ELSE -%]
+        padding-left: 0px !important;
+        padding-right: 5px;
+        [% END -%]
+        width: 0px !important;
+        margin: 0px;
+    }
+    .result_table_pic {
+        width: 55px;
+        padding: 0px;
+        margin: 0px;
+    }
+    tr[name=results_isbn_tr], tr[name=results_phys_desc_tr], tr[name=results_pub_tr] strong, .result_count {
+         display: none;
+    }
+    tr.result_table_title_cell[name=bib_cn_list] .result_holdings_table th:nth-child(4),
+    tr.result_table_title_cell[name=bib_cn_list] .result_holdings_table td:nth-child(4) {
+        display:none;
+    }
+    #results_header_bar {
+        background-color: inherit;
+    }
+    .results_header_btns a {
+        margin: 0.3em;
+    }
+    .adv_filter_results_hide {
+        display: none;
+    }
+    .adv_filter_results_show {
+        display: block;
+    }
+    .adv_filter_results_block_label {
+        display: block;
+    }
+    .adv_filter_results_group_wrapper {
+        display: block;
+    }
+    #main-content {
+        margin: 0 1px;        
+    }
+    #rdetails_status thead {
+        display: none;
+    }
+    #rdetails_status tr {
+       display: block;
+       margin-top: 3px;
+    }
+    #rdetails_status td {
+       display: block;
+       padding: 1px;
+    }
+    .copy_details_row {
+       background-color: [% css_colors.accent_lightest %];
+    }
+    .copy_details_offers_row {
+       background-color: [% css_colors.accent_lightest %];
+    }
+    select#pickup_lib.search-wrapper-locg {
+        width: 100%;
+    }
+    #search-wrapper #search-box {
+        width: 85%;
+        padding-top: 5px;
+    }
+    #main-content-home {
+        padding: 0px;
+        margin: 0px;
+    }
+    /* Make use of full width in mobile mode */
+    .facet_box_wrapper .box_wrapper .box,
+    .facet_template .facet,
+    .facet_box_temp {
+        width: inherit;
+    }
+    .facet_template .count {
+        [% IF rtl == 't' -%]
+        padding-right: 1em;
+        [% ELSE -%]
+        padding-left: 1em;
+        [% END -%]
+    }
+    #facet_sidebar {
+        margin-top: 0.5em;
+    }
+    #adv_search_parent {
+        font-size: [% css_fonts.size_smaller %];
+    }
+    #adv_search_filters {                                                                                                                             
+        position: relative;                                                                                                                           
+        width: 300px;
+    }
+    #format_actions {
+        [% IF rtl == 't' -%]
+        float: right;
+        [% ELSE -%]
+        float: left;
+        [% END -%]
+    }
+    .rdetail_aux_utils {
+        padding: 0px;
+        border: none;
+    }
+    .result_metadata {
+        width: inherit;
+    }
+    div#rdetail_actions_div {
+        float: none;
+    }
+    h2.rdetail_uris {
+        clear: both;
+    }
+    #metarecord_population {
+        overflow: hidden;
+        width: 100%;
+    }
+    .metarecord_population_span_link {
+    }
+    .metarecord_population_item_lang {
+        float: none;
+    }
+    .search_catalog_lbl {
+        [% IF rtl == 't' -%]
+       margin-right: 0;
+        [% ELSE -%]
+       margin-left: 0;
+        [% END -%]
+       white-space: nowrap;
+    }
+    .adv_search_catalog_lbl { 
+        margin-top: 0;
+       white-space: nowrap;
+    }
+    .browse_the_catalog_lbl {
+        white-space: nowrap;
+    }
+    .mobile_hide {
+       display: none;
+    } 
+    #dash_user {
+        display: block;
+        padding: 0.5em;    
+        font-size: 18px;
+        text-align: center;
+    }
+    .dash_divider {
+       display: none;
+    }
+    .dash_account_buttons {
+        display: block;
+    } 
+    .searchbar { line-height: 1.5em; }
+    #browse-controls { line-height: 1.5em; }
+    #search_query_label, #search_qtype_label, #search_itype_label, #search_locg_label {
+        display: block;
+    }
+    .bookshelf td {
+       display: block;
+       width: 100%;
+    }
+    .bookshelf table thead tr {
+       display: block;
+    }
+    #lowhits_help { width: inherit; }
+    #adv_search_tabs a{                                                                                                                           
+        font-size: [% css_fonts.size_small %];
+        margin: 2px 2px 0px 2px;
+        padding: 2px 2px 5px 2px; 
+        [% IF rtl == 't' -%]
+        border-radius: 7px 0px 0px 7px;
+        [% ELSE -%]
+        border-radius: 7px 7px 0px 0px;
+        [% END -%]
+    }
+    #adv_global_tbody td {
+        border-bottom: thin solid [% css_colors.accent_light %];
+    }
+    #adv_global_addrow td {
+        border-bottom: none;
+    }
+        /* Force table to not be like tables anymore */
+        table#acct_checked_main_header thead tr th, table#acct_holds_main_header thead tr th, table#acct_checked_hist_header thead tr th, table#acct_holds_hist_header thead tr th, table#ebook_circs_main_table thead tr th, table#ebook_holds_main_table thead tr th {
+                display: none;
+        }
+        table#acct_checked_main_header tbody tr td, table#acct_holds_main_header tbody tr td, table#acct_checked_hist_header tbody tr td, table#acct_holds_hist_header tbody tr td, table#ebook_circs_main_table tbody tr td, table#ebook_holds_main_table tbody tr td {
+                display: block;
+        }
+
+        /* Hide table headers (but not display: none;, for accessibility) */
+       /* thead tr {
+                position: absolute;
+                top: -9999px;
+                [% IF rtl == 't' -%]
+                right: -9999px;
+                [% ELSE -%]
+                left: -9999px;
+                [% END -%]
+        }*/
+
+        table#acct_checked_main_header, table#acct_holds_main_header, table#acct_checked_hist_header, table#acct_holds_hist_header, table#ebook_circs_main_table, table#ebook_holds_main_table {
+                width: 90%;
+        }
+
+        table#acct_checked_main_header tr, table#acct_holds_main_header tr, table#acct_checked_hist_header tr { border: 1px solid #ddd; }
+
+        /* Holds history gets large white border to mimic header cell on other
+           account screens that provide visual cue for next title. We should do
+           the same for ebook tables too since we have no actions on those
+           tables. If actions get added, we should move those tables out of
+           here. */
+
+        table#ebook_circs_main_table tr, table#ebook_holds_main_table tr { border-top: 25px solid #fff; }
+               table#acct_holds_hist_header tr{ border-top: 2px solid #bbb; }
+
+        table#acct_checked_main_header td, table#acct_holds_main_header td, table#acct_checked_hist_header td, table#acct_holds_hist_header td, table#ebook_circs_main_table td, table#ebook_holds_main_table td {
+                /* Behave  like a "row" */
+                border: none;
+                border-bottom: 1px solid #eee;
+                position: relative;
+                [% IF rtl == 't' -%]
+                padding-right: 40%;
+                [% ELSE -%]
+                padding-left: 40%;
+                [% END -%]
+        }
+
+         table#acct_checked_main_header td:before, table#acct_holds_main_header td:before, table#acct_checked_hist_header td:before, table#acct_holds_hist_header td:before, table#ebook_circs_main_table td:before, table#ebook_holds_main_table td:before {
+                /* Now like a table header */
+                position: absolute;
+                /* Top/left values mimic padding */
+                top: 2px;
+                width: 40%;
+                [% IF rtl == 't' -%]
+                right: 2px;
+                padding-left: 10px;
+                [% ELSE -%]
+                left: 2px;
+                padding-right: 10px;
+                [% END -%]
+                white-space: nowrap;
+        }
+
+        table#acct_checked_main_header td:nth-of-type(1) { border-top: 5px solid #aaa; padding-top: 15px; background-color: #fff;}
+        table#acct_checked_main_header td:nth-of-type(2):before { content: "[% l('Title') %]";}
+        table#acct_checked_main_header td:nth-of-type(3):before { content: "[% l('Author') %]"; }
+        table#acct_checked_main_header td:nth-of-type(4):before { content: "[% l('Renewals Left') %]"; }
+        table#acct_checked_main_header td:nth-of-type(5):before { content: "[% l('Due Date') %]"; }
+        table#acct_checked_main_header td:nth-of-type(6):before { content: "[% l('Barcode') %]"; }
+        table#acct_checked_main_header td:nth-of-type(7):before { content: "[% l('Call number') %]"; }
+
+     table#acct_checked_hist_header td:nth-of-type(1) { border-top: 5px solid #aaa; padding-top: 15px; background-color: #fff;}
+        table#acct_checked_hist_header td:nth-of-type(2):before { content: "[% l('Title') %]";}
+        table#acct_checked_hist_header td:nth-of-type(3):before { content: "[% l('Author') %]"; }
+        table#acct_checked_hist_header td:nth-of-type(4):before { content: "[% l('Checkout Date') %]"; }
+        table#acct_checked_hist_header td:nth-of-type(5):before { content: "[% l('Due Date') %]"; }
+        table#acct_checked_hist_header td:nth-of-type(6):before { content: "[% l('Date Returned') %]"; }
+        table#acct_checked_hist_header td:nth-of-type(7):before { content: "[% l('Barcode') %]"; }
+        table#acct_checked_hist_header td:nth-of-type(8):before { content: "[% l('Call number') %]"; }
+
+        table#acct_holds_main_header td:nth-of-type(1) { border-top: 5px solid #aaa; padding-top: 15px; background-color: #fff;}
+        table#acct_holds_main_header td:nth-of-type(2):before { content: "[% l('Title') %]";}
+        table#acct_holds_main_header td:nth-of-type(3):before { content: "[% l('Author') %]"; }
+        table#acct_holds_main_header td:nth-of-type(4):before { content: "[% l('Format') %]"; }
+        table#acct_holds_main_header td:nth-of-type(5):before { content: "[% l('Pickup Location') %]"; }
+        table#acct_holds_main_header td:nth-of-type(6):before { content: "[% l('Cancel on') %]"; }
+        table#acct_holds_main_header td:nth-of-type(7):before { content: "[% l('Status') %]"; }
+        table#acct_holds_main_header td.hold_notes:before { content: "[% l('Notes') %]"; }
+
+        table#acct_holds_hist_header td:nth-of-type(1):before { content: "[% l('Title') %]";}
+        table#acct_holds_hist_header td:nth-of-type(2):before { content: "[% l('Author') %]"; }
+        table#acct_holds_hist_header td:nth-of-type(3):before { content: "[% l('Format') %]"; }
+        table#acct_holds_hist_header td:nth-of-type(4):before { content: "[% l('Pickup Location') %]"; }
+        table#acct_holds_hist_header td:nth-of-type(8):before { content: "[% l('Status') %]"; }
+
+        table#ebook_circs_main_table td:nth-of-type(1):before { content: "[% l('Title') %]"; }
+        table#ebook_circs_main_table td:nth-of-type(2):before { content: "[% l('Author') %]"; }
+        table#ebook_circs_main_table td:nth-of-type(3):before { content: "[% l('Due Date') %]"; }
+        table#ebook_circs_main_table td:nth-of-type(4):before { content: "[% l('Actions') %]"; }
+
+        table#ebook_holds_main_table td:nth-of-type(1):before { content: "[% l('Title') %]"; }
+        table#ebook_holds_main_table td:nth-of-type(2):before { content: "[% l('Author') %]"; }
+        table#ebook_holds_main_table td:nth-of-type(3):before { content: "[% l('Due Date') %]"; }
+        table#ebook_holds_main_table td:nth-of-type(4):before { content: "[% l('Actions') %]"; }
+
+
+
+       /*Want to see these in mobile ONLY */
+       .mobile_view{
+          display:block;
+       }
+
+       .mobile_search_lbl_clr{
+          color:[% css_colors.mobile_header_text %];
+       }
+}
+
+@media only screen and (min-width: 992px) {
+       .nav-fr{
+       float: right;
+    }
+    .nav-fl{
+       float: left;
+    }
+    #nav-divide{
+       display:none !important;
+    }
+}
+@media only screen and (max-width: 800px) {
+    .facet_sidebar_hidden, .result_block_hidden {
+        display: none;
+    }
+    .facet_sidebar_visible, .result_block_visible {
+        display: inline ! important;
+    }
+    #acct_select, #acct_prefs_select {
+        display: inline-block;
+    }
+    #acct_tabs, #acct_prefs_tabs {
+         display:none;
+     }
+    .radio-parts-selection { width: 90%; }
+    #list_description, #list_create_name {
+        width: 300px;
+    }
+}
index cf21aa6..4dd519b 100755 (executable)
@@ -4,6 +4,23 @@
     rtl = ctx.get_i18n_l(ctx.eg_locale).rtl;
 %]
 
+.adv_filters{
+    
+    -moz-column-count: 4;
+    -moz-column-gap: 20px;
+    -webkit-column-count: 4;
+    -webkit-column-gap: 20px;
+    column-count: 4;
+    column-gap: 20px;
+    list-style: none;
+}
+.fas, .far{
+    margin: 5px 0px;
+}
+.top-divide{
+        border-top: 1px solid rgba(0,0,0,.1);
+}
+
 /*
 Mini Table Styling
 */
@@ -192,6 +209,13 @@ only screen and (max-width: 650px)  {
        }
 }/*Micro Tables End*/
 
+ .my_nav .active{background-color:#afffbf;}.my_nav a{text-align:left !important; min-width:17em;border-radius: 0px;}.sumNum{
+    font-weight:700;
+}
+
+.coverImage{position: relative;}
+.carousel .glide__arrow{background: unset;}
+
 /*
 Novelist Styling
 */
@@ -312,10 +336,25 @@ Novelist Styling
                background-color:#e8e8e8;
 }
 
-.red{
-       color:red;
+.danger, .validate{
+       color: [% css_colors.text_alert %] !important;
+}
+
+.danger{
+    font-weight: 600;
+    font-style: italic;
 }
 
+.success{
+    color: green !important;
+}
+.dropdown-menu{
+    border: 1px solid black;
+    box-shadow: 2px 2px #00000054;
+}
+.dropdown-item.active, .dropdown-item:active{
+    color : #000 !important;
+}
 .login:focus{
        outline:none;
 }
@@ -417,18 +456,12 @@ a {
     height:18px;
 }
 */
-h1 {
-    margin:0;
-    margin-bottom: 5px;
-    font-size: [% css_fonts.size_biggest %];
-    font-weight:normal;
-}
 
-h2 {
-    font-size: [% css_fonts.size_bigger %];
-    font-weight:bold;
+#adv_numeric_block{
+    max-width: 600px;
 }
 
+
 h2.graphic880 {
     font-size: [% css_fonts.size_bigger %];
     font-weight:normal;
@@ -472,15 +505,7 @@ div.select-box-wrapper {
     display:inline-block;
 }
 
-#dashboard, #dashboard_e {
-    margin-top: 1em;
-    height: 2em;
-}
 
-#dashboard span.dash-align a, #dashboard_e span.dash-align a {
-    font-weight: bold;
-    text-decoration: none;
-}
 
 #dash_user {
     font-weight: bold;
@@ -751,14 +776,6 @@ for now until a better color is picked - if needed.
     margin-top: 5px;
 }
 
-#adv_search_submit {
-    [% IF rtl == 't' -%]
-    margin-right: 10px;
-    [%- ELSE %]
-    margin-left: 10px;
-    [%- END %]
-    position: relative;
-}
 
 .checkbox_col {
     width: 1%;
@@ -2005,9 +2022,30 @@ div#facet_sidebar {
 
 .facet_template .count {
     text-align: right;
-    color: [% css_colors.accent_mediumdark %];
+    color: [% css_colors.accent_dark %];
 }
 
+.page-item.active .page-link {
+    background-color: #00593d;
+    border-color: #00593d;
+}
+.page-link
+{
+    color: #00593d;
+}
+
+.filter-header{
+     background-color: [% css_colors.bg_filter %];
+     color: [% css_colors.text_filter %];
+}
+
+.filter-header:hover{
+     background-color: [% css_colors.bg_filter_hover %];
+}
+
+.extra_header{
+     background-color: [% css_colors.bg_extras %];
+}
 .facet_template_selected {
     background-color: [% css_colors.accent_lighter2 %];
     border: 1px solid [% css_colors.accent_medium %];
@@ -2178,7 +2216,6 @@ a.dash-link:hover { text-decoration: underline !important; }
     padding-left: 2em;
     [% END -%]
 }
-.expert-search-row { padding-top: 10px; }
 #adv_expert_row label { font-weight: bold; }
 
 .bookshelf tr.browse_border td {
@@ -3189,9 +3226,7 @@ a.preflib_change {
         float:left;
         [% END -%]
     }
-    #dashboard, #dashboard_e {
-        display: none;
-    }
+   
     #holds_box form blockquote {
         [% IF rtl == 't' -%]
         margin-right: 10px;
@@ -3754,10 +3789,10 @@ label[for*=expert_]
     display: inline-block;
 }
 .carousel .glide__arrow--right {
-    right: -5em;
+    right: -8em;
 }
 .carousel .glide__arrow--left {
-    left: -5em;
+    left: -8em;
 }
 
 .search-filter{
@@ -3815,3 +3850,10 @@ label[for*=expert_]
     transform: translateY(-50%);
 }
 
+.sumNum{
+    margin-right:5px;
+}
+
+.my_nav .dropdown-toggle::after{
+    margin: 5px 0px !important;
+}
\ No newline at end of file
diff --git a/Open-ILS/src/templates-bootstrap/opac/i18n_strings.tt2 b/Open-ILS/src/templates-bootstrap/opac/i18n_strings.tt2
new file mode 100644 (file)
index 0000000..1617e29
--- /dev/null
@@ -0,0 +1,23 @@
+<!--
+This file allows us to bring TT2 i18n'ized strings
+to js source files, via js blob.
+-->
+<script>
+    // Add a boost-style format function to JavaScript string.
+    // Implementation stolen from StackOverflow:
+    // https://stackoverflow.com/questions/610406/javascript-equivalent-to-printf-string-format
+    String.prototype.format = function() {
+        var args = arguments;
+        return this.replace(/{(\d+)}/g, function(match, number) {
+        return typeof args[number] != 'undefined'
+            ? args[number]
+            : match;
+        });
+    };
+
+    var eg_opac_i18n = {};
+
+    eg_opac_i18n.EG_MISSING_REQUIRED_INPUT = "[% l('Please fill out all required fields') %]";
+    // For multiple holds placement confirmation dialog. {0} is replaced by number of copies requested.
+    eg_opac_i18n.EG_MULTIHOLD_MESSAGE = "[% l('Do you really want to place {0} holds for this title?') %]";
+</script>
index 7cdb4a3..a03c7cb 100755 (executable)
@@ -18,4 +18,5 @@
                 [% END %]
         </div>
     </div>
+    
 [%- END %]
index 259ae2b..793581c 100755 (executable)
@@ -5,15 +5,15 @@
     ctx.page_title = l("Confirm Clearing of Basket") %]
     
     [% INCLUDE "opac/parts/searchbar.tt2" %]
-    <div class="container">
-    <hr>
-        <h3>[% l('Confirm Clearing of Basket') %]</h3>
-             <p class="big-strong">[% l('Please confirm that you want to remove all [_1] titles from the basket.', ctx.mylist.size) %]
-             <form method="post" action="[% mkurl(ctx.opac_root _ '/cache/clear', {}, 1) %]">
-             <input type="hidden" name="redirect_to" value="[% ctx.referer %]" />
-             <button id="print_cart_submit" type="submit" 
-               value="[% l('Confirm') %]"  class="btn btn-confirm"><i class="fas fa-check"></i> [% l('Confirm') %]</button>
-             <button type="reset" onclick="window.location='[% ctx.referer | html %]'" id="clear_basket_cancel" class="btn btn-deny"><i class="far fa-times-circle"></i> [% l('Cancel') %]</button>
-             </form>
-        </div>
+<div class="container">
+  <hr>
+  <h3>[% l('Confirm Clearing of Basket') %]</h3>
+  <p class="big-strong">[% l('Please confirm that you want to remove all [_1] titles from the basket.', ctx.mylist.size) %]
+    <form method="post" action="[% mkurl(ctx.opac_root _ '/cache/clear', {}, 1) %]">
+      <input type="hidden" name="redirect_to" value="[% ctx.referer %]" />
+      <button id="print_cart_submit" type="submit" 
+        value="[% l('Confirm') %]"  class="btn btn-confirm"><i class="fas fa-check"></i> [% l('Confirm') %]</button>
+      <button type="reset" onclick="window.location='[% ctx.referer | html %]'" id="clear_basket_cancel" class="btn btn-deny"><i class="far fa-times-circle"></i> [% l('Cancel') %]</button>
+    </form>
+</div>
 [%- END %]
index a0eeb27..ab47de1 100755 (executable)
@@ -4,28 +4,27 @@
     INCLUDE "opac/parts/topnav.tt2";
     ctx.page_title = l("Confirm Basket Email") %]
    
-    [% INCLUDE "opac/parts/searchbar.tt2" %]
-    <div class="container">
-    <hr>
-          [% IF ctx.mylist.size %]
-           <h3>[% l('Confirm Basket Email') %]</h3>
-             <p class="big-strong">[% l('Please confirm that you want to email the [_1] titles in the basket.', ctx.mylist.size) %]
-             <form method="post" action="[% mkurl(ctx.opac_root _ '/mylist/doemail', {}, 1) %]">
-             <input type="hidden" name="redirect_to" value="[% ctx.referer %]" />
-               <div class="form-check m-2">
-                <input class="form-check-input" type="checkbox" value="" id="clear_cart">
-                <label class="form-check-label" for="clear_cart">
-                   [% l('Clear entire basket after email is sent.') %]
-                </label>
-            </div>
-             <br />
-             <button id="print_cart_submit" type="submit" 
-               value="[% l('Confirm') %]" class="btn btn-confirm"><i class="fas fa-envelope-open-text"></i> [% l('Email') %]</button>
-             <button type="reset" onclick="window.location='[% ctx.referer | html %]'"  id="clear_basket_cancel" class="btn btn-deny"><i class="far fa-times-circle"></i> [% l('Cancel') %]</button>
-             </form>
-          [% ELSE %]
-            <div class="warning_box">[% l("The basket is empty."); %]</div>
-            <button type="button" class="btn btn-confirm" onclick="window.location='[% ctx.referer | html %]'"><i class="fas fa-undo-alt"></i> [% l('Return') %]</button>
-          [% END %]
+[% INCLUDE "opac/parts/searchbar.tt2" %]
+<div class="container top-divide">
+  [% IF ctx.mylist.size %]
+  <h3>[% l('Confirm Basket Email') %]</h3>
+  <p class="big-strong">[% l('Please confirm that you want to email the [_1] titles in the basket.', ctx.mylist.size) %]
+    <form method="post" action="[% mkurl(ctx.opac_root _ '/mylist/doemail', {}, 1) %]">
+      <input type="hidden" name="redirect_to" value="[% ctx.referer %]" />
+        <div class="form-check m-2">
+          <input class="form-check-input" type="checkbox" value="" id="clear_cart" />
+          <label class="form-check-label" for="clear_cart">
+              [% l('Clear entire basket after email is sent.') %]
+          </label>
         </div>
+        <br />
+        <button id="print_cart_submit" type="submit" 
+          value="[% l('Confirm') %]" class="btn btn-confirm"><i class="fas fa-envelope-open-text"></i> [% l('Email') %]</button>
+        <button type="reset" onclick="window.location='[% ctx.referer | html %]'"  id="clear_basket_cancel" class="btn btn-deny"><i class="far fa-times-circle"></i> [% l('Cancel') %]</button>
+    </form>
+  [% ELSE %]
+    <div class="warning_box">[% l("The basket is empty."); %]</div>
+    <button type="button" class="btn btn-confirm" onclick="window.location='[% ctx.referer | html %]'"><i class="fas fa-undo-alt"></i> [% l('Return') %]</button>
+  [% END %]
+</div>
 [%- END %]
index 84b1106..0958dff 100755 (executable)
@@ -5,28 +5,25 @@
     ctx.page_title = l("Confirm Basket Printing") %]
     [% INCLUDE "opac/parts/searchbar.tt2" %]
    
-    <div class="container">
-    
-          [% IF ctx.mylist.size %]
-           <h3>[% l('Confirm Basket Printing') %]</h3>
-             <p class="big-strong">[% l('Please confirm that you want to print the [_1] titles in the basket.', ctx.mylist.size) %]
-             <form method="post" action="[% mkurl(ctx.opac_root _ '/mylist/doprint', {}, 1) %]">
-             <input type="hidden" name="redirect_to" value="[% ctx.referer %]" />
-              <div class="form-check m-2">
-                <input class="form-check-input" type="checkbox" value="" id="clear_cart">
-                <label class="form-check-label" for="clear_cart">
-                   [% l('Clear entire basket after printing.') %]
-                </label>
-            </div>
-             <br />
-             <button id="print_cart_submit" type="submit"              
-               class="btn btn-confirm"><i class="fas fa-print"></i> [% l("Print") %]</button>
-             <button type="reset" name="cancel" onclick="window.location='[% ctx.referer | html %]'"  id="clear_basket_cancel" class="btn btn-deny"><i class="far fa-times-circle"></i> [% l('Cancel') %]</button>
-             </form>
-          [% ELSE %]
-            <div class="warning_box"><h3>[% l("The basket is empty."); %]</h3></div>
-            <button type="button" class="btn btn-confirm" onclick="window.location='[% ctx.referer | html %]'"><i class="fas fa-undo-alt"></i> [% l('Return') %]</button>
-          [% END %]
-         
-    </div>
+<div class="container">
+  [% IF ctx.mylist.size %]
+  <h3>[% l('Confirm Basket Printing') %]</h3>
+  <p class="big-strong">[% l('Please confirm that you want to print the [_1] titles in the basket.', ctx.mylist.size) %]
+    <form method="post" action="[% mkurl(ctx.opac_root _ '/mylist/doprint', {}, 1) %]">
+      <input type="hidden" name="redirect_to" value="[% ctx.referer %]" />
+      <div class="form-check m-2">
+        <input class="form-check-input" type="checkbox" value="" id="clear_cart">
+        <label class="form-check-label" for="clear_cart">
+            [% l('Clear entire basket after printing.') %]
+        </label>
+      </div>
+      <br />
+      <button id="print_cart_submit" type="submit" class="btn btn-confirm"><i class="fas fa-print"></i> [% l("Print") %]</button>
+      <button type="reset" name="cancel" onclick="window.location='[% ctx.referer | html %]'"  id="clear_basket_cancel" class="btn btn-deny"><i class="far fa-times-circle"></i> [% l('Cancel') %]</button>
+    </form>
+  [% ELSE %]
+    <div class="warning_box"><h3>[% l("The basket is empty."); %]</h3></div>
+    <button type="button" class="btn btn-confirm" onclick="window.location='[% ctx.referer | html %]'"><i class="fas fa-undo-alt"></i> [% l('Return') %]</button>
+  [% END %]
+</div>
 [%- END %]
index b2b3751..52b3b5a 100755 (executable)
@@ -1,6 +1,6 @@
 [%  PROCESS "opac/parts/header.tt2";\r
     PROCESS "opac/parts/misc_util.tt2";\r
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";\r
+    WRAPPER "opac/parts/myopac/base.tt2";\r
     myopac_page = "charges";\r
     myopac_main_page = "main";\r
     parent = "charges";\r
@@ -15,7 +15,6 @@
 \r
     [% IF ctx.fines.circulation.size > 0 %]\r
     <div id='myopac_circ_trans_div'>\r
-      <!--moved tables heading to outside of the table itself - took internal styling -->\r
         <div class="header_middle">\r
            <span class="acct_fines_header">\r
            <!-- Different heading when not able to pay -->\r
@@ -27,6 +26,8 @@
            </span>\r
            \r
         </div>\r
+\r
+     \r
     \r
         <table id="acct_fines_main_header" class="table table-hover table-responsive table-bordered miniTable chargesMainTable" title="[% l('Items Checked Out') %]">\r
             <thead>\r
@@ -34,7 +35,7 @@
                 <tr>\r
 \r
                    [% IF myopac_cc_allowed %]\r
-                    <th nowrap="nowrap" style="white-space:nowrap;">\r
+                    <th style="white-space:nowrap;">\r
                         <input id="pay_fines_box1" checked="checked"\r
                             type="checkbox" onclick="select_all_checkboxes('xact', this.checked)"\r
                             title="[% l('Click to (un)select all charges') %]" />\r
                             <!-- XXX TODO fines aren't really accruing\r
                                 if circ has hit maxfines. more clarity\r
                                 here? --> \r
-                            <span class="alert">[% l('(fines accruing)') %]</span>\r
+                            <span class="danger">[% l('(fines accruing)') %]</span>\r
                         [%  END %]\r
                     </td>\r
                    \r
         <h3>\r
                 [% l("Charges On Your Account") %]\r
         </h3>\r
-        \r
+\r
+        [% IF myopac_cc_allowed %]\r
+        <div class="d-block d-md-none">\r
+            <input id="pay_fines_check" checked="checked"\r
+            type="checkbox" onclick="select_all_checkboxes('xact_misc', this.checked)"\r
+            aria-label="[% l('Check/Uncheck All') %]" />    \r
+            <label for="pay_fines_check">[% l('Check/Uncheck All') %]</label>  \r
+        </div>             \r
+        [% END %]\r
         \r
          <table id="acct_fees_main_header" class="table table-hover table-bordered miniTable chargesTable my-3" title="[% l('Other Fines and Fees') %]">\r
             <thead>\r
                 <tr>\r
                 \r
                      [% IF myopac_cc_allowed %]\r
-                    <th  nowrap="nowrap" style="white-space:nowrap;">\r
+                    <td style="white-space:nowrap;">\r
                         <input id="pay_fines_box2" checked="checked"\r
                             type="checkbox" onclick="select_all_checkboxes('xact_misc', this.checked)"\r
-                            title="[% l('Click to (un)select all fines') %]" />\r
-                    </th>\r
+                            aria-label="[% l('Check/Uncheck All') %]" />\r
+                    </td>\r
                     [% END %]\r
                     <th >[% l("Owed") %]</th>\r
                     <th >[% l("Billing Type") %]</th>\r
                 [% c = c + 1; %]\r
                     [% IF myopac_cc_allowed %]\r
                     <td class="checkCell">\r
-                        <span class="sr-only">Billing Number [% c %]</span>\r
-                        <input class="fineCheck" type="checkbox" title='[% l("Pay this fine") %]' name="xact_misc" value="[% f.xact.id %]" checked="checked" />\r
+                        <label class="sr-only">Billing Number [% c %]</label>\r
+                        <input aria-label="Pay This Bill" class="fineCheck" type="checkbox" name="xact_misc" value="[% f.xact.id %]" checked="checked" />\r
                     </td>\r
                     [% END %]\r
                     \r
-                    <td class="red">\r
+                    <td class="danger">\r
                         <span class="sr-only">Amount Owed</span>\r
                         <strong>\r
                             [% money(f.xact.balance_owed) %]\r
                         </strong>\r
-                         <input class="fineAmount" value="[% f.xact.balance_owed %]" hidden />\r
+                         <input type="hidden" aria-label="Amount Owing" class="fineAmount" value="[% f.xact.balance_owed %]" hidden />\r
                     </td>\r
                     \r
                     <td>\r
 [% IF myopac_cc_allowed %]\r
 </form>\r
 [% END %]\r
-<script>\r
-jQuery("input[type=checkbox]").click(function () {\r
+<script >\r
+$( document ).ready(function() {\r
+   $("input[type=checkbox]").click(function () {\r
        var amount = 0;\r
-    jQuery("td input:checked").each(function () {\r
+    $("td input:checked").each(function () {\r
                var item = jQuery( this ).parent().parent().children("td").children(".fineAmount").attr("value");\r
         item = parseFloat(item);\r
         amount += item;\r
     });\r
-    jQuery("#total").val(amount);\r
-    jQuery("#selectPay").html('<i class="fas fa-money-bill-wave"></i> Pay Selected Charges - $' + amount.toFixed(2));\r
+    $("#total").val(amount);\r
+    $("#selectPay").html('<i class="fas fa-money-bill-wave"></i> Pay Selected Charges - $' + amount.toFixed(2));\r
+});\r
 });\r
+\r
 </script>\r
 [% END %]\r
 \r
index c9b664b..d685903 100755 (executable)
@@ -32,7 +32,7 @@
         <div class="row">
         <div class="col-3 text-left">[% IF offset != 0 %]<a href='[% mkurl('circ_history', {limit => limit, offset => (offset - limit)}) %]'
                  class="btn btn-action mr-3" ><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>[% END %]
-                 <button name="action" class="btn btn-danger my-2" value="delete" id="delete" value="delete" type="submit" onclick="return confirm('[% l("Are you sure you wish to delete the selected item(s)?") %]');">
+                 <button name="action" class="btn btn-danger my-2" id="delete" value="delete" type="submit" onclick="return confirm('[% l("Are you sure you wish to delete the selected item(s)?") %]');">
             <i class="fas fa-trash-alt"></i> Delete Selected</button>
             </div>
         <div class="col-6 text-center"></div>
                class="btn btn-action" >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>[% END %] </div>
     </div>
     <div id='checked_main'>
+     <div class="d-block d-md-none">
+          
+
+            <input id="check_all_circ_hist" checked="checked" type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'circ_id' && !inputs[i].disabled) inputs[i].checked = this.checked;}"/>
+
+            <label for="check_all_circ_hist">[% l('Check/Uncheck All') %]</label>  
+        </div>       
         <table title="[% l('History of Items Checked Out') %]" id="acct_checked_hist_header" class="table table-hover table-bordered miniTable circHistTable my-3">
             <thead>
                 <tr>
                     <th class="checkCell">
-                        <input type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'circ_id' && !inputs[i].disabled) inputs[i].checked = this.checked;}"/>
+                        <input type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'circ_id' && !inputs[i].disabled) inputs[i].checked = this.checked;}" aria-label="[% l('Click to (un)select all items') %]"/>
                     </th>
                     <th>[% sort_head("sort_title", l("Title")) %]</th>
                     <th>[% sort_head("author", l("Author")) %]</th>
index 5c97d7b..4a9e189 100755 (executable)
         <form method="post" id="circ-form"
             onsubmit="return confirm('[% l("Are you sure you wish to renew the selected item(s)?") %]');">
          <div class="my-3">
-                <button name="action" class="btn btn-primary" value="renew" id="renew" value="renew" type="submit"><i class="fas fa-redo-alt"></i> Renew Selected</button>
+                <button name="action" class="btn btn-confirm" id="renew" value="renew" type="submit"><i class="fas fa-redo-alt"></i> Renew Selected</button>
         </div>
+        <div class="d-block d-md-none">
+            <input id="check_all_checked" aria-label="[% l('Select All Items') %]" checked="checked" type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'circ' &amp;&amp; !inputs[i].disabled) inputs[i].checked = this.checked;}"/>
 
+            <label for="check_all_checked">[% l('Check/Uncheck All') %]</label>  
+        </div>       
         <table  id="acct_checked_main_header"  title="[% l('Items Checked Out') %]"
             class="table table-hover table-bordered miniTable circTable">
             <thead>
             <tr>
-                <th class="checkbox_column">
+                <td class="checkbox_column">
                     <input type="checkbox" id="check_all_checked"
-                        title="[% l('Select All Items') %]"
+                        aria-label="[% l('Select All Items') %]" 
                         onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'circ' &amp;&amp; !inputs[i].disabled) inputs[i].checked = this.checked;}"
                     />
-                </th>
+                </td>
                 <th>[% sort_head("sort_title", l("Title")) %]</th>
                 <th>[% sort_head("author", l("Author")) %]</th>
                 <th>[% sort_head("renews", l("Renewals Left")) %]</th>
                     <tr>
                         <td class="checkCell">
                             <input type="checkbox" name="circ"
-                                title="[% l('Item Selected') %]"
+                                aria-label="[% l('Select Item') %]"
                                 [% IF circ.circ.renewal_remaining < 1 %] disabled="disabled" [% END %]
                                 value="[% circ.circ.id %]" />
                         </td>
index cefea21..2de2d41 100755 (executable)
@@ -5,12 +5,9 @@
     WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "ebook_place_hold";
 %]
-<h3 class="sr-only">[% l('Place Hold on E-Item') %]</h3>
-<div id='myopac_holds_div'>
 
-    <div class="header_middle">
-        <span class="float-left">[% l('Place Hold on E-Item') %]</span>
-    </div>
+<div id='myopac_holds_div'>
+    <h3>[% l('Place Hold on E-Item') %]</h3>
     <div class="clear-both"></div>
     <div id="ebook_place_hold_failed" class="warning_box hidden">[% l('Hold could not be placed.') %]</div>
     <div id="ebook_place_hold_succeeded" class="success hidden">[% l('E-item is now on hold.') %]</div>
index 379fffb..a75427a 100755 (executable)
   
 <div>
     <div>
-        <span>
-            [% IF offset != 0 %]<a href='[% mkurl('hold_history', {limit => limit,offset => (offset - limit)}) %]'><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>[% END %]
+        <ul class='start_end_links_span pagination d-inline-flex'>    
+            [% IF offset != 0 %]        
+            
+             <li class="page-item"> <a class='np_nav_link classic_link btn btn-action' title='[% l("Previous Page") %]'
+            href='[% mkurl('hold_history', {limit => limit,offset => (offset - limit)}) %]'><span class="nav_arrow_fix">&#9668;</span> <span class="d-none d-md-inline-block">[% l('Previous') %]</span></a></li>
+           [% END; %]
             [% IF offset > 0 || count > limit;
                 curpage = 0;
                 WHILE curpage * limit < count;
                     IF curpage * limit == offset;
             %]
-            [% curpage + 1 %]
+                        <li class="page-item active"><a href="[% mkurl('hold_history', {limit => limit, offset => (curpage * limit)}) %]"  class="results-paginator-selected btn page-link disabled">[% curpage + 1%]</a></li>
+
+            
                     [%- ELSE %]
-            <a href='[% mkurl('hold_history', {limit => limit, offset => (curpage * limit)}) %]'>[% curpage + 1 %]</a>
+            <li class="page-item"><a href="[% mkurl('hold_history', {limit => limit, offset => (curpage * limit)}) %]" class="btn page-link">[% curpage + 1%]</a></li>
+
                     [%- END;
                     curpage = curpage + 1;
                 END;
             END %]
             [% IF count >= limit + offset %]
-            <a href='[% mkurl('hold_history', {limit => limit, offset => (offset + limit)}) %]'
-                >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a> [% END %]
-        </span>
+            <li class="page-item"><a class='np_nav_link classic_link btn btn-action' title='[% l("Next Page") %]'
+            href='[% mkurl('hold_history', {limit => limit, offset => (offset + limit)}) %]'><span class="d-none d-md-inline-block">[% l('Next') %]</span> <span class="nav_arrow_fix">&#9658;</span></a></li>
+        
+[% END; %]
+</ul>
         <span style="float:right;">
             <a class="hide_me" href="#">[% l('Export List') %]</a>
         </span>
index 43feb0d..8d7cd5c 100755 (executable)
     <form method="post">
           <div class="row">
             <div class="col-4 text-left">
-                 [% IF offset != 0 %]<a href='[% mkurl('holds', {limit => limit,offset => (offset - limit)}) %]'
-              ><span class="np_nav_link classic_link btn btn-outline-primary">&#9668;[% l('Previous') %]</span></a> [% END %]
+                
                     <div>
-            <button name="action" class="btn btn-action my-2" value="suspend" id="suspend" value="suspend" type="submit"><i class="fas fa-hand-paper"></i> [% l("Suspend") %]</button>
-            <button name="action" class="btn btn-success my-2" value="activate" id="activate" value="activate" type="submit"><i class="fas fa-play"></i> [% l("Activate") %] </button>
-            <button name="action" class="btn btn-danger my-2" value="cancel" id="cancel" value="cancel" type="submit" onclick="return confirm('[% l("Are you sure you wish to cancel the selected hold(s)?") %]');"><i class="fas fa-ban"></i> [% l("Cancel") %]</button>
+            <button name="action" class="btn btn-action my-2" id="suspend" value="suspend" type="submit"><i class="fas fa-hand-paper"></i> [% l("Suspend") %]</button>
+            <button name="action" class="btn btn-success my-2" id="activate" value="activate" type="submit"><i class="fas fa-play"></i> [% l("Activate") %] </button>
+            <button name="action" class="btn btn-danger my-2" id="cancel" value="cancel" type="submit" onclick="return confirm('[% l("Are you sure you wish to cancel the selected hold(s)?") %]');"><i class="fas fa-ban"></i> [% l("Cancel") %]</button>
                  <p class="my-2">
                     [% IF CGI.param("available") -%]
                     <a href="[% mkurl('holds', {}, ['limit','offset','available']) %]">[% l('Show all holds') %]</a> |
                 
           </div>       
             </div>
-            <div class="col-6 text-center">
+            <div class="col-8">
+             [% IF offset != 0 %]<a href='[% mkurl('holds', {limit => limit,offset => (offset - limit)}) %]'
+              ><span class="np_nav_link classic_link btn btn-action">&#9668;[% l('Previous') %]</span></a> [% END %]
+
              [% IF offset > 0 || count > limit; curpage = 0; WHILE curpage * limit < count; IF curpage * limit == offset; %]
-                        [% curpage + 1 %]
+                  <span class="np_nav_link classic_link btn btn-action disabled">[% curpage + 1 %]</span>
+
                     [%- ELSE %]
-                <a href='[% mkurl('holds', {limit => limit, offset => (curpage * limit)}) %]' class="np_nav_link classic_link btn btn-outline-primary">[% curpage + 1 %]</a>
+                <a href='[% mkurl('holds', {limit => limit, offset => (curpage * limit)}) %]' class="np_nav_link classic_link btn btn-action">[% curpage + 1 %]</a>
                     [%- END; curpage = curpage + 1; END; END %]
                 <span style="padding-left:5px;" class='error'>
                     [%  IF ctx.hold_suspend_post_capture; l('One or more holds could not be suspended because the item is at (or en route to) the pickup library.'); END; %]
                 </span>
             
               
+                [% IF count > limit + offset %]<a href='[% mkurl('holds', {limit => limit, offset => (offset + limit)}) %]'
+                  ><span class="np_nav_link classic_link btn btn-action">[% l('Next') %]&#9658;</span></a>[% END %]
+           
               
             </div>
 
-            <div class="col-2 text-right"> 
-                [% IF count > limit + offset %]<a href='[% mkurl('holds', {limit => limit, offset => (offset + limit)}) %]'
-                  ><span class="np_nav_link classic_link btn btn-outline-primary">[% l('Next') %]&#9658;</span></a>[% END %]
-            </div>
+            
           </div>
             
         [% IF ctx.holds.size && ctx.holds.size < 1 %]
         <div class="warning_box">[% l('No holds found.') %]</div>
         [% ELSE %]
+        <div class="d-block d-md-none">
+            <input id="check_all_holds" aria-label="[% l('Select All Items') %]" checked="checked" type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'hold_id' &amp;&amp; !inputs[i].disabled) inputs[i].checked = this.checked;}"/>
+
+            <label for="check_all_holds">[% l('Check/Uncheck All') %]</label>  
+        </div> 
         <table title="[% l('Items on Hold') %]"
         class="table table-hover table-bordered miniTable activeHoldstable w-100 my-3">
             <thead>
index 6fa97c9..a3fd196 100755 (executable)
         <h3>[% l('Edit Hold') %]</h3>
         <a href="[% ctx.opac_root %]/myopac/holds" class="float-right"><i class="fas fa-list"></i> [% l('List all holds') %]</a>
     </div>
+    <form method="post">
     <div id="hold_editor" class="mt-4">
-        [%  IF hold;
-                title = attrs.title;
+        [%  IF hold; title = attrs.title;
                 IF ahr.hold_type == 'P';
                     title = l('[_1] ([_2])', title, hold.hold.part.label);
                 END 
-        %]<div class="my-4">
+        %]
+        <div class="my-4">
             <h1>[% title | html %]</h1>
             <h2>[% attrs.author | html %]</h2>
-            [% IF attrs.format_icon %]<p>
-             <strong>[% l('Format:') %]</strong>
+            [% IF attrs.format_icon %]
+                <strong>[% l('Format:') %]</strong>
                 <img src="[% attrs.format_icon %]" alt="[% attrs.format_label | html %]" title="[% attrs.format_label | html %]" />
-            </p>[% END %]</div>
-                <p>
-                <strong>[% l('Status') %]</strong>: [% hold.human_status %]
-                </p>
-            <form method="post">
-                <table id="hold_editor_table" >
-                    <tr>
-                        <th>
-                            <input type="hidden" name="action" value="edit" />
+            [% END %]
+        </div>
+
+        <div class="row">
+            <div class="col-12">
+            <strong>[% l('Status') %]</strong>: [% hold.human_status %]
+            </div>
+            <div class="col-12">
+             <input type="hidden" name="action" value="edit" />
                             <input type="hidden" name="hold_id"
                                 value="[% ahr.id %]" />
                             [% l('Pickup library') %]
-                        </th>
-                        <td>
+                       
                             [% INCLUDE build_org_selector
                                 name='pickup_lib' value=ahr.pickup_lib 
                                 can_have_vols_only=1 hold_pickup_lib=1 %]
-                        </td>
-                    </tr>
-                    [% IF hold.hold.status < 3 OR hold.hold.status == 7 %]
+            </div>
+            <div class="col-12">
+            [% IF hold.hold.status < 3 OR hold.hold.status == 7 %]
                     [%# The following actions cannot be performed on holds that 
                         have already been captured... %]
-                    <tr>
-                        <th>
+                  
                             [% l('Cancel unless filled by') %]
-                        </th>
-                        <td>
+                      
                             <div class="input-group date" data-provide="datepicker">
                                 <input type="text" class="form-control" name="expire_time"  value="[% expire_time | html %]" data-date-format="mm/dd/yyyy">
                                 <div class="input-group-addon">
                                 </div>
                             </div>
                            
-                        </td>
-                    </tr>
-                    <tr>
-                        <th>
+                       
                             [% l('Active?') %]
-                        </th>
-                        <td>
+                       
                             <select class="form-control" name="frozen">
                                 <option value="f"[% ahr.frozen == 't' ? '' :' selected="selected"' %]>
                                     [% l('Yes, this hold is active now') %]
                                     [% l('No, this hold is suspended') %]
                                 </option>
                             </select>
-                        </td>
-                    </tr>
-                    <tr>
-                        <th>
+                        
                             [% l('If suspended, activate on') %]
-                        </th>
-                        <td>
+                       
                          <div class="input-group date" data-provide="datepicker">
                                 <input type="text" class="form-control" name="thaw_date" id="datepicker" value="[% thaw_date | html %]" data-date-format="mm/dd/yyyy">
                                 <div class="input-group-addon">
                                 </div>
                             </div>
                            
-                        </td>
-                    </tr>
+                       
                     [% END %]
                       
-                    <tr><td colspan='4'>
+            </div>
+            <div class="col-12">
+               
                     [% IF hold.metarecord_filters.formats.size OR
                         (hold.metarecord_filters.langs.size.defined && hold.metarecord_filters.langs.size > 1);
                             PROCESS metarecord_hold_filters_selector 
                                 hold_data=hold; END %]
-                    </td></tr>
-                    <tr>
-                        <td colspan="2">
-                            <a href="[% ctx.opac_root %]/myopac/holds" class="btn btn-deny"><i class="fas fa-arrow-circle-left"></i> [% l('Go Back') %]</a>
-                            <button class="btn btn-confirm m-2" type='submit'/><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
-                        </td>
-                    </tr>
-                </table>
+            </div>
+             <div class="col-12">
+                <a href="[% ctx.opac_root %]/myopac/holds" class="btn btn-deny"><i class="fas fa-arrow-circle-left"></i> [% l('Go Back') %]</a>
+                            <button class="btn btn-confirm m-2" type='submit'><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
+             </div>
+        </div>
             </form>
         [% ELSE;
             l('Hold not found');
index 2275df6..f12dade 100755 (executable)
@@ -8,37 +8,30 @@
 
 [% IF ctx.bucket_action_failed %]
 <div id='bookbag_udpate_failures'>
-
-  <div>
-    <strong>[% l("Problem with list management:") %]</strong>
-  </div>
-
-  <div>
-    <ul>
-    [% IF ctx.bucket_action == 'create' %]
-      [% IF ctx.bucket_failure_noname %]         
-        <li>[% l('A list name is required') %]</li>
-      [% END %]   
-    [% END %]   
-    </ul>
-  </div>
-
-  <div>
-    [% url = ctx.referer;
-      # The return link should return the user to the page where the edit
-      # failure occurred.
-      # mkurl() does not support 'page' params w/ existing CGI params.
-      # build the URL manually.
-      IF ctx.where_from;
-        from = ctx.where_from | uri;
-        IF url.match('\?');
-          url = url _ ';where_from=' _ from;
-        ELSE;
-          url = url _ '?where_from=' _ from;
-        END;
-      END; %]
-    <a href="[% url %]">[% l('Return') %]</a>
-  </div>
+    <h3>[% l("Problem with list management:") %]</h3>
+      <div>
+        [% IF ctx.bucket_action == 'create' %]
+          [% IF ctx.bucket_failure_noname %]         
+            <h4 class="text-danger">[% l('A list name is required') %]</h4>
+          [% END %]   
+        [% END %]   
+      </div>
+      <div>
+        [% url = ctx.referer;
+          # The return link should return the user to the page where the edit
+          # failure occurred.
+          # mkurl() does not support 'page' params w/ existing CGI params.
+          # build the URL manually.
+          IF ctx.where_from;
+            from = ctx.where_from | uri;
+            IF url.match('\?');
+              url = url _ ';where_from=' _ from;
+            ELSE;
+              url = url _ '?where_from=' _ from;
+            END;
+          END; %]
+        <a class="btn btn-success" href="[% url %]"><i class="fas fa-undo"></i> [% l('Return') %]</a>
+      </div>
 </div>
 [% END %]
 [% END %]
index e445964..4cb8228 100755 (executable)
@@ -82,7 +82,7 @@
         </table>
     </form>
 
-      [% IF CGI.param('from_basket'); %]
+      [% IF CGI.param('from_basket');  %]
     <h1>[% l("... from basket") %]</h1>
     [% INCLUDE "opac/parts/anon_list.tt2" %]
     [% ELSE %]
                     [% IF ctx.where_from %]
                     <input type="hidden" name="where_from" value="[% ctx.where_from %]" />
                     [% END %]
-                    <button class="fixed btn btn-success btn-sm m-1" type="submit" /><i class="far fa-plus-square"></i> [% l('Add to this list') %]</button>
+                    <button class="fixed btn btn-success btn-sm m-1" type="submit" ><i class="far fa-plus-square"></i> [% l('Add to this list') %]</button>
                 </div>
             </form>
             [% END %]
         <div>
         [% IF bbag.items.size %]
             <div class="my-2">
-                <select name="action"  class="form-control float-left w-75">
-                    <option disabled="disabled" selected="selected">[% l('-- Actions for these items --') %]</option>
-                    <option value="place_hold">[% l('Place hold') %]</option>
-                     <option value="print">[% l('Print title details') %]</option>
-                    <option value="email">[% l('Email title details') %]</option>
-                    <option value="del_item">[% l('Remove from list') %]</option>
-                </select>
-                [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
-                <input class="btn btn-confirm btn-sm m-1" type="submit" value="[% l('Go') %]" />
-                 [% IF CGI.param('list_none_selected') %]
-                    <span class="error">[% l('No items were selected') %]</span>
-                [% END %]
+                <button name="action" class="btn btn-action" type="submit" value="place_hold" id="place_hold">[% l('Place hold') %]</button>
+                <button name="action" class="btn btn-action" type="submit" value="print">[% l('Print title details') %]</button>
+                <button name="action" class="btn btn-action" type="submit" value="email">[% l('Email title details') %]</button>
+                <button name="action" class="btn btn-action" type="submit" value="del_item">[% l('Remove from list') %]</button>
             </div>
         [% END %]
     
         <div>
+         <div class="d-block d-md-none">
+          
+
+            <input id="check_all_list_items" checked="checked" type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); 
+                        for (i = 0; i < inputs.length; i++) { 
+                            if (inputs[i].name == 'selected_item' &amp;&amp; !inputs[i].disabled &amp;&amp; inputs[i].getAttribute('bbag') == [% bbag.id %]) 
+                                inputs[i].checked = this.checked;}"/>
+
+            <label for="check_all_list_items">[% l('Check/Uncheck All') %]</label>  
+        </div>       
         <table class="table table-hover miniTable w-100 bookbagTable">
             <thead>
                 <tr>
     </div>
     [% END %][% END %]
 </div>
+
 [% END %]
 
index f58163a..fb5afdc 100755 (executable)
     <div>
         <div id="acct_sum_block" class="container">
             <h3>[% l('My Account Summary') %]</h3>
-            <table class="acct_sum_table mx-auto" title="[% l('Account Summary') %]">
-                <tr>
-                    <td colspan="2" class="text-center">[% l("Account Expiration Date - ") %]
-                        <span [% IF ctx.expired_card %]style="color:red;"[% END %]>
+                <div class="row">
+                    <div class="col-12">
+                     <span [% IF ctx.expired_card %]class="danger"[% END %]>
+                        [% l("Account Expiration Date - ") %]
                             [% date.format(ctx.parse_datetime(ctx.user.expire_date), DATE_FORMAT) %]
                         </span>
-                        [% IF ctx.expired_card %]
+                    </div>
+                    <div class="col-12">
+                     [% IF ctx.expired_card %]
                         <span>
                             <em>
                             [% l("<br>Your library card has expired.<br>Please contact a librarian to resolve this issue.", fmt_expire_date) %]
                             </em>
                         </span>
                         [% END %]
-                    </td>
-                </tr>
-                <tr>
-                    <td class="text-center"> <a href="[% mkurl(ctx.opac_root _ '/myopac/circs') %]"
+                    </div>
+                    <div class="col-12">
+                     <a href="[% mkurl(ctx.opac_root _ '/myopac/circs') %]"
                             title="[% l('View My Checked Out Items') %]">
                             [% l("Items Currently Checked out ([_1])", ctx.user_stats.checkouts.total_out) %]
                         </a>
-                    </td>
-                    <td class="td-right hidden" id="acct_sum_ebook_circs">
-                        <a href="[% mkurl(ctx.opac_root _ '/myopac/ebook_circs') %]"
+                    </div>
+                    <div class="col-12">
+                     <a href="[% mkurl(ctx.opac_root _ '/myopac/ebook_circs') %]"
                             title="[% l('View My Checked Out E-Items') %]">
                             [% l("E-Items Currently Checked out") %] (<span id="acct_sum_ebook_circ_total">-</span>)
                         </a>
-                    </td>
-                </tr>
-                <tr>
-                    <td class="text-center"><a href="[% mkurl(ctx.opac_root _ '/myopac/holds') %]"
+                    </div>
+                    <div class="col-12">
+                     <a href="[% mkurl(ctx.opac_root _ '/myopac/holds') %]"
                             title="[% l('View My Holds') %]">
                             [% l('Items Currently on Hold ([_1])', ctx.user_stats.holds.total) %]
-                        </a></td>
-                    <td class="td-right hidden" id="acct_sum_ebook_holds">
-                        <a href="[% mkurl(ctx.opac_root _ '/myopac/ebook_holds') %]"
+                        </a>
+                    </div>
+                    <div class="col-12">
+                     <a href="[% mkurl(ctx.opac_root _ '/myopac/ebook_holds') %]"
                             title="[% l('View My E-Items On Hold') %]">
                             [% l("E-Items Currently on Hold") %] (<span id="acct_sum_ebook_hold_total">-</span>)
                         </a>
-                    </td>
-                </tr>
-                <tr>
-                    <td  class="text-center"> <a href="[% mkurl(ctx.opac_root _ '/myopac/holds', {available => 1}) %]"
+                    </div>
+                    <div class="col-12">
+                     <a href="[% mkurl(ctx.opac_root _ '/myopac/holds', {available => 1}) %]"
                             title="[% l('View My Holds Ready for Pickup') %]">
                             [% l('Items ready for pickup ([_1])', ctx.user_stats.holds.ready) %]
-                        </a></td>
-                    
-                    <td class="td-right hidden" id="acct_sum_ebook_holds_ready">
-                        <a href="[% mkurl(ctx.opac_root _ '/myopac/ebook_holds_ready') %]"
+                        </a>
+                    </div>
+                    <div class="col-12">
+                     <a href="[% mkurl(ctx.opac_root _ '/myopac/ebook_holds_ready') %]"
                             title="[% l('View My E-Items Ready for Pickup') %]">
                             [% l("E-Items ready for pickup") %] (<span id="acct_sum_ebook_hold_ready_total">-</span>)
                         </a>
-                    </td>
-                </tr>
-            </table>
+                    </div>
+                   
+                </div>
+                   
         </div>
     </div>
        [% content %]
index 8411197..421f390 100755 (executable)
@@ -13,7 +13,7 @@
         <div class="col-3 text-left">
         [% IF offset != 0 %]
             <a href='main_payments?limit=[% limit %]&amp;offset=[% offset - limit %]'
-                  ><span class="np_nav_link classic_link btn btn-outline-primary">&#9668;[% l('Previous') %]</span>
+                  ><span class="np_nav_link classic_link btn btn-action">&#9668;[% l('Previous') %]</span>
             </a>
             [% END %]
         </div>
         <div class="col-3 text-right"> 
         [% IF ctx.payments.size > limit %]
             <a href='main_payments?limit=[% limit %]&amp;offset=[% offset + limit %]'
-                 ><span class="np_nav_link classic_link btn btn-outline-primary">[% l('Next') %] &#9658;</span>
+                 ><span class="np_nav_link classic_link btn btn-action">[% l('Next') %] &#9658;</span>
+                 </a>
                 [% END %]
-            </a>
+            
         </div>
     </div>
 
                 <span class="sr-only">Receipt Options: </span>
                     <form action="[% ctx.opac_root %]/myopac/receipt_print" method="post" class="d-inline m-1">
                         <input class="btn btn-sm btn-confirm my-1" type="hidden" name="payment" value="[% payment.mp.id %]" />
-                        <button class="btn btn-sm btn-action my-1" type="submit" /><i class='fas fa-print'></i> Print</button>
+                        <button class="btn btn-sm btn-action my-1" type="submit"><i class='fas fa-print'></i> Print</button>
                     </form>
                     <form action="[% ctx.opac_root %]/myopac/receipt_email" method="post" class="d-inline m-1">
                         <input class="btn btn-sm btn-confirm my-1" type="hidden" name="payment" value="[% payment.mp.id %]" />
-                        <button class="btn btn-sm btn-action my-1" type="submit" value="[% l('Email') %]" /><i class="fas fa-envelope-open-text"></i> Email</button>
+                        <button class="btn btn-sm btn-action my-1" type="submit" value="[% l('Email') %]"><i class="fas fa-envelope-open-text"></i> Email</button>
                     </form>
                 </td>
             </tr>
index 6c67dc5..d1293bd 100755 (executable)
@@ -1,24 +1,38 @@
 <div id="myopac_messages_div">
 <h3>[% l("Messages") %]</h3>
     <div>
-        
-        <span class='float-left' style='padding-left: 10px;'>
-           [% IF offset != 0 %] <a href='[% mkurl('messages', { limit => limit, offset => (offset - limit)} ) %]'><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>[% END %]
+
+
+
+<ul class='start_end_links_span pagination d-inline-flex'>    
+            [% IF offset != 0 %]        
+            
+             <li class="page-item"> <a class='np_nav_link classic_link btn btn-action' title='[% l("Previous Page") %]'
+            href='[% mkurl('messages', { limit => limit, offset => (offset - limit)} ) %]'><span class="nav_arrow_fix">&#9668;</span> <span class="d-none d-md-inline-block">[% l('Previous') %]</span></a></li>
+           [% END; %]
             [% IF offset > 0 || count > limit;
                 curpage = 0;
                 WHILE curpage * limit < count;
                     IF curpage * limit == offset;
             %]
-            [% curpage + 1 %]
+                        <li class="page-item active"><a href="[% mkurl('hold_history', {limit => limit, offset => (curpage * limit)}) %]"  class="results-paginator-selected btn page-link disabled">[% curpage + 1%]</a></li>
+
+            
                     [%- ELSE %]
-            <a href='[% mkurl('messages', {limit => limit, offset => (curpage * limit)}) %]'>[% curpage + 1 %]</a>
+            <li class="page-item"><a href="[% mkurl('messages', {limit => limit, offset => (curpage * limit)}) %]" class="btn page-link">[% curpage + 1%]</a></li>
+
                     [%- END;
                     curpage = curpage + 1;
                 END;
             END %]
-            [% IF count >= limit + offset %]<a href='[% mkurl('messages', {limit => limit, offset => (offset + limit)}) %]'
-                  >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>[% END %]
-        </span>
+            [% IF count >= limit + offset %]
+            <li class="page-item"><a class='np_nav_link classic_link btn btn-action' title='[% l("Next Page") %]'
+            href='[% mkurl('messages', {limit => limit, offset => (offset + limit)}) %]'><span class="d-none d-md-inline-block">[% l('Next') %]</span> <span class="nav_arrow_fix">&#9658;</span></a></li>
+        
+[% END; %]
+</ul>
+
+      
     </div>
     [% IF ctx.message_update_action.defined %]
         [% IF ctx.message_update_changed > 0 %]
         <form method="post" id="messages-form"
          onsubmit="if (document.getElementById('acct_messages_actions').value == 'mark_deleted') { return confirm('[% l("Are you sure you wish to permanently delete the selected message(s)?") %]') } else { return true; }">
             <div class="my-2">
-                <button name="action" class="btn btn-action" value="mark_read" id="mark_read" value="mark_read" type="submit"><i class="fas fa-glasses"></i> Mark Read</button>
-                <button name="action" class="btn btn-opac" value="mark_unread" id="mark_unread" value="mark_unread" type="submit"><i class="fas fa-eye-slash"></i> Mark Unread</button>
-                <button name="action" class="btn btn-danger" value="mark_deleted" id="mark_deleted" value="mark_deleted" type="submit" onclick="return confirm('[% l("Are you sure you wish to permanently delete the selected message(s)?") %]')"><i class="fas fa-trash-alt"></i> Delete</button>
+                <button name="action" class="btn btn-action" value="mark_read" id="mark_read" type="submit"><i class="fas fa-glasses"></i> Mark Read</button>
+                <button name="action" class="btn btn-opac" value="mark_unread" id="mark_unread"  type="submit"><i class="fas fa-eye-slash"></i> Mark Unread</button>
+                <button name="action" class="btn btn-danger" value="mark_deleted" id="mark_deleted"  type="submit" onclick="return confirm('[% l("Are you sure you wish to permanently delete the selected message(s)?") %]')"><i class="fas fa-trash-alt"></i> Delete</button>
             </div>
             [% IF count < 1 %]
             <div class="warning_box">[% l('No messages found.') %]</div>
             [% ELSE %]
+             <div class="d-block d-md-none">
+                <input id="all_message_check" checked="checked"
+                type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'message_id' &amp;&amp; !inputs[i].disabled) inputs[i].checked = this.checked;}"
+                aria-label="[% l('Check/Uncheck All') %]" />    
+                <label for="all_message_check">[% l('Check/Uncheck All') %]</label>  
+            </div>    
             <table id="acct_messages_main_header" title="[% l('Messages') %]"
                 class="table table-hover table-bordered miniTable messagesTable">
                 <thead>
                 <tr>
-                    <th>
-                        <input type="checkbox" title="[% l('Select All Messages') %]"
+                    <td>
+                        <input type="checkbox" aria-label="[% l('Select All Messages') %]"
                         onclick="var inputs=document.getElementsByTagName('input'); for (i = 0; i < inputs.length; i++) { if (inputs[i].name == 'message_id' &amp;&amp; !inputs[i].disabled) inputs[i].checked = this.checked;}"/>
-                    </th>
+                    </td>
                     <th>[% l('Date') %]</th>
                     <th>[% l('Library') %]</th>
                     <th>[% l('Subject') %]</th>
-                    <th></th>
+                    <td></td>
                 </tr>
                 </thead>
                 <tbody>
@@ -77,7 +97,7 @@
                         <td class="checkCell">
                             <span class="sr-only">Message Number [% count; %]</span>
                         <input type="checkbox" name="message_id" value="[% message.id %]"
-                            [% html_text_attr('title', l('Select message [_1]', message.title)) %]/>
+                            [% html_text_attr('aria-label', l('Select message [_1]', message.title)) %]/>
                         </td>
                         <td>
                             <span class="sr-only">Date of Message</span>
                         </td>
                         <td>
                         <span class="sr-only">Message Options</span>
-                            <a href="[% mkurl('messages', { single => 1, message_id => message.id } ) %]" title="Read [% message.title | html %]">Read</a>
+                            <a class="btn btn-sm btn-action" href="[% mkurl('messages', { single => 1, message_id => message.id } ) %]" title="Read [% message.title | html %]"><i class="fas fa-glasses"></i> Read</a>
                         </td>
                     </tr>
                 [% END %]
index d94e823..2d74973 100755 (executable)
@@ -1,7 +1,5 @@
 <div id="myopac_messages_div">
-   
-       <h3>[% l("Messages") %]</h3>
-  
+    <h3>[% l("Messages") %]</h3>
     <div id="single_message_main">
         <form method="post" id="messages-form" action="[% ctx.opac_root %]/myopac/messages"  class="my-2">
             <input type="hidden" name="message_id" value="[% ctx.patron_message_id %]" />
                 </button>
             </span>
         </form>
-
-        <table title="[% l('Message') %]"
-            class='light_border table'>
-            <tbody id='myopac_message_tbody'>
-            <tr>
-                <td class='color_4 light_border'>[% l("Date") %]</td>
-                <td class='myopac_message_date'>[% date.format(ctx.parse_datetime(ctx.patron_messages.0.create_date), DATE_FORMAT); %]</td>
-            </tr>
-            <tr>
-                <td class='color_4 light_border'>[% l("Library") %]</td>
-                <td class='myopac_message_library'>[% ctx.patron_messages.0.library | html %]</td>
-            </tr>
-            <tr>
-                <td class='color_4 light_border'>[% l("Subject") %]</td>
-                <td class='myopac_message_subject'>[% ctx.patron_messages.0.title | html %]</td>
-            </tr>
-            <tr>
-                <td class='color_4 light_border'>[% l("Message") %]</td>
-                <td class='myopac_message_message'>[% ctx.patron_messages.0.message | html %]</td>
-            </tr>
-            </tbody>
-        </table>
+        <div class="row">
+        <div class="my-2 col-12">
+            <b>[% l("Date") %]</b>
+            <span class="mx-2">[% date.format(ctx.parse_datetime(ctx.patron_messages.0.create_date), DATE_FORMAT); %]</span>
+        </div>
+        <div class="my-2 col-12">
+            <b>[% l("Library") %]</b>
+            <span class="mx-2">[% ctx.patron_messages.0.library | html %]</span>
+        </div>
+        <div class="my-2 col-12">
+            <b>[% l("Subject") %]</b>
+            <span class="mx-2">[% ctx.patron_messages.0.title | html %]</span>
+        </div>
+        <div class="my-2 col-12">
+            <b>[% l("Message") %]</b>
+            <span class="mx-2">[% ctx.patron_messages.0.message | html %]</span>
+        </div>
+        </div>
     </div>
 </div>
index d69b2c8..00cb39a 100755 (executable)
@@ -1,5 +1,5 @@
 [%  PROCESS "opac/parts/header.tt2";
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "prefs";
     parent="prefs";
     prefs_page = 'prefs' %]
 
             <tr>
                 <td class='color_4 light_border'>[% l("Home Library") %]</td>
-                <td class='light_border'>[% ctx.user.home_ou.name | html %]</td>
-                <td></td>
+ <td class='light_border'>
+                    [% ctx.get_aou(ctx.user.home_ou.parent_ou).name %]<br/>
+                    [% ctx.user.home_ou.name | html %]<br/>
+                    [% ctx.user.home_ou.billing_address.street1 %]<br/>
+                    [% IF ctx.user.home_ou.billing_address.street2; ctx.user.home_ou.billing_address.street2 _ "<br/>"; END %]
+                    [% ctx.user.home_ou.billing_address.city %], [% ctx.user.home_ou.billing_address.state %] 
+                    [% ctx.user.home_ou.billing_address.post_code %]<br/>
+                    <br/>
+
+                    [% IF ctx.user.home_ou.phone; ctx.user.home_ou.phone _ "<br/>"; END %]
+                    
+                    [% IF ctx.user.home_ou.email; ctx.user.home_ou.email _ "<br/>"; END %]
+                    [% lib_url = ctx.get_org_setting(ctx.user.home_ou.id, 'lib.info_url');
+                        IF lib_url;
+                            '<a href="'; lib_url | html; '" property="url">'; lib_url; '</a>';
+                        END;
+                    %]
+                </td>                <td></td>
             </tr>
             <tr>
                 <td class='color_4 light_border'>[% l("Account Creation Date") %]</td>
                 <td class='color_4 light_border'>[% l("Account Expiration Date") %]</td>
                 <td class='light_border'>
                     [%- IF date.format(ctx.parse_datetime(ctx.user.expire_date), '%s') < date.format(date.now , '%s'); -%]
-                        <span class="alert" style="font-weight:bold;">[% date.format(ctx.parse_datetime(ctx.user.expire_date), DATE_FORMAT) %]</span>
-                       
+                        <span class="danger">[% date.format(ctx.parse_datetime(ctx.user.expire_date), DATE_FORMAT) %]</span>
                     [% ELSE %]
                         [% date.format(ctx.parse_datetime(ctx.user.expire_date), DATE_FORMAT) %]
                     [% END %]
                             </tr>
                         [% END %]
                             <tr>
-                                <td><button type='submit' class="btn btn-confirm "/><i class="fas fa-save"></i> [% l('Save Changes') %]
+                                <td><button type='submit' class="btn btn-confirm "><i class="fas fa-save"></i> [% l('Save Changes') %]
 
  </button></td>
                                 <td>
index 1a1287b..3042aa8 100755 (executable)
@@ -1,5 +1,5 @@
 [%  PROCESS "opac/parts/header.tt2";
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "prefs_my_lists";
     parent="prefs";
     prefs_page = 'prefs_my_lists' %]
@@ -22,7 +22,7 @@
 
                 [%- setting = 'opac.lists_per_page' -%]
                 <tr >
-                    <td width='20%'><label for='[% setting %]'>[%l("Lists per page") %]</label></td>
+                    <td><label for='[% setting %]'>[%l("Lists per page") %]</label></td>
                     <td>
                         <select class="d-inline-block form-control mini-control" id='[% setting %]' name='[% setting %]'>
                             [%  UNLESS ctx.user_setting_map.$setting;
@@ -60,7 +60,8 @@
                 </tr>
             </tbody>
         </table>
-        <button type="submit" class="btn btn-confirm"/><i class="fas fa-save"></i> [% l('Save') %]</button>
+        <button type="submit" class="btn btn-confirm"><i class="fas fa-save"></i> [% l('Save') %]</button>
     </form>
     [% INCLUDE "opac/parts/myopac/prefs_hints.tt2" %]
+    
 [% END %]
index 8738a6b..c98a8b5 100755 (executable)
@@ -1,5 +1,5 @@
 [%  PROCESS "opac/parts/header.tt2";
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "prefs_notify";
     parent="prefs";
     prefs_page = 'prefs_notify' %]
         </tbody>
     </table>
 
-    <button type='submit' class="btn btn-confirm"/><i class="fas fa-save"></i> [% l('Save') %]</button>
+    <button type='submit' class="btn btn-confirm"><i class="fas fa-save"></i> [% l('Save') %]</button>
 </form>
 [% END %]
 
index 3020956..947d663 100755 (executable)
@@ -1,6 +1,6 @@
 [%  PROCESS "opac/parts/header.tt2";
     PROCESS "opac/parts/org_selector.tt2";
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "prefs_settings";
     parent="prefs";
     prefs_page = 'prefs_settings' %]
@@ -35,7 +35,7 @@
 
                 [%- setting = 'opac.hits_per_page' -%]
                 <tr >
-                    <td width='20%'><label for='[% setting %]'>[% l("Search hits per page") %]</label></td>
+                    <td><label for='[% setting %]'>[% l("Search hits per page") %]</label></td>
                     <td>
                         <select class="d-inline-block form-control mini-control" id='[% setting %]' name='[% setting %]'>
                             [%  UNLESS ctx.user_setting_map.$setting;
@@ -67,7 +67,7 @@
                 </tr>
                 [%- setting = 'opac.default_pickup_location'; -%]
                 <tr>
-                    <td width='20%'><label for='[% setting %]'>[% l("Preferred pickup location") %]</label></td>
+                    <td><label for='[% setting %]'>[% l("Preferred pickup location") %]</label></td>
                     <td>
                         [%- thang = ctx.user.home_ou.id;
                             IF ctx.user_setting_map.$setting;
index 75244f0..ce898cf 100755 (executable)
@@ -31,7 +31,7 @@
         <tr><td>[% l('Current Password') %]</td><td><input type='password' class="form-control" name='current_pw'/></td></tr>
         <tr><td>[% l('New Email') %]</td><td><input type='text' name='email' class="form-control" value='[% ctx.invalid_email | html %]'/></td></tr>
     </table>
-   <button class="btn btn-confirm m-2" type='submit'/><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
+   <button class="btn btn-confirm m-2" type='submit'><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
 </form>
 </div>
 [% END %]
index 8343dfe..dcd8f4c 100755 (executable)
@@ -34,7 +34,7 @@
         <tr><td>[% l('New Password') %]</td><td><label><input class="form-control" type='password' name='new_pw' autocomplete='off'/></label></td></tr>
         <tr><td>[% l('New Password Again') %]</td><td><label><input class="form-control" type='password' name='new_pw2'/></label></td></tr>
     </table>
-<button class="btn btn-confirm m-2" type='submit'/><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
+<button class="btn btn-confirm m-2" type='submit'><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
 </form>
 </div>
 [% END %]
index d39203c..5d40fb6 100755 (executable)
@@ -32,7 +32,7 @@
         <tr><td>[% l('Current Username') %]</td><td>[% ctx.user.usrname | html %]</td></tr>
         <tr><td>[% l('Current Password') %]</td><td><input type='password' name='current_pw' class="form-control"/></td></tr>
         <tr><td>[% l('New Username') %]</td><td><input type='text' name='username' value='[% ctx.invalid_username | html %]' class="form-control"/></td></tr>
-        <tr><td colspan='2' align='center'><button class="btn btn-confirm m-2" type='submit'/><i class="fas fa-save"></i> [% l('Save Changes') %]</button></td></tr>
+        <tr><td colspan='2' align='center'><button class="btn btn-confirm m-2" type='submit'><i class="fas fa-save"></i> [% l('Save Changes') %]</button></td></tr>
     </table>
 </form>
 
index e3811cb..68ca9f9 100755 (executable)
@@ -1,5 +1,6 @@
 <form action="[% ctx.opac_root %]/results" method="get">
-    <div class="header_middle">[% l("Expert Search") %]</div>
+    <h1 class="text-center">Expert Search</h1>
+            <h2 class="text-center">Search the MARC record.</h2>
     <input type="hidden" name="_special" value="1" />
     <input id="detail" type="hidden" name="detail_record_view"
            value="[% show_detail_view %]"/>
@@ -8,14 +9,7 @@
             <tr id="adv_expert_row">
                 <td class="py-3">
                    <div class="row">
-                        <div class="col-2">
-                            <span class="d-inline-block" style="position:absolute;bottom:10px;">
-                                <a href="javascript:;" class="btn btn-remove btn-sm"
-                                title="[% l('Remove row') %]" 
-                                onclick='return killRowIfAtLeast(1, this.parentNode.parentNode);'>
-                                <i class="fas fa-times"></i></a>
-                            </span>
-                        </div>
+                        
                         <div class="col-3">
                         <span class="d-inline-block">
                             <label for="expert_tag">[% l("Tag:") %]</label>
                             <input class="form-control" id="expert_term" type="text" name="term" size="16" />
                         </span>
                         </div>
+                        <div class="col-2">
+                         <button class="btn btn-remove btn-sm d-inline-block" style="position:absolute;bottom:5px;" aria-label="[% l('Remove row') %]" 
+                                onclick='return killRowIfAtLeast(1, this.parentNode.parentNode);'>
+                               <i class="fas fa-times"></i></a>
+                            </button>
+                        </div>
                     </div>
                 </td>
             </tr>
         </tbody>
         <tfoot>
             <tr>
-               <td class="py-3" ><a class="btn btn-opac btn-sm" href="javascript:addExpertRow();"><i class="fas fa-plus-circle"></i> [% l("Add Search Row") %]</a></td>
+               <td><a class="btn btn-opac btn-sm" href="javascript:addExpertRow();"><i class="fas fa-plus-circle"></i> [% l("Add Search Row") %]</a></td>
             </tr>
             <tr>
-               [%- lib_select_id = "expert_search_library"; -%]
-               <td  class="py-3 expert-search-row">
+               [%- lib_select_id = "adv_org_selector"; -%]
+               <td  class="py-3">
                    <label for="[% lib_select_id %]"><strong>[% l("Search Library:") %]</strong>
                        [%- PROCESS "opac/parts/org_selector.tt2";
                            INCLUDE build_org_selector id=lib_select_id show_loc_groups=1 
@@ -53,7 +53,7 @@
                </td>
             </tr>
             <tr>
-                <td  class="expert-search-row">
+                <td class="py-3">
                 <button type="submit" class="btn btn-confirm"><i class="fas fa-search"></i> [% l('Search') %]</button>
                 </td>
             </tr>
index 8092c9e..fb4924d 100755 (executable)
@@ -10,7 +10,7 @@
     queries = CGI.param('query');
     bools = CGI.param('bool');
     qtypes = CGI.param('qtype');
-    rowcount = 3;
+    rowcount = 2;
 
     # scalar.merge treats the scalar as a 1-item array
     WHILE queries.size < rowcount; queries = queries.merge(['']); END;
@@ -29,7 +29,7 @@
                <div class="row">
             <div class="col-2">
             <!-- bool selector.  hide for first row.  safe to ignore first bool value in form submission -->
-                <select title="[% l('Boolean search operator') %]" 
+                <select aria-label="[% l('Boolean search operator') %]"
                 name='bool' [% IF loop.first %] class='d-none' [% ELSE %] class='form-control' [% END %]>
                     <option value='and' [% b == 'and' ? 'selected="selected"' : '' %]>[% l('And') %]</option>
                     <option value='or' [% b == 'or' ? 'selected="selected"' : '' %]>[% l('Or') %]</option>
@@ -43,7 +43,7 @@
                 </span>
             </div>
             <div class="col-3">
-                <select class='form-control' title="[% l('Search phrase match strictness') %]"
+                <select class='form-control w-100' aria-label="[% l('Search phrase match strictness') %]"
                 name='contains'>
                 [% FOR o IN contains_options; -%]
                 <option value="[% o.value %]" [% c == o.value ? ' selected="selected"' : '' %]>[% o.label %]</option>
                 </select>
             </div>
             <div class="col-4">
-                <input class="form-control" title="[% l('Search term') %]" aria-label="[% l('Search term') %]"
+                <input class="form-control" aria-label="[% l('Search term') %]"
                 type='text' size='18' name='query' value="[% q | html %]"  [% IF loop.index == 0 %] autofocus [% END %] />
             </div>
         </div>
     </td>
     <td class="px-2">
-        <a href="javascript:;" class="btn btn-remove btn-sm"
+        <a href="javascript:;" class="btn btn-remove btn-sm" aria-label="Remove This Row"
             title="[% l('Remove row') %]"
             onclick='return killRowIfAtLeast(2, this);'>
                <i class="fas fa-times"></i>
index 2dd0443..c942dfc 100755 (executable)
@@ -1,11 +1,12 @@
 <form action="[% ctx.opac_root %]/results" method="get">
-    <div class="header_middle">[% l("Numeric Search") %]</div>
+    <h1 class="text-center">Numeric Search</h1>
+            <h2 class="text-center">Search by a field and numeric identifier.</h2>
     <input type="hidden" name="contains" value="contains" />
     <input type="hidden" name="_special" value="1" />
     <input id="detail" type="hidden" name="detail_record_view"
            value="[% show_detail_view %]"/>
     <div id='adv_numeric_block' class='row'>
-       <div class="col-md-6 col-xs-12 my-3">
+       <div class="col-12 my-3">
             <label for="numeric_qtype"><strong>[% l("Field:") %]</strong></label>
                 <select id="numeric_qtype" name="qtype" class="form-control">
                     <!-- TODO: Pull labels from config.metabib_field.label -->
                     <option value="item_barcode">[% l('Item Barcode') %]</option>
                 </select>
                </div>
-        <div class="col-md-6 col-xs-12 my-3">
-                       <label for="numeric_qtype"><strong>[% l("Identifier:") %]</strong></label>
-                <input class="form-control" type="text" name="query" size="16" autofocus placeholder='[% l("Identifier") %]' aria-label='[% l("Identifier") %]' />
+        <div class="col-12 my-3">
+                       <label for="numeric_ident"><strong>[% l("Identifier:") %]</strong></label>
+                <input id="numeric_ident" class="form-control" type="text" name="query" size="16" autofocus placeholder='[% l("Identifier") %]' aria-label='[% l("Identifier") %]' />
         </div>
            <br/>
-        <div class="col-12 my-3 text-center">
-            [%- lib_select_id="numeric_search_library" -%]
+        <div class="col-12 my-3">
+            [%- lib_select_id="adv_org_selector" -%]
             <label for="[% lib_select_id %]"><strong>[% l("Search Library:") %]</strong>
                   [% PROCESS "opac/parts/org_selector.tt2";
                      INCLUDE build_org_selector id=lib_select_id show_loc_groups=1
                   %]
             </label>
            <br/>
-                              <button type="submit" class="btn btn-confirm"><i class="fas fa-search"></i> [% l('Search') %]</button>
 
           </div>
+          <div class="col-12 my-3">
+                      <button type="submit" class="btn btn-confirm"><i class="fas fa-search"></i> [% l('Search') %]</button>
+
+        </div>
     </div>
 </form>
index 1b21187..a161d66 100755 (executable)
@@ -4,12 +4,11 @@
 %]
 <form action="[% ctx.opac_root %]/results" method="get">
 <div id='adv_global_search' class='data_grid data_grid_center'>
-    <div id='adv_search_rows' class="container mb-3">
-        <!-- Contains the user-adda
-        ble(?) rows to define search class, containment and text -->
-         <div class="header_middle">[% l('Search Input') %]</div>
-               <div class='adv_global_input_container row'>
-            <table role="presentation" class="mx-auto mb-5 col-lg-8">
+    <div id='adv_search_rows' class="container">
+        <h1 class="text-center">Advanced Search</h1>
+        <h2 class="text-center">Refine your search by filling out one or more fields to search by below.</h2>
+        <div class='adv_global_input_container row'>
+            <table role="presentation" id="adv_global_input_table" class="mx-auto col-12">
                 <tbody id="adv_global_tbody">
                     [% INCLUDE "opac/parts/advanced/global_row.tt2" %]
                     <!-- add a new row -->
                 </tbody>
             </table>
         </div>
-         <div id='adv_search_submit' class="text-center">
-        <input type="hidden" name="_adv" value="1" />
-        <input id="detail" type="hidden" name="detail_record_view"
-               value="[% show_detail_view %]"/>
-        <span>
-            <button id='search-submit-go' type="submit" class="btn btn-confirm"
-                onclick='setTimeout(function(){$("search-submit-spinner").className=""; $("search-submit-go").className="hidden"}, 2000)'><i class="fas fa-search"></i> [% l("Submit") %]</button>
-            <img id='search-submit-spinner' src='/opac/images/progressbar_green.gif[% ctx.cache_key %]'
-                class='hidden' alt="[% l('Search in progress icon') %]"/>
-        </span>
-
-        <a href="[% mkurl(ctx.opac_root _ '/advanced', {$loc_name => loc_value}, 1) %]"
-            class="btn btn-deny"><i class="fas fa-ban"></i> [% l('Clear Form') %]</a>
-    </div>
     </div>
 
-   
-
-    <div class="container">
-        <div class="header_middle">[% l('Search Filters') %]</div>
-<div class='row'>
-[% FOR adv_chunk IN search.adv_config; NEXT IF adv_chunk.adv_hide || (adv_chunk.adv_special && adv_chunk.adv_special != 'copy_location'); %]
-            <div class='col-xl-3 col-sm-6 col-md-4 col-xs-12 pt-3'>
-            <div [% IF adv_chunk.js_only %]
-                id='adv_chunk_[% adv_chunk.adv_special %]'
-                class='hidden  mx-auto' [%ELSE%] class='mx-auto' [% END %]>
-                <strong><label for="[% adv_chunk.id %]">
-                  [% adv_chunk.adv_label %] </label></strong><br />
-                  
-[% IF adv_chunk.adv_attr;
-            INCLUDE "opac/parts/coded_value_selector.tt2"
-                id=adv_chunk.id
-                attr=adv_chunk.adv_attr multiple="multiple"
-                size=adv_chunk.adv_size || search.default_adv_select_height || "4";
- ELSIF adv_chunk.adv_filter;
-            INCLUDE "opac/parts/filter_group_selector.tt2"
-                id=adv_chunk.id
-                filter_group=adv_chunk.adv_filter multiple="multiple"
-                size=adv_chunk.adv_size || search.default_adv_select_height || "4"; %]
-         [% END; %]       
-[% IF adv_chunk.adv_special == 'copy_location' %]
-<select id="adv_copy_location_selector"
-                        title="[% l('Select Shelving Location') %]"
-                        name="fi:locations" size="4" multiple="multiple" class="form-control">
-                    </select>
-         [%END;%]</div></div>[%END;%]</div>       
-         
-         
+    <div class="my-5">
+        <h3>Search Filters</h3>
+        <div>
+            [% FOR adv_chunk IN search.adv_config; NEXT IF adv_chunk.adv_hide || (adv_chunk.adv_special && adv_chunk.adv_special != 'copy_location'); %]
+            <div class="pt-3">
+                <div [% IF adv_chunk.js_only %] id='adv_chunk_[% adv_chunk.adv_special %]' class='hidden  accordion' [%ELSE%] class='accordion' [% END %]>
+                    <div class="card">
+                        <div class="card-header p-0" id="[% adv_chunk.id %]_card">
+                        <h4 class="mb-0">
+                            <button type="button" class="btn filter-header w-100 text-left" data-toggle="collapse" data-target="#[% IF adv_chunk.id == 'adv_copy_location_selector'; 'adv_copy_location_selector_new';  ELSE; adv_chunk.id; END; %]" aria-expanded="true" aria-controls="[% IF adv_chunk.id == 'adv_copy_location_selector'; 'adv_copy_location_selector_new';  ELSE; adv_chunk.id; END; %]">
+                            [% adv_chunk.adv_label %]
+                            </button>
+                        </h4>
+                    </div>
+                    
+                    <div id="[% IF adv_chunk.id == 'adv_copy_location_selector'; 'adv_copy_location_selector_new';  ELSE; adv_chunk.id; END; %]" class="collapse" aria-labelledby="[% adv_chunk.id %]_card" data-parent="#accordion">
+                    [% IF adv_chunk.id != 'adv_copy_location_selector';%]
+                        <div class="card-body">
+                        <fieldset>
+                        <legend> [% adv_chunk.adv_label %]</legend>
+                       [% END; %]  
+                            [% IF adv_chunk.adv_attr;
+                                        INCLUDE "opac/parts/check_value_selector.tt2"
+                                            id=adv_chunk.id
+                                            attr=adv_chunk.adv_attr multiple="multiple"
+                                            size=adv_chunk.adv_size || search.default_adv_select_height || "4";
+                            ELSIF adv_chunk.adv_filter;
+                                        INCLUDE "opac/parts/filter_group_selector.tt2"
+                                            id=adv_chunk.id
+                                            filter_group=adv_chunk.adv_filter multiple="multiple"
+                                            size=adv_chunk.adv_size || search.default_adv_select_height || "4"; 
+                            END; %] 
+                            [% IF adv_chunk.id != 'adv_copy_location_selector';%]
+                        </fieldset>   
+                         [% END; %]   
+                        </div>
+                    </div> 
+                </div></div>
+            </div>
+            [%END;%]
+        </div>
+    </div>       
          
-<!--Bottom Content (Library/Pub Year/Sort and Limit/Format Checkboxes -->
-                <div class="row">
-[% FOR adv_chunk IN search.adv_config; NEXT IF adv_chunk.adv_hide || adv_chunk.adv_special == 'copy_location';%]                  
-[%     IF adv_chunk.adv_special;%]
- <div class='col-md-4 col-sm-6 col-xs-12 pt-3'>
-            <div [% IF adv_chunk.js_only %]
-                id='adv_chunk_[% adv_chunk.adv_special %]'
-                class='hidden mx-auto' [%ELSE%] class='mx-auto' [% END %]>
-                <strong><label for="[% adv_chunk.id %]">
-                  [% adv_chunk.adv_label %] </label></strong><br />
-                  
-           [% IF adv_chunk.adv_special == "lib_selector";
-                    PROCESS "opac/parts/org_selector.tt2";
-                        INCLUDE build_org_selector show_loc_groups=1 id=adv_chunk.id %]
-                        
-                          
-                            
-[% ELSIF adv_chunk.adv_special == "pub_year"; %]
-                            <select name='pubdate' class='form-control'
-                                id="[% adv_chunk.id %]"
-                                onchange='if(this.selectedIndex == 3)
-                                    unHideMe($("adv_global_pub_date_2_span"));
-                                else
-                                    hideMe($("adv_global_pub_date_2_span"));'>
-                                    
-                                    [%  FOR opt IN [
-                                            {"code" => "is", "label" => l("Is")},
-                                            {"code" => "before", "label" => l("Before")},
-                                            {"code" => "after", "label" => l("After")},
-                                            {"code" => "between", "label" => l("Between")} ] %]
-                                        <option value="[% opt.code %]"[% CGI.param('pubdate') == opt.code ? ' selected="selected"' : '' %]>[% opt.label | html %]</option>
-                                    [%  END %]
-                                    
+    <!--Bottom Content (Library/Pub Year/Sort and Limit/Format Checkboxes -->
+    <div class="row">
+        [% FOR adv_chunk IN search.adv_config; NEXT IF adv_chunk.adv_hide || adv_chunk.adv_special == 'copy_location';%]                  
+        [%     IF adv_chunk.adv_special;%]
+        <div class='col-md-4 col-sm-6 col-xs-12 pt-3'>
+            <div [% IF adv_chunk.js_only %] id='adv_chunk_[% adv_chunk.adv_special %]' class='hidden mx-auto' [%ELSE%] class='mx-auto' [% END %]>
+                <strong><label for="[% adv_chunk.id %]"> [% adv_chunk.adv_label %] </label></strong><br />
+                    [% IF adv_chunk.adv_special == "lib_selector"; PROCESS "opac/parts/org_selector.tt2"; INCLUDE build_org_selector show_loc_groups=1 id=adv_chunk.id %]
+                    [% ELSIF adv_chunk.adv_special == "pub_year"; %]
+                            <select name='pubdate' class='form-control' id="[% adv_chunk.id %]" onchange='if(this.selectedIndex == 3) $("#adv_global_pub_date_2_span").removeClass("hide_me"); else $("#adv_global_pub_date_2_span").addClass("hide_me");'>
+                            [%  FOR opt IN [
+                                    {"code" => "is", "label" => l("Is")},
+                                    {"code" => "before", "label" => l("Before")},
+                                    {"code" => "after", "label" => l("After")},
+                                    {"code" => "between", "label" => l("Between")} ] %]
+                                <option value="[% opt.code %]"[% CGI.param('pubdate') == opt.code ? ' selected="selected"' : '' %]>[% opt.label | html %]</option>
+                            [%  END %]
                             </select>
                             
-                            [% IF !ctx.exclude_electronic_checkbox %]
+                          
                             <br/>
                             <div id='adv_special_block' class="text-center">
-                            [% END %]
                                 <input title="[% l('Search date') %]" class='form-control' placeholder='Year'
                                   name='date1' type='text' size='4' maxlength='4' value="[% CGI.param('date1') | html %]" />
                                 <span id='adv_global_pub_date_2_span' class='[% CGI.param("pubdate") == "between" ? "" : "hide_me" %]'>
                                    [% l("AND") %] <input name='date2' class='form-control' placeholder='Year'
                                     title="[% l('Secondary search date') %]" type='text' size='4' maxlength='4' value="[% CGI.param('date2') | html %]" />
                                 </span>
-                            [% IF !ctx.exclude_electronic_checkbox %]
                             </div>
-                            [% END %]
+
                             [% IF ctx.exclude_electronic_checkbox %]
                             <div class="adv_search_available">
                                 <input type='checkbox' name="fi:-search_format" value="electronic"
                                 <label for='opac.result.excludeelec'>
                                     [% l("Exclude Electronic Resources") %]
                                 </label>
-                            </div>
+                            </div>a
                             [% END %]
                             
-[% ELSIF adv_chunk.adv_special == "sort_selector"; default_sort=ctx.default_sort;
-                    IF CGI.param('sort');
-                        default_sort=CGI.param('sort');
-                    END;
+                    [% ELSIF adv_chunk.adv_special == "sort_selector"; default_sort=ctx.default_sort;
+                    IF CGI.param('sort'); default_sort=CGI.param('sort'); END;
                     INCLUDE "opac/parts/filtersort.tt2"
                         id=adv_chunk.id
                         value=default_sort class='results_header_sel form-control'; %]
 
-<div class="mt-5">
-                    [% IF NOT metarecords.disabled %]
-                        <br/><!-- <br> may seem redundant, but it allows the
-                            <input> (below) to drop down inline w/ its label -->
-                        <div>
-                            <input type='checkbox' name="modifier" value="metabib"
-                              [%- CGI.param('modifier').grep('metabib').size || search.metarecord_default ?
-                                    ' checked="checked"' : '' %]
-                                id='opac.result.ismetabib' />
-                            <label for='opac.result.ismetabib'>
-                                [% l("Group Formats and Editions") %]</label>
-                        </div>
-                    [% END %]
-                      <div>
-                                <input type='checkbox' name="modifier"
-                                    value="available"[% CGI.param('modifier').grep('available').size ? ' checked="checked"' : '' %]
-                                    id='opac.result.limit2avail' />
-                                <label for='opac.result.limit2avail'>
-                                    [% l("Limit to Available") %]</label>
+                            <div class="mt-5">
+                                [% IF NOT metarecords.disabled %]<br/>
+                                <div>
+                                    <input type='checkbox' name="modifier" value="metabib"
+                                    [%- CGI.param('modifier').grep('metabib').size || search.metarecord_default ?
+                                            ' checked="checked"' : '' %]
+                                        id='opac.result.ismetabib' />
+                                    <label for='opac.result.ismetabib'>
+                                        [% l("Group Formats and Editions") %]</label>
+                                </div>
+                                [% END %]
+                                <div>
+                                    <input type='checkbox' name="modifier"
+                                        value="available"[% CGI.param('modifier').grep('available').size ? ' checked="checked"' : '' %]
+                                        id='opac.result.limit2avail' />
+                                    <label for='opac.result.limit2avail'>
+                                        [% l("Limit to Available") %]</label>
+                                </div>
                             </div>
+                    [% END; %]
+                </div>
+            </div>
+        [% END; %]
+    [% END; %]
+    </div>
 </div>
-                [% END; %]
-         </div></div>
-     [%   END; %]
-            
-        
+    <div id='adv_search_submit' class="my-3">
+        <input type="hidden" name="_adv" value="1" />
+        <input id="detail" type="hidden" name="detail_record_view"
+               value="[% show_detail_view %]"/>
+        <span>
+            <button id='search-submit-go' type="submit" class="btn btn-confirm"
+                onclick='setTimeout(function(){$("search-submit-spinner").className=""; $("search-submit-go").className="hidden"}, 2000)'><i class="fas fa-search"></i> [% l("Submit") %]</button>
+            <img id='search-submit-spinner' src='/opac/images/progressbar_green.gif[% ctx.cache_key %]'
+                class='hidden' alt="[% l('Search in progress icon') %]"/>
+        </span>
 
-            
-[% END; %]
-</div>
-        </div>
+        <a href="[% mkurl(ctx.opac_root _ '/advanced', {$loc_name => loc_value}, 1) %]"
+            class="btn btn-deny"><i class="fas fa-ban"></i> [% l('Clear Form') %]</a>
     </div>
-
 </form>
index b8160c0..f13509c 100755 (executable)
         <div class="bbag-content">
 
 
-
+            <div class="d-block d-md-none">
+                <input id="all_check" checked="checked"
+                type="checkbox" onclick="var inputs=document.getElementsByTagName('input'); 
+                                for (i = 0; i < inputs.length; i++) { 
+                                    if (inputs[i].name == 'record' && !inputs[i].disabled) inputs[i].checked = this.checked;}"
+                aria-label="[% l('Check/Uncheck All') %]" />    
+                <label for="all_check">[% l('Check/Uncheck All') %]</label>  
+            </div>   
             <table class="container-fluid table table-hover table-bordered mt-4 miniTable bucketTable">
                 <thead id="acct_list_header_anon">
                     <tr>
index 3fe7669..3166a55 100755 (executable)
         <link rel="stylesheet" href="[% ctx.media_prefix %]/css/bootstrap/bootstrap.min.css">
         <link rel="stylesheet"  href="[% ctx.media_prefix %]/css/fontawesome/all.css[% ctx.cache_key %]" /> 
         <link rel="stylesheet"  href="[% ctx.media_prefix %]/css/datepicker/bootstrap-datepicker.css[% ctx.cache_key %]" /> 
-
-        
-        <script  src="[% ctx.media_prefix %]/js/ui/default/common/build/js/jquery.min.js[% ctx.cache_key %]"></script>
-         <script  src="[% ctx.media_prefix %]/js/datepicker/bootstrap-datepicker.js[% ctx.cache_key %]"></script>
-
-
         <link rel="stylesheet"  href="[% ctx.media_prefix %]/css/skin/default/opac/semiauto.css[% ctx.cache_key %]" />
         <link rel="stylesheet" href="[% ctx.opac_root %]/css/style.css[% ctx.cache_key %]&amp;dir=[%
           IF ctx.get_i18n_l(ctx.eg_locale).rtl == 't' %]rtl[%
           ELSE %]ltr[% END %]" />
+          <link rel="stylesheet" href="[% ctx.opac_root %]/css/mediaQuery.css[% ctx.cache_key %]" />
         [% IF ctx.get_i18n_l(ctx.eg_locale).rtl == 't' %]
         <link rel="stylesheet" href="[% ctx.media_prefix %]/css/skin/default/opac/semiauto-rtl.css[% ctx.cache_key %]" />
         [% END %]
@@ -56,6 +51,9 @@
             [% INCLUDE 'opac/parts/goog_analytics.tt2' %]
         [% END %]
         [% PROCESS 'opac/parts/stripe.tt2' %]
+<script  src="[% ctx.media_prefix %]/js/bootstrap/jquery-3.5.1.min.js"></script>
+
+        
     </head>
     <body[% IF want_dojo; ' class="tundra d-flex flex-column min-vh-100"'; ELSE; ' class="tundra d-flex flex-column min-vh-100"';  END %]>
         <h1 class="sr-only">[% l('Catalog') %]</h1>
         [% END;%]
         <h2 class="sr-only">[% l('Additional Resources') %]</h2>
         [% INCLUDE 'opac/parts/footer.tt2' %]
+        
         [% INCLUDE 'opac/parts/js.tt2' %]
+        <script>
+    $(document).ready(function(){
+    $('.tooltip').tooltip();
+    });
+</script>
         [%- IF ENV.OILS_CHILIFRESH_ACCOUNT %]
             [%- INCLUDE 'opac/parts/chilifresh.tt2' %]
         [%- END %]
+
+     
+
     </body>
 </html>
index 2bea309..4757449 100755 (executable)
@@ -9,17 +9,17 @@
         </div>
       </a>
       <div class="dropdown-menu dropdown-menu-left" role="menu" aria-labelledby="cartDropdown" style="right:0px !important;left:unset !important;">
-        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist', {}) %]"><i class="fas fa-glasses"></i>&nbsp;[% l('View Basket') %]</a>
-        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/move', { action => 'place_hold', entire_list => 1 }) %]"><i class="fas fa-book"></i>&nbsp;[% l('Place Holds') %]</a>
-        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/print', {}) %]"><i class="fas fa-print"></i>&nbsp;[% l('Print Title Details') %]</a>
-        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/email', {}) %]"><i class="far fa-envelope"></i>&nbsp;[% l('Email Title Details') %]</a>
+        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist', {}) %]"><i class="fas fa-glasses"></i>[% l('View Basket') %]</a>
+        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/move', { action => 'place_hold', entire_list => 1 }) %]"><i class="fas fa-book"></i>[% l('Place Holds') %]</a>
+        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/print', {}) %]"><i class="fas fa-print"></i>[% l('Print Title Details') %]</a>
+        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/email', {}) %]"><i class="far fa-envelope"></i>[% l('Email Title Details') %]</a>
         [% IF !ctx.is_browser_staff %]
-        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/myopac/lists', { move_cart_by_default => 1, from_basket => 1 }) %]"><i class="fas fa-list"></i>&nbsp;[% l('Add Basket to Saved List') %]</a>
+        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/myopac/lists', { move_cart_by_default => 1, from_basket => 1 }) %]"><i class="fas fa-list"></i>[% l('Add Basket to Saved List') %]</a>
         [% END %]
         [% IF ctx.is_browser_staff %]
-        <a class="dropdown-item" role="menuitem" tabindex="-1" href="add_cart_to_bucket"><i class="fab fa-bitbucket"></i>&nbsp;[% l('Add Basket to Bucket') %]</a>
+        <a class="dropdown-item" role="menuitem" tabindex="-1" href="add_cart_to_bucket"><i class="fab fa-bitbucket"></i>[% l('Add Basket to Bucket') %]</a>
         [% END %]
-        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/clear', {}) %]"><i class="fas fa-trash"></i>&nbsp;[% l('Clear Basket') %]</a>
+        <a class="dropdown-item" role="menuitem" tabindex="-1" href="[% mkurl(ctx.opac_root _ '/mylist/clear', {}) %]"><i class="fas fa-trash"></i>[% l('Clear Basket') %]</a>
       </div>
     </div>
   </div>
diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/check_value_selector.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/check_value_selector.tt2
new file mode 100644 (file)
index 0000000..45df6c0
--- /dev/null
@@ -0,0 +1,64 @@
+
+[%- 
+    # If caller passes a list of possible attribute types, 
+    # search all until we find some values
+
+    IF !attr.size; attr = [attr]; END;
+    all_values = [];
+    attr_class = '';
+    FOR attr_class IN attr;
+        all_values = ctx.search_ccvm('ctype', attr_class, 'opac_visible', 't');
+        IF all_values.size > 0; LAST; END;
+    END;
+    name = name || "fi:" _ attr_class;
+    id = id || attr_class _ "_selector";
+    values = values || CGI.param(name); 
+    IF size AND size < 1; size = all_values.size; END;
+-%]
+
+<div class="w-100">
+
+[% IF none_ok %]
+    <p value=''>[% none_label ? none_label : l('-- Any --') %]</p>
+[% END;
+# turn the list of objects into a list of hashes to 
+# leverage TT's array.sort('<hashkey>') behavior
+simple_sorter = [];
+sorter = [];
+FOR o IN all_values;
+    IF o.is_simple == 't';
+        simple_sorter.push({code => o.code, value => (o.search_label ? o.search_label : o.value)});
+    ELSE;
+        sorter.push({code => o.code, value  => (o.search_label ? o.search_label : o.value)}); 
+    END;
+END;%]
+<ul class="adv_filters">
+[% FOR o IN simple_sorter.sort('value') %]
+<li>
+    <div class="form-check">
+      <label class="form-check-label">
+        <input type="checkbox" class="form-check-input" name='[% name %]' value='[% o.code | html | replace("'","&#39;") %]'[% values.grep('^' _ o.code _ '$').size ? ' checked' : '' %]>
+        [% o.value | html %]
+      </label>
+    </div>
+    </li>
+[%  END;%]
+</ul>
+[%IF simple_sorter.size && sorter.size %]
+    <p disabled='true'>-----</p>
+[%  END; %]
+<ul class="adv_filters">
+[% FOR o IN sorter.sort('value') %]
+<li>
+<div class="form-check">
+    <label class="form-check-label">
+      <input type="checkbox" class="form-check-input"  name='[% name %]' value='[% o.code | html | replace("'","&#39;") %]'[% values.grep('^' _ o.code _ '$').size ? ' checked' : '' %]>
+      [% o.value | html %]
+    </label>
+  </div>
+  </li>
+[%  END -%]
+</ul>
+
+
+</div>
\ No newline at end of file
index 0afeefb..5f48fcc 100755 (executable)
         footer_primary = "#00593d", #Primary Footer Color
         footer_primary_fade = "#007a54", #Fade Footer Color, make equal to footer_primary for no fade
 
+        bg_extras = "#007a54",
+        bg_filter = "#007a54",
+        bg_filter_hover = "#00593d"
+
+        text_filter = "#fff",
+
         background = "#fff", # white
         background_alert = "#ffcccc", # pink
         background_invert = "#252525", # charcoal
         text = "black", # black 
-        text_alert = "red", # red
+        text_alert = "#c50202", # red
         text_attention = "#ffcc33", # pumpkin orange
         text_badnews = "#f41d36", # cherry red
         text_goodnews = "#1dd93c", # lime green
 #Buttons are using default Bootstrap styling colors by default with this scheme, changable to match your library colours
 
 #Submit buttons and confirmations likle login. Make all 4 the same color for no hover effect
-        button_confirm = "#28a745",
-        button_confirm_hover = "#218838",
-        button_confirm_border = "#28a745",
-        button_confirm_border_hover = "#1e7e34",
+        button_confirm = "#007a54",
+        button_confirm_hover = "#00593d",
+        button_confirm_border = "#007a54",
+        button_confirm_border_hover = "#00593d",
         button_confirm_text = "#fff",
 
 #Denial buttons like Cancel. Make all 4 the same color for no hover effect    
index 66b6645..86ebcaa 100755 (executable)
             <li class="nav-item"><a class="nav-link" href="[% mkurl(ctx.opac_root _ '/register') %]">[% 
             l('Request Library Card') %]</a></li>
         [% ELSE %]
-            <li class="nav-item"><a class="nav-link" href="#">[% l('Link 1') %]</a></li> 
+            <li class="nav-item"><a class="nav-link" href="#">[% l('Example Link 1') %]</a></li> 
         [% END %]
-            <li class="nav-item"><a class="nav-link" href="#">[% l('Link 2') %]</a></li> 
-            <li class="nav-item"><a class="nav-link" href="#">[% l('Link 3') %]</a></li>
-            <li class="nav-item"><a class="nav-link" href="#">[% l('Link 4') %]</a></li>
+            <li class="nav-item"><a class="nav-link" href="#">[% l('Example Link 2') %]</a></li> 
+            <li class="nav-item"><a class="nav-link" href="#">[% l('Example Link 3') %]</a></li>
+            <li class="nav-item"><a class="nav-link" href="#">[% l('Example Link 4') %]</a></li>
         </ul>
     </div>
  </div>
index 98c53af..8ddf1a6 100755 (executable)
@@ -1,5 +1,6 @@
-<!-- JS imports, etc.  -->
 
+
+       
 <script  src="[% ctx.media_prefix %]/js/ui/default/opac/simple.js[% ctx.cache_key %]"></script>
 [% INCLUDE "opac/i18n_strings.tt2" %]
 
         /* Don't error out if the object doesn't exist, like on advanced search pages */
         if (dojo.byId('search_box')) {
             dijit.byId('search_box').focus();
-
             var sb_value = dijit.byId('search_box').value;
             /* Dojo won't trigger a change if the value doesn't change */
             if (sb_value) {
@@ -165,7 +165,7 @@ var aou_hash = {
 };
 </script>
 
-<script >if ($('client_tz_id')) { $('client_tz_id').value = OpenSRF.tz }</script>
+<script >if ($('#client_tz_id')) { $('#client_tz_id').value = OpenSRF.tz }</script>
 [%- END; # want_dojo -%]
 
 [%- IF ctx.max_cart_size; %]
@@ -175,12 +175,17 @@ var aou_hash = {
 
 <link rel="stylesheet" href="[% ctx.media_prefix %]/js/ui/default/common/build/js/glide/css/glide.core.min.css[% ctx.cache_key %]">
 <link rel="stylesheet" href="[% ctx.media_prefix %]/js/ui/default/common/build/js/glide/css/glide.theme.min.css[% ctx.cache_key %]">
-                       <script src="[% ctx.media_prefix %]/js/bootstrap/popper.min.js"></script>
+<!-- JS imports, etc.  -->
+<script  src="[% ctx.media_prefix %]/js/bootstrap/jquery-3.5.1.min.js"></script>
 
-        <script src="[% ctx.media_prefix %]/js/bootstrap/bootstrap.min.js"></script>  
+<script src="[% ctx.media_prefix %]/js/bootstrap/popper.min.js"></script>
 
-<script>
-jQuery(document).ready(function(){
-  jQuery('[data-toggle="tooltip"]').tooltip();
-});
+<script src="[% ctx.media_prefix %]/js/bootstrap/bootstrap.min.js"></script>  
+
+<script  src="[% ctx.media_prefix %]/js/datepicker/bootstrap-datepicker.js"></script>
+  <script>
+    $(document).ready(function(){
+    $('[data-toggle="tooltip"]').tooltip();
+    });
 </script>
\ No newline at end of file
index cdaf047..23c405e 100755 (executable)
@@ -4,33 +4,35 @@
         opac_root = ctx.kpac_root;
     END;
 -%]
-<div id="content-wrapper">
-    <div id="main-content" class="content-wrapper-library-page" vocab="http://schema.org/" typeof="Library">
-    <h1 property="name">[% ctx.library.name | html %]</h1>
-
+<div class="container">
+    <div>
+    <h2>[% ctx.library.name | html %]</h2>
+    
     [%-
         lib_url = ctx.get_org_setting(ctx.library.id, 'lib.info_url');
         IF lib_url;
             '<div id="library-url"><a href="'; lib_url | html; '" property="url">'; l('Library web site'); '</a></div>';
         END;
     -%]
-
+    
     [%- IF ctx.hours; %]
         [%- INCLUDE "opac/parts/library/hours.tt2"; %]
     [% END; -%]
 
     [%- IF (ctx.library.email OR ctx.library.phone); %]
-    <h2 id="contact-info">[% l('Contact information') %]</h2>
+    <div class="my-3">
+    <h3 id="contact-info">[% l('Contact information') %]</h3>
     [%- IF ctx.library.email; %]
         <div>[% l('Email address: ') %]<a href="mailto:[% ctx.library.email | html %]" property="email">[% ctx.library.email | html %]</a></div>
     [%- END; %]
     [%- IF ctx.library.phone; %]
         <div>[% l('Telephone: ') %]<a href="tel:[% ctx.library.phone | html %]" property="telephone">[% ctx.library.phone | html %]</a></div>
     [% END; %]
+    </div>
     [% END; %]
 
     [%- IF ctx.library.mailing_address; %]
-    <div id="addresses">
+    <div class="my-3" id="addresses">
         <div id="mailing" property="location address" typeof="PostalAddress">
             <h3 property="contactType">[% l('Mailing address') %]</h3>
             <span property="streetAddress">[% ctx.mailing_address.street1 | html %]
     [%- END; %]
 
     [%- IF ctx.library.parent_ou; %]
-    <h2>[% l('Branch relationship') %]</h2>
+    <div>
+    <h3>[% l('Branch relationship') %]</h3>
     <div id="branch-info">[% l('Parent library: ') %]
         <a property="branchOf" href="[% mkurl(opac_root _ '/library/' _ ctx.parent.shortname, {}, 1) %]">[% ctx.parent.name | html %]</a>
     </div>
+    </div>
     [%  END; -%]
-
-    <div class="common-full-pad"></div>
     </div>
 </div>
index d0bf5b9..9ff96dd 100755 (executable)
@@ -9,7 +9,8 @@
    today = date.format(format = '%Y-%m-%d ');
    # We need to add "today" to the opening/closing hours for Date input
 -%]
-<h2>[% l('Opening hours') %]</h2>
+<div class="my-3">
+<h3>[% l('Opening hours') %]</h3>
 
 [%-
     open = today _ ctx.hours.dow_0_open;
      '<time property="closes" content="' _ date.format(close, format => '%H:%M:%S') _ '">' _ date.format(close) _ '</time>') -%]
 </div>
 [%- END %]
+</div>
\ No newline at end of file
index f1f1450..de30a46 100755 (executable)
@@ -25,7 +25,7 @@
     [%- END %]
     </select>
     <div class="col-3">
-     <button type="submit" class="btn btn-sm btn-confirm float-right"/><i class="fas fa-save"></i>[% l(" Save Changes") %]</button>
+     <button type="submit" class="btn btn-sm btn-confirm float-right"><i class="fas fa-save"></i>[% l(" Save Changes") %]</button>
     </div>
 </form>
 [%- END %]
index ad24410..862308a 100755 (executable)
     
  
     <div class="mx-auto row w-75 my-5">
-        <div class='col-md-6 text-center'>
-            <label for='username_field' class="lbl1" >[% l('Library Card Number') %] 
-            <a href="#" title="[% INCLUDE "opac/parts/login/username_hint.tt2" %]" data-html="true" data-toggle="tooltip">
-                        <i class="fas fa-question-circle"></i>
-                    </a>
-                    </label>
-            <div class="input_bg">
-                <input class="form-control" type='text' id="username_field" name="username" autofocus />
+        <div class='col-md-6'>
+            <label for='username_field' class="lbl1" >[% l('Library Card Number') %]<span title="[% INCLUDE "opac/parts/login/username_hint.tt2" %]" data-html="true" data-toggle="tooltip">
+            <i class="fas fa-question-circle"></i></span></label> <br>
+            <div class="input_bg mb-2">
+                <input class="form-control" type='text' id="username_field" name="username"/>
             </div>
-            <a href='[% mkurl(ctx.opac_root _ '/register', {}, 1) %]'>[% l('Request A Card') %]</a>
-
+               <a href='[% mkurl(ctx.opac_root _ '/register', {}, 1) %]'>[% l('Request A Card') %]</a>
+            <br>
+            
         </div>
-        <div class='col-md-6 text-center'>
-            <label for="password_field" class="lbl1" >[% l('PIN') %]
-            <a href="#" title="[% INCLUDE "opac/parts/login/password_hint.tt2" %]" data-html="true" data-toggle="tooltip">
+        <div class='col-md-6'>
+            <label for="password_field" class="lbl1" >[% l('PIN') %]<span title="[% INCLUDE "opac/parts/login/password_hint.tt2" %]" data-html="true" data-toggle="tooltip">
                         <i class="fas fa-question-circle"></i>
-                    </a>
-            </label>
-            <div class="input_bg">
-                <input class="form-control" id="password_field" name="password" type="password" />
+                    </span></label><br>
+             
+            <div class="input_bg mb-2">
+                <input class="form-control" id="password_field" name="password" type="password"/>
             </div>
-            
-            [% IF reset_password == 'true' %]
-            <a href='[% mkurl(ctx.opac_root _ '/password_reset', {}, 1) %]'>[% l('Forgot your password?') %]</a>
+           [% IF reset_password == 'true' %]
+            <a href='[% mkurl(ctx.opac_root _ '/password_reset', {}, 1) %]'>[% l('Forgot Your Password?') %]  </a>
             [% END %]
+            <br>
+            
         </div>
 
          <div class="col-12 pt-4 text-center">
index 0cf436c..252df0c 100755 (executable)
@@ -3,7 +3,7 @@
     <div class="modal-content">
      <form method='post' action="/eg/opac/login?redirect_to=%2Feg%2Fopac%2Fmyopac%2Fmain">
       <div class="modal-header">
-        <h5 class="modal-title" id="exampleModalLabel">Login To Evergreen</h5>
+        <h1 class="modal-title" id="exampleModalLabel">Login To Evergreen</h1>
         <button type="button" class="close" data-dismiss="modal" aria-label="Close">
           <i class="fas fa-times"></i>
         </button>
 <div class='container text-center'>
     <div class="mx-auto row py-4">
         <div class='col-md-6'>
-            <label for='username_field' class="lbl1" >[% l('Library Card Number') %]<a href="#" title="[% INCLUDE "opac/parts/login/username_hint.tt2" %]" data-html="true" data-toggle="tooltip">
-            <i class="fas fa-question-circle"></i></a></label> <br>
+            <label for='username_field' class="lbl1" >[% l('Library Card Number') %]<span title="[% INCLUDE "opac/parts/login/username_hint.tt2" %]" data-html="true" data-toggle="tooltip">
+            <i class="fas fa-question-circle"></i></span></label> <br>
             <div class="input_bg mb-2">
-                <input class="form-control" type='text' id="username_field" name="username" tabindex="1" />
+                <input class="form-control" type='text' id="username_field" name="username"/>
             </div>
                <a href='[% mkurl(ctx.opac_root _ '/register', {}, 1) %]'>[% l('Request A Card') %]</a>
             <br>
             
         </div>
         <div class='col-md-6'>
-            <label for="password_field" class="lbl1" >[% l('PIN') %]<a href="#" title="[% INCLUDE "opac/parts/login/password_hint.tt2" %]" data-html="true" data-toggle="tooltip">
+            <label for="password_field" class="lbl1" >[% l('PIN') %]<span title="[% INCLUDE "opac/parts/login/password_hint.tt2" %]" data-html="true" data-toggle="tooltip">
                         <i class="fas fa-question-circle"></i>
-                    </a></label><br>
+                    </span></label><br>
              
             <div class="input_bg mb-2">
-                <input class="form-control" id="password_field" name="password" type="password" tabindex="2" />
+                <input class="form-control" id="password_field" name="password" type="password"/>
             </div>
            [% IF reset_password == 'true' %]
             <a href='[% mkurl(ctx.opac_root _ '/password_reset', {}, 1) %]'>[% l('Forgot Your Password?') %]  </a>
index 77e2f6b..e7e7cc0 100755 (executable)
     IF carousels.size > 0;
 %]
 <script  src="[% ctx.media_prefix %]/js/ui/default/common/build/js/glide/glide.min.js[% ctx.cache_key %]"></script>
-<style>
-.coverImage{position: relative;}
-.titleText{}
-</style>
+
 <div class="carousels">
 [% FOREACH carousel IN carousels;
    IF carousel.bibs.size > 0;
 %]
 <div class="carousel">
-<div class="carousel-title">[% carousel.name %]</div>
+<h2 class="carousel-title">[% carousel.name %]</h2>
 <div class="carousel-body glide" id="carousel-[% carousel.id %]">
   <div class="glide__track" data-glide-el="track">
     <ul class="glide__slides">
 [% FOREACH bib IN carousel.bibs; %]
     <li class="glide__slide">
         <div class="carousel-entry">
-            <div class="coverImage"><a href="[% mkurl(ctx.opac_root  _ '/record/' _ bib.id) %]">
-            <img alt="[% l('Book cover') %]" class="carousel-entry-image" src="[% ctx.media_prefix %]/opac/extras/ac/jacket/medium/r/[% bib.id | uri %]" />
-            </a></div>
+            <div class="coverImage">
+            <a href="[% mkurl(ctx.opac_root  _ '/record/' _ bib.id) %]">
+                <img alt="[% bib.title | html %] [% l('Book cover') %]" class="carousel-entry-image img-fluid" src="[% ctx.media_prefix %]/opac/extras/ac/jacket/medium/r/[% bib.id | uri %]" />
+                </a>
+            </div>
             <div class="titleText">
-            <span class="carousel-entry-title"><a href="[% mkurl(ctx.opac_root  _ '/record/' _ bib.id) %]">[% bib.title | html %]</a></span></div>
+            <span class="carousel-entry-title">
+           <!-- <a href="[% mkurl(ctx.opac_root  _ '/record/' _ bib.id) %]"> -->
+            [% bib.title | html %]
+           <!-- </a> -->
+            
+            </span>
+            </div>
         </div>
     </li>
 [% END; %]
     </ul>
   </div>
   <div class="glide__arrows" data-glide-el="controls">
-    <button class="glide__arrow glide__arrow--left btn btn-confirm" data-glide-dir="<">prev</button>
-    <button class="glide__arrow glide__arrow--right btn btn-confirm" data-glide-dir=">">next</button>
+    <button class="glide__arrow glide__arrow--left btn" data-glide-dir="<"><i class="fas fa-arrow-left"></i> Prev</button>
+    <button class="glide__arrow glide__arrow--right btn" data-glide-dir=">">Next <i class="fas fa-arrow-right"></i></button>
   </div>
 </div>
 </div>
index 49c7511..14cb153 100755 (executable)
@@ -1,59 +1,50 @@
 [%  WRAPPER "opac/parts/base.tt2" %]
 
 [% myopac_pages = [
-        {children => 0, parent => "parent",url => "main", text => l("<i class='fas fa-home'></i> Home"), name => l("Account Summary")},
+        {children => 0, parent => "parent",url => "main", text => l("<i class='fas fa-home'></i>Home"), name => l("Account Summary")},
 
-        {children => 2, parent => "parent",url => "charges", text => l("<i class='fas fa-money-check-alt'></i> <span class='sumNum'>[_1]</span> Charges", money(ctx.user_stats.fines.balance_owed)), name => l("Charges")},
-        {children => 0, parent => "charges",url => "charges", text => l("Current Charges"), name => l("Current Charges")},
-        {children => 0, parent => "charges",url => "main_payments", text => l("Payment History"), name => l("Payment History")},
+        {children => 2, parent => "parent",url => "charges", text => l("<i class='fas fa-money-check-alt'></i><span class='sumNum'>[_1]</span>Charges", money(ctx.user_stats.fines.balance_owed)), name => l("Charges")},
+        {children => 0, parent => "charges",url => "charges", text => l("<i class='fas fa-file-invoice'></i>Current Charges"), name => l("Current Charges")},
+        {children => 0, parent => "charges",url => "main_payments", text => l("<i class='fas fa-history'></i>Payment History"), name => l("Payment History")},
 
-        {children => 0, parent => "parent", url => "messages", text => l("<i class='fas fa-envelope'></i> <span class='sumNum'>[_1]</span> Messages",  ctx.user_stats.messages.unread), name => l("Messages")},
+        {children => 0, parent => "parent", url => "messages", text => l("<i class='fas fa-envelope'></i><span class='sumNum'>[_1]</span>Messages",  ctx.user_stats.messages.unread), name => l("Messages")},
 
-        {children => 3, parent => "parent",url => "circs", text => l("<i class='fas fa-book'></i><span class='sumNum'> [_1]</span> Items Checked Out", ctx.user_stats.checkouts.total_out), name = l("Circulations")},
-        {children => 0, parent => "circs", url => "circs", text => l("Current Items Checked Out"), name=> l("Circulations")},
-        {children => 0, parent => "circs", url => "ebook_circs", text => l("E-Items Currently Checked Out"), name => l("E-Items Currently Checked Out")},
-        {children => 0, parent => "circs", url => "circ_history", text => l("Check Out History"), name => l("Check Out History")},
+        {children => 3, parent => "parent",url => "circs", text => l("<i class='fas fa-book'></i><span class='sumNum'>[_1]</span>Items Checked Out", ctx.user_stats.checkouts.total_out), name = l("Circulations")},
+        {children => 0, parent => "circs", url => "circs", text => l("<i class='fas fa-book-reader'></i>Current Items Checked Out"), name=> l("Circulations")},
+        {children => 0, parent => "circs", url => "ebook_circs", text => l("<i class='fas fa-desktop'></i>E-Items Currently Checked Out"), name => l("E-Items Currently Checked Out")},
+        {children => 0, parent => "circs", url => "circ_history", text => l("<i class='fas fa-history'></i>Check Out History"), name => l("Check Out History")},
 
-        {children => 4, parent => "parent",url => "holds", text => l("<i class='fas fa-clock'></i><span class='sumNum'> [_1]</span> Holds / <span class='sumNum'> [_2]</span> Ready", ctx.user_stats.holds.total, ctx.user_stats.holds.ready), name => l("Holds")},
-        {children => 0, parent => "holds", url => "holds", text => l("Items on Hold"), name => l("Holds")},
-        {children => 0, parent => "holds", url => "ebook_holds", text => l("E-Items on Hold"), name => l("E-Items on Hold")},
-        {children => 0, parent => "holds", url => "ebook_holds_ready", text => l("E-Items Ready for Checkout"), name => l("E-Items Ready for Checkout")},
-        {children => 0, parent => "holds", url => "hold_history", text => l("Holds History"), name => l("Holds History")},
+        {children => 4, parent => "parent",url => "holds", text => l("<i class='fas fa-clock'></i><span class='sumNum'>[_1]</span>Holds / <span class='sumNum'>[_2]</span> Ready", ctx.user_stats.holds.total, ctx.user_stats.holds.ready), name => l("Holds")},
+        {children => 0, parent => "holds", url => "holds", text => l("<i class='fas fa-hands'></i>Items on Hold"), name => l("Holds")},
+        {children => 0, parent => "holds", url => "ebook_holds", text => l("<i class='fas fa-desktop'></i>E-Items on Hold"), name => l("E-Items on Hold")},
+        {children => 0, parent => "holds", url => "ebook_holds_ready", text => l("<i class='fas fa-download'></i> E-Items Ready for Checkout"), name => l("E-Items Ready for Checkout")},
+        {children => 0, parent => "holds", url => "hold_history", text => l("<i class='fas fa-history'></i>Holds History"), name => l("Holds History")},
 
-        {children => 4, parent => "parent", url => "prefs", text => l("<i class='fas fa-cog'></i> Preferences"),name => l("Preferences")},
-        {children => 0, parent => "prefs", url => "prefs", text => l("Personal Information"), name => l("Preferences")},
-        {children => 0, parent => "prefs", url => "prefs_notify", text => l("Notifications"), name => l("Notifications")},
-        {children => 0, parent => "prefs", url => "prefs_settings", text => l("Search & History"), name => l("Search & History")},
-        {children => 0, parent => "prefs", url => "prefs_my_lists", text => l("Lists"), name => l("Lists")},
+        {children => 4, parent => "parent", url => "prefs", text => l("<i class='fas fa-cog'></i>Preferences"),name => l("Preferences")},
+        {children => 0, parent => "prefs", url => "prefs", text => l("<i class='fas fa-user-cog'></i>Personal Information"), name => l("Preferences")},
+        {children => 0, parent => "prefs", url => "prefs_notify", text => l("<i class='fas fa-exclamation-circle'></i>Notifications"), name => l("Notifications")},
+        {children => 0, parent => "prefs", url => "prefs_settings", text => l("<i class='fas fa-search'></i>Search & History"), name => l("Search & History")},
+        {children => 0, parent => "prefs", url => "prefs_my_lists", text => l("<i class='fas fa-list'></i>Lists"), name => l("Lists")},
 
         
         {children => 0, parent => "parent", url => "lists", text => l("<i class='fas fa-list'></i> My Lists"), name => l("My Lists")}
     ];
      IF (ctx.show_reservations_tab == 'true');
-        myopac_pages.push({children => 0, parent => "parent", url => "reservations", text => l("Reservations"), name => l("Reservations")});
+        myopac_pages.push({children => 0, parent => "parent", url => "reservations", text => l("<i class='fas fa-splotch'></i> Reservations"), name => l("Reservations")});
     END;
     skin_root = "../"
 %]
-<style>
 
-/* Optional For caret */
-.dropdown-toggle:after {
- margin: 10px 0px 10px 5px;
- float:right;
-} .my_nav .active{background-color:#afffbf;}.my_nav a{text-align:left !important; min-width:17em;border-radius: 0px;}.sumNum{
-    font-weight:700;
-}</style>
     <h2 class="sr-only">[% l('My Account') %]</h2>
     [% INCLUDE "opac/parts/topnav.tt2" %]
     <div>
-    [% INCLUDE "opac/parts/searchbar.tt2" %]
+        [% INCLUDE "opac/parts/searchbar.tt2" %]
     </div>
 
     <div class="mx-5">
-    <div class="row">
-    <hr class="w-100">
-    <div class="my_nav col-xl-3 col-lg-3 col-12 mx-auto text-center my-3">
-        <div class="btn-group-vertical">
+        <div class="row top-divide">
+            <div class="my_nav col-xl-3 col-lg-3 col-12 mx-auto text-center my-3">
+                <div class="btn-group-vertical dropright">
         
                 [%- FOREACH page IN myopac_pages;
                     IF page.url == myopac_page || page.url == parent;
                     END -%]
                     
                     [% IF page.parent == "parent" && page.children > 0; %]
-                    <div class="dropdown w-100">
-                        <a class="btn btn-action dropdown-toggle [% active %]" href="[% mkurl(ctx.opac_root _ '/myopac/' _ page.url, {}, ['bbid', 'offset', 'limit','sort','sort_type', 'hid']) %]" role="button" id="dropdownMenuLink-[% page.url %]" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
+                    <div class="dropdown dropright w-100">
+                        <button class="btn btn-action text-left dropdown-toggle [% active %]" id="dropdownMenuLink-[% page.url %]" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                             [% page.text; %]
-                        </a>
+                        </button>
   
-                    <div class="dropdown-menu" aria-labelledby="dropdownMenuLink-[% page.url %]">
+                        <div class="dropdown-menu" aria-labelledby="dropdownMenuLink-[% page.url %]">
                         [%- FOREACH child IN myopac_pages; -%]
                             [% IF child.parent == page.url;
                             IF myopac_page == child.url;
                         [%- IF (ebook_api.enabled == 'true' && child.url.search('ebook')) || !child.url.search('ebook') %]
 
                         <a role="button" href="[% mkurl(ctx.opac_root _ '/myopac/' _ child.url, {}, ['bbid', 'offset', 'limit','sort','sort_type', 'hid']) %]"
-                    class="dropdown-item btn btn-action [% cactive %]">[% child.text; %]</a>
+                    class="dropdown-item [% cactive %]">[% child.text; %]</a>
                     [% END %]
                             [% END %]
                         [% END %]
-</div></div>
+                        </div>
+                    </div>
                     [% ELSIF page.parent == "parent"; %]
                     
                     <a role="button" class="btn btn-action [% active %]" href="[% mkurl(ctx.opac_root _ '/myopac/' _ page.url, {}, ['bbid', 'offset', 'limit','sort','sort_type', 'hid']) %]">
             [% content %]
             
         </div>
-        </div></div>
+        </div>
     </div> <!-- content-wrapper -->
     
-    <!--Table functions ~ Controlling TH checkbox dynamically and allowing for row clicks to select items -->
-  <script>
-  jQuery('td input:checkbox').change(function(){
-   jQuery('th input:checkbox').prop('checked',jQuery('td input:checkbox:checked').length == jQuery('td input:checkbox').length);
-});
-
-jQuery( document ).ready(function( $ ) {
-    $('tr').click(function(event) {
-        if (event.target.type !== 'checkbox') {
-            $(':checkbox', this).trigger('click');
-        }
-    });  
-});
-</script>
 [% END %]
index 2fd8ed0..7a40c1e 100755 (executable)
@@ -314,7 +314,7 @@ function maybeToggleNumCopies(obj) {
                         END;
                     END %]
         <div class="py-3">
-        <button id="place_hold_submit" type="submit" name="submit"  class="btn btn-confirm" /><i class="fas fa-check"></i> [% l('Submit') %]</button>
+        <button id="place_hold_submit" type="submit" name="submit"  class="btn btn-confirm" ><i class="fas fa-check"></i> [% l('Submit') %]</button>
         [% END # some_holds_allowed %]
         <button type="reset" name="cancel" onclick="window.location='[% redirect | html %]'" id="holds_cancel" class="btn btn-deny"><i class="fas fa-ban"></i> [% l('Cancel') %]</button>
         </div>
index e85e4a3..fc6c4a6 100755 (executable)
@@ -52,7 +52,7 @@ function disable_submit() {
                    
                         [% IF hdata.hold_success %]
 
-                       <h5>[% l("Hold was successfully placed for: "); %]</h5>
+                       <h5 class="success"><i class="fas fa-check-circle"></i> [% l("Hold was successfully placed for: "); %]</h5>
                                        [%
                         title = attrs.title_extended;
                         IF hdata.selected_part AND hdata.parts AND hdata.parts.size > 0;
@@ -101,7 +101,7 @@ function disable_submit() {
 
                         [% ELSIF hdata.hold_failed; any_failures = 1 %]
 
-                            <div><big><strong>[% l("Hold was not successfully placed"); %]</strong></big></div>
+                            <div><big><strong class="danger"><i class="fas fa-times-circle"></i> [% l("Hold was not successfully placed"); %]</strong></big></div>
                             [% IF hdata.hold_local_block %]
                                 <div>[% l("There is already a copy available at your local library.") %]</div>
                             [% ELSIF hdata.hold_failed_event || hdata.hold_local_alert %]
index ecb7e0e..9e9a2bc 100755 (executable)
@@ -13,8 +13,7 @@
     END;
 -%]
 
-<select class="form-control w-100" name="[% name || 'qtype' %]"[% IF id; ' id="'; id ; '"' ; END -%]
-    title="[% l('Select query type:') %]">
+<select aria-label="[% l('Select query type:') %]" class="form-control w-100" name="[% name || 'qtype' %]"[% IF id; ' id="'; id ; '"' ; END -%]>
     [%  query_type = query_type || CGI.param('qtype') || search.default_qtypes.0;
       FOR qt IN query_types;
         NEXT IF browse_only AND NOT qt.browse -%]
index e589634..4e5d6e3 100755 (executable)
@@ -9,21 +9,18 @@
             [% l("You are now browsing [_1]", ctx.browsing_ou.name) | html %]
         </p>
         <br>
-        <table class='data_grid bookshelf'>
+        <table class="w-100">
                 <tr>
-                    <td>
-                        <a class='np_nav_link classic_link btn btn-outline-primary
+                    <td class="text-left">
+                        <a class='btn btn-action
                             href="[% mkurl('', {cnoffset => cnoffset - 1}) %]#cnbrowse">[% l("&lt;&lt; Previous Page") %]</a>
                     </td>
-                    <td colspan='1' class="h3">[% l("Shelf Browser") %]</td>
-                    <td>
-                        <a class='np_nav_link classic_link btn btn-outline-primary
+                    <td colspan='1' class="h3 text-center">[% l("Shelf Browser") %]</td>
+                    <td class="text-right">
+                        <a class='btn btn-action
                             href="[% mkurl('', {cnoffset => cnoffset + 1}) %]#cnbrowse">[% l("Next Page &gt;&gt;") %]</a>
                     </td>
                 </tr>
-            <tr class='browse_border'>
-                <td colspan='3'>&nbsp;</td>
-            </tr>
             <tbody>
             [%- tr_open = 0;
                 PROCESS get_library;
index bebc865..6af8516 100755 (executable)
@@ -82,7 +82,7 @@
                     END;
                 %]
             <a id='[% name %]' href='[% href %]' class="text-white" rel="nofollow" vocab="" style="text-decoration:none;">
-           <div class="card-header bg-success">
+           <div class="card-header extra_header">
                
                 <span>[% arrow %] [% extra.label | html %]</span>
             </div>
index 94a6ff5..ce85b68 100755 (executable)
@@ -13,7 +13,7 @@
                 END;
                 ctx.prev_rec_url = mkurl(ctx.prev_search_record, prev_args, stop_parms);
         %]
-        <a class='np_nav_link classic_link btn btn-outline-primary' title='[% l("Previous Record") %]'
+        <a class='np_nav_link classic_link btn btn-action' title='[% l("Previous Record") %]'
             href='[% ctx.prev_rec_url %]'><span class="nav_arrow_fix">&#9668;</span> <span class="d-none d-md-inline-block">[% l('Previous') %]</span></a>
         [% END %]
         </div>
@@ -47,7 +47,7 @@
                 END;
                 ctx.next_rec_url = mkurl(ctx.next_search_record, next_args, stop_parms);
         %]
-        <a class='np_nav_link classic_link btn btn-outline-primary' title='[% l("Next Record") %]'
+        <a class='np_nav_link classic_link btn btn-action' title='[% l("Next Record") %]'
             href='[% ctx.next_rec_url %]'><span class="d-none d-md-inline-block">[% l('Next') %]</span> <span class="nav_arrow_fix">&#9658;</span></a>
         [% END %]
                </div>
index 2acbb3a..496af04 100755 (executable)
@@ -28,12 +28,12 @@ ctx.metalinks.push('
             END;
             %]
             <a href='http://obalkyknih.cz/view?isbn=[% isbnissn %]'>
-                <img alt="[% l('Image of item') %]" class='img-thumbnail w-auto'
+                <img alt="[% attrs.title _ ' Cover Image' %]" class='img-thumbnail w-auto'
                     src='[% ctx.media_prefix %]/opac/extras/ac/jacket/[% record.summary.jacket_size %]/r/[% ctx.bre_id | uri %]' />
             </a>
             [% ELSE %]
             <a href='[% ctx.media_prefix %]/opac/extras/ac/jacket/large/r/[% ctx.bre_id | uri %]'><img
-                    alt="[% l('Image of item') %]" class='img-thumbnail w-auto'
+                    alt="[% attrs.title _ ' Cover Image' %]" class='img-thumbnail w-auto'
                     src='[% ctx.media_prefix %]/opac/extras/ac/jacket/[% record.summary.jacket_size %]/r/[% ctx.bre_id | uri %]' />
             </a>
             [%- END %]
@@ -41,7 +41,7 @@ ctx.metalinks.push('
             [%- IF attrs.format_label %]
             [% FOR format IN attrs.all_formats %]
             <span style="font-size:14px;" class="mt-3 d-block">
-                <img title="[% format.label | html %]" alt="[% format.label | html %]" src="[% format.icon %]" />
+                <img alt="[% format.label | html %]" src="[% format.icon %]" />
                 [% format.label | html %]
             </span>
             [% END %]
@@ -340,7 +340,7 @@ ctx.metalinks.push('
             </div>
             <!--rdetail_title_div-->
 
-            <div class="col-lg-4 text-center">
+            <div class="col-lg-4 text-right">
              <div class="mx-auto btn-group btn-group-vertical text-left dropright mt-3">
                 [%- search_ou = ctx.search_ou;
                 IF ctx.place_unfillable ||
index e9155ce..60db23f 100755 (executable)
@@ -1,4 +1,4 @@
-<div>
+
     <div id="zero_search_hits">
         <div class="facet_sidebar_hidden" id="facet_sidebar">
           <h3 class="sr-only">[% l('Search Results filters') %]</h3>
@@ -65,5 +65,4 @@
             </p>
             [% INCLUDE "opac/parts/result/lowhits_purchase.tt2" %]
         </div>
-    </div>
-</div>
+    </div>
\ No newline at end of file
index 9b8f3f4..c394f7c 100755 (executable)
             </div>
             [% END %]
 
-            <table id="result_table_table" title="[% l('Search Results') %]" class="table_no_border_space container-fluid">
-            <thead class="sr-only">
-                <tr>
-                <th>[% l('Search result number') %]</th>
-                <th>[% l('Book jacket cover art') %]</th>
-                <th>[% l('Item details and Actions') %]</th>
-                </tr>
-            </thead>
-
-            <tbody id="result_table">
+            
                 [%  FOR rec IN ctx.records;
                     attrs = {};
                     attrs.marc_xml = rec.marc_xml;
@@ -82,9 +73,8 @@
                         hold_type = 'T';
                         END; -%]
                         
-            <tr class="result_table_row">
-                <td colspan="3">
-                    <div class="row">
+                    <div class="row" style="border-top: 1px solid grey;">
+                 
                     <!--Count&Checkboxes-->
                         <div class="col-lg-1">
                             <div class="results_row_count"> [% IF !ctx.is_meta; %]
                         </div> 
                         <!--Cover Image-->
                         <div class='my-auto col-lg-2 text-center' id="result[% rec.bre_id %]">
-                            <a href="[% record_url %]"><img alt="[% l('Book cover') %]"
+                            <a href="[% mkurl(record_url_path, add_parms, del_parms); %]"><img alt="[% attrs.title | html;%]"
                             id='item_jacket[% rec.bre_id %]' class='my-2' 
                             src='[% ctx.media_prefix %]/opac/extras/ac/jacket/large/r/[% rec.bre_id | uri %]' style="max-height:150px;" /></a><br />
                         </div>       
                             <!--Info-->
                         <div class='result_table_title_cell col-lg-9'>
-                            <div class="row h-100">
+                            <dRecord Holdings Summaryiv class="row h-100">
                                 <div class="result_metadata col-md-8 col-12">
                                     [% IF rec.mmr_id %]
                                     <abbr class="unapi-id" title='tag:[% ctx.hostname %],[% date.format(date.now, '%Y') %]:metabib-metarecord/[% rec.mmr_id %]'></abbr>
                                     <span class="mx-2">
                                         [%- IF attrs.format_label; %]
                                             [% FOR format IN attrs.all_formats %]
-                                                <img title="[% format.label | html %]" 
-                                                    alt="[% format.label | html %]" 
+                                                <img alt="[% format.label | html %]" 
                                                     src="[% format.icon %]" /> 
                                                 [% format.label | html %]
                                             [% END %]
                                         [%- END; END; -%]
   
                                     <div>
+                                    [% IF attrs.author; %]
                                         <a  title="[% l("Perform an Author Search") %]"
                                             class="record_author"
                                             href="[%- 
                                             authorquery = attrs.author | replace('[#"^$\+\-,\.:;&|\[\]()]', ' ');
                                             mkurl(ctx.opac_root _ '/results', {qtype => 'author', query => authorquery}, general_search_parms.merge(expert_search_parms, browse_search_parms, facet_search_parms))
                                             -%]" rel="nofollow" vocab="">[% IF attrs.hl.author; attrs.hl.author; ELSE; attrs.author | html; END %]</a>
+                                    [% END; %]
+
+                                    
                                             [%-
                                             FOR entry IN attrs.graphic_authors;
                                                 FOR alt IN entry.graphic;
                                             [% END %]
                                             [% IF attrs.phys_desc %]
                                                 <tr >
-                                                    <td nowrap="nowrap" valign="top"><strong>[% l('Phys. Desc.:') %]</strong></td>
+                                                    <td valign="top"><strong>[% l('Phys. Desc.:') %]</strong></td>
                                                     <td>[% args.phys_desc | html %]</td>
                                                 </tr>
                                             [% END %]
                                         </div>
                                         </div>
                                     </div>
-                                </div>
-                            </div>
-                        </td>
-                    </tr>
+                                </dRecord>
+                            </div></div>
+                      
                 [%- IF ENV.OILS_CHILIFRESH_ACCOUNT %]
-                <tr>
-                    <td/>
-                    <td align='center'> <!-- Chilifresh reviews link --> 
+               
                         <span class="chili_review" id="isbn_[% attrs.isbn_clean | html %]"> </span>
-                    </td>
-                </tr>
-                <tr>
-                    <td/>
-                    <td> <!-- Chilifresh reviews panel -->
+                   
                         <div id="chili_review_[% attrs.isbn_clean | html %]" style="display: none;" align="center"></div>
-                    </td>
-                </tr>
+                    
                 [%- END %]
                     [% END %]
-            </tbody>
-        </table>
+           
     </div>
-</div>
 
 
 
index 2787443..ec43f26 100755 (executable)
@@ -1,7 +1,7 @@
 [% IF ctx.saved_searches.size %]
 <div id="accordion">
   <div class="card">
-    <div class="card-header" id="headingOne">
+    <div class="card-header" id="headRecent">
       <h5 class="mb-0">
         <button class="btn btn-link" data-toggle="collapse" data-target="#collapseOne" aria-expanded="true" aria-controls="collapseOne">
           [% l("Recent searches") %]
@@ -9,7 +9,7 @@
       </h5>
     </div>
 
-    <div id="collapseOne" class="collapse" aria-labelledby="headingOne" data-parent="#accordion">
+    <div id="collapseOne" class="collapse" aria-labelledby="headRecent" data-parent="#accordion">
       <div class="card-body">
                [% FOR s IN ctx.saved_searches %]
                <ul>
index d27fcb9..89005ca 100755 (executable)
    <ul class="navbar-nav nav-fl px-3">
        <!--Link 1-->
       <li class="nav-item">
-        <a class="nav-link" href="[% ctx.link_one %]">Link 1<span class="sr-only">(current)</span></a>
+        <a class="nav-link" href="[% ctx.link_one %]">Example Link 1<span class="sr-only">(current)</span></a>
       </li>
        <!--Link 2-->
       <li class="nav-item">
-        <a class="nav-link" href="[% ctx.link_two %]">Link 2</a>
+        <a class="nav-link" href="[% ctx.link_two %]">Example Link 2</a>
       </li>
        <!--Link 3-->
       <li class="nav-item">
-        <a class="nav-link" href="[% ctx.link_three %]">Link 3</a>
+        <a class="nav-link" href="[% ctx.link_three %]">Example Link 3</a>
       </li>
        <!--Link 4-->
       <li class="nav-item">
-        <a class="nav-link" href="[% ctx.link_four %]">Link 4</a>
+        <a class="nav-link" href="[% ctx.link_four %]">Example Link 4</a>
       </li>
     </ul>
     <!--Right Links-->
@@ -39,7 +39,7 @@
        </li>
       <!--User is signed in-->
     [% ELSE %]
-    <div class="dropdown-divider"></div>
+    <li><div class="dropdown-divider"></div></li>
        <!--User-->
        <li class="nav-item">
                <a class="nav-link disabled active mx-2" href="#">Hello, [%  l('[_1] [_2]', ctx.user.first_given_name, ctx.user.family_name) | html %]</a>
          </nav>
   
 
-<script>
-jQuery(document).ready(function(){
-       var item = jQuery('#dashboard_e .dash-link');
-       item.children('.count').each(function() {
-       if(jQuery(this).text() == "0")
-               jQuery(this).addClass("dash-unclear");
-        else
-               jQuery(this).addClass("dash-clear");
-    });
-});
-</script>
\ No newline at end of file
index 55efddb..90df4b9 100755 (executable)
@@ -42,11 +42,7 @@ register_fields = [
     {class => 'stgu',  name = 'usrname', label => l('Requested Username')}
 ];
 
-# The dojo date widget in the patron edit UI only accepts default 
-# values in ISO8601 format.  It will not accept locale-shaped dates.
-IF !ctx.register.settings.stgu.dob.example;
-    ctx.register.settings.stgu.dob.example = l('YYYY-MM-DD or YYYY/MM/DD');
-END;
+
 
 %]
 
@@ -54,7 +50,7 @@ END;
 <div id="content-wrapper">
     <div id="main-content-register" class="container">
         <h1>[% l('Request a Library Card')%]</h1>
-        <span style="color:red;">&bigstar; = Required Field</span> 
+        <span class="validate">&bigstar; = Required Field</span> 
         <hr/>
 
         [% IF ctx.register.success %]
@@ -99,7 +95,7 @@ END;
                 ) | html %]</h4>
         [% END %]
 
-        <form method='POST' class="needs-validation" onSubmit="return dobValidate(document.getElementById('stgu.dob'))" novalidate>
+        <form method='POST' class="needs-validation" novalidate>
             <table class="w-100">
                 <tr>
                     <td width="30">
@@ -157,12 +153,22 @@ FOR field_def IN register_fields;
         <label for='[% field_path %]'>[% field_def.label | html %]</label>
     </td>
     <td class="py-3">
+    [% IF fname == "dob"; %]
+     <div class="input-group date" data-provide="datepicker-inline">
+        <input type="text" class="form-control datepicker" id='[% field_path %]'
+            name='[% field_path %]' value='[% value || CGI.param(field_path) | html %]' [% IF require %]required[% END %] data-date-format="yyyy-mm-dd" />
+        <div class="input-group-addon">
+            <span class="glyphicon glyphicon-th"></span>
+        </div>
+    </div>
+    [% ELSE; %]
         <input 
                class='form-control'
             type='text'
             id='[% field_path %]'
             name='[% field_path %]'
             value='[% value || CGI.param(field_path) | html %]' [% IF require %]required[% END %]/>
+     [% END; %]  
         <div class="invalid-feedback">
           Please enter a [% field_def.label | html %]
         </div>
@@ -174,7 +180,7 @@ FOR field_def IN register_fields;
     </td>
     <td>
         [% IF require %]
-        <span style="color:red;">&bigstar;</span>
+        <span class="validate">&bigstar;</span>
         [% END %]
     <!-- display errors and example text -->
 
@@ -245,4 +251,13 @@ FOR field_def IN register_fields;
     });
   }, false);
 })();
+
+$(document).ready(function(){         
+   $('.datepicker').datepicker({
+        weekStart: 1,
+        autoclose: true,
+        todayHighlight: true,
+    });
+    $('.datepicker').datepicker("setDate", new Date());
+});
 </script>
\ No newline at end of file
index 2f826d9..53f08f9 100755 (executable)
@@ -18,7 +18,7 @@
 
     PROCESS "opac/parts/misc_util.tt2";
     PROCESS get_library;
--%]<div>
+-%]
     <h2 class="sr-only">[% l('Search Results') %]</h2>
     <form action="[% ctx.opac_root %]/results" method="get">
     [% INCLUDE "opac/parts/searchbar.tt2" took_care_of_form=1 %]
@@ -56,7 +56,7 @@
                     <div class="mx-auto">
                         <!-- ===== Drop Down ===== -->
                         <div class="search-option my-2">
-                               <label for="opac.result.sort">[% l('') %]</label>
+                               <label for="opac.result.sort">[% l('Sort Results') %]</label>
                                [% INCLUDE "opac/parts/filtersort.tt2" value=CGI.param('sort') submit_on_change=1 class="form-control" %]
                         </div>
                         [%- IF show_more_details.default != 'hide' -%]
index 08023d6..a799fb5 100644 (file)
@@ -52,6 +52,7 @@ function fetch_adv_copy_locations(org_ids) {
                 var list = resp.content();
                 if (list && list.length) {
                     render_adv_copy_locations(list);
+                    render_adv_copy_locations_new(list);
                 } else {
                     dojo.addClass('adv_chunk_copy_location', 'hidden');
                 }
@@ -62,8 +63,48 @@ function fetch_adv_copy_locations(org_ids) {
     }).send(); 
 }
 
+function render_adv_copy_locations_new(locations) {
+    var sel = dojo.byId('adv_copy_location_selector_new');
+    if(sel)
+    {
+    var cgi = new openils.CGI();
+
+    // collect any location values from the URL to re-populate the list
+    var url_selected = cgi.param('fi:locations');
+    if (url_selected) {
+        if (!dojo.isArray(url_selected)) 
+            url_selected = [url_selected];
+    }
+
+    dojo.removeClass('adv_chunk_copy_location', 'hidden');
+    
+    // sort by name
+    locations = locations.sort(
+        function(a, b) {return a.name < b.name ? -1 : 1}
+    );
+
+    
+    var ulist = dojo.create('ul', {class: "adv_filters"});
+    // append the new list of locations
+    dojo.forEach(locations, function(loc) {
+        var attrs = {value : loc.id, name : "fi:locations", type: "checkbox", class: "form-check-input"};
+        if (url_selected && url_selected.indexOf(''+loc.id) > -1) {
+            attrs.selected = true;
+        }
+        
+        
+        ulist.appendChild(dojo.create('li')).appendChild(dojo.create('div', {class: "form-check"})).appendChild(dojo.create('label', {innerHTML : loc.name, class: "form-check-label"})).prepend(dojo.create('input', attrs));
+    });
+    sel.appendChild(dojo.create("div", {class: "card-body"})).appendChild(ulist);}
+}
+
+   
+
 function render_adv_copy_locations(locations) {
     var sel = dojo.byId('adv_copy_location_selector');
+    if(sel){
+
+    
     var cgi = new openils.CGI();
 
     // collect any location values from the URL to re-populate the list
@@ -92,6 +133,7 @@ function render_adv_copy_locations(locations) {
         sel.appendChild(dojo.create('option', attrs));
     });
 }
+}
 
 // load the locations on page load
 dojo.addOnLoad(function() {
index abf50c7..ae5a80e 100644 (file)
@@ -1,5 +1,6 @@
 /* Keep this dead simple. No dojo. */
-function $(s) { return document.getElementById(s); }
+
+function get(s) { return document.getElementById(s); }
 function removeClass(node, cls) {
     if (!node || !node.className) return;
     node.className =
@@ -17,22 +18,22 @@ function hideMe(node) { addClass(node, "hide_me"); }
 var _search_row_template, _expert_row_template;
 function addSearchRow() {
     if (!_search_row_template) {
-        t = $("adv_global_row").cloneNode(true);
+        t = get("adv_global_row").cloneNode(true);
         t.id = null;
         _search_row_template = t;
     }
 
-    $("adv_global_tbody").insertBefore(
+    get("adv_global_tbody").insertBefore(
         _search_row_template.cloneNode(true),
-        $("adv_global_addrow")
+        get("adv_global_addrow")
     );
 
-    $("adv_global_input_table").rows[$("adv_global_input_table").rows.length - 2].getElementsByTagName("input")[0].value = "";
+    get("adv_global_input_table").rows[get("adv_global_input_table").rows.length - 2].getElementsByTagName("input")[0].value = "";
 }
 
-(function($){
+(function(get){
 var _search_row_template, _expert_row_template, t;
-var _el_adv_global_row = $("adv_global_row"), _el_adv_expert_row = $("adv_expert_row");
+var _el_adv_global_row = get("adv_global_row"), _el_adv_expert_row = get("adv_expert_row");
 if (_el_adv_global_row) {
     t = _el_adv_global_row.cloneNode(true);
     t.id = null;
@@ -45,14 +46,14 @@ if (_el_adv_expert_row) {
     _expert_row_template = t;
 }
 function addExpertRow() {
-    $("adv_expert_rows_here").appendChild(
+    get("adv_expert_rows_here").appendChild(
         _expert_row_template.cloneNode(true)
     );
 }
 
 window.addSearchRow = addSearchRow;
 window.addExpertRow = addExpertRow;
-})($);
+})(get);
 function killRowIfAtLeast(min, link) {
     var row = link.parentNode.parentNode;
     if (row.parentNode.getElementsByTagName("tr").length > min)
@@ -61,7 +62,7 @@ function killRowIfAtLeast(min, link) {
 }
 function print_node(node_id) {
     var iframe = document.createElement("iframe");
-    var source_node = $(node_id);
+    var source_node = get(node_id);
     source_node.parentNode.appendChild(iframe);
 
     var iwin = iframe.contentWindow;
@@ -91,7 +92,7 @@ function select_all_checkboxes(name, checked) {
 
 function search_modifier_onchange(type, checkbox, submitOnChange) {
     if (checkbox.form._adv && !checkbox.checked) {
-        var search_box = $('search_box');
+        var search_box = get('search_box');
         var reg = new RegExp('#' + type + ' ?', 'g');
         search_box.value = search_box.value.replace(reg, "");
     }
@@ -103,7 +104,7 @@ function search_modifier_onchange(type, checkbox, submitOnChange) {
 
 function exclude_onchange(checkbox) {
     if (checkbox.form._adv && !checkbox.checked) {
-        var search_box = $('search_box');
+        var search_box = get('search_box');
         // Other functions' form submits may create duplicates of this, so /g
         var reg = /-search_format\(electronic\)/g;
         search_box.value = search_box.value.replace(reg, "");
@@ -273,7 +274,6 @@ function updateHoldsCheck() {
             return isValid;
         }
     }
-
     alert("No option selected.");
     return isValid;
 }