LP1778972 A slew of updates
authorChris Burton <cburton@nflibrary.ca>
Fri, 17 Jul 2020 00:52:42 +0000 (20:52 -0400)
committerJane Sandberg <sandbej@linnbenton.edu>
Sat, 12 Sep 2020 15:52:49 +0000 (08:52 -0700)
Including fixes to ensure pages are valid and an entire reimagining of
the My Account interface

Also brings everything up to a more visible area and adds FontAwesome5
Iconography

Bookbag Action Fix and minor other misc

Signed-off-by: Chris Burton <cburton@nflibrary.ca>
Signed-off-by: Ruth Frasur <rfrasur@library.in.gov>
Signed-off-by: Galen Charlton <gmc@equinoxinitiative.org>
Signed-off-by: Jane Sandberg <sandbej@linnbenton.edu>
200 files changed:
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
Open-ILS/src/templates-bootstrap/opac/ReadMe.txt [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/advanced.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/browse.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/cnbrowse.tt2 [changed mode: 0644->0755]
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 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/home.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/library.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/login.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/mylist.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/mylist/clear.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/mylist/email.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/mylist/print.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/charges.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/circ_history.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/circ_history/export.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/circs.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/ebook_checkout.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/ebook_circs.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/ebook_holds.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/ebook_holds_ready.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/ebook_place_hold.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/hold_history.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/holds.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/holds/edit.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/list/print.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/list/update.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/lists.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/main.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/main_pay.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/main_pay_init.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/main_payment_form.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/main_payments.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/messages.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/messages/list.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/messages/single_message.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/prefs.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/prefs_my_lists.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/prefs_notify.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/prefs_settings.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/receipt_email.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/receipt_print.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/reservations.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/update_email.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/update_password.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/myopac/update_password_msg.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/myopac/update_username.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/acjs.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/advanced/expert.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/advanced/global_row.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/advanced/numeric.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/advanced/search.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/anon_list.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/base.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/bookbag_actions.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/cart.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/cart_nav.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/check_value_selector.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/parts/chilifresh.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/coded_value_selector.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/config-fresh.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/config.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/css/colors.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/css/fonts.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/ebook_api/avail.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/ebook_api/base_js.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/ebook_api/login_js.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/filter_group_selector.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/filtersort.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/footer.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/goog_analytics.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/header.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/hold_error_messages.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/hold_status.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/homesearch.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/js.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/library/core_info.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/library/hours.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/library_name_link.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/library_name_link_from_ou.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/locale_picker.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/location_name_link.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/login/form.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/login/help.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/login/login_modal.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/login/password_hint.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/login/username_hint.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/metarecord_hold_filters.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/misc_util.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/multi_hold_select.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/myopac/base.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/myopac/column_sort_support.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/myopac/main_base.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/myopac/main_refund_policy.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/myopac/prefs_base.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/myopac/prefs_hints.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/org_selector.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/place_hold.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/place_hold_result.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/pref_lib_display.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/pref_locale_picker.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/preserve_params.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/qtype_selector.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/addedcontent.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/authors.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/awards.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/body.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/cnbrowse.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/contents.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/copy_counts.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/copy_table.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/extras.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/issues-db.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/issues-mfhd.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/issues.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/navigation.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/refworks.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/series.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/subjects.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/summary.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/record/summaryplus.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/relators.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/adv_filter.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/copy_counts.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/facets-hz.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/facets.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/lowhits.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/lowhits_purchase.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/paginate.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/result/table.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/searchbar.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/sms_carrier_selector.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/sms_number_textbox.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/staff_saved_searches.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/stripe.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/tips.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/topnav.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/topnav_links.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/topnav_logo.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/parts/topnav_subnav.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/password_reset.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/password_reset_msg.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/place_hold.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/record.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/record/email.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/record/print.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/register.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/results.tt2 [changed mode: 0644->0755]
Open-ILS/src/templates-bootstrap/opac/sms_cn.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/temp_warn.tt2 [new file with mode: 0755]
Open-ILS/web/css/datepicker/bootstrap-datepicker.css [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker.css.map [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker.min.css [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker.standalone.css [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker.standalone.css.map [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker.standalone.min.css [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker3.css [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker3.css.map [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker3.min.css [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker3.standalone.css [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker3.standalone.css.map [new file with mode: 0644]
Open-ILS/web/css/datepicker/bootstrap-datepicker3.standalone.min.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/all.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/all.min.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/brands.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/brands.min.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/fontawesome.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/fontawesome.min.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/regular.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/regular.min.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/solid.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/solid.min.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/svg-with-js.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/svg-with-js.min.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/v4-shims.css [new file with mode: 0644]
Open-ILS/web/css/fontawesome/v4-shims.min.css [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-brands-400.eot [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-brands-400.svg [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-brands-400.ttf [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-brands-400.woff [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-brands-400.woff2 [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-regular-400.eot [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-regular-400.svg [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-regular-400.ttf [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-regular-400.woff [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-regular-400.woff2 [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-solid-900.eot [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-solid-900.svg [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-solid-900.ttf [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-solid-900.woff [new file with mode: 0644]
Open-ILS/web/css/webfonts/fa-solid-900.woff2 [new file with mode: 0644]
Open-ILS/web/js/bootstrap/jquery-3.5.1.min.js [new file with mode: 0644]
Open-ILS/web/js/bootstrap/popper.min.js [new file with mode: 0644]
Open-ILS/web/js/bootstrap/popper.min.js.map [new file with mode: 0644]
Open-ILS/web/js/datepicker/bootstrap-datepicker.js [new file with mode: 0644]
Open-ILS/web/js/datepicker/bootstrap-datepicker.min.js [new file with mode: 0644]
Open-ILS/web/js/ui/default/opac/copyloc.js
Open-ILS/web/js/ui/default/opac/ebook_api/loggedin.js
Open-ILS/web/js/ui/default/opac/simple.js

index 7388d79..c458848 100644 (file)
@@ -213,6 +213,7 @@ sub load {
     return $self->load_myopac_payments if $path =~ m|opac/myopac/main_payments|;
     return $self->load_myopac_pay_init if $path =~ m|opac/myopac/main_pay_init|;
     return $self->load_myopac_pay if $path =~ m|opac/myopac/main_pay|;
+    return $self->load_myopac_main if $path =~ m|opac/myopac/charges|;
     return $self->load_myopac_main if $path =~ m|opac/myopac/main|;
     return $self->load_myopac_receipt_email if $path =~ m|opac/myopac/receipt_email|;
     return $self->load_myopac_receipt_print if $path =~ m|opac/myopac/receipt_print|;
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>
+
old mode 100644 (file)
new mode 100755 (executable)
index 1d6b412..30d27ab
     <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">
                        class="nav-link [% IF pane == 'expert' %]active[% END %]"
                         id="expert_search">[% l('Expert Search') %]</a>
                 </li>
+                </ul>
             </div>
         </div>
         <div id="content-wrapper">
-            <div id="main-content">
+            <div>
                 <div class="advanced_div">
                 [% IF pane == 'advanced' %]
                 [% INCLUDE "opac/parts/advanced/search.tt2" %]
@@ -50,7 +41,6 @@
                 [% INCLUDE "opac/parts/advanced/expert.tt2" %]
                 [% END %]
                 </div>
-                <div class="common-full-pad"></div>    
             </div>
         </div>
     </div>
old mode 100644 (file)
new mode 100755 (executable)
index bf34c23..dfc3ea9
@@ -32,7 +32,7 @@
     <h2 class="sr-only">[% l('Catalog Browse') %]</h2>
     
     <div id="content-wrapper" class="my-5">
-        <div id="main-content" class="container mx-auto w-75">
+        <div class="container mx-auto w-75">
             <div id="browse-the-catalog">
                 <div id="browse-controls" class='row text-center'>
                     <form method="get" onsubmit="$('browse-submit-spinner').className = ''; return true" class="mx-auto">
                             arialabel=l('Select holding library') %]
                         [% l('Browse for [_1] starting with [_2] in [_3]', control_qtype, control_bterm, control_locg) %]
 
-                       <input id='search-submit-go' type="submit" value="[% l('Browse') %]" alt="[% l('Browse') %]" class="btn btn-confirm my-2"/>
+                       <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;" 
                         alt="[% l('Search in progress icon') %]" />
                     </form>
                 </div>
-                       <div class="row text-center my-5 border-top border-bottom">
+                       <div class="row my-5 border-top border-bottom">
                 [% BLOCK browse_pager %]
-                <div class="browse-pager col-12">
+                <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 %]
 
                    
                 [% PROCESS browse_pager id=1 %]
             </div>
 </div>
-            <div class="common-full-pad"></div>        
         </div>
     </div>
 
old mode 100644 (file)
new mode 100755 (executable)
index 86454e9..ece7916
     <span class="sr-only">[% l('Call Number Browse') %]</span>
     [% INCLUDE "opac/parts/searchbar.tt2" %]
     <div id="content-wrapper">
-        <div id="main-content">
             <div class="cnbrowse_div">
                 [% INCLUDE "opac/parts/record/cnbrowse.tt2" %]
             </div>
-            <div class="common-full-pad"></div>        
-        </div>
     </div>
 [% 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;
+    }
+}
old mode 100644 (file)
new mode 100755 (executable)
index 3f7291f..4b0e8c5
@@ -4,6 +4,21 @@
     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;
+}
+
+.top-divide{
+        border-top: 1px solid rgba(0,0,0,.1);
+}
+
 /*
 Mini Table Styling
 */
@@ -192,6 +207,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
 */
@@ -299,11 +321,7 @@ Novelist Styling
     border-radius: 1rem !important;
 }
 
-#cnbrowse{
-       width: 95%;
-    text-align: center;
-    padding: 15px;
-}
+
 .cn_browse_item .card{
        padding: 15px;
 }
@@ -316,10 +334,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;
 }
@@ -350,8 +383,7 @@ html{
     min-height: 100vh;
 }
 body {
-height:100%;
-min-height: 100vh;
+    min-height: 100vh;
     margin:0;
     font-family: [% css_fonts.font_main %] !important;
     font-size: [% css_fonts.size_base %];
@@ -422,18 +454,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;
@@ -477,15 +503,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;
@@ -747,23 +765,11 @@ for now until a better color is picked - if needed.
 }
 
 #adv_special_block {
-    [% IF rtl == 't' -%]
-    float: right;
-    [%- ELSE %]
-    float: left;
-    [%- END %]
+    
     padding: 5px;
     margin-top: 5px;
 }
 
-#adv_search_submit {
-    [% IF rtl == 't' -%]
-    margin-right: 10px;
-    [%- ELSE %]
-    margin-left: 10px;
-    [%- END %]
-    position: relative;
-}
 
 .checkbox_col {
     width: 1%;
@@ -1133,8 +1139,7 @@ div.format_icon {
 
 #content-wrapper {
     background-color: [% css_colors.background %];
-    min-height: 600px;
-        height: auto;
+    height: auto;
     display: grid;
 }
 
@@ -1258,10 +1263,6 @@ div.format_icon {
     margin:0;
 }
 
-#holds_temp_parent tr td div {
-    margin-top: 10px;
-    margin-bottom: 10px;
-}
 
 #holds_temp_parent tr td div.format_icon {
     margin-top: 6px;
@@ -1397,12 +1398,14 @@ tr.result_table_row > td.result_table_pic_header {
     position: relative;
 }
 #record_basket_count_floater {
-    background-color: [% css_colors.accent_lighter %];
+    background-color: #ddd;
     position: absolute;
-    top: -3px;
-    right: -3px; /* relative to icon, so don't want to adjust for RTL */
+    top: 0px;
+    right: -10px;
     z-index: 2;
+    text-align: center;
     border-radius: 50%;
+    width: 20px;
 }
 #record_basket_count_floater a {
     text-decoration: none;
@@ -1446,6 +1449,10 @@ div.result_table_utils_cont {
     [% END -%]
 }
 
+.mylist_action:hover{
+    text-decoration: none;
+}
+
 #myopac_summary_div p {
     margin:0;
     margin-bottom: 10px;
@@ -2009,9 +2016,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 %];
@@ -2182,7 +2210,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 {
@@ -2982,8 +3009,12 @@ a.preflib_change {
     #nav-divide{
        display:none !important;
     }
+    
 }
 @media only screen and (max-width: 800px) {
+    .adv_options{
+        width: 100% !important;
+    }
     .facet_sidebar_hidden, .result_block_hidden {
         display: none;
     }
@@ -3193,9 +3224,7 @@ a.preflib_change {
         float:left;
         [% END -%]
     }
-    #dashboard, #dashboard_e {
-        display: none;
-    }
+   
     #holds_box form blockquote {
         [% IF rtl == 't' -%]
         margin-right: 10px;
@@ -3738,6 +3767,10 @@ label[for*=expert_]
     font-weight: bold;
     text-align: center;
 }
+
+.fas, .far{
+    margin: 0px 3px;
+}
 .carousel-entry {
     max-width: 150px;
 }
@@ -3758,10 +3791,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{
@@ -3775,18 +3808,63 @@ label[for*=expert_]
     margin: 0px 10px;
 }
 
-.title{
-    font-size: large;
-}
 
 #homeLogo{
-    opacity: 0.5; 
     filter: alpha(opacity=50); 
     background-color: #fff; /* Used if the image is unavailable */
     height: 500px; /* You must set a specified height */
     background-position: center; /* Center the image */
     background-repeat: no-repeat; /* Do not repeat the image */
     background-size: contain; /* Resize the background image to cover the entire container */
-    background-image: url("https://evergreen-ils.org/wp-content/uploads/2018/09/Evergreen-Final-Logo.png");
+    background-image: url("[% ctx.media_prefix %]/images/Evergreen-Final-Logo.png");
 
 }
+
+.navbar-dark .navbar-nav .nav-link{
+    color: #fff !important;
+}
+
+.pref_table{
+    margin: 10px;
+}
+
+.checkCell{width:30px;}
+
+@media (min-width: 650px){
+.modal-dialog {
+    max-width: 600px !important;
+    }
+
+}
+
+.listTitleText{
+    width:33%;
+}
+
+.facet_box_wrapper .card-header{
+    background-color: [% css_colors.facets_back %];
+    color: [% css_colors.facets_text %];
+}
+
+.vertMid {
+    position: relative;
+    top: 50%;
+    transform: translateY(-50%);
+}
+
+.sumNum{
+    margin-right:5px;
+}
+
+.my_nav .dropdown-toggle::after{
+    margin: 5px 0px !important;
+    float: right;
+}
+
+.my_nav .fas, .mynav .far{
+    min-width:20px;
+}
+
+.adv_options{
+    width: 50%;
+}
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index b362fe6..4d15d07
@@ -5,9 +5,7 @@
     ctx.page_title = l("Home") %]
     <h2 class="sr-only">[% l('Catalog Home') %]</h2>
     [% INCLUDE "opac/parts/searchbar.tt2" is_home_page=1 %]
-    <div>
-        <div>
+  
             [% INCLUDE "opac/parts/homesearch.tt2" %]
-        </div>
-    </div>
+        
 [%- END %]
diff --git a/Open-ILS/src/templates-bootstrap/opac/library.tt2 b/Open-ILS/src/templates-bootstrap/opac/library.tt2
new file mode 100755 (executable)
index 0000000..702f30e
--- /dev/null
@@ -0,0 +1,12 @@
+[%- PROCESS "opac/parts/header.tt2";
+    WRAPPER "opac/parts/base.tt2";
+    INCLUDE "opac/parts/topnav.tt2";
+    ctx.page_title = l("Library details: [_1]", ctx.library.name);
+    canon = ctx.proto _ '://' _ ctx.hostname _ mkurl('', {}, 1);
+    ctx.metalinks.push('<link rel="canonical" href="' _ canon  _ '" />');
+    ctx.metalinks.push('<meta property="og:url" content="' _ canon  _ '" />');
+    ctx.metalinks.push('<meta property="og:type" content="http://schema.org/Library" />');
+-%]
+    [%- INCLUDE "opac/parts/searchbar.tt2" %]
+    [%- INCLUDE "opac/parts/library/core_info.tt2"; %]
+[%- END; %]
diff --git a/Open-ILS/src/templates-bootstrap/opac/login.tt2 b/Open-ILS/src/templates-bootstrap/opac/login.tt2
new file mode 100755 (executable)
index 0000000..0e82edf
--- /dev/null
@@ -0,0 +1,17 @@
+[%- PROCESS "opac/parts/header.tt2";
+    WRAPPER "opac/parts/base.tt2";
+    INCLUDE "opac/parts/topnav.tt2";
+    basic_search = "f";
+    ctx.page_title = l("Account Login") %]
+    <h2 class="sr-only">[% l('Account Login') %]</h2>
+    <div class='mobile_hide'>
+        [% INCLUDE "opac/parts/searchbar.tt2" %]
+    </div>
+    <div id="content-wrapper">
+        <div id="main-content">
+            <h3 class="sr-only">[% l('Account Login Form') %]</h3>
+            [% INCLUDE "opac/parts/login/form.tt2" %]
+            <div class="clear-both very-big-height"></div>     
+        </div>
+    </div>
+[%- END %]
old mode 100644 (file)
new mode 100755 (executable)
index fe94c6d..a03c7cb
@@ -5,18 +5,18 @@
     ctx.metalinks.push('<meta name="robots" content="noindex,follow">');
     ctx.page_title = l("Record Detail") %]
     <h2 class="sr-only">[% l('Basket') %]</h2>
-    <div class="mobile_hide">
+    <div>
     [% INCLUDE "opac/parts/searchbar.tt2" %]
     </div>
-    <div id="content-wrapper">
-        <div id="main-content">
+    <div class="container">
+        <div>
             [%  IF ctx.mylist.size;
                     INCLUDE "opac/parts/anon_list.tt2";
                 ELSE %]
                 <div class="warning_box"><h2>[% l("The basket is empty."); %]</h2></div>
-                <button type="button" class="btn btn-confirm" onclick="window.location='[% ctx.referer | html %]'">[% l('Return') %]</button>
+                <button type="button" class="btn btn-confirm" onclick="window.location='[% ctx.referer | html %]'"><i class="fas fa-arrow-alt-circle-left"></i> [% l('Return') %]</button>
                 [% END %]
-            <div class="common-full-pad"></div>        
         </div>
     </div>
+    
 [%- END %]
old mode 100644 (file)
new mode 100755 (executable)
index 8e2596a..793581c
@@ -3,19 +3,17 @@
     WRAPPER "opac/parts/base.tt2";
     INCLUDE "opac/parts/topnav.tt2";
     ctx.page_title = l("Confirm Clearing of Basket") %]
-    <h2 class="sr-only">[% l('Confirm Clearing of Basket') %]</h2>
+    
     [% INCLUDE "opac/parts/searchbar.tt2" %]
-    <div id="content-wrapper">
-        <div id="main-content">
-             <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 %]" />
-             <input id="print_cart_submit" type="submit" name="submit"
-               value="[% l('Confirm') %]" title="[% l('Confirm') %]"
-               alt="[% l('Confirm') %]" class="btn btn-confirm" />
-             <input type="reset" name="cancel" onclick="window.location='[% ctx.referer | html %]'" value="[% l('Cancel') %]" id="clear_basket_cancel" class="btn btn-deny" />
-             </form>
-            <div class="common-full-pad"></div>        
-        </div>
-    </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 %]
old mode 100644 (file)
new mode 100755 (executable)
index 9eeaa27..ab47de1
@@ -3,27 +3,28 @@
     WRAPPER "opac/parts/base.tt2";
     INCLUDE "opac/parts/topnav.tt2";
     ctx.page_title = l("Confirm Basket Email") %]
-    <h2 class="sr-only">[% l('Confirm Basket Email') %]</h2>
-    [% INCLUDE "opac/parts/searchbar.tt2" %]
-    <div id="content-wrapper">
-        <div id="main-content">
-          [% IF ctx.mylist.size %]
-             <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 %]" />
-             <input type="checkbox" name="clear_basket" value="on" />
-             <label for="clear_basket">[% l('Clear basket after emailing it.') %]</label>
-             <br />
-             <input id="print_cart_submit" type="submit" name="submit"
-               value="[% l('Confirm') %]" title="[% l('Confirm') %]"
-               alt="[% l('Confirm') %]" class="btn btn-confirm" />
-             <input type="reset" name="cancel" onclick="window.location='[% ctx.referer | html %]'" value="[% l('Cancel') %]" id="clear_basket_cancel" class="btn btn-deny" />
-             </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 %]'">[% l('Return') %]</button>
-          [% END %]
-            <div class="common-full-pad"></div>        
+   
+[% 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>
-    </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 %]
old mode 100644 (file)
new mode 100755 (executable)
index 08722c1..0958dff
@@ -3,27 +3,27 @@
     WRAPPER "opac/parts/base.tt2";
     INCLUDE "opac/parts/topnav.tt2";
     ctx.page_title = l("Confirm Basket Printing") %]
-    <h2 class="sr-only">[% l('Confirm Basket Printing') %]</h2>
     [% INCLUDE "opac/parts/searchbar.tt2" %]
-    <div id="content-wrapper">
-        <div id="main-content">
-          [% IF ctx.mylist.size %]
-             <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 %]" />
-             <input type="checkbox" name="clear_cart" value="on" />
-             <label for="clear_basket">[% l('Clear basket after printing it.') %]</label>
-             <br />
-             <input id="print_cart_submit" type="submit" name="submit"
-               value="[% l('Confirm') %]" title="[% l('Confirm') %]"
-               alt="[% l('Confirm') %]" class="btn btn-confirm" />
-             <input type="reset" name="cancel" onclick="window.location='[% ctx.referer | html %]'" value="[% l('Cancel') %]" id="clear_basket_cancel" class="btn btn-deny" />
-             </form>
-          [% ELSE %]
-            <div class="warning_box"><h2>[% l("The basket is empty."); %]</h2></div>
-            <button type="button" class="btn btn-confirm" onclick="window.location='[% ctx.referer | html %]'">[% l('Return') %]</button>
-          [% END %]
-            <div class="common-full-pad"></div>        
-        </div>
-    </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 %]
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/charges.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/charges.tt2
new file mode 100755 (executable)
index 0000000..d05bd98
--- /dev/null
@@ -0,0 +1,239 @@
+[%  PROCESS "opac/parts/header.tt2";\r
+    PROCESS "opac/parts/misc_util.tt2";\r
+    WRAPPER "opac/parts/myopac/base.tt2";\r
+    myopac_page = "charges";\r
+    myopac_main_page = "main";\r
+    parent = "charges";\r
+    myopac_cc_allowed = 0;\r
+    IF (ctx.fines.grocery.size OR ctx.fines.circulation.size) AND ctx.get_org_setting(ctx.user.home_ou, 'credit.payments.allow') == 1;\r
+        myopac_cc_allowed = 1;\r
+    END\r
+%]\r
+[%  IF myopac_cc_allowed; %]\r
+<form action="[% ctx.opac_root %]/myopac/main_payment_form#payment" method="get" id="selected_fines">\r
+[% END %]\r
+\r
+    [% IF ctx.fines.circulation.size > 0 %]\r
+    <div id='myopac_circ_trans_div'>\r
+        <div class="header_middle">\r
+           <span class="acct_fines_header">\r
+           <!-- Different heading when not able to pay -->\r
+             [% IF myopac_cc_allowed %]\r
+                [% l("Pay Selected Circulation Charges") %]\r
+            [% ELSE %] \r
+                [% l("Circulation Charges") %]\r
+             [% END %]\r
+           </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
+               \r
+                <tr>\r
+\r
+                   [% IF myopac_cc_allowed %]\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
+                    </th> \r
+                    [% END %]\r
+                    <th>[% l("Owed") %]</th>\r
+                    <th>[% l("Billing Type") %]</th>\r
+                    <th>[% l("Title") %]</th>\r
+                    <th>[% l("Checkout") %]</th> \r
+                    <th>[% l(" Due ") %]</th> \r
+                    <th>\r
+                       <span>[% l(" Returned/Renewed") %]</span>\r
+                       <span>[% l(" Returned&#42;") %]</span>\r
+                    </th>\r
+                    \r
+                </tr>\r
+            </thead>\r
+            <tbody id='myopac_circ_trans_tbody'>\r
+                [% FOR f IN ctx.fines.circulation;\r
+                    attrs = {marc_xml => f.marc_xml};\r
+                    IF f.marc_xml;\r
+                        PROCESS get_marc_attrs args=attrs;\r
+                    ELSIF f.xact.reservation;\r
+                        attrs.title = f.xact.reservation.target_resource_type.name;\r
+                    END %]\r
+                <tr id='myopac_circ_trans_row'>\r
+                    [% IF myopac_cc_allowed %]\r
+                    <td class="checkCell">\r
+                        <input type="checkbox" checked="checked" \r
+                            title="[% l('Pay this fine') %]" name="xact"\r
+                            value="[% f.xact.id %]" class="fineCheck"/>\r
+                    </td>\r
+                    [% END %]\r
+                    \r
+                    <td>\r
+                        <strong>\r
+                            [% money(f.xact.balance_owed) %]\r
+                        </strong>\r
+                        <input class="fineAmount" value="[% f.xact.balance_owed %]" hidden />\r
+                    </td>\r
+                    \r
+                    <td>\r
+                       [% f.xact.last_billing_type %]\r
+                    </td>\r
+                                  \r
+                    <td>\r
+                        [% recid = f.xact.circulation.target_copy.call_number.record.id || f.xact.reservation.target_resource_type.record.id;\r
+                        IF recid; %]\r
+                        <a href="[% mkurl(ctx.opac_root _ '/record/' _ recid,\r
+                            {loc => ctx.search_ou}) %]">[% attrs.title | html %]</a>\r
+                        [% ELSE %]\r
+                        [% attrs.title | html %]\r
+                        [% END %]\r
+                    </td>\r
+                    \r
+                   <td name='myopac_circ_trans_start'>\r
+                        [% ts = f.xact.circulation.xact_start || f.xact.reservation.start_time || 0;\r
+                        IF ts;\r
+                            date.format(ctx.parse_datetime(ts), DATE_FORMAT);\r
+                        END %]\r
+                    </td>\r
+                    \r
+                    <td name='myopac_circ_trans_due' >\r
+                        [% ts = f.xact.circulation.due_date || f.xact.reservation.end_time || 0;\r
+                           due_org = f.xact.circulation.circ_lib || f.xact.reservation.pickup_lib;\r
+                        IF ts;\r
+                            date.format(ctx.parse_datetime(ts, due_org), DATE_FORMAT);\r
+                        END %]\r
+                    </td>\r
+                    \r
+                    <td name='myopac_circ_trans_finished' >\r
+                        [%  ts = f.xact.circulation.checkin_time || f.xact.reservation.return_time || 0;\r
+                            IF ts;\r
+                                date.format(ctx.parse_datetime(ts), DATE_FORMAT);\r
+                            ELSE %]\r
+                            <!-- XXX TODO fines aren't really accruing\r
+                                if circ has hit maxfines. more clarity\r
+                                here? --> \r
+                            <span class="danger">[% l('(fines accruing)') %]</span>\r
+                        [%  END %]\r
+                    </td>\r
+                   \r
+                </tr>\r
+                [% END %]\r
+            </tbody>\r
+        </table>\r
+        <!-- Disclaimer for mobile -->\r
+        <span class="mobile_view cc_disclaimer"> <strong>&#42;</strong>Items may have been renewed. </span>\r
+    </div>\r
+    [% END %]\r
+\r
+    [% IF ctx.fines.grocery.size > 0 %]\r
+    <!-- Table for all non-circulation transactions -->\r
+    <div id='myopac_trans_div'>\r
+        <h3>\r
+                [% l("Charges On Your Account") %]\r
+        </h3>\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 style="white-space:nowrap;">\r
+                        <input id="pay_fines_box2" checked="checked"\r
+                            type="checkbox" onclick="select_all_checkboxes('xact_misc', this.checked)"\r
+                            aria-label="[% l('Check/Uncheck All') %]" />\r
+                    </th>\r
+                    [% END %]\r
+                    <th >[% l("Owed") %]</th>\r
+                    <th >[% l("Billing Type") %]</th>\r
+                    <th >[% l("Note") %]</th>\r
+                    <th >[% l("Date") %]</th>\r
+                    \r
+\r
+                </tr>\r
+            </thead>\r
+            <tbody id='myopac_trans_tbody'>\r
+                [% c = 0; %]\r
+                [% FOR f IN ctx.fines.grocery %]\r
+                <tr class ='myopac_trans_row'>\r
+                [% c = c + 1; %]\r
+                    [% IF myopac_cc_allowed %]\r
+                    <td class="checkCell">\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="danger">\r
+                        <span class="sr-only">Amount Owed</span>\r
+                        <strong>\r
+                            [% money(f.xact.balance_owed) %]\r
+                        </strong>\r
+                         <input type="hidden" class="fineAmount" value="[% f.xact.balance_owed %]" hidden />\r
+                    </td>\r
+                    \r
+                    <td>\r
+                        <span class="sr-only">Billing For</span>\r
+                        [% f.xact.last_billing_type %]\r
+                    </td>\r
+                    \r
+                    <td>\r
+                        [% IF f.xact.last_billing_note; %]\r
+                            <span class="sr-only">Note</span>\r
+                            [% f.xact.last_billing_note %]\r
+                        [% END %]\r
+                    </td>\r
+                    \r
+                    <td>\r
+                        <span class="sr-only">Date of Billing</span>\r
+                        [% date.format(ctx.parse_datetime(f.xact.xact_start),DATE_FORMAT) %]\r
+                    </td>\r
+\r
+                </tr>\r
+                [% END %]\r
+            </tbody>\r
+        </table>\r
+   \r
+    </div>\r
+    [% END %]\r
+    [% UNLESS ctx.fines.grocery.size OR ctx.fines.circulation.size %]\r
+    <div>[% l('You have no current fines.') %]</div>\r
+    [% ELSIF myopac_cc_allowed %]\r
+   \r
+    <div class="my-3">\r
+        <button type="submit" value="[% l('Pay selected charges') %] - [% money(ctx.user_stats.fines.balance_owed) %]" title="[% l('Pay selected charges') %]" class="btn btn-confirm my-1"\r
+            id="selectPay"> <i class='fas fa-money-bill-wave'></i> [% l('Pay Selected Charges') %] - [% money(ctx.user_stats.fines.balance_owed) %]</button>\r
+    <button type="submit" class="btn btn-confirm my-1"><i class="fas fa-cash-register"></i> [% l('Pay All Charges') %] - [% money(ctx.user_stats.fines.balance_owed) %]</button>\r
+    </div>\r
+    [% END %]\r
+[% IF myopac_cc_allowed %]\r
+</form>\r
+[% END %]\r
+<script >\r
+$( document ).ready(function() {\r
+   $("input[type=checkbox]").click(function () {\r
+       var amount = 0;\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
+    $("#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
+<!--Table functions ~ Running total of selected items for use in a Paypal module or where running total is needed-->\r
old mode 100644 (file)
new mode 100755 (executable)
index dc1d90f..65b92b7
@@ -2,29 +2,13 @@
     PROCESS "opac/parts/misc_util.tt2";
     PROCESS "opac/parts/myopac/column_sort_support.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
-    myopac_page = "circs"
+    myopac_page = "circ_history"
+    parent="circs";
     limit = ctx.circ_history_limit;
     offset = ctx.circ_history_offset;
 %]
-
-<h3 class="sr-only">[% l('History of Checked Out Items') %]</h3>
+<h3>[% l('History of Checked Out Items') %]</h3>
 <div style="padding:0px;">
-   <div>
-     <ul class="nav nav-pills nav-fill">
-        <li class="nav-item m-2">
-            <a class="nav-link not_active_pill" href='[% mkurl('circs',{},1) %]'>[% l("Current Items Checked Out") %]</a>
-        </li>
-        [%- IF ebook_api.enabled == 'true' %]
-        <li class="nav-item m-2">
-            <a class="nav-link not_active_pill" href="[% mkurl('ebook_circs',{},1) %]">[% l("E-Items Currently Checked Out") %]</a>
-        </li>
-        [%- END %]
-        <li class="nav-item m-2">
-            <a class="nav-link active" href="#">[% l("Check Out History") %]</a>
-        </li>
-    </ul>
-       </div>
-
     [%
     # In the sorting case, the size is the size of ALL the circ items.  In the non-sorting case,
     # the size is simply the size of the chunk passed in.  See the TODO below for the still-lingering
         no_next = ctx.circs.size < limit;
     END;
     %]
-<div class="my-4">
-    <div class="header_middle">
-        <span class="float-left">[% l('Previously Checked Out Items') %]</span>
-        <span class='float-left' style='padding-left: 10px;'>
-            <a href='[% mkurl('circ_history', {limit => limit, offset => (offset - limit)}) %]'
-                [% IF offset == 0 %] class='invisible' [% END %]><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>
-            [%# TODO: get total to prevent paging off then end of the list.. %]
-            <a href='[% mkurl('circ_history', {limit => limit, offset => (offset + limit)}) %]'
-            [% IF no_next %] class='invisible' [% END %] >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>
-        </span>
-    </div>
-    <div class="clear-both"></div>
+<div>
+   
 
     [% IF ctx.circs.size < 1 %]
     <div class="warning_box">[% l('There are no items in your circulation history.') %]</div>
     [% ELSE %]
 
-        <form method="post" id="circ-form"
-            onsubmit="return confirm('[% l("Are you sure you wish to delete the selected item(s)?") %]');">
-        <table cellpadding='0' cellspacing='0' class="item_list_padding">
-            <tr>
-                <td style="width:90%;">
-                    <select name="action" class="form-control">
-                        <option value="delete">[% l('Delete Selected Titles') %]</option>
-                    </select>
-                </td>
-               
-                <td style="padding-left:9px;">
-                    <input type="submit"
-                        value="[% l('Go') %]"
-                        alt="[% l('Go') %]" title="[% l('Go') %]"
-                        class="btn btn-sm btn-confirm" />
-                </td>
-                <!--
-                <td style="padding-left:5px;">
-                    <a href="#"><img alt="[% l('Deleting Help') %]"
-                        src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]" /></a>
-                </td>
-                -->
-            </tr>
-        </table>
+        <form method="post" id="circ-form">
+            
+        <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" 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>
+        <div class="col-3 text-right">[% IF !no_next %]<a href='[% mkurl('circ_history', {limit => limit, offset => (offset + limit)}) %]'
+               class="btn btn-action" >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>[% END %] </div>
+    </div>
     <div id='checked_main'>
-        <table title="[% l('History of Items Checked Out') %]" id="acct_checked_hist_header" class="table table-hover miniTable circHistTable my-3">
+     <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="checkbox_column">
-                        <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;}"/>
-                    </th>
+                    <td 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;}" aria-label="[% l('Click to (un)select all items') %]"/>
+                    </td>
                     <th>[% sort_head("sort_title", l("Title")) %]</th>
                     <th>[% sort_head("author", l("Author")) %]</th>
                     <th>[% sort_head("callnum", l("Call Number")) %]</th>
                 FOR circ IN circ_items; %]
                     <tr>
             <td class="checkbox_column">
-                <input type="checkbox" name="circ_id" value="[% circ.circ.id %]" />
+                <input type="checkbox" name="circ_id" value="[% circ.circ.id %]" aria-label="Select Item"/>
             </td>
                         <td>
                             <a href="[% mkurl(ctx.opac_root _ '/record/' _
-                                circ.circ.target_copy.call_number.record.id, {}, 1) %]"
-                                name="[% l('Catalog record') %]"><span[%- deemphasize_class -%]>
+                                circ.circ.target_copy.call_number.record.id, {}, 1) %]">
+                                <span[%- deemphasize_class -%]>
                                 [%- circ.ATTRS.title.substr(0,circ.ATTRS.nonfiling_characters) | html %]</span>
                                 [%- circ.ATTRS.title.substr(circ.ATTRS.nonfiling_characters) | html %]</a>
                         </td>
                         <td>
+                            [% IF circ.ATTRS.author %]
                             <a href="[% mkurl(ctx.opac_root _ '/results',
                                 {qtype => 'author', query => circ.ATTRS.author.replace('[,\.:;]', '')},
                                 1
                             ) %]">[% circ.ATTRS.author | html %]</a>
+                            [%END; %]
                         </td>
                         <td>[% circ.circ.target_copy.call_number.label | html %]</td>
                         <td>
                             [% IF circ.circ.checkin_time;
                                     date.format(ctx.parse_datetime(circ.circ.checkin_time),DATE_FORMAT);
                                 ELSE; %]
-                                <span style='color:blue;'>*</span><!-- meh -->
+                                <span style='color:blue;'>Not Returned</span><!-- meh -->
                             [% END; %]
                         </td>
                         <td>[% circ.circ.target_copy.barcode | html %]</td>
                     [%- INCLUDE "opac/parts/preserve_params.tt2" %]
                     [% IF ctx.circs.size > 0 %]
                     <input type="hidden" name="filename" value="[% l('circ_history.csv') %]"/>
-                    <button type="submit" class="btn btn-sm btn-primary">[% l('Download CSV') %]</button>
+                    <button type="submit" class="btn btn-action"><i class="fas fa-file-download"></i> [% l('Download CSV') %]</button>
                     [% END %]
                 </div>
             </form>
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/circ_history/export.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/circ_history/export.tt2
new file mode 100755 (executable)
index 0000000..45aca55
--- /dev/null
@@ -0,0 +1,38 @@
+[%- PROCESS "opac/parts/misc_util.tt2";
+    USE CSVFilter 'csv';
+    USE date;
+    SET DATE_FORMAT = l('%m/%d/%Y'); -%]
+[%- l('Title') | csv -%]
+[%- l('Author') | csv -%]
+[%- l('Checkout Date') | csv -%]
+[%- l('Due Date') | csv -%]
+[%- l('Date Returned') | csv -%]
+[%- l('Barcode') | csv -%]
+[%- l('Call Number') | csv -%]
+[%- l('Format') | csv 'last' %]
+[%  FOREACH circ IN ctx.csv.circs;
+    attrs = { marc_xml => circ.marc_xml };
+    PROCESS get_marc_attrs args=attrs;
+    formats = [];
+    FOR format IN attrs.all_formats;
+        formats.push(format.label);
+    END;
+-%]
+[%- IF circ.circ.target_copy.call_number.id == -1 -%]
+    [%- circ.circ.target_copy.dummy_title | csv -%]
+    [%- circ.circ.target_copy.dummy_author | csv -%]
+[%- ELSIF attrs.title -%]
+    [%- attrs.title | csv -%]
+    [%- attrs.author | csv -%]
+[%- END -%]
+[%- date.format(ctx.parse_datetime(circ.circ.xact_start), DATE_FORMAT) | csv-%]
+[%- date.format(ctx.parse_datetime(circ.circ.due_date), DATE_FORMAT) | csv -%]
+[%- IF circ.circ.checkin_time;
+       date.format(ctx.parse_datetime(circ.checkin_time), DATE_FORMAT) | csv;
+    ELSE; -%]
+,
+[%- END -%]
+[%- circ.circ.target_copy.barcode | csv -%]
+[%- circ.circ.target_copy.call_number.label | csv -%]
+[%- formats.join('+') | csv 'last' %]
+[%  END -%]
old mode 100644 (file)
new mode 100755 (executable)
index 760674b..5dd46f1
@@ -3,29 +3,13 @@
     PROCESS "opac/parts/myopac/column_sort_support.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "circs";
+    parent="circs";
 %]
-<h3 class="sr-only">[% l('Current Items Checked Out') %]</h3>
+<h3>[% l('Current Items Checked Out') %]</h3>
 <div id='myopac_checked_div'>
-       <div>
-     <ul class="nav nav-pills nav-fill">
-        <li class="nav-item m-2">
-            <a class="nav-link active" href='#'>[% l("Current Items Checked Out") %]</a>
-        </li>
-        [%- IF ebook_api.enabled == 'true' %]
-        <li class="nav-item m-2">
-            <a class="nav-link not_active_pill" href="[% mkurl('ebook_circs',{},1) %]">[% l("E-Items Currently Checked Out") %]</a>
-        </li>
-        [%- END %]
-        <li class="nav-item active m-2">
-            <a class="nav-link not_active_pill" href="[% mkurl('circ_history',{},1) %]">[% l("Check Out History") %]</a>
-        </li>
-    </ul>
-       </div>
-    <div class="my-4">
-    <div class="header_middle">
-        <span class="float-left">[% l('Current Items Checked Out') %]</span>
-    </div>
-    <div class="clear-both"></div>
+       
+    <div>
+   
     [% IF ctx.circs.size < 1 %]
     <div class="warning_box">[% l('You have no items checked out.') %]</div>
     [% ELSE %]
     <div id='checked_main'>
         <form method="post" id="circ-form"
             onsubmit="return confirm('[% l("Are you sure you wish to renew the selected item(s)?") %]');">
-         <div class="row">
-                <span class="col-md-11 my-2">
-                <select class="form-control" name="action" title="[% l('Select Action') %]">
-                    <option value="renew">[% l('Renew Selected Titles') %]</option>
-                </select>
-            </span>
-            <span class="col-md-1 my-2">
-                <input type="submit"
-                    value="[% l('Go') %]"
-                    title="[% l('Go') %]"
-                    class="btn btn-confirm" />
-            </span>
-           <!-- <span style="padding-left:5px;">
-                <a href="#"><img 
-                    alt="[% l('Renewing Help') %]"
-                    title="[% l('Actions for checked out items') %]"
-                    src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]" /></a>
-            </span> -->
+         <div class="my-3">
+                <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_alt" 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 miniTable circTable">
+            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>
 
                 FOR circ IN circ_items; %]
                     <tr>
-                        <td class="checkbox_column" valign="top">
+                        <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>
-                        <td name="title">
+                        <td>
                             <span class="sr-only">Title</span>
                             [% IF circ.circ.target_copy.call_number.id == -1 %]
                                 [% circ.circ.target_copy.dummy_title | html %]
                             [% ELSIF circ.ATTRS.title %]
                                 <a href="[% mkurl(ctx.opac_root _ '/record/' _ 
-                                    circ.circ.target_copy.call_number.record.id, {}, 1) %]"
-                                    name="[% l('Catalog record') %]"><span[%- deemphasize_class -%]>
+                                    circ.circ.target_copy.call_number.record.id, {}, 1) %]"><span[%- deemphasize_class -%]>
                                     [%- circ.ATTRS.title.substr(0,circ.ATTRS.nonfiling_characters) | html %]</span>
                                     [%- circ.ATTRS.title.substr(circ.ATTRS.nonfiling_characters) | html %]</a>
                             [% END %]
                         </td>
-                        <td name="author">
+                        <td>
                             [% IF circ.circ.target_copy.call_number.id == -1 %]
                                 <span class="sr-only">Author</span>
                                 [% circ.circ.target_copy.dummy_author | html %]
 
                             [% END %]
                         </td>
-                        <td name="renewals">
+                        <td>
                             <span class="sr-only">Renewals Remaining</span>
                             [% circ.circ.renewal_remaining %]
                         </td>
                             due_date = ctx.parse_datetime(circ.circ.due_date, circ.circ.circ_lib);
                             due_class = (date.now > date.format(due_date, '%s')) ? 'error' : '';
                         %]
-                        <td name="due_date" class='[% due_class %]'>
+                        <td class='[% due_class %]'>
                             <span class="sr-only">Due Date</span>
                             [% date.format(due_date, DATE_FORMAT) %]
                         </td>
-                        <td name="barcode">
+                        <td>
                             <span class="sr-only">Barcode</span>
                             <span class="speak:spell-out;">[% circ.circ.target_copy.barcode | html %]</span>
                         </td>
-                        <td name="call_number">
+                        <td>
                             <span class="sr-only">Call Number</span>
                             [% circ.circ.target_copy.call_number.label | html %]
                         </td>
                          [% IF ctx.get_org_setting(ctx.user.home_ou, 'opac.show_owning_lib_column'); %]
-                          <td name="lib">
+                          <td>
                                 [%- fleshed_ou = circ.circ.target_copy.call_number.owning_lib;
                                                 INCLUDE "opac/parts/library_name_link_from_ou.tt2";
                                 %]
old mode 100644 (file)
new mode 100755 (executable)
index ca5bfe2..8d489e1
@@ -3,21 +3,17 @@
     PROCESS "opac/parts/myopac/column_sort_support.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "ebook_checkout";
+    parent="circs";
 %]
-<h3 class="sr-only">[% l('Check Out E-Item') %]</h3>
+<h3>[% l('Check Out E-Item') %]</h3>
 <div id='myopac_checked_div'>
-
-    <div class="header_middle">
-        <span class="float-left">[% l('Check Out E-Item') %]</span>
-    </div>
-    <div class="clear-both"></div>
     <div id="ebook_checkout_failed" class="warning_box hidden">[% l('E-item could not be checked out.') %]</div>
     <div id="ebook_checkout_succeeded" class="success hidden">[% l('E-item successfully checked out.') %]</div>
     <div id="ebook_spinner"><img src="[% ctx.media_prefix %]/opac/images/progressbar_green.gif[% ctx.cache_key %]" alt="[% l("Loading...") %]"/></div>
     <div id='ebook_circs_main' class="hidden">
         <table id="ebook_circs_main_table"
             title="[% l('Check Out E-Item') %]"
-            class="table table-hover miniTable w-100 echeckoutTable">
+            class="table table-hover table-bordered miniTable w-100 echeckoutTable">
             <thead>
             <tr>
                 <th>[% l("Title") %]</th>
old mode 100644 (file)
new mode 100755 (executable)
index eb40563..cd53f50
@@ -3,36 +3,16 @@
     PROCESS "opac/parts/myopac/column_sort_support.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "ebook_circs";
+    parent="circs";
 %]
-<h3 class="sr-only">[% l('E-Items Currently Checked Out') %]</h3>
+<h3>[% l('E-Items Currently Checked Out') %]</h3>
 <div id='myopac_checked_div'>
-
-   <div class="mb-3">
-     <ul class="nav nav-pills nav-fill">
-        <li class="nav-item m-2">
-            <a class="nav-link not_active_pill" href='[% mkurl('circs',{},1) %]'>[% l("Current Items Checked Out") %]</a>
-        </li>
-        [%- IF ebook_api.enabled == 'true' %]
-        <li class="nav-item m-2">
-            <a class="nav-link active" href="[% mkurl('ebook_circs',{},1) %]">[% l("E-Items Currently Checked Out") %]</a>
-        </li>
-        [%- END %]
-        <li class="nav-item active m-2">
-            <a class="nav-link not_active_pill" href="[% mkurl('circ_history',{},1) %]">[% l("Check Out History") %]</a>
-        </li>
-    </ul>
-       </div>
-
-    <div class="header_middle">
-        <span class="float-left">[% l('E-Items Currently Checked Out') %]</span>
-    </div>
-    <div class="clear-both"></div>
     <div id="no_ebook_circs" class="warning_box hidden">[% l('You have no e-items checked out.') %]</div>
     <div id="ebook_spinner"><img src="[% ctx.media_prefix %]/opac/images/progressbar_green.gif[% ctx.cache_key %]" alt="[% l("Loading...") %]"/></div>
     <div id='ebook_circs_main' class="hidden">
         <table id="ebook_circs_main_table"
             title="[% l('E-Items Currently Checked Out') %]"
-            class="table table-hover miniTable w-100 ecircsTable">
+            class="table table-hover table-bordered miniTable w-100 ecircsTable">
             <thead>
             <tr>
                 <th>[% l("Title") %]</th>
old mode 100644 (file)
new mode 100755 (executable)
index 737475c..f58f162
@@ -4,35 +4,13 @@
     PROCESS "opac/parts/myopac/column_sort_support.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
      myopac_page = "ebook_holds";
+     parent="holds";
     limit = (ctx.holds_limit.defined) ? ctx.holds_limit : 0;
     offset = (ctx.holds_offset.defined) ? ctx.holds_offset : 0;
     count = (ctx.holds_ids.size.defined) ? ctx.holds_ids.size : 0;
 %]
-<h3 class="sr-only">[% l('My E-Item Holds') %]</h3>
+<h3>[% l('My E-Item Holds') %]</h3>
 <div id='myopac_holds_div'>
-
-       <div class="mb-3">
-       <ul class="nav nav-pills nav-fill">
-        <li class="nav-item m-2">
-            <a href='[% mkurl('holds', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("Items on Hold") %]</a>
-        </li>
-        [% IF ebook_api.enabled == 'true' %]
-        <li class="nav-item m-2">
-            <a href='#' class="nav-link active">[% l("E-Items on Hold") %]</a>
-        </li>
-        <li class="nav-item m-2">
-            <a href='[% mkurl('ebook_holds_ready', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items Ready for Checkout") %]</a>
-        </li>
-        [% END %]
-        <li class="nav-item m-2">
-            <a href='[% mkurl('hold_history', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("Holds History") %]</a>
-        </li>
-        </ul>
-    </div>
-    <div class="header_middle">
-        <span class="float-left">[% l('E-Items on Hold') %]</span>
-    </div>
-    <div class="clear-both"></div>
     <div id="no_ebook_holds" class="warning_box hidden">[% l('You have no e-item holds.') %]</div>
     <div id="ebook_cancel_hold_failed" class="warning_box hidden">[% l('Hold could not be canceled.') %]</div>
     <div id="ebook_cancel_hold_succeeded" class="success hidden">[% l('Your hold has been canceled.') %]</div>
@@ -40,7 +18,7 @@
     <div id='ebook_holds_main' class="hidden">
         <table id="ebook_holds_main_table"
             title="[% l('E-Items on Hold') %]"
-            class="table table-hover miniTable w-100 eholdsTable">
+            class="table table-hover table-bordered miniTable w-100 eholdsTable">
             <thead>
             <tr>
                 <th>[% l("Title") %]</th>
old mode 100644 (file)
new mode 100755 (executable)
index 83fd8b9..fb642a4
@@ -4,41 +4,19 @@
     PROCESS "opac/parts/myopac/column_sort_support.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "ebook_holds_ready";
+    parent="holds";
     limit = (ctx.holds_limit.defined) ? ctx.holds_limit : 0;
     offset = (ctx.holds_offset.defined) ? ctx.holds_offset : 0;
     count = (ctx.holds_ids.size.defined) ? ctx.holds_ids.size : 0;
 %]
-<h3 class="sr-only">[% l('E-Items Ready for Checkout') %]</h3>
+<h3>[% l('E-Items Ready for Checkout') %]</h3>
 <div id='myopac_holds_div'>
-       <div class="mb-3">
-       <ul class="nav nav-pills nav-fill">
-        <li class="nav-item m-2">
-            <a href='[% mkurl('holds', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("Items on Hold") %]</a>
-        </li>
-        [% IF ebook_api.enabled == 'true' %]
-        <li class="nav-item m-2">
-            <a href='[% mkurl('ebook_holds', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items on Hold") %]</a>
-        </li>
-        <li class="nav-item m-2">
-            <a href='#' class="nav-link active">[% l("E-Items Ready for Checkout") %]</a>
-        </li>
-        [% END %]
-        <li class="nav-item m-2">
-            <a href='[% mkurl('hold_history', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("Holds History") %]</a>
-        </li>
-        </ul>
-    </div>
-    
-    <div class="header_middle">
-        <span class="float-left">[% l('E-Items Ready for Checkout') %]</span>
-    </div>
-    <div class="clear-both"></div>
     <div id="no_ebook_holds" class="warning_box hidden">[% l('You have no e-item holds ready to be checked out.') %]</div>
     <div id="ebook_spinner"><img src="[% ctx.media_prefix %]/opac/images/progressbar_green.gif[% ctx.cache_key %]" alt="[% l("Loading...") %]"/></div>
     <div id='ebook_holds_main' class="hidden">
         <table id="ebook_holds_main_table"
             title="[% l('E-Items Ready for Checkout') %]"
-            class="table table-hover miniTable w-100 eholdsreadyTable">
+            class="table table-hover table-bordered miniTable w-100 eholdsreadyTable">
             <thead>
             <tr>
                 <th>[% l("Title") %]</th>
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/ebook_place_hold.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/ebook_place_hold.tt2
new file mode 100755 (executable)
index 0000000..2de2d41
--- /dev/null
@@ -0,0 +1,33 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    PROCESS "opac/parts/hold_status.tt2";
+    PROCESS "opac/parts/myopac/column_sort_support.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "ebook_place_hold";
+%]
+
+<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>
+    <div id="ebook_spinner"><img src="[% ctx.media_prefix %]/opac/images/progressbar_green.gif[% ctx.cache_key %]" alt="[% l("Loading...") %]"/></div>
+    <div id='ebook_holds_main' class="hidden">
+        <table id="ebook_holds_main_table"
+            title="[% l('Place Hold on E-Item') %]"
+            class="table_no_border_space table_no_cell_pad item_list_padding">
+            <thead>
+            <tr>
+                <th>[% l("Title") %]</th>
+                <th>[% l("Author") %]</th>
+                <th>[% l("Expire Date") %]</th>
+                <th>[% l("Status") %]</th>
+                <th>[% l("Actions") %]</th>
+            </tr>
+            </thead>
+            <tbody id="ebook_holds_main_table_body"></tbody>
+        </table>
+    </div>
+</div>
+[% END %]
+
old mode 100644 (file)
new mode 100755 (executable)
index 1ee3589..175381a
@@ -2,62 +2,45 @@
     PROCESS "opac/parts/misc_util.tt2";
     PROCESS "opac/parts/hold_status.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
-    myopac_page = "holds";
+    myopac_page = "hold_history";
+    parent="holds";
     limit = ctx.hold_history_limit;
     offset = ctx.hold_history_offset;
     count = ctx.hold_history_ids.size;
 %]
 
-<h3 class="sr-only">[% l('Holds History') %]</h3>
-<div id='myopac_holds_div'>
+<h3>[% l('Holds History') %]</h3>
+<div id='myopac_holds_div'> 
+  
+<div>
+    <div>
+        <div>   
+          [% IF offset != 0 %]<a href='[% mkurl('hold_history', {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; %]
+                  <span class="np_nav_link classic_link btn btn-action disabled">[% curpage + 1 %]</span>
 
-       <div>
-       <ul class="nav nav-pills nav-justified">
-        <li class="nav-item m-2">
-            <a href='[% mkurl('holds',{},['limit','offset']) %]' class="nav-link not_active_pill">[% l("Items on Hold") %]</a>
-        </li>
-        [% IF ebook_api.enabled == 'true' %]
-        <li class="nav-item m-2">
-            <a href='[% mkurl('ebook_holds', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items on Hold") %]</a>
-        </li>
-        <li class="nav-item m-2">
-            <a href='[% mkurl('ebook_holds_ready', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items Ready for Checkout") %]</a>
-        </li>
-        [% END %]
-        <li class="nav-item m-2">
-            <a href='#' class="nav-link active">[% l("Holds History") %]</a>
-        </li>
-        </ul>
-    </div>
-    
-  
-<div class="my-4">
-    <div class="header_middle">
-        <span style="float:left;">[% l("Previously Held Items") %]</span>
-        <span class='float-left' style='padding-left: 10px;'>
-            <a href='[% mkurl('hold_history', {limit => limit,offset => (offset - limit)}) %]'
-                [% IF offset == 0 %] class='invisible' [% END %]><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>
-            [% IF offset > 0 || count > limit;
-                curpage = 0;
-                WHILE curpage * limit < count;
-                    IF curpage * limit == offset;
-            %]
-            [% curpage + 1 %]
                     [%- ELSE %]
-            <a href='[% mkurl('hold_history', {limit => limit, offset => (curpage * limit)}) %]'>[% curpage + 1 %]</a>
-                    [%- END;
-                    curpage = curpage + 1;
-                END;
-            END %]
-            <a href='[% mkurl('hold_history', {limit => limit, offset => (offset + limit)}) %]'
-               [% IF count <= limit + offset %] class='invisible' [% END %] >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>
-        </span>
-        <span style="float:right;">
+                <a href='[% mkurl('hold_history', {limit => limit, offset => (curpage * limit)}) %]' class="np_nav_link classic_link btn btn-action">[% curpage + 1 %]</a>
+                    [%- END; curpage = curpage + 1; END; END %]
+               
+            
+              
+                [% IF count > limit + offset %]<a href='[% mkurl('hold_history', {limit => limit, offset => (offset + limit)}) %]'
+                  ><span class="np_nav_link classic_link btn btn-action">[% l('Next') %]&#9658;</span></a>[% END %]
+           </div>
+
+
+
+           
+          <p 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; %]
+                </p>
+        <p style="float:right;">
             <a class="hide_me" href="#">[% l('Export List') %]</a>
-        </span>
+        </p>
     </div>
-    <div class="clear-both"></div>
 
     <div id='holds_main'>
         [% IF ctx.holds.size && ctx.holds.size < 1 %]
@@ -65,7 +48,7 @@
             <big><strong>[% l('No holds found.') %]</strong></big>
         </div>
         [% ELSE %]
-        <table id='acct_holds_hist_header' class='table table-hover miniTable holdHistoryTable' title="[% l('History of items on hold') %]">
+        <table id='acct_holds_hist_header' class='table table-hover table-bordered miniTable holdHistoryTable' title="[% l('History of items on hold') %]">
             <thead>
                 <tr>
                     <th><span>[% l('Title') %]</span></th>
@@ -81,7 +64,7 @@
                     PROCESS get_marc_attrs args=attrs;
                     ahr = hold.hold.hold %]
 
-                <tr name="acct_holds_temp">
+                <tr>
                    
                     <td>
                     <span class="sr-only">Title</span>
                         </div>
                     </td>
                     <td>
+                     [% IF attrs.author; %]
                     <span class="sr-only">Author</span>
                         <div>
+                       
                             <a href="[% mkurl(ctx.opac_root _ '/results',
                                 {qtype => author, query => attrs.author.replace('[,\.:;]', '')}
                             ) %]">[% attrs.author | html %]</a>
+                          
                         </div>
+                          [% END %]
                     </td>
                     <td>
-                        <div class='format_icon'>
+                        <div>
                             [% IF attrs.format_icon %]
-                            <img title="[% attrs.format_label | html %]" alt="[% attrs.format_label | html %]" src="[% attrs.format_icon %][% ctx.cache_key %]" />
+                            <img alt="[% attrs.format_label | html %]" src="[% attrs.format_icon %][% ctx.cache_key %]" />
                             [% END %]
+                             <span>[% attrs.format_label | html %]</span>
                         </div>
                          <span class="sr-only">Format [% attrs.format_label | html %]</span>
                     </td>
                     </td>
                     <td>
                     <span class="sr-only">Hold Status</span>
-                        <div name="acct_holds_status">
-                            [% PROCESS get_hold_status hold=hold; %]
+                        <div> [% PROCESS get_hold_status hold=hold; %]
                         </div>
                     </td>
                 </tr>
old mode 100644 (file)
new mode 100755 (executable)
index 960d67c..e206819
@@ -4,79 +4,28 @@
     PROCESS "opac/parts/myopac/column_sort_support.tt2";
     WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "holds";
+    parent="holds";
     limit = (ctx.holds_limit.defined) ? ctx.holds_limit : 0;
     offset = (ctx.holds_offset.defined) ? ctx.holds_offset : 0;
     count = (ctx.holds_ids.size.defined) ? ctx.holds_ids.size : 0; 
 %]
-<h3 class="sr-only">[% l('My Holds') %]</h3>
-<div id='myopac_holds_div'>
-    <div class="mb-3">
-       <ul class="nav nav-pills nav-fill">
-        <li class="nav-item m-2">
-            <a href='#' class="nav-link active">[% l("Items on Hold") %]</a>
-        </li>
-        [% IF ebook_api.enabled == 'true' %]
-        <li class="nav-item m-2">
-            <a href='[% mkurl('ebook_holds', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items on Hold") %]</a>
-        </li>
-        <li class="nav-item m-2">
-            <a href='[% mkurl('ebook_holds_ready', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("E-Items Ready for Checkout") %]</a>
-        </li>
-        [% END %]
-        <li class="nav-item m-2">
-            <a href='[% mkurl('hold_history', {}, ['limit','offset','available','sort','sort_type']) %]' class="nav-link not_active_pill">[% l("Holds History") %]</a>
-        </li>
-        </ul>
-    </div>
-       <div class="my-4">
-    <div class="header_middle">
-        <span id="acct_holds_header" style="float:left;">
-            [%  IF CGI.param("available");
+<h3> [%  IF CGI.param("available");
                     l("Items Ready for Pickup");
                 ELSE;
                     l("Current Items on Hold");
                 END
-            %]
-        </span>
-    </div>
-    <div class="clear-both"></div>
+            %]</h3>
+<div>
     <div id='holds_main'>
     <form method="post">
-           <div class="row">
-                <span class="col-md-11 my-2">
-                       <select class="form-control" name="action" id="acct_holds_actions" 
-                      title="[% l('Select your action for the selected holds') %]">
-                        <option id='myopac_holds_actions_none' value=''>
-                        -- [% l("Actions for selected holds") %] --
-                        </option>
-                        <option value='suspend'>[% l("Suspend") %]</option>
-                        <option value='activate'>[% l("Activate") %]</option>
-                        <!-- XXX maybe later <option value='thaw_date'>[% l("Set Active Date") %]</option> -->
-                        <option value='cancel'>[% l("Cancel") %]</option>
-                    </select>
-                </span>
-                <span class="col-md-1 my-2">
-                    <input type="submit" value="[% l('Go') %]"
-                        title="[% l('Go') %]" class="btn btn-confirm" />
-                </span>
-          </div>
-
           <div class="row">
-            <div class="col-3 text-left">
-                <a href='[% mkurl('holds', {limit => limit,offset => (offset - limit)}) %]'
-                [% IF offset <= 0 %] class='invisible' [% END %]><span class="np_nav_link classic_link btn btn-outline-primary">&#9668;[% l('Previous') %]</span></a>
-                    [% IF offset > 0 || count > limit; curpage = 0; WHILE curpage * limit < count; IF curpage * limit == offset; %]
-                        [% curpage + 1 %]
-                    [%- ELSE %]
-                <a href='[% mkurl('holds', {limit => limit, offset => (curpage * limit)}) %]' class="np_nav_link classic_link btn btn-outline-primary">[% curpage + 1 %]</a>
-                    [%- END; curpage = curpage + 1; END; END %]
-            </div>
-            <div class="col-6 text-center">
-                <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>
-            
-               <span>
+            <div class="col-4 text-left">
+                
+                    <div>
+            <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-opac 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> |
                     <strong>[% l("Show only available holds") %]</strong>
                     <strong>[% l("Show all holds") %]</strong> |
                     <a href="[% mkurl('holds',{available => 1},['limit','offset']) %]">[% l("Show only available holds") %]</a>
                     [% END -%]
-               </span>
-                <a href="#">
-                    <img alt="[% l('Holds Help') %]" title="[% l('Actions for selected holds') %]" src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]" />
-                </a>
+                     <span title="This option will show all items available for pickup." data-toggle="tooltip">
+                        <i class="fas fa-question-circle"></i>
+                    </span>
+               </p>
+                
+          </div>       
             </div>
+            <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 %]
 
-            <div class="col-3 text-right">  
-                <a href='[% mkurl('holds', {limit => limit, offset => (offset + limit)}) %]'
-               [% IF count <= limit + offset %] class='invisible' [% END %] ><span class="np_nav_link classic_link btn btn-outline-primary">[% l('Next') %]&#9658;</span></a>
+             [% IF offset > 0 || count > limit; curpage = 0; WHILE curpage * limit < count; IF curpage * limit == offset; %]
+                  <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-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>
-                    
+            
         [% 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 miniTable activeHoldstable w-100 my-3">
+        class="table table-hover table-bordered miniTable activeHoldstable w-100 my-3">
             <thead>
             <tr>
-                <th class="checkbox_column"> 
-                    <input type="checkbox" title="[% l('Select All Holds') %]"
+                <td class="checkCell"> 
+                    <input type="checkbox" aria-label="[% l('Select All Holds') %]"
                       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;}"/>
-                </th>
+                </td>
                 <th>[% sort_head("sort_title", l('Title')) %]</th>
                 <th>[% sort_head("author", l('Author')) %]</th>
                 <th>[% sort_head("format", l('Format')) %]</th>
                 <th>[% l('Cancel if not filled by') %]</th>
                 <th>[% l('Status') %]</th>
                 <th>[% l('Notes') %]</th>
+                <th>[% l('Edit') %]</th>
             </tr>
             </thead>
             <tbody id="holds_temp_parent">
                     ahr = hold.hold.hold;
                     cnt = cnt + 1;
                      %]
-                <tr name="acct_holds_temp"
-                    class="[% ahr.frozen == 't' ? ' inactive-hold' : '' %]">
+                <tr class="[% ahr.frozen == 't' ? ' inactive-hold' : '' %]">
                     <td class="checkbox_column">
 
                     <span class="sr-only">Hold Number [%  cnt; %]</span>
                         <input type="checkbox" name="hold_id" value="[% ahr.id %]" 
-                            [% html_text_attr('title', l('Select hold [_1]', attrs.title)) %]/>
+                         aria-label="Select Hold"/>
                     </td>
                     <td>
                     <span class="sr-only">Title</span>
                             END; %]
 
                             <a href="[% mkurl(ctx.opac_root _ '/record/' _ 
-                                hold.hold.bre_id, {}, 1) %]"
-                                name="[% l('Catalog record') %]"><span[%- deemphasize_class -%]>
+                                hold.hold.bre_id, {}, 1) %]"><span[%- deemphasize_class -%]>
                                 [%- title.substr(0,hold.ATTRS.nonfiling_characters) | html %]</span>
                                 [%- title.substr(hold.ATTRS.nonfiling_characters)   | html %]</a>
                         </div>
                             FOR format IN formats 
                           %]
                           <span class="sr-only">[% format.label | html %]</span>
-                            <img title="[% format.label | html %]" 
-                              alt="[% format.label | html %]" src="[% format.icon %][% ctx.cache_key %]" />
+                            <img alt="[% format.label | html %]" src="[% format.icon %][% ctx.cache_key %]" />
                             [% END %]
                         </div>
                     </td>
                     </td>
                     <td>
                     <span class="sr-only">Status</span>
-                        <div name="acct_holds_status">
+                        <div>
                             [% PROCESS get_hold_status hold=hold; %]
                         </div>
                     </td>
                     <td class="fullRow">
                         <a class="btn btn-confirm btn-sm" href="[% mkurl(ctx.opac_root _ '/myopac/holds/edit', {hid => ahr.id}) %]"
                             [% html_text_attr('title', l('Edit hold for item [_1]', attrs.title)) %]>
+                            <i class="fas fa-edit"></i>
                             [% l('Edit') %]
                         </a>
                     </td>
                 [% END %]
             </tbody>
         </table>
-        </div>
         [% END %]
         </form>
-    </div></div>
+    </div> 
 </div>
 [% END %]
old mode 100644 (file)
new mode 100755 (executable)
index eeff1fb..a3fd196
     expire_time = ahr.expire_time ? date.format(ctx.parse_datetime(ahr.expire_time), DATE_FORMAT) : '';
     thaw_date = ahr.thaw_date ? date.format(ctx.parse_datetime(ahr.thaw_date), DATE_FORMAT) : '';
 %]
-<h3 class="sr-only">[% l('Edit Hold') %]</h3>
-<div class="pad-bottom-five">
+
+<div>
     <div class="header_middle">
-        <span id="acct_holds_header float-left">[% l('Editing Hold') %]</span>
-        &nbsp; &nbsp; &nbsp; &nbsp;
-        <a href="[% ctx.opac_root %]/myopac/holds" class="float-right">[% l('List all holds') %]</a>
+        <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>
-                            <input class="form-control" type="text" name="expire_time"
-                                value="[% expire_time | html %]" />
-                               <p><em>[% l('Enter date in MM/DD/YYYY format') %]</em></p>
-                            <!-- XXX TODO pick out a minimal, simple, reliable
-                            calendar widget that's not part of some giant,
-                            bloated framework and doesn't do anything at onload.
-                            -->
+                      
+                            <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>
                            
-                        </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>
-                            <input class="form-control" type="text" name="thaw_date"
-                                value="[% thaw_date | html %]" />
-                                <p><em>[% l('Enter date in MM/DD/YYYY format') %]</em></p>
-                        </td>
-                    </tr>
+                       
+                         <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">
+                                    <span class="glyphicon glyphicon-th"></span>
+                                </div>
+                            </div>
+                           
+                       
                     [% 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" class="hold-editor-controls">
-                            
-                            <input type="submit" value="[% l('Submit') %]" class="btn btn-confirm" />
-                            <a href="[% ctx.opac_root %]/myopac/holds"><button 
-                                class="btn btn-deny">[% l('Go Back') %]</button></a>
-                        </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');
         END %]
     </div>
 </div>
+<script>
+    $('#datepicker').datepicker({
+        weekStart: 1,
+        autoclose: true,
+        todayHighlight: true,
+    });
+    $('#datepicker').datepicker("setDate", new Date());
+</script>
 [% END %]
+
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/list/print.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/list/print.tt2
new file mode 100755 (executable)
index 0000000..fa3988f
--- /dev/null
@@ -0,0 +1 @@
+[%- ctx.csv.template_output.data -%]
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/list/update.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/list/update.tt2
new file mode 100755 (executable)
index 0000000..f12dade
--- /dev/null
@@ -0,0 +1,37 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "lists/update"  
+%]
+
+<!-- we should never see this page on success -->
+
+[% IF ctx.bucket_action_failed %]
+<div id='bookbag_udpate_failures'>
+    <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 %]
old mode 100644 (file)
new mode 100755 (executable)
index e9e2738..c5aed2d
 "To see the public view of a shared list, " _
 "click on the HTML View link in the Saved Lists section.");
 %]
-<h3 class="sr-only">[% l('My Lists') %]</h3>
+
+
+<h3>[% l('My Lists') %]</h3>
 <div id='myopac_bookbag_div' style="padding:5px;">
 
     <!-- new list creation -->
     <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="post" id="create_form">
-        <h1>[% l('Create New List') %]</h1><a name="createnewlist"></a>
+        <h4>[% l('Create New List') %]</h4><a id="createnewlist"></a>
         <table class="table" >
             <tr>
                 <td class="list_create_table_label">
                     <label for="list_create_shared">[% l('Share this list?') %]</label>
                 </td>
                 <td class="px-3">
-                    <select class="form-control mini-control" name="shared" id="list_create_shared">
+                    <select class="d-inline-block form-control mini-control" name="shared" id="list_create_shared">
                         <option value="0">[% l('No') %]
                         <option value="1">[% l('Yes') %]
                     </select>
-                   
-                    <a href="javascript:void(0);" 
-                        onclick="alert('[% bb_publish_text %]')" >
-                        <img data-toggle="tooltip" data-placement="top" alt="[% l('Sharing Help') %]"
-                            [% html_text_attr('title', bb_publish_text) %]
-                            src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]" />
-                    </a> 
+                    <span title="Allows the list to be shared through a link or RSS." data-toggle="tooltip">
+                        <i class="fas fa-question-circle"></i>
+                    </span>
                 </td>
             </tr>
             [% IF ctx.mylist.size %]
@@ -66,7 +64,7 @@
                     <label for="list_move_cart">[% l('Move contents of basket to this list?') %]</label>
                 </td>
                 <td>
-                    <select name="move_cart" id="list_move_cart">
+                    <select class="d-inline-block form-control mini-control" name="move_cart" id="list_move_cart">
                         <option value="0">[% l('No') %]
                         <option value="1" [% IF CGI.param('move_cart_by_default') %]selected="selected"[% END%]>[% l('Yes') %]
                     </select>
             <tr>
                 <td>&nbsp;</td>
                 <td class="list-create-table-buttons">
-                    <input type="reset"
-                        value="[% l('Cancel') %]"
-                        alt="[% l('Cancel') %]"
-                        class="btn btn-deny" />
-                    &nbsp;&nbsp;&nbsp;
-                    <input type="submit"
-                        value="[% l('Submit') %]"
-                        alt="[% l('Submit') %]"
-                        class="btn btn-confirm"/>
+                                    <button type="submit" class="btn btn-confirm"><i class="far fa-plus-square"></i> [% l('Create List') %]</button>
+
+                    <button type="reset" class="btn btn-deny" ><i class="fas fa-ban"></i> [% l('Cancel') %]</button>
                 </td>
             </tr>
         </table>
     </form>
 
-      [% IF CGI.param('from_basket'); %]
+      [% IF CGI.param('from_basket');  %]
     <h1>[% l("... from basket") %]</h1>
     [% INCLUDE "opac/parts/anon_list.tt2" %]
     [% ELSE %]
     <h1>[% l("My Existing Basket and Lists") %]</h1>
     [% INCLUDE "opac/parts/anon_list.tt2" %]
-    
+
     [% IF ctx.bookbags.size %]
     <div class="header_middle">
         <span class="float-left">[% l('Saved Lists') %]</span>
             [%- END; -%]
         [% END %]
     </div>
-    <div class="clear-both"></div>
 
     <div id='acct_lists_prime'>
         [% FOR bbag IN ctx.bookbags %]
         <div>
          <table class="table"><tr>
-            <td width="30%">
+            <td class="listTitleText">
             <div class="bookbag-controls-title-block">
                 [% baseurl = ctx.opac_root _ '/myopac/lists';
                 IF bbag.id != CGI.param("bbid");
                     url = mkurl(baseurl, {}, ['bbid', 'edit_notes', 'sort']);
                     ltitle = l("Hide items in list");
                 END %]
-                <h2 class="bookbag-name"><a title="[% ltitle %]" href="[% url %]">[% bbag.name | html %]</a></h2>
+                <h2 class="bookbag-name"><a title="[% ltitle %]" href="[% url %]">[% bbag.name | html %]</a>[% IF bbag.pub == 't'; %]
+                <a target='_blank' href='/opac/extras/feed/bookbag/rss2-full/[% bbag.id %]' aria-label="RSS Feed">
+                <i class="fas fa-rss-square"></i></a>
+                [% END %]</h2>
                 [% IF bbag.description %]<div class="bookbag-description">[% bbag.description | html %]</div>[% END %]
             </div>
             </td>
                     [% IF ctx.where_from %]
                     <input type="hidden" name="where_from" value="[% ctx.where_from %]" />
                     [% END %]
-                    <input class="fixed btn btn-secondary btn-sm m-1" type="submit" value="[% l('Add to this list') %]" />
+                    <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 %]
                     [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
                     [% IF bbag.pub != 't' %]
                     <input type="hidden" name="action" value="show" />
-                    <input class="class=fixed btn btn-secondary btn-sm m-1" type="submit"  value="[% l('Share') %]" />
+                    <button class="class=fixed btn btn-action btn-sm m-1" type="submit" ><i class="fas fa-share-square"></i> [% l('Share') %]</button>
                     [% ELSE %]
                     <input type="hidden" name="action" value="hide" />
-                    <input class="fixed btn btn-secondary btn-sm m-1" type="submit" value="[% l('Hide') %]" />
+                    <button class="fixed btn btn-secondary btn-sm m-1" type="submit"><i class="fas fa-eye-slash"></i> [% l('Hide') %]</button>
                     [% END %]
                 </div>
             </form>
-            <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="post" onsubmit="return confirm('[% l('Do you really want to delete this list?') %]')">
-                <div class="bookbag-controls">
-                    <input type="hidden" name="list" value="[% bbag.id %]" />
-                    <input type="hidden" name="action" value="delete" />
-                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
-                    <input type="submit" value="[% l('Delete List') %]" class="btn btn-secondary btn-sm m-1"/>
-                </div>
-            </form>
+          
             <form action="[% mkurl(ctx.opac_root _ '/myopac/list/print') %]" method="post">
                 <div class="bookbag-controls">
                     <input type="hidden" name="list" value="[% bbag.id %]" />
                     <input type="hidden" name="sort" value="[% CGI.param('sort') | html %]" />
                     [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
-                    <input type="submit" value="[% l('Download CSV') %]" class="btn btn-secondary btn-sm m-1"/>
+                    <button type="submit" class="btn btn-action btn-sm m-1"><i class="fas fa-file-download"></i> [% l('Download CSV') %]</button>
                 </div>
             </form>
             [% setting = 'opac.default_list'; %]
                     [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
                     [% IF ctx.user_setting_map.$setting == bbag.id %]
                     <input type="hidden" name="action" value="remove_default" />
-                    <input type="submit" class="btn btn-secondary btn-sm m-1" value="[% l('Remove Default List') %]" />
+                    <button type="submit" class="btn btn-danger btn-sm m-1"><i class="fas fa-minus-circle"></i> [% l('Remove Default List') %]</button>
                     [% ELSE %]
                     <input type="hidden" name="action" value="make_default" />
-                    <input type="submit" class="btn btn-secondary btn-sm m-1" value="[% l('Make Default List') %]" />
+                    <button type="submit" class="btn btn-action btn-sm m-1"><i class="fas fa-th-list"></i> [% l('Make Default List') %]</button>
                     [% END %]
                 </div>
             </form>
             [% IF ctx.is_staff %]
             <div class="bookbag-controls">
-                <input 
+                <button 
                     type="submit" 
                     onclick='
                        var path = 
                             xulG
                         )'
                     value="[% l('Locate Z39.50 Matches') %]" 
-                />
+                ><i class="fas fa-external-link-alt"></i></button>
             </div>
             [% END %]
+            [% IF bbag.pub == 't'; %]
             <div class="bookbag-controls">
-                [% IF bbag.pub == 't'; %]
-                <a class="btn btn-sm btn-secondary m-1" href='[%-
+                
+                <a class="btn btn-sm btn-opac m-1" href='[%-
                     mkurl(
                         ctx.opac_root _ '/results',
                         {page => '0', bookbag => bbag.id, depth => 0, locg => ctx.search_ou},
                         1
                     )
-                -%]'>[% l('View in Catalogue') %]</a>
-                [% END %]
-                [% IF bbag.pub == 't'; %]
-                <a target='_blank' href='/opac/extras/feed/bookbag/rss2-full/[% bbag.id %]'><img
-                    alt="[% l('RSS Feed') %]" border="0"
-                    src="[% ctx.media_prefix %]/images/small-rss.png[% ctx.cache_key %]"/></a>
-                [% END %]
+                -%]'><i class="fas fa-glasses"></i> [% l('View in Catalogue') %]</a>
+             
             </div>
+               [% END %]
+                 <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="post" onsubmit="return confirm('[% l('Do you really want to delete this list?') %]')">
+                <div class="bookbag-controls float-right">
+                    <input type="hidden" name="list" value="[% bbag.id %]" />
+                    <input type="hidden" name="action" value="delete" />
+                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
+                    <button type="submit" class="btn btn-danger btn-sm m-1"><i class="fas fa-trash-alt"></i> [% l('Delete List') %]</button>
+                </div>
+            </form>
             </td>
             </tr>
             </table>
-            <div class="clear-both pad-bottom-five"></div>
         </div>
         [% IF CGI.param("bbid") == bbag.id %]
-        <div>
-            [% IF bbag.items.size %]
-                <div class="d-none">
-                    <form method="get" class="form-row">
-                        <label for="opac.result.sort" class="form-row">[% l("Sort list items by: ") %]
-                        [%- INCLUDE "opac/parts/preserve_params.tt2" params=['loc', 'query', 'qtype']; %]
-                        [% INCLUDE "opac/parts/filtersort.tt2"
-                            value=CGI.param('sort') mode='bookbag' class='form-control my-2' %]
-                        <input type="hidden" name="bbid"
-                            value="[% CGI.param('bbid') | html %]"/>
-                        <input type="submit" class="btn btn-confirm btn-sm my-2" value="[% l('Sort') %]" />
-                        </label>
-                    </form>
-                </div>
-            [% END %]
-            <div>
-                <form method="post">
-                    <input type="hidden" name="bbid" value="[% bbag.id %]" />
-                    <input type="hidden" name="action" value="editmeta" />
-                    <input type="hidden" name="limit" value="[% limit %]" />
-                    <input type="hidden" name="offset" value="[% offset %]" />
-                    [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
-                       <table title="Edit List Description" class="mx-auto">
-                               <th colspan="2" class="text-center"><strong>Edit List Description</strong></th>
-                               <tr>
-                            <td> 
-                                <label for="bbag-edit-name">[% l('Name:') %]</label>
-                            </td>
-                            <td class="px-3">
-                               <input name="name" type="text" value="[% bbag.name | html %]" id="bbag-edit-name" class="form-control m-2" /></td>
-                            </tr>
-                            <tr>
-                            <td>
-                               <label for="bbag-edit-description">[% l('Description:') %]</label>
-                            </td>
-                            <td class="px-3">
-                                <textarea name="description" id="bbag-edit-description" class="form-control m-2">[% bbag.description | html %]</textarea>
-                            </td>
-                            </tr>
-                            <tr>
-                               <td colspan="2" >
-                                 [% l("Save changes?") %]
-                                <input type="submit" class="btn btn-confirm btn-sm mx-3" value="[% l('Save') %]" />
-                                </td>
-                            </tr>
-                        </table>
-                </form>
-            </div>
-        </div>
-        <br class="clear-both" />
+        
         <div>
         <h5 class="text-center my-2">List Items</h5>
         <form action="[% mkurl(ctx.opac_root _ '/myopac/list/update') %]" method="post" >
         <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>
                     <td class="save-notes">
                         [%- INCLUDE "opac/parts/preserve_params.tt2"; %]
                         <input type="hidden" name="bbid" value="[% CGI.param('bbid') | html %]" />
-                        <input type="submit" class="btn btn-confirm" name="save_notes" value="[% l('Save Notes') %]" />
+                        <button type="submit" class="btn btn-confirm" ><i class="fas fa-save"></i> [% l('Save Notes') %]</button>
                     </td>
                 </tr>
                 [% END %]
         
         
         
-        </div>
+       
         [% IF ctx.bb_page_count > 1; %]
             <div class="header_middle" style="padding-top:7px;">
                 <div class="bbag-navigate-list">[% l('Navigate Selected List ') %]</div>
                     [%- END; -%]
                  </div>
             </div>
-            <div class="clear-both"></div>
         [% END %]
         <br/>
-
+ </div></div>
         </form>
         </div>
         [% END %]
         [% END %]
     </div>
     [% END %][% END %]
-</div></div>
+</div>
+
 [% END %]
 
old mode 100644 (file)
new mode 100755 (executable)
index 99ed0ea..deb65ae
 [%  PROCESS "opac/parts/header.tt2";
     PROCESS "opac/parts/misc_util.tt2";
-    WRAPPER "opac/parts/myopac/main_base.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "main";
     myopac_main_page = "main";
-    myopac_cc_allowed = 0;
-    IF (ctx.fines.grocery.size OR ctx.fines.circulation.size) AND ctx.get_org_setting(ctx.user.home_ou, 'credit.payments.allow') == 1;
-        myopac_cc_allowed = 1;
-    END
+      IF date.format(ctx.parse_datetime(ctx.user.expire_date), '%s') < date.format(date.now , '%s');
+        fmt_expire_date = date.format(ctx.parse_datetime(ctx.user.expire_date), DATE_FORMAT);
+        ctx.expired_card = "true";
+     END;
 %]
-<h3 class="sr-only">[% l('My Account Summary') %]</h3>
-[%  IF myopac_cc_allowed;
-    # http://www.w3.org/TR/WCAG20-TECHS/H32.html
-    # avoid forms w/ no submit action %]
-<form action="[% ctx.opac_root %]/myopac/main_payment_form#payment" method="get" id="selected_fines" class="my-3">
-[% END %]
-
-    [% IF ctx.fines.circulation.size > 0 %]
-    <div id='myopac_circ_trans_div'>
-      <!--moved tables heading to outside of the table itself - took internal styling -->
-        <div class="header_middle">
-           <span class="acct_fines_header">
-           <!-- Different heading when not able to pay -->
-             [% IF myopac_cc_allowed %]
-                [% l("Pay Selected Circulation Charges") %]
-            [% ELSE %] 
-                [% l("Circulation Charges") %]
-             [% END %]
-           </span>
-           
-        </div>
-    
-        <table id="acct_fines_main_header" class="table table-hover miniTable chargesMainTable" title="[% l('Items Checked Out') %]">
-            <thead>
-               
-                <tr>
 
-                   [% IF myopac_cc_allowed %]
-                    <th nowrap="nowrap" style="white-space:nowrap;">
-                        <input id="pay_fines_box1" checked="checked"
-                            type="checkbox" onclick="select_all_checkboxes('xact', this.checked)"
-                            title="[% l('Click to (un)select all charges') %]" />
-                    </th>
-                    [% END %]
-                    <th>[% l("Owed") %]</th>
-                    <th class="mobile_hide">[% l("Billing Type") %]</th>
-                    <th>[% l("Title") %]</th>
-                    <th class='mobile_hide'>[% l("Checkout") %]</th> 
-                    <th>[% l(" Due ") %]</th> 
-                    <th>
-                       <span class="mobile_hide">[% l(" Returned/Renewed") %]</span>
-                       <span class="mobile_view">[% l(" Returned&#42;") %]</span>
-                    </th>
-                    
-                </tr>
-            </thead>
-            <tbody id='myopac_circ_trans_tbody'>
-                [% FOR f IN ctx.fines.circulation;
-                    attrs = {marc_xml => f.marc_xml};
-                    IF f.marc_xml;
-                        PROCESS get_marc_attrs args=attrs;
-                    ELSIF f.xact.reservation;
-                        attrs.title = f.xact.reservation.target_resource_type.name;
-                    END %]
-                <tr id='myopac_circ_trans_row'>
-                    [% IF myopac_cc_allowed %]
-                    <td>
-                        <input type="checkbox" checked="checked" 
-                            title="[% l('Pay this fine') %]" name="xact"
-                            value="[% f.xact.id %]" class="fineCheck"/>
-                    </td>
-                    [% END %]
-                    
-                    <td>
-                        <strong class="fineAmount" value="[% f.xact.balance_owed %]">
-                            [% money(f.xact.balance_owed) %]
-                        </strong>
-                    </td>
-                    
-                    <td class="mobile_hide">
-                       [% f.xact.last_billing_type %]
-                    </td>
-                                  
-                    <td>
-                        [% recid = f.xact.circulation.target_copy.call_number.record.id || f.xact.reservation.target_resource_type.record.id;
-                        IF recid; %]
-                        <a href="[% mkurl(ctx.opac_root _ '/record/' _ recid,
-                            {loc => ctx.search_ou}) %]">[% attrs.title | html %]</a>
-                        [% ELSE %]
-                        [% attrs.title | html %]
+<div id='myopac_summary_div'>
+    <div>
+        <div id="acct_sum_block" class="container">
+            <h3>[% l('My Account Summary') %]</h3>
+                <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>
+                    </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>
-                    
-                   <td name='myopac_circ_trans_start' class='mobile_hide'>
-                        [% ts = f.xact.circulation.xact_start || f.xact.reservation.start_time || 0;
-                        IF ts;
-                            date.format(ctx.parse_datetime(ts), DATE_FORMAT);
-                        END %]
-                    </td>
-                    
-                    <td name='myopac_circ_trans_due' >
-                        [% ts = f.xact.circulation.due_date || f.xact.reservation.end_time || 0;
-                           due_org = f.xact.circulation.circ_lib || f.xact.reservation.pickup_lib;
-                        IF ts;
-                            date.format(ctx.parse_datetime(ts, due_org), DATE_FORMAT);
-                        END %]
-                    </td>
+                    </div>
+                    <br>
+                    <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>
+                    </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>
+                    </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>
+                    </div>
+                    <br><br>
+
+                    <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>
+                    </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>
+                    </div>
                     
-                    <td name='myopac_circ_trans_finished' >
-                        [%  ts = f.xact.circulation.checkin_time || f.xact.reservation.return_time || 0;
-                            IF ts;
-                                date.format(ctx.parse_datetime(ts), DATE_FORMAT);
-                            ELSE %]
-                            <!-- XXX TODO fines aren't really accruing
-                                if circ has hit maxfines. more clarity
-                                here? --> 
-                            <span class="alert">[% l('(fines accruing)') %]</span>
-                        [%  END %]
-                    </td>
+                    <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>
+                    </div>
+                   
+                </div>
                    
-                </tr>
-                [% END %]
-            </tbody>
-        </table>
-        <!-- Disclaimer for mobile -->
-        <span class="mobile_view cc_disclaimer"> <strong>&#42;</strong>Items may have been renewed. </span>
+        </div>
     </div>
-    [% END %]
+       [% content %]
+</div>
 
-    [% IF ctx.fines.grocery.size > 0 %]
-    <!-- Table for all non-circulation transactions -->
-    <div id='myopac_trans_div'>
-        <h2 class="acct_fines_header text-center">
-                [% l("Charges On Your Account") %]
-        </h2>
-        
-        
-         <table id="acct_fees_main_header" class="table table-hover miniTable chargesTable my-3" title="[% l('Other Fines and Fees') %]">
-            <thead>
-                <tr>
-                
-                     [% IF myopac_cc_allowed %]
-                    <th  nowrap="nowrap" style="white-space:nowrap;">
-                        <input id="pay_fines_box2" checked="checked"
-                            type="checkbox" onclick="select_all_checkboxes('xact_misc', this.checked)"
-                            title="[% l('Click to (un)select all fines') %]" />
-                    </th>
-                    [% END %]
-                    <th >[% l("Owed") %]</th>
-                    <th >[% l("Billing Type") %]</th>
-                    <th >[% l("Note") %]</th>
-                    <th >[% l("Date") %]</th>
-                    
-
-                </tr>
-            </thead>
-            <tbody id='myopac_trans_tbody'>
-                [% c = 0; %]
-                [% FOR f IN ctx.fines.grocery %]
-                <tr id='myopac_trans_row'>
-                [% c = c + 1; %]
-                    [% IF myopac_cc_allowed %]
-                    <td>
-                        <span class="sr-only">Billing Number [% c %]</span>
-                        <input class="fineCheck" type="checkbox" title='[% l("Pay this fine") %]' name="xact_misc" value="[% f.xact.id %]" checked="checked" />
-                    </td>
-                    [% END %]
-                    
-                    <td class="red">
-                        <span class="sr-only">Amount Owed</span>
-                        <strong class="fineAmount" value="[% f.xact.balance_owed %]">
-                            [% money(f.xact.balance_owed) %]
-                        </strong>
-                    </td>
-                    
-                    <td>
-                        <span class="sr-only">Billing For</span>
-                        [% f.xact.last_billing_type %]
-                    </td>
-                    
-                    <td>
-                        [% IF f.xact.last_billing_note; %]
-                            <span class="sr-only">Note</span>
-                            [% f.xact.last_billing_note %]
-                        [% END %]
-                    </td>
-                    
-                    <td>
-                        <span class="sr-only">Date of Billing</span>
-                        [% date.format(ctx.parse_datetime(f.xact.xact_start),DATE_FORMAT) %]
-                    </td>
-
-                </tr>
-                [% END %]
-            </tbody>
-        </table>
-   
-    </div>
-    [% END %]
-    [% UNLESS ctx.fines.grocery.size OR ctx.fines.circulation.size %]
-    <div>[% l('You have no current fines.') %]</div>
-    [% ELSIF myopac_cc_allowed %]
-   
-    <div class="my-3">
-        <input type="submit"
-            value="[% l('Pay selected charges') %] - [% money(ctx.user_stats.fines.balance_owed) %]"
-            title="[% l('Pay selected charges') %]"
-            class="btn btn-confirm my-1"
-            id="selectPay"/>
-    <form action="[% ctx.opac_root %]/myopac/main_payment_form" method="get"><input
-            type="submit" title="[% l('Pay All Charges') %] "
-            value="[% l('Pay All Charges') %] - [% money(ctx.user_stats.fines.balance_owed) %]" class="btn btn-confirm my-1" /></form>
-    </div>
-    [% END %]
-[% IF myopac_cc_allowed %]
-</form>
-[% END %]
 [% END %]
 
-<!--Table functions ~ Running total of selected items for use in a Paypal module or where running total is needed-->
-<script>
-jQuery("input[type=checkbox]").click(function () {
-       var amount = 0;
-    jQuery("td input:checked").each(function () {
-               var item = jQuery( this ).parent().parent().children("td").children(".fineAmount").attr("value");
-        item = parseFloat(item);
-        amount += item;
-    });
-    jQuery("#total").val(amount);
-    jQuery("#selectPay").val('Pay selected charges - $' + amount.toFixed(2));
-});
-</script>
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 5f59e53..8c0da57
@@ -26,8 +26,8 @@
             %]
             <br/>
             
-             <a href="[% mkurl(ctx.opac_root _ '/myopac/main', {}, 1) %]" class="btn btn-confirm">[% l('Account Home') %]</a> 
-             <a href="[% retry_url %]" class="btn btn-confirm">[% l('Try Payment Again') %]</a>
+             <a href="[% mkurl(ctx.opac_root _ '/myopac/main', {}, 1) %]" class="btn btn-confirm"><i class="fas fa-home"></i> [% l('Account Home') %]</a> 
+             <a href="[% retry_url %]" class="btn btn-confirm"><i class="fas fa-redo"></i> [% l('Try Payment Again') %]</a>
         </p>
     [% ELSE %]
         <p><big>[% l('Your payment has been approved.') %]</big>
@@ -39,7 +39,7 @@
                <a href="[% ctx.opac_root %]/myopac/receipt_print?[% print_args.join('&amp;') %]"
             target="_egrecpt"
             class="btn-confirm btn btn-sm"
-            onclick="try { print_node('printable-receipt'); } catch (e) { window.print(); } return false;">[% l('Print receipt') %]</a></p>
+            onclick="try { print_node('printable-receipt'); } catch (e) { window.print(); } return false;"><i class="fas fa-print"></i> [% l('Print receipt') %]</a></p>
             <hr>
         <tt id="printable-receipt">
             [% ctx.printable_receipt.template_output.data %]
@@ -56,8 +56,7 @@
                 ) | html %]
         </div>
         [% END %]
-        <p><a href="[% ctx.opac_root %]/myopac/main" class="btn btn-confirm">[%
-            l("Back to Account Summary") %]</a></p>
+        <p><a href="[% ctx.opac_root %]/myopac/main" class="btn btn-confirm"><i class="fas fa-house-user"></i> [% l("Back to My Acccount") %]</a></p>
     [% END %]
 </div>
 [% END %]
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/main_pay_init.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/main_pay_init.tt2
new file mode 100755 (executable)
index 0000000..8355710
--- /dev/null
@@ -0,0 +1,15 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "main";
+    myopac_main_page = "pay" %]
+<div id="myopac_summary_div">
+
+    <div class="payment-processing">
+        [% l('Processing...') %] <br/><br/>
+        [% l('Processing your payment may take some time.') %]<br/>
+        [% l("Please do not Refresh or use your browser's Back button or your credit card may be charged more than once.") %]<br/>
+    </div>
+
+</div>
+[% END %]
old mode 100644 (file)
new mode 100755 (executable)
index de357f5..6fa08fc
@@ -1,6 +1,6 @@
 [%  PROCESS "opac/parts/header.tt2";
     PROCESS "opac/parts/misc_util.tt2";
-    WRAPPER "opac/parts/myopac/main_base.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
     myopac_page = "main";
     myopac_main_page = "payment_form";
 
         "browser settings and try again.") %]
 </noscript>
 [% END %]
+<div class="container">
+<hr>
 <div id="pay_fines_now"[% IF ctx.use_stripe %] class="hide_me"[% END %]>
      [% IF last_chance %]
+    <h3>[% l("Confirm Payment") %]</h3>
     
-    <p><big>[% l("Are you sure you are ready to charge ") %]
-         <strong> [% l("[_1] ", money(ctx.fines.balance_owed))%]</strong>
-        [% l("to your credit card?") %]</big></p> 
     <form action="[% ctx.opac_root %]/myopac/main_pay_init" method="post">
         [% FOR k IN CGI.Vars;
             NEXT UNLESS k;
         <input type="hidden" name="[% k | html %]" value="[% val | html %]" /> 
         [% END; END %]
 
-        <input type="submit" value="[% l('Submit') %]" class="btn btn-confirm"/>
-        <a href="[% mkurl(ctx.opac_root _ '/myopac/main#selected_fines', {}, 1) %]" class="btn btn-deny">[% l('Cancel') %]</a>
-       
+        <button type="submit" class="btn btn-confirm"><i class="fas fa-check"></i> [% l('Confirm') %]</button>
+        <a href="[% mkurl(ctx.opac_root _ '/myopac/main#selected_fines', {}, 1) %]" class="btn btn-deny"><i class="fas fa-ban"></i> [% l('Cancel') %]</a>
+       <p class="my-2"><big>[% l("Are you sure you are ready to charge ") %]
+         <strong> [% l("[_1] ", money(ctx.fines.balance_owed))%]</strong>
+        [% l("to your credit card?") %]</big></p> 
      <table title="[% l('List of Transactions') %]" id="acct_fines_confirm_header"
-        class="table_no_border_space table_no_cell_pad my-2">
+        class="table my-2">
    <thead>
       <tr>
         <th>[% l('Charge/Fee') %]</th>
-        <th>[% l('Amount') %]</th>
+        <th class="text-right"><span>[% l('Amount') %]</th>
      </tr>
    </thead>
    <tbody>
      </tbody>
    </table> 
      
-    <p style="padding-top: 2em;">
-    <big>[% l("Are you sure you are ready to charge ") %]
-         <strong> [% l("[_1] ", money(ctx.fines.balance_owed))%]</strong>
-        [% l("to your credit card?") %]</big></p>        
-        <input type="submit" value="[% l('Submit') %]" class="btn btn-confirm"/>
-        <a href="[% mkurl(ctx.opac_root _ '/myopac/main#selected_fines', {}, 1) %]" class="btn btn-deny">[% l('Cancel') %]</a>
-    [% ELSE %]
+       [% ELSE %]
     
     <form method="post" id="payment_form" action='#payment'
     [% IF ctx.use_stripe %]
                
                <tr> 
                 <td><label for="payment-first-name">[% l('First Name') %]</label></td>
-                    <td><input type="text"  name="billing_first" id="payment-first-name" 
+                    <td><input name="given-name" type="text"  name="billing_first" id="payment-first-name" 
                         value="[% ctx.user.first_given_name | html %]" class="form-control"/></td>
                 </tr>
                 <tr>
                     <td><label for="payment-last-name">[% l('Last Name') %]</label></td>
-                    <td><input type="text" name="billing_last" id="payment-last-name" 
+                    <td><input name="family-name" type="text" name="billing_last" id="payment-last-name" 
                         value="[% ctx.user.family_name | html %]" class="form-control"/></td>
                 </tr>
 
                         
                         <input id="payment-email-addr" type="text" 
                              value="[% ctx.user.email | html %]" disabled="disabled" 
-                            readonly="readonly" class="form-control"/>   
+                            readonly="readonly" class="form-control" name="email"/>   
                         <a title="[% l('Update Email Address') %]"
                             href="[% ctx.opac_root %]/myopac/update_email?return_to_referer=1">[% l("Update") %]</a>
                     </td
                           [% l('Total amount:') %]
                            <strong>[% money(ctx.fines.balance_owed) %]</strong><br />
           
-                         <input type="submit" id="payment_submit" value="[% l('Next') %]" class="btn btn-confirm" />
-                         <a href="[% mkurl(ctx.opac_root _ '/myopac/main', {}, 1) %]" class="btn btn-deny">[% l('Cancel') %]</a> 
+                         <button type="submit" id="payment_submit" class="btn btn-confirm"><i class="fas fa-arrow-circle-right"></i> [% l('Next') %]</button>
+                         <a href="[% mkurl(ctx.opac_root _ '/myopac/main', {}, 1) %]" class="btn btn-deny"><i class="fas fa-ban"></i> [% l('Cancel') %]</a> 
                          <br/>
                          </div>
                    </td>
         
     [% END %]
     </form>
-</div>
+</div></div>
+
 [% END %]
 [% END %]
old mode 100644 (file)
new mode 100755 (executable)
index f865e3b..421f390
@@ -1,34 +1,38 @@
 [%  PROCESS "opac/parts/header.tt2";
-    PROCESS "opac/parts/misc_util.tt2";
-    WRAPPER "opac/parts/myopac/main_base.tt2";
-    myopac_page = "main";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "main_payments";
     myopac_main_page = "payments";
+    parent = "charges";
     limit = ctx.payment_history_limit;
     offset = ctx.payment_history_offset;
 %]
 
-<h3 class="sr-only">[% l('Transaction Payments') %]</h3>
-<div class="my-3">
+<h3>[% l('Payment History') %]</h3>
+<div>
     <div class="row my-2">
-        <div class="col-3 text-left"> 
+        <div class="col-3 text-left">
+        [% IF offset != 0 %]
             <a href='main_payments?limit=[% limit %]&amp;offset=[% offset - limit %]'
-                [% IF offset == 0 %] class='invisible' [% END %]><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-6">
-            <h2 class="w-50 mx-auto">[% l('Payment History') %]</h2>
+            
         </div>
         <div class="col-3 text-right"> 
+        [% IF ctx.payments.size > limit %]
             <a href='main_payments?limit=[% limit %]&amp;offset=[% offset + limit %]'
-                [% IF ctx.payments.size < limit %] class='invisible' [% END %]><span class="np_nav_link classic_link btn btn-outline-primary">[% l('Next') %] &#9658;</span>
-            </a>
+                 ><span class="np_nav_link classic_link btn btn-action">[% l('Next') %] &#9658;</span>
+                 </a>
+                [% END %]
+            
         </div>
     </div>
-    <div class="clear-both"></div>
 
     [% IF ctx.payments.size %]
     <table title="[% l('Payments') %]" 
-        class='table table-hover miniTable paymentTable' width='100%'>
+        class='table table-hover table-bordered miniTable paymentTable'>
         <thead><tr>
             <th>[% l('Payment Date') %]</th>
             <th>[% l('Payment For') %]</th>
                 <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 %]" />
-                        <input class="btn btn-sm btn-confirm my-1" type="submit" value="[% l('Print') %]" />
+                        <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 %]" />
-                        <input class="btn btn-sm btn-confirm my-1" type="submit" value="[% l('Email') %]" />
+                        <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>
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/messages.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/messages.tt2
new file mode 100755 (executable)
index 0000000..1cecd70
--- /dev/null
@@ -0,0 +1,16 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "messages";
+    limit = (ctx.patron_messages_limit.defined) ? ctx.patron_messages_limit : 20;
+    offset = (ctx.patron_messages_offset.defined) ? ctx.patron_messages_offset : 0;
+    count = (ctx.patron_messages_count.defined) ? ctx.patron_messages_count : 0;
+    display_single = (ctx.display_single_message.defined) ? ctx.display_single_message : 0;
+%]
+<h3 class="sr-only">[% l('My Messages') %]</h3>
+[% IF display_single;
+    PROCESS "opac/myopac/messages/single_message.tt2";
+ELSE;
+    PROCESS "opac/myopac/messages/list.tt2";
+END %]
+[% END %]
old mode 100644 (file)
new mode 100755 (executable)
index 9b0dbd8..d1293bd
@@ -1,26 +1,39 @@
 <div id="myopac_messages_div">
-    <div class="header_middle">
-        <span id="acct_messages_header" style="float:left;">[% l("Messages") %]</div>
-        <span class='float-left' style='padding-left: 10px;'>
-            <a href='[% mkurl('messages', { limit => limit, offset => (offset - limit)} ) %]'
-                [% IF offset <= 0 %] class='invisible' [% END %]><span class="nav_arrow_fix">&#9668;</span>[% l('Previous') %]</a>
+<h3>[% l("Messages") %]</h3>
+    <div>
+
+
+
+<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 %]
-            <a href='[% mkurl('messages', {limit => limit, offset => (offset + limit)}) %]'
-               [% IF count <= limit + offset %] class='invisible' [% END %] >[% l('Next') %]<span class="nav_arrow_fix">&#9658;</span></a>
-        </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>
-    <div class="clear-both"></div>
     [% IF ctx.message_update_action.defined %]
         [% IF ctx.message_update_changed > 0 %]
         <div class="message-update-summary">
         </div>
         [% END %]
     [% END %]
-    <div class="clear-both"></div>
     <div id="messages_main">
         <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="row">
-                <span class="col-md-11 my-2">
-                    <select class="form-control" name="action" id="acct_messages_actions"
-                        title="[% l('Select your action for the selected messages') %]">
-                        <option id="acct_messages_actions_none" value="">
-                            -- [% l('Actions for selected messages') %] --
-                        </option>
-                        <option value="mark_read">[% l('Mark As Read') %]</option>
-                        <option value="mark_unread">[% l('Mark As Unread') %]</option>
-                        <option value="mark_deleted">[% l('Delete') %]</option>
-                    </select>
-                </span>
-                <span class="col-md-1 my-2">
-                    <input type="submit"
-                        value="[% l('Go') %]"
-                        title="[% l('Go') %]"
-                        class="btn btn-confirm " />
-                </span>
-               <!-- <span style="padding-left:5px;">
-                    <a href="#"><img
-                        alt="[% l('Messages Help') %]"
-                        title="[% l('Actions for messages') %]"
-                        src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]" /></a>
-                </span> -->
+            <div class="my-2">
+                <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 miniTable messagesTable">
+                class="table table-hover table-bordered miniTable messagesTable">
                 <thead>
                 <tr>
-                    <th align="center" class="text-center">
-                        <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>
                 [% FOR message IN ctx.patron_messages; %]
-                    <tr name="acct_message_row"
-                        [% IF !message.is_read %]class="unread-patron-message"[% END %]>
-                        <td align="center">
+                    <tr [% IF !message.is_read %]class="unread-patron-message"[% END %]>
+                        <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 %]
old mode 100644 (file)
new mode 100755 (executable)
index f79f009..2d74973
@@ -1,51 +1,44 @@
 <div id="myopac_messages_div">
-    <div class="header_middle">
-        <span id="acct_messages_header" style="float:left;">[% l("Message") %]</div>
-    </div>
-    <div class="clear-both"></div>
+    <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 %]" />
             <input type="hidden" name="offset" value="[% offset %]" />
             <input type="hidden" name="limit" value="[% limit %]" />
             <span>
-                <a href="[% mkurl('messages', {}, ['single', 'message_id']) %]" class="btn btn-confirm m-1">
+                <a href="[% mkurl('messages', {}, ['single', 'message_id']) %]" class="btn btn-action m-1">
+                <i class="fas fa-arrow-circle-left"></i>
                 [% l('Return to Message List') %]
                 </a>
-                <button type="submit" name="action" value="mark_deleted" class="btn btn-deny m-1"
-                    onclick="return confirm('[% l("Are you sure you wish to permanently delete this message?") %]')">
-                    [% l('Delete') %]
-                </button>
+                
                 <button type="submit" name="action" value="mark_unread" class="btn btn-opac m-1">
+                   <i class="fas fa-eye-slash"></i>
                     [% l('Mark Unread') %]
                 </button>
+                <button type="submit" name="action" value="mark_deleted" class="btn btn-danger m-1"
+                    onclick="return confirm('[% l("Are you sure you wish to permanently delete this message?") %]')">
+                    <i class="fas fa-trash-alt"></i>
+                    [% l('Delete') %]
+                </button>
             </span>
         </form>
-
-        <table title="[% l('Message') %]"
-            class='light_border table'>
-            <tbody id='myopac_message_tbody'>
-            <tr>
-                <td width='30%'
-                    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 width='30%'
-                    class='color_4 light_border'>[% l("Library") %]</td>
-                <td class='myopac_message_library'>[% ctx.patron_messages.0.library | html %]</td>
-            </tr>
-            <tr>
-                <td width='30%'
-                    class='color_4 light_border'>[% l("Subject") %]</td>
-                <td class='myopac_message_subject'>[% ctx.patron_messages.0.title | html %]</td>
-            </tr>
-            <tr>
-                <td width='30%'
-                    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>
old mode 100644 (file)
new mode 100755 (executable)
index 849f836..00cb39a
@@ -1,17 +1,16 @@
 [%  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' %]
-
-<h3 class="sr-only">[% l('Account Preferences') %]</h3>
+ <h3>[% l('Account Information and Preferences') %]</h3>
 <div id="acct_info_main">
-    <table width='70%' title="[% l('Account preference') %]"
-        class='light_border table table-hover'>
+    <table title="[% l('Account preference') %]" class='light_border table table-hover'>
         <tbody id='myopac_summary_tbody'>
             <tr>
                 <td class='color_4 light_border'>[% l("Name") %]</td>
 
-                <td width='50%' class='light_border'>[% l(
+                <td class='light_border'>[% l(
                     HUMAN_NAME_FORMAT,
                     ctx.user.prefix, 
                     ctx.user.first_given_name,
@@ -24,8 +23,7 @@
             </tr>
              [% IF ctx.user.pref_first_given_name || ctx.user.pref_second_given_name || ctx.user.pref_family_name %]
             <tr>
-                <td width='30%'
-                    class='color_4 light_border'>[% l("Preferred Name") %]</td>
+                <td class='color_4 light_border'>[% l("Preferred Name") %]</td>
 
                 <td class='light_border'>[% l(
                     HUMAN_NAME_FORMAT,
@@ -67,8 +65,8 @@
                 [%- IF ctx.username_change_disallowed %]
                 <td></td>
                 [%- ELSE %]
-                <td class='light_border'><a href='update_username'
-                    title="[% l('Change Username') %]">[% l("Change") %]</a></td>
+                <td class='light_border'><a class="btn btn-sm btn-action" href='update_username'
+                    title="[% l('Change Username') %]"><i class="fas fa-user-cog"></i> [% l("Change") %]</a></td>
                 [%- END %]
             </tr>
             <tr>
@@ -78,8 +76,8 @@
                 [%- IF disable_password_change == 'true' %]
                 <span></span>
                 [%- ELSE %]
-                <span class='light_border'><a href='update_password'
-                    title="[% l('Change Password') %]">[% l("Change") %]</a></span>
+                <span class='light_border'><a class="btn btn-sm btn-action" href='update_password'
+                    title="[% l('Change Password') %]"><i class="fas fa-user-cog"></i> [% l("Change") %]</a></span>
                 [%- END %]
                 </td>
             </tr>
@@ -90,8 +88,8 @@
                 [%- IF disable_email_change == 'true' %]
                 <span></span>
                 [%- ELSE %]
-                <span class='light_border'><a href='update_email'
-                    title="[% l('Update Email Address') %]">[% l('Change') %]</a></span>
+                <span class='light_border'><a class="btn btn-sm btn-action" href='update_email'
+                    title="[% l('Update Email Address') %]"><i class="fas fa-user-cog"></i> [% l('Change') %]</a></span>
                 [%- END %]
                 </td>
             </tr>
 
             <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>
-                        </td>
+                        <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 %]
     </table>
     
     <br />
-    <hr class='opac-auto-013' color="#DCDBDB" />
+    <hr />
     <br />
     
        <div class="header_middle mb-3">
                 cur_id = addr.id; 
                 pending_addr = pending.$cur_id;
             %]
-            <div class="col-lg-6 col-12">
-             <table width='100%' id='address_table' class='light_border' title="[% l('Addresses') %]">
+    <div class="col-lg-6 col-12">
+        <table class='table' title="[% l('Addresses') %]">
        
-        <tbody>
+            <tbody>
             <tr>
+              <td>
                 <!-- pending address form -->
                 [% IF pending_addr OR edit_addr_id == cur_id;
                     update_addr = pending_addr || addr %]
-                <td>
+              
                     <form method='post'>
                         [% IF pending_addr %]
                             <input type='hidden' name='pending_addr' value='[% pending_addr.id %]'/>
                             </tr>
                         [% END %]
                             <tr>
-                                <td><input type='submit' value="[% l('Save Changes') %]" class="btn btn-confirm btn-sm"/></td>
+                                <td><button type='submit' class="btn btn-confirm "><i class="fas fa-save"></i> [% l('Save Changes') %]
+
+ </button></td>
                                 <td>
                                     [% params = (pending_addr) ? {delete_pending => pending_addr.id} : {} %]
-                                    <a href="[% mkurl('', params, 1) %]" class="btn btn-deny btn-sm">[% l('Discard Pending Address') %]</a>
+                                    <a href="[% mkurl('', params, 1) %]" class="btn btn-deny "><i class="fas fa-trash-alt"></i> [% l('Discard Pending Address') %]</a>
                                 </td>
                             </tr>
                             <tr><td colspan='2'><i>[% l('This address has a pending change.') %]</i></td></tr>
                         </table>
                     </form>
                 </td>
-                </tr>
-            </tbody>
-        </table>
-     </div>
-                [% ELSE %]
-                               <div class="col-lg-6 col-12">
+                 [% ELSE %]
+                <td>
+                               
                     <!-- read-only address display -->
                     <table class='table' title="[% l('Active Addresses') %]">
                         <tr><td>[% l("Address Type") %]</td><td>[% addr.address_type | html %]</td></tr>
                         <tr><td>[% l("Zip") %]</td><td>[% addr.post_code | html %]</td></tr>
                         [% IF ctx.get_org_setting(ctx.user.home_ou.id, 'opac.allow_pending_address') 
                                 AND !pending_addr AND edit_addr_id != cur_id %]
-                        <tr><td colspan='2'><a href='?edit_address=[% addr.id %]'>[% l('Edit Address') %]</a></td></tr>
+                        <tr><td colspan='2'><a class="btn btn-action" href='?edit_address=[% addr.id %]'><i class="fas fa-edit"></i> [% l('Edit Address') %]</a></td></tr>
                         [% END %]
                     </table>
-                 </div>
-                [% END %] <!-- if pending_addr -->
+                 
+                 </td>
+                [% END %] 
+                </tr>
+            </tbody>
+        </table>
+     </div></div>
             [% END %]
        
-    </div>
-    </div>
-</div>
+    
 
 [% END %]
old mode 100644 (file)
new mode 100755 (executable)
index 0458c5d..1b4420e
@@ -1,10 +1,11 @@
 [%  PROCESS "opac/parts/header.tt2";
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";
-    myopac_page = "prefs";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "prefs_my_lists";
+    parent="prefs";
     prefs_page = 'prefs_my_lists' %]
 
 
-    <h3 class="sr-only">[% l('List Preferences') %]</h3>
+    <h3>[% l('List Preferences') %]</h3>
     <form method='post'>
 
        <table class="full-width table" id="acct_search_main"
@@ -21,9 +22,9 @@
 
                 [%- 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="form-control mini-control" id='[% setting %]' name='[% setting %]'>
+                        <select class="d-inline-block form-control mini-control" id='[% setting %]' name='[% setting %]'>
                             [%  UNLESS ctx.user_setting_map.$setting;
                                     ctx.user_setting_map.$setting = 10;
                                 END;
                                         selected='selected'[% END %]>[% val | html %]</option>
                             [% END %]
                         </select>
-                       <img alt="[% l('List Items Help') %]"
-                            src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]"
-                            title="[% l('The number of lists displayed per page.') %]"
-                        />
+                      <a href="#" title="Change the amount of lists shown in 'My Lists'." data-toggle="tooltip">
+                        <i class="fas fa-question-circle"></i>
+                    </a>
                     </td>
                 </tr>
                 [%- setting = 'opac.list_items_per_page' -%]
                 <tr >
-                    <td width='20%'><label for='[% setting %]'>[%l("List items per page") %]</label></td>
+                    <td><label for='[% setting %]'>[%l("List items per page") %]</label></td>
                     <td>
-                        <select class="form-control mini-control" id='[% setting %]' name='[% setting %]'>
+                        <select class="d-inline-block form-control mini-control" id='[% setting %]' name='[% setting %]'>
                             [%  UNLESS ctx.user_setting_map.$setting;
                                     ctx.user_setting_map.$setting = 10;
                                 END;
                                         selected='selected'[% END %]>[% val | html %]</option>
                             [% END %]
                         </select>
-                        <img alt="[% l('List Items Help') %]"
-                            src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]"
-                            title="[% l('The number of list items displayed per page when viewing a selected list.') %]"
-                        /> 
+                       <span title="Change the amount of items shown while viewing a 'My List'." data-toggle="tooltip">
+                        <i class="fas fa-question-circle"></i>
+                    </span>
                     </td>
                 </tr>
             </tbody>
         </table>
-        <input type="submit" value="[% l('Save') %]" class="btn btn-confirm"/>
+        <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 %]
old mode 100644 (file)
new mode 100755 (executable)
index de1dbbb..c98a8b5
@@ -1,9 +1,10 @@
 [%  PROCESS "opac/parts/header.tt2";
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";
-    myopac_page = "prefs";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "prefs_notify";
+    parent="prefs";
     prefs_page = 'prefs_notify' %]
 
-<h3 class="sr-only">[% l('Notification Preferences') %]</h3>
+<h3>[% l('Notification Preferences') %]</h3>
 <form method='post'>
     [% setting = 'opac.hold_notify' %]
     <input name='[% setting %]' type="hidden"
         </tbody>
     </table>
 
-    <input type='submit' value="[% l('Save') %]" class="btn btn-confirm" />
+    <button type='submit' class="btn btn-confirm"><i class="fas fa-save"></i> [% l('Save') %]</button>
 </form>
 [% END %]
 
old mode 100644 (file)
new mode 100755 (executable)
index 853c65f..947d663
@@ -1,10 +1,11 @@
 [%  PROCESS "opac/parts/header.tt2";
     PROCESS "opac/parts/org_selector.tt2";
-    WRAPPER "opac/parts/myopac/prefs_base.tt2";
-    myopac_page = "prefs";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "prefs_settings";
+    parent="prefs";
     prefs_page = 'prefs_settings' %]
 
-    <h3 class="sr-only">[% l('Search and History Preferences') %]</h3>
+    <h3>[% l('Search and History Preferences') %]</h3>
 
     <form method='post' action="prefs_settings">
 
@@ -19,9 +20,9 @@
                   <br/>
                   [% l('Are you sure you wish to continue?') %]
                   <br>
-                  <a href="[% mkurl() %]" class="btn btn-deny">[% l('Cancel') %]</a>
+                  <a href="[% mkurl() %]" class="btn btn-deny"><i class="fas fa-ban"></i> [% l('Cancel') %]</a>
                   <input type='hidden' name='history_delete_confirmed' value='1'/>
-                  <input type="submit" value="[% l('Confirm') %]" class="btn btn-confirm"/>
+                  <button type="submit" class="btn btn-confirm"><i class="fas fa-check"></i> [% l('Confirm') %]</button>
                   </div>
                 </td></tr>
                 [% ELSIF ctx.updated_user_settings OR ctx.updated_waiver_entries %]
@@ -34,9 +35,9 @@
 
                 [%- 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="form-control mini-control" id='[% setting %]' name='[% setting %]'>
+                        <select class="d-inline-block form-control mini-control" id='[% setting %]' name='[% setting %]'>
                             [%  UNLESS ctx.user_setting_map.$setting;
                                     ctx.user_setting_map.$setting = 10;
                                 END;
                                         selected='selected'[% END %]>[% val | html %]</option>
                             [% END %]
                         </select>
-                       <a href="#"><img alt="[% l('Search Hits Help') %]" 
-                            src="[% ctx.media_prefix %]/images/question-mark.png[% ctx.cache_key %]"
-                        /></a>
+                         <a href="#" title="Change the amount of results shown in a search while signed in." data-toggle="tooltip">
+                        <i class="fas fa-question-circle"></i>
+                    </a>
                     </td>
                 </tr>
                 [%- setting = 'opac.default_search_location'; -%]
                 <tr >
-                    <td width='20%'><label for='[% setting %]'>[% l("Preferred search location") %]</label></td>
+                    <td><label for='[% setting %]'>[% l("Preferred search location") %]</label></td>
                     <td>
                         [%- thang = ctx.user.home_ou.id;
                             IF ctx.user_setting_map.$setting;
@@ -66,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;
             </tbody>
         </table>
         [% IF !ctx.confirm_history_delete %]
-        <input type="submit" value="[% l('Save') %]" class="btn btn-confirm"/>
+        <button type="submit" class="btn btn-confirm"><i class="fas fa-save"></i> [% l('Save') %]</button>
         [% END %]
     </form>
     [% INCLUDE "opac/parts/myopac/prefs_hints.tt2" %]
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/receipt_email.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/receipt_email.tt2
new file mode 100755 (executable)
index 0000000..15b744f
--- /dev/null
@@ -0,0 +1,21 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "prefs"  %]
+    [% IF ctx.email_receipt_result; # result should be undef on success %]
+    <div class="payment-error">
+        [% l('Error preparing receipt:') %]
+        <span title="[% ctx.email_receipt_result.textcode | html %]">
+            [% ctx.email_receipt_result.desc | html %]
+        </span>
+    </div>
+    [% ELSE %]
+    <div>
+        [% l('Your receipt will be emailed to [_1]', ctx.user.email) | html %]
+    </div>
+    [% END %]
+    <p>
+        [ <a href="[% ctx.opac_root %]/myopac/main_payments">[%
+            l("Back to Payments History") %]</a> ]
+    </p>
+[% END %]
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/receipt_print.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/receipt_print.tt2
new file mode 100755 (executable)
index 0000000..64237e2
--- /dev/null
@@ -0,0 +1,26 @@
+[%# sic! no wrapper %]
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>[% l('Receipt') %]</title>
+    </head>
+    <body onload="if (document.getElementById('printable-receipt')) window.print();">
+        [% IF ctx.printable_receipt.template_output %]
+        <tt id="printable-receipt">
+            [% ctx.printable_receipt.template_output.data %]
+        </tt>
+        [% ELSE %]
+        <div class="payment-error">
+            [% l(
+                'Error preparing receipt: [_1]',
+                    (ctx.printable_receipt.textcode ? ctx.printable_receipt.textcode _ ' / ' _ ctx.printable_receipt.desc : 0) ||
+                    ctx.printable_receipt.error_output.data ||
+                    l('No receipt data returned from server')
+                ) | html %]
+        </div>
+        [% END %]
+        <hr />
+        <p>[ <a href="[% ctx.opac_root %]/myopac/main_payments">[%
+            l("Back to Payments History") %]</a> ]</p>
+    </body>
+</html>
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/reservations.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/reservations.tt2
new file mode 100755 (executable)
index 0000000..ff995fc
--- /dev/null
@@ -0,0 +1,39 @@
+[%  PROCESS "opac/parts/header.tt2";
+    PROCESS "opac/parts/misc_util.tt2";
+    WRAPPER "opac/parts/myopac/base.tt2";
+    myopac_page = "reservations";
+%]
+<h3 class="sr-only">[% l('Reservations') %]</h3>
+[% IF ctx.reservations.size %]
+    <table id="acct_reservations_main_header" class="table_no_border_space table_no_cell_pad item_list_padding">
+        <tr>
+            <th scope="col">[% l('Resource type') %]</th>
+            <th scope="col">[% l('Start time') %]</th>
+            <th scope="col">[% l('End time') %]</th>
+            <th scope="col">[% l('Pickup location') %]</th>
+            <th scope="col">[% l('Status') %]</th>
+        </tr>
+    [% FOREACH r IN ctx.reservations %]
+        <tr>
+            <td>[% r.resource_type_name %]</td>
+            <td>[% date.format(ctx.parse_datetime(r.start_time, r.pickup_lib), DATE_FORMAT _ ' %I:%M %p') %]</td>
+            <td>[% date.format(ctx.parse_datetime(r.end_time, r.pickup_lib), DATE_FORMAT _ ' %I:%M %p') %]</td>
+            <td><a href="../library/[% r.shortname %]">[% r.pickup_name %]</a></td>
+            <td>
+            [% IF r.cancel_time %]
+                [% l('Canceled') %]
+            [% ELSIF r.pickup_time %]
+                [% l('Checked Out') %]
+            [% ELSIF r.capture_time %]
+                [% l('Ready for Pickup') %]
+            [% ELSE %]
+                [% l('Reserved') %]
+            [% END %]
+            </td>
+        </tr>
+    [% END %]
+    </table>
+[% ELSE %]
+    [% l('You have no current reservations') %]
+[% END %]
+[% END %]
old mode 100644 (file)
new mode 100755 (executable)
index 8f3787d..ce898cf
@@ -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>
-    <input value="[% l('Submit') %]" type='submit' class="btn btn-confirm m-2"/>
+   <button class="btn btn-confirm m-2" type='submit'><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
 </form>
 </div>
 [% END %]
old mode 100644 (file)
new mode 100755 (executable)
index 1e66141..dcd8f4c
@@ -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>
-    <input value="[% l('Submit') %]" type='submit' class="btn btn-confirm"/>
+<button class="btn btn-confirm m-2" type='submit'><i class="fas fa-save"></i> [% l('Save Changes') %]</button>
 </form>
 </div>
 [% END %]
diff --git a/Open-ILS/src/templates-bootstrap/opac/myopac/update_password_msg.tt2 b/Open-ILS/src/templates-bootstrap/opac/myopac/update_password_msg.tt2
new file mode 100755 (executable)
index 0000000..23d5914
--- /dev/null
@@ -0,0 +1,3 @@
+<div class="password_message">
+[% l('Note: The password must be at least 7 characters in length, contain at least one letter (a-z/A-Z), and contain at least one number.'); %]
+</div>
\ No newline at end of file
old mode 100644 (file)
new mode 100755 (executable)
index 6c01af0..5d40fb6
@@ -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'><input value="[% l('Submit') %]" class="btn btn-confirm m-2" type='submit'/></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>
 
diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/acjs.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/acjs.tt2
new file mode 100755 (executable)
index 0000000..fa76861
--- /dev/null
@@ -0,0 +1,76 @@
+
+<script>
+
+    /* Checks to see if a given type of added content has data to show.
+     * The first arg to callback() is boolean indicating the presence of data */
+    function acIsAvailable(bre_id, type, callback) {
+        var url = '/opac/extras/ac/' + type + '/html/r/' + bre_id;
+        dojo.xhr('HEAD', {
+            url : url,
+            failOk : true, // http://bugs.dojotoolkit.org/ticket/11568
+            error : function(err) { callback(false, bre_id, type); },
+            load : function(result) { callback(true, bre_id, type); }
+        });
+    }
+
+    [%-
+        FOR type IN ctx.added_content.keys;
+            IF ctx.added_content.$type.status == '3' # status unknown %]
+
+                dojo.addOnLoad(function() {
+                    var bre_id = '[% ctx.bre_id %]';
+                    var type = '[% type %]';
+
+                    acIsAvailable(bre_id, type, function(avail, bre_id, type) {
+                        if (avail) {
+
+                            [% IF CGI.param('expand') == 'addedcontent' %]
+
+                                // if the content is available, un-hide the tab
+                                dojo.removeClass(dojo.byId('ac:' + type), 'hidden');
+
+                            [% ELSE %]
+                                // if no default type is selected on the main tab link
+                                // set one here, since we have available content
+
+                                var link = dojo.query('[name=addedcontent]')[0];
+                                var href = link.getAttribute('href');
+                                if (!href.match('[\&;]ac=')) {
+                                    href = href.replace('#addedcontent', ';ac=' + type + '#addedcontent');
+                                    dojo.attr(link, 'href', href);
+                                    dojo.attr(dojo.query('[name=addedcontent_lbl]')[0], 'href', href);
+                                }
+
+                            [% END %]
+                        }
+                    });
+                });
+            [% END; # IF status unknown
+        END; # FOR type
+
+        ident = ctx.record_attrs.isbn_clean || ctx.record_attrs.upc;
+        IF ident;
+    -%]
+
+[%- IF ENV.OILS_NOVELIST_URL -%]
+            /* Load novelist content */
+            setTimeout( function() {
+            novSelect.loadContentForQuery(
+                {
+                    ClientIdentifier : '[% ident %]',
+                    ISBN : '[% ident %]',
+                    version : '2.1'
+                },
+                '[% ENV.OILS_NOVELIST_PROFILE %]',
+                '[% ENV.OILS_NOVELIST_PASSWORD %]',
+                function(d){
+                    // note if d.length == 0, there is no content to display
+                    // hide the Loading... text
+                    dojo.byId('novelist-loading').innerHTML = '';
+                }
+            )}, 100);
+[%- END; # Novelist -%]
+
+        [% END; # IF ident
+    %]
+</script>
old mode 100644 (file)
new mode 100755 (executable)
index bb88c53..68ca9f9
@@ -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') %]" alt="[% l('Remove row') %]"
-                                onclick='return killRowIfAtLeast(1, this.parentNode.parentNode);'>
-                                <span>[% l('X') %]</span></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" colspan="7"><a class="btn btn-opac btn-sm" href="javascript:addExpertRow();">[% 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" colspan="5" class="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 
                </td>
             </tr>
             <tr>
-                <td  colspan="2" class="expert-search-row">
-                <input type="submit" value="[% l('Search') %]"
-                    alt="[% l('Search') %]" title="[% l('Search') %]"
-                    class="btn btn-confirm" />
+                <td class="py-3">
+                <button type="submit" class="btn btn-confirm"><i class="fas fa-search"></i> [% l('Search') %]</button>
                 </td>
             </tr>
         </tfoot>
old mode 100644 (file)
new mode 100755 (executable)
index 2846ef7..fb4924d
@@ -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') %]"
-                type='text' size='18' name='query' value="[% q | html %]" x-webkit-speech [% IF loop.index == 0 %] autofocus [% END %] />
+                <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"
-            title="[% l('Remove row') %]" alt="[% l('Remove row') %]"
+        <a href="javascript:;" class="btn btn-remove btn-sm" aria-label="Remove This Row"
+            title="[% l('Remove row') %]"
             onclick='return killRowIfAtLeast(2, this);'>
-                <span>[% l('X') %]</span>
+               <i class="fas fa-times"></i>
             </a></td>
 </tr>
 [% END %]
old mode 100644 (file)
new mode 100755 (executable)
index 3fe91fe..c942dfc
@@ -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/>
-                <input type="submit" alt="[% l('Search') %]"
-                    value="[% l('Search') %]" class="btn btn-confirm mt-3" />
+
           </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>
old mode 100644 (file)
new mode 100755 (executable)
index a1d161c..5e749c1
 %]
 <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 valign='top' 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 -->
                     <tr id='adv_global_addrow' >
                         <td class="td-search-left" colspan="2">
-                            <a class="btn btn-opac btn-sm" href="javascript:;" id="myopac_new_global_row" onclick='addSearchRow();'>[% l('Add Search Row') %]</a>
+                            <a class="btn btn-opac btn-sm" href="javascript:;" id="myopac_new_global_row" onclick='addSearchRow();'><i class="fas fa-plus-circle"></i> [% l('Add Search Row') %]</a>
                         </td>
                     </tr>
                 </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>
-            <input id='search-submit-go' type="submit" value="[% l('Search') %]" title="[% l('Search') %]" class="btn btn-confirm"
-                onclick='setTimeout(function(){$("search-submit-spinner").className=""; $("search-submit-go").className="hidden"}, 2000)'/>
-            <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">[% 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 valign='top'[% 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 class="sr-only"> [% 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 valign='top'[% 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 %]">