From 04cbfdbdf1ad2052bce0a8b342d6d2f02378e893 Mon Sep 17 00:00:00 2001 From: Owen Leonard Date: Tue, 8 Sep 2020 12:29:58 -0400 Subject: [PATCH] LP#1778972: Tweaks and fixes to Bootstrap 4 template - Add "aria-hidden" to Font Awesome icons as recommended by Font Awesome for accessibility. - Minor changes to the color scheme. - Some adjustments to the way alignment is defined: Bootstrap 4 classes like "text-center" can be an impediment to customization because they use "!important." I've removed many instances of such classes in favor of putting alignment in CSS. - Ajustments to responsive behavior. I've made some changes to grid class definitions to improve flexibility of layouts at various browser widths. - Whitespace and other typo corrections. I've worked to remove trailing whitespace and replace tabs with spaces. Signed-of-by: Owen Leonard Signed-off-by: Galen Charlton Signed-off-by: Jane Sandberg --- .../src/templates-bootstrap/opac/ReadMe.txt | 2 +- .../src/templates-bootstrap/opac/advanced.tt2 | 8 +- .../src/templates-bootstrap/opac/browse.tt2 | 42 +- .../opac/css/mediaQuery.css.tt2 | 206 +++---- .../opac/css/style.css.tt2 | 505 +++++++++++------- .../src/templates-bootstrap/opac/home.tt2 | 4 +- .../src/templates-bootstrap/opac/login.tt2 | 2 +- .../src/templates-bootstrap/opac/mylist.tt2 | 4 +- .../templates-bootstrap/opac/mylist/clear.tt2 | 8 +- .../templates-bootstrap/opac/mylist/email.tt2 | 10 +- .../templates-bootstrap/opac/mylist/print.tt2 | 8 +- .../opac/myopac/circ_history.tt2 | 20 +- .../templates-bootstrap/opac/myopac/circs.tt2 | 40 +- .../opac/myopac/hold_history.tt2 | 7 +- .../templates-bootstrap/opac/myopac/holds.tt2 | 67 +-- .../opac/myopac/holds/edit.tt2 | 32 +- .../opac/myopac/list/update.tt2 | 8 +- .../templates-bootstrap/opac/myopac/lists.tt2 | 91 ++-- .../templates-bootstrap/opac/myopac/main.tt2 | 6 +- .../opac/myopac/main_pay.tt2 | 8 +- .../opac/myopac/main_payment_form.tt2 | 54 +- .../opac/myopac/main_payments.tt2 | 12 +- .../opac/myopac/messages/list.tt2 | 30 +- .../opac/myopac/messages/single_message.tt2 | 10 +- .../templates-bootstrap/opac/myopac/prefs.tt2 | 48 +- .../opac/myopac/prefs_my_lists.tt2 | 6 +- .../opac/myopac/prefs_notify.tt2 | 16 +- .../opac/myopac/prefs_settings.tt2 | 14 +- .../opac/myopac/update_email.tt2 | 4 +- .../opac/myopac/update_username.tt2 | 6 +- .../opac/parts/advanced/expert.tt2 | 6 +- .../opac/parts/advanced/global_row.tt2 | 5 +- .../opac/parts/advanced/numeric.tt2 | 10 +- .../opac/parts/advanced/search.tt2 | 33 +- .../opac/parts/anon_list.tt2 | 45 +- .../templates-bootstrap/opac/parts/base.tt2 | 16 +- .../opac/parts/bookbag_actions.tt2 | 8 +- .../opac/parts/cart_nav.tt2 | 16 +- .../opac/parts/check_value_selector.tt2 | 10 +- .../opac/parts/chilifresh.tt2 | 4 +- .../opac/parts/coded_value_selector.tt2 | 12 +- .../opac/parts/config-fresh.tt2 | 4 +- .../templates-bootstrap/opac/parts/config.tt2 | 4 +- .../opac/parts/css/colors.tt2 | 46 +- .../opac/parts/css/fonts.tt2 | 2 +- .../opac/parts/filter_group_selector.tt2 | 4 +- .../opac/parts/filtersort.tt2 | 4 +- .../templates-bootstrap/opac/parts/footer.tt2 | 25 +- .../opac/parts/goog_analytics.tt2 | 4 +- .../templates-bootstrap/opac/parts/header.tt2 | 16 +- .../opac/parts/hold_status.tt2 | 2 +- .../opac/parts/homesearch.tt2 | 8 +- .../src/templates-bootstrap/opac/parts/js.tt2 | 10 +- .../opac/parts/library/core_info.tt2 | 8 +- .../opac/parts/library_name_link.tt2 | 8 +- .../opac/parts/library_name_link_from_ou.tt2 | 4 +- .../opac/parts/locale_picker.tt2 | 4 +- .../opac/parts/login/form.tt2 | 16 +- .../opac/parts/login/help.tt2 | 8 +- .../opac/parts/login/login_modal.tt2 | 56 +- .../opac/parts/metarecord_hold_filters.tt2 | 12 +- .../opac/parts/misc_util.tt2 | 50 +- .../opac/parts/myopac/base.tt2 | 74 +-- .../opac/parts/myopac/column_sort_support.tt2 | 4 +- .../opac/parts/myopac/main_base.tt2 | 2 +- .../opac/parts/org_selector.tt2 | 26 +- .../opac/parts/place_hold.tt2 | 80 +-- .../opac/parts/place_hold_result.tt2 | 31 +- .../opac/parts/pref_lib_display.tt2 | 4 +- .../opac/parts/preserve_params.tt2 | 2 +- .../opac/parts/qtype_selector.tt2 | 3 +- .../opac/parts/record/addedcontent.tt2 | 16 +- .../opac/parts/record/authors.tt2 | 18 +- .../opac/parts/record/awards.tt2 | 8 +- .../opac/parts/record/cnbrowse.tt2 | 41 +- .../opac/parts/record/contents.tt2 | 2 +- .../opac/parts/record/copy_counts.tt2 | 2 +- .../opac/parts/record/copy_table.tt2 | 90 ++-- .../opac/parts/record/extras.tt2 | 30 +- .../opac/parts/record/issues-mfhd.tt2 | 2 +- .../opac/parts/record/navigation.tt2 | 40 +- .../opac/parts/record/refworks.tt2 | 6 +- .../opac/parts/record/series.tt2 | 10 +- .../opac/parts/record/subjects.tt2 | 4 +- .../opac/parts/record/summary.tt2 | 76 +-- .../opac/parts/record/summaryplus.tt2 | 6 +- .../opac/parts/result/adv_filter.tt2 | 4 +- .../opac/parts/result/copy_counts.tt2 | 2 +- .../opac/parts/result/facets-hz.tt2 | 34 +- .../opac/parts/result/facets.tt2 | 42 +- .../opac/parts/result/lowhits.tt2 | 30 +- .../opac/parts/result/paginate.tt2 | 16 +- .../opac/parts/result/table.tt2 | 98 ++-- .../opac/parts/searchbar.tt2 | 75 +-- .../opac/parts/staff_saved_searches.tt2 | 12 +- .../templates-bootstrap/opac/parts/topnav.tt2 | 6 +- .../opac/parts/topnav_links.tt2 | 58 +- .../opac/parts/topnav_subnav.tt2 | 55 +- .../opac/password_reset.tt2 | 20 +- .../templates-bootstrap/opac/place_hold.tt2 | 2 +- .../src/templates-bootstrap/opac/record.tt2 | 2 +- .../templates-bootstrap/opac/record/email.tt2 | 17 +- .../src/templates-bootstrap/opac/register.tt2 | 44 +- .../src/templates-bootstrap/opac/results.tt2 | 95 ++-- .../templates-bootstrap/opac/temp_warn.tt2 | 2 +- 105 files changed, 1534 insertions(+), 1395 deletions(-) diff --git a/Open-ILS/src/templates-bootstrap/opac/ReadMe.txt b/Open-ILS/src/templates-bootstrap/opac/ReadMe.txt index 5fd954adf0..104815f91d 100644 --- a/Open-ILS/src/templates-bootstrap/opac/ReadMe.txt +++ b/Open-ILS/src/templates-bootstrap/opac/ReadMe.txt @@ -9,7 +9,7 @@ /////////////////////TOOLTIPS/////////////////////////////////////////// - + - +

[% l('Catalog') %]

@@ -66,7 +66,7 @@ [% END;%]

[% l('Additional Resources') %]

[% INCLUDE 'opac/parts/footer.tt2' %] - + [% INCLUDE 'opac/parts/js.tt2' %] diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/header.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/header.tt2 index e3a0eda8c3..f54b472241 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/header.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/header.tt2 @@ -42,7 +42,7 @@ # mkurl('http://flarg.baz/squz', {foo => 'bar', boo => ['baz', 'faz']}); # # New page, clear all existing params before applying new ones: - # mkurl('/fuz/buster', {foo => 'bar', boo => 'baz'}, 1); + # mkurl('/fuz/buster', {foo => 'bar', boo => 'baz'}, 1); # # Current page, clear 'some_param' from the existing params: # mkurl('', {foo => 'bar', boo => 'baz'}, ['some_param']); @@ -66,10 +66,10 @@ cgi.delete('move_cart_by_default'); cgi.delete('cart_none_selected'); cgi.delete('list_none_selected'); - - # x and y are artifacts of using tags + + # x and y are artifacts of using tags # instead of true submit buttons, and their values are never used. - cgi.delete('x', 'y'); + cgi.delete('x', 'y'); # apply user params FOR k IN params.keys; @@ -144,10 +144,10 @@ # the full HTML attribute key="value" is produced MACRO html_text_attr(name, value) BLOCK; IF value.length >= 75; - value = value.substr(71, value.length, '...'); - END; - value = value.replace('\s*$', ''); # remove trailing whitespace - HTML.attributes($name => value); + value = value.substr(71, value.length, '...'); + END; + value = value.replace('\s*$', ''); # remove trailing whitespace + HTML.attributes($name => value); END; MACRO img_alt(text) BLOCK; diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/hold_status.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/hold_status.tt2 index f2eb5e68e7..bb7f6cd2f6 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/hold_status.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/hold_status.tt2 @@ -1,5 +1,5 @@ [% BLOCK get_hold_status %] -
+
[% IF hold.hold.status == 4 %] [% l("Available") %] [% IF ahr.shelf_expire_time %] diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/homesearch.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/homesearch.tt2 index 721c0604b9..e79cfb3c56 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/homesearch.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/homesearch.tt2 @@ -1,4 +1,6 @@ - + +[%- + PROCESS "opac/parts/css/colors.tt2"; +%] + [% PROCESS carousels %] diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/js.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/js.tt2 index 8ddf1a6471..488c95b412 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/js.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/js.tt2 @@ -1,6 +1,6 @@ - + [% INCLUDE "opac/i18n_strings.tt2" %] @@ -65,7 +65,7 @@ [% FOR summary IN ctx.mfhd_summaries %] [% IF summary.sre_id != -1 %] { - 'id' : '[% summary.sre_id %]', + 'id' : '[% summary.sre_id %]', 'label' : '[% summary.location | replace("'", "\\'") %]', 'entryNum' : [% loop.index %], 'owning_lib' : '[% summary.owning_lib %]' @@ -141,7 +141,7 @@ [% INCLUDE "opac/parts/acjs.tt2" IF ctx.page == 'record' %] [% IF ctx.page == 'advanced' %] - [% END %] @@ -180,10 +180,10 @@ var aou_hash = { - + - + -[% END; %] -[% END; %] +[% END %] +[% END %]
[% END -%] [% END -%] diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/myopac/base.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/myopac/base.tt2 index be7abb9f72..15bc33678a 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/myopac/base.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/myopac/base.tt2 @@ -1,36 +1,36 @@ [% WRAPPER "opac/parts/base.tt2" %] [% myopac_pages = [ - {children => 0, parent => "parent",url => "main", text => l("Home"), name => l("Account Summary")}, + {children => 0, parent => "parent",url => "main", text => l(" Home"), name => l("Account Summary")}, - {children => 2, parent => "parent",url => "charges", text => l("[_1]Charges", money(ctx.user_stats.fines.balance_owed)), name => l("Charges")}, - {children => 0, parent => "charges",url => "charges", text => l("Current Charges"), name => l("Current Charges")}, - {children => 0, parent => "charges",url => "main_payments", text => l("Payment History"), name => l("Payment History")}, + {children => 2, parent => "parent",url => "charges", text => l(" [_1]Charges", money(ctx.user_stats.fines.balance_owed)), name => l("Charges")}, + {children => 0, parent => "charges",url => "charges", text => l(" Current Charges"), name => l("Current Charges")}, + {children => 0, parent => "charges",url => "main_payments", text => l(" Payment History"), name => l("Payment History")}, - {children => 0, parent => "parent", url => "messages", text => l("[_1]Messages", ctx.user_stats.messages.unread), name => l("Messages")}, + {children => 0, parent => "parent", url => "messages", text => l(" [_1]Messages", ctx.user_stats.messages.unread), name => l("Messages")}, - {children => 3, parent => "parent",url => "circs", text => l("[_1]Items Checked Out", ctx.user_stats.checkouts.total_out), name = l("Circulations")}, - {children => 0, parent => "circs", url => "circs", text => l("Current Items Checked Out"), name=> l("Circulations")}, - {children => 0, parent => "circs", url => "ebook_circs", text => l("E-Items Currently Checked Out"), name => l("E-Items Currently Checked Out")}, - {children => 0, parent => "circs", url => "circ_history", text => l("Check Out History"), name => l("Check Out History")}, + {children => 3, parent => "parent",url => "circs", text => l(" [_1]Items Checked Out", ctx.user_stats.checkouts.total_out), name = l("Circulations")}, + {children => 0, parent => "circs", url => "circs", text => l(" Current Items Checked Out"), name=> l("Circulations")}, + {children => 0, parent => "circs", url => "ebook_circs", text => l(" E-Items Currently Checked Out"), name => l("E-Items Currently Checked Out")}, + {children => 0, parent => "circs", url => "circ_history", text => l(" Check Out History"), name => l("Check Out History")}, - {children => 4, parent => "parent",url => "holds", text => l("[_1]Holds / [_2] Ready", ctx.user_stats.holds.total, ctx.user_stats.holds.ready), name => l("Holds")}, - {children => 0, parent => "holds", url => "holds", text => l("Items on Hold"), name => l("Holds")}, - {children => 0, parent => "holds", url => "ebook_holds", text => l("E-Items on Hold"), name => l("E-Items on Hold")}, - {children => 0, parent => "holds", url => "ebook_holds_ready", text => l(" E-Items Ready for Checkout"), name => l("E-Items Ready for Checkout")}, - {children => 0, parent => "holds", url => "hold_history", text => l("Holds History"), name => l("Holds History")}, + {children => 4, parent => "parent",url => "holds", text => l(" [_1]Holds / [_2] Ready", ctx.user_stats.holds.total, ctx.user_stats.holds.ready), name => l("Holds")}, + {children => 0, parent => "holds", url => "holds", text => l(" Items on Hold"), name => l("Holds")}, + {children => 0, parent => "holds", url => "ebook_holds", text => l(" E-Items on Hold"), name => l("E-Items on Hold")}, + {children => 0, parent => "holds", url => "ebook_holds_ready", text => l(" E-Items Ready for Checkout"), name => l("E-Items Ready for Checkout")}, + {children => 0, parent => "holds", url => "hold_history", text => l(" Holds History"), name => l("Holds History")}, - {children => 4, parent => "parent", url => "prefs", text => l("Preferences"),name => l("Preferences")}, - {children => 0, parent => "prefs", url => "prefs", text => l("Personal Information"), name => l("Preferences")}, - {children => 0, parent => "prefs", url => "prefs_notify", text => l("Notifications"), name => l("Notifications")}, - {children => 0, parent => "prefs", url => "prefs_settings", text => l("Search & History"), name => l("Search & History")}, - {children => 0, parent => "prefs", url => "prefs_my_lists", text => l("Lists"), name => l("Lists")}, + {children => 4, parent => "parent", url => "prefs", text => l(" Preferences"),name => l("Preferences")}, + {children => 0, parent => "prefs", url => "prefs", text => l(" Personal Information"), name => l("Preferences")}, + {children => 0, parent => "prefs", url => "prefs_notify", text => l(" Notifications"), name => l("Notifications")}, + {children => 0, parent => "prefs", url => "prefs_settings", text => l(" Search & History"), name => l("Search & History")}, + {children => 0, parent => "prefs", url => "prefs_my_lists", text => l(" Lists"), name => l("Lists")}, - - {children => 0, parent => "parent", url => "lists", text => l("My Lists"), name => l("My Lists")} + + {children => 0, parent => "parent", url => "lists", text => l(" My Lists"), name => l("My Lists")} ]; IF (ctx.show_reservations_tab == 'true'); - myopac_pages.push({children => 0, parent => "parent", url => "reservations", text => l(" Reservations"), name => l("Reservations")}); + myopac_pages.push({children => 0, parent => "parent", url => "reservations", text => l(" Reservations"), name => l("Reservations")}); END; skin_root = "../" %] @@ -40,12 +40,13 @@
[% INCLUDE "opac/parts/searchbar.tt2" %]
- -
-
-
+
+
+
+
+
- + [%- FOREACH page IN myopac_pages; IF page.url == myopac_page || page.url == parent; active = "active"; @@ -53,13 +54,13 @@ ELSE; active = ""; END -%] - + [% IF page.parent == "parent" && page.children > 0; %] -
-
+
[% content %] - +
- - + + [% END %] diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/myopac/column_sort_support.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/myopac/column_sort_support.tt2 index 6d5ba47ce7..ab934b8a4c 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/myopac/column_sort_support.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/myopac/column_sort_support.tt2 @@ -1,4 +1,4 @@ -[%# Produce a URL for a given field that cycles for sorting from +[%# Produce a URL for a given field that cycles for sorting from "nothing" to "ascending" to "descending" then back to "nothing". %] [% MACRO sort_url(field) @@ -29,7 +29,7 @@ %] [%# Column headers for sortable columns %] -[% MACRO sort_head(field, field_label) +[% MACRO sort_head(field, field_label) BLOCK %] [% l(field_label) %][%- sort_indicator(field) %] [% END diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/myopac/main_base.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/myopac/main_base.tt2 index 05b3efca52..f63e4227b3 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/myopac/main_base.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/myopac/main_base.tt2 @@ -2,7 +2,7 @@ PROCESS "opac/parts/misc_util.tt2"; WRAPPER "opac/parts/myopac/base.tt2"; - + %] [% END %] diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/org_selector.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/org_selector.tt2 index d37f99a4e7..e368399678 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/org_selector.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/org_selector.tt2 @@ -1,6 +1,6 @@ [% # Org Unit Selector Widget : -# INCLUDE build_org_selector id='selector-id' name='selector-name' +# INCLUDE build_org_selector id='selector-id' name='selector-name' # value=org_id show_loc_groups=1/0 can_have_vols_only=1/0 # can_have_users_only=1/0 valid_org_list=[1,2,3] # @@ -14,24 +14,24 @@ BLOCK build_org_selector; node_stack = [{org => org_unit || ctx.aouct_tree || ctx.aou_tree}]; inherited_vis = ctx.get_cgf('opac.org_unit.non_inherited_visibility').enabled == 'f'; - IF !name; + IF !name; name = loc_name; END; IF !value; value = loc_value; END; - # if the selected org unit is out of hiding scope, + # if the selected org unit is out of hiding scope, # disable the ou-hide scoping altogether. hiding_disabled = ctx.org_hiding_disabled(value); -%] diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/place_hold.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/place_hold.tt2 index 89ca80067d..419e7c1069 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/place_hold.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/place_hold.tt2 @@ -15,11 +15,11 @@ function toggleActivationDate() { // Check for not equal to block so it works on first click. if (block.style.display != "block") { block.style.display = "block"; - anchor.innerHTML = " " + actText; + anchor.innerHTML = " " + actText; if (cb.checked != true) cb.checked = true; } else { block.style.display = "none"; - anchor.innerHTML = " " + inActText; + anchor.innerHTML = " " + inActText; } // Prevent the href from being followed, thus overriding the CSS. return false; @@ -68,13 +68,13 @@ function maybeToggleNumCopies(obj) { ELSE; some_holds_allowed = 1; END; END %] - [% IF loop.first %] + [% IF loop.first %]
- [% + [% redirect = CGI.param('hold_source_page') || CGI.param('redirect_to') || CGI.referer; # since we have to be logged in to get this far, return to a secure page - redirect = redirect.replace('^http:', 'https:') + redirect = redirect.replace('^http:', 'https:') %] @@ -106,11 +106,11 @@ function maybeToggleNumCopies(obj) { - + onkeydown="return debounce_barcode_change(event)" autofocus />
[% END %] - - - - - [% l('Set activation date') %] + + + + + [% l('Set activation date') %]
- + [% IF CGI.param('from_basket') %] - +
[% END %] - [% IF NOT metarecords.disabled AND ctx.hold_data.size == 1 %] + [% IF NOT metarecords.disabled AND ctx.hold_data.size == 1 %] [% IF CGI.param('hold_type') == 'T' AND hdata.record.metarecord AND !hdata.part_required %] [% bre_id = hdata.target.id %] - + [% l('Advanced Hold Options') %] [% END %] [% IF CGI.param('hold_type') == 'M' AND CGI.param('bre_id') %] - + [% l('Basic Hold Options') %] [% END %] [% IF hdata.metarecord_filters.formats.size OR # should this be size > 1 @@ -316,7 +316,7 @@ function maybeToggleNumCopies(obj) {
[% END # some_holds_allowed %] - +
diff --git a/Open-ILS/src/templates-bootstrap/opac/parts/place_hold_result.tt2 b/Open-ILS/src/templates-bootstrap/opac/parts/place_hold_result.tt2 index a32781f4fc..6f2597d8e3 100755 --- a/Open-ILS/src/templates-bootstrap/opac/parts/place_hold_result.tt2 +++ b/Open-ILS/src/templates-bootstrap/opac/parts/place_hold_result.tt2 @@ -31,7 +31,7 @@ function disable_submit() { PROCESS get_marc_attrs args=attrs %] - [% + [% override = 0; IF hdata.could_override || hdata.hold_local_alert; override_possible = 1; @@ -39,21 +39,21 @@ function disable_submit() { END; %] [% IF override %] - - [% END %] + checked='checked' /> + [% END %] - + [% IF hdata.parts %] [% END %] - + [% IF hdata.hold_success %]
[% l("Hold was successfully placed for: "); %]
- [% + [% title = attrs.title_extended; IF hdata.selected_part AND hdata.parts AND hdata.parts.size > 0; FOREACH part IN hdata.parts; @@ -63,18 +63,18 @@ function disable_submit() { END; END; %] - +

[% title | html %]

[% IF hdata.frozen %] - + [% l("Hold is suspended") %] [% IF hdata.thaw_date %]
[% l("Reactivate on [_1]", date.format(ctx.parse_datetime(hdata.thaw_date), DATE_FORMAT)); END %] - + [% END %]
[% IF ctx.is_staff %] @@ -146,17 +146,16 @@ function disable_submit() { [% |l %]You have permission to override some of the failed holds. Click Submit to override and place your hold on the selected items.[% END %]
- + [% END %] - - [% IF any_failures OR ctx.general_hold_error %] - [% l('Back To Search') %] - [% l('Cancel') %] + [% IF any_failures OR ctx.general_hold_error %] + [% l('Back To Search') %] + [% l('Cancel') %] [% ELSE %]