From: Bill Erickson Date: Wed, 29 Oct 2014 21:05:05 +0000 (-0400) Subject: Upgraded stock EG code to tag 2_4_1 X-Git-Url: https://old-git.evergreen-ils.org/?a=commitdiff_plain;h=04cc8ff96678f05081501aa5c3a93b41ef0506c8;p=working%2FEvergreen.git Upgraded stock EG code to tag 2_4_1 Cross-port: 4de67518bad776e9b2ea2e55169efd016a16b17d Conflicts: Open-ILS/src/perlmods/lib/OpenILS/SIP/Transaction/RenewAll.pm Open-ILS/web/css/skin/default/acq.css Open-ILS/web/css/skin/default/opac/semiauto.css --- diff --git a/KCLS/openils/var/data/zips.txt b/KCLS/openils/var/data/zips.txt new file mode 100644 index 0000000000..e69de29bb2 diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/audio_config.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/audio_config.tt2 new file mode 100644 index 0000000000..bdc310b22e --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/audio_config.tt2 @@ -0,0 +1,16 @@ +[%# + Override the audio config values by copying this template into your local templates + directory (matching the relative path) and change the values accordingly. +#%] + + diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/banner.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/banner.tt2 new file mode 100644 index 0000000000..cda4866c91 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/banner.tt2 @@ -0,0 +1,10 @@ +
+
+ +
+
+
+ +
+
+ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/circ_page.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/circ_page.tt2 new file mode 100644 index 0000000000..868f5f9e35 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/circ_page.tt2 @@ -0,0 +1,30 @@ +
+ + + + + + + + + + + + + + + + + + + + + + + + +
BarcodeTitleAuthorDue DateType
+ + +
+
diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/fines.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/fines.tt2 new file mode 100644 index 0000000000..0c270479ae --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/fines.tt2 @@ -0,0 +1,26 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + +
TypeDetailsTotal BilledTotal PaidBalance Owed
+
diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/KCLS_logo_horiz.gif b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/KCLS_logo_horiz.gif new file mode 100644 index 0000000000..8e1d56ed5f Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/KCLS_logo_horiz.gif differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/arrow.gif b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/arrow.gif new file mode 100644 index 0000000000..bf17978429 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/arrow.gif differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/barcodedetailbook.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/barcodedetailbook.jpg new file mode 100644 index 0000000000..f0a237e924 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/barcodedetailbook.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/blue-arrow.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/blue-arrow.png new file mode 100644 index 0000000000..c9bdc90a39 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/blue-arrow.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/book-example.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/book-example.png new file mode 100644 index 0000000000..b33ef5bd8e Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/book-example.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/check-out.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/check-out.png new file mode 100644 index 0000000000..45d5ac3926 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/check-out.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/dotted-line.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/dotted-line.png new file mode 100644 index 0000000000..7aa6cdc8cd Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/dotted-line.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/finish-btn.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/finish-btn.png new file mode 100644 index 0000000000..a096a49f5b Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/finish-btn.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/go-btn.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/go-btn.png new file mode 100644 index 0000000000..24091c9936 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/go-btn.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/gobutton.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/gobutton.jpg new file mode 100644 index 0000000000..33e7c380e5 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/gobutton.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/icon-printer.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/icon-printer.png new file mode 100644 index 0000000000..e10e04ac70 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/icon-printer.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/kcls-logo.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/kcls-logo.jpg new file mode 100644 index 0000000000..b57f1d69c8 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/kcls-logo.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/libcard_barcode.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/libcard_barcode.jpg new file mode 100644 index 0000000000..31419f65a5 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/libcard_barcode.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/library-card.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/library-card.png new file mode 100644 index 0000000000..ab9e87138c Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/library-card.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/login-btn.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/login-btn.png new file mode 100644 index 0000000000..ae9d9de5c7 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/login-btn.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logout.gif b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logout.gif new file mode 100644 index 0000000000..11d616015e Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logout.gif differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutbutton.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutbutton.jpg new file mode 100644 index 0000000000..61092eddb7 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutbutton.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutnoreceipt.gif b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutnoreceipt.gif new file mode 100644 index 0000000000..1c88f4adb5 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutnoreceipt.gif differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutwithoutreceiptbutton.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutwithoutreceiptbutton.jpg new file mode 100644 index 0000000000..20228bddb7 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/logoutwithoutreceiptbutton.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/mousy.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/mousy.png new file mode 100644 index 0000000000..3c4bc22ebd Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/mousy.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/print-list-btn.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/print-list-btn.png new file mode 100644 index 0000000000..fda799bf0f Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/print-list-btn.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/printlist.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/printlist.jpg new file mode 100644 index 0000000000..a83c0fc575 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/printlist.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/submit-btn.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/submit-btn.png new file mode 100644 index 0000000000..dcfddc4ed8 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/submit-btn.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_font.gif b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_font.gif new file mode 100644 index 0000000000..9dc10a95f6 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_font.gif differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_mail.gif b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_mail.gif new file mode 100644 index 0000000000..83c357369e Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_mail.gif differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_print.gif b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_print.gif new file mode 100644 index 0000000000..d3d7ee388e Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/tool_print.gif differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/txt-box-bg.png b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/txt-box-bg.png new file mode 100644 index 0000000000..87c4e06089 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/txt-box-bg.png differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/utils-corner-right.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/utils-corner-right.jpg new file mode 100644 index 0000000000..1559897142 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/utils-corner-right.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/utils-corner.jpg b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/utils-corner.jpg new file mode 100644 index 0000000000..4932a28672 Binary files /dev/null and b/KCLS/openils/var/templates_kcls/circ/selfcheck/graphics/utils-corner.jpg differ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/holds_page.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/holds_page.tt2 new file mode 100644 index 0000000000..333624948d --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/holds_page.tt2 @@ -0,0 +1,20 @@ +
+ + + + + + + + + + + + + + + + + +
TitleAuthorStatus
+
diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/main.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/main.tt2 new file mode 100644 index 0000000000..2f76cf635a --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/main.tt2 @@ -0,0 +1,237 @@ +[% ctx.page_title = 'Self Checkout' %] +[% WRAPPER base.tt2 %] + + + +
+ + + + +
+ + +
+ +
+
+
+ + + + + +[% INCLUDE 'circ/selfcheck/audio_config.tt2' %] + +
Staff login required
+ + + + + + + + + +
+
+
+
+ +[% END %] diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/patron_login.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/patron_login.tt2 new file mode 100644 index 0000000000..da65d791de --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/patron_login.tt2 @@ -0,0 +1,7 @@ +
Please login using your library barcode
+
+ +
+ diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/payment.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/payment.tt2 new file mode 100644 index 0000000000..f4fe97eb6d --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/payment.tt2 @@ -0,0 +1,83 @@ +
+ Total amount to pay: $ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Credit Card #
CVV #
Exipration Month + +
Expiration Year
Edit Billing Details
First Name
Last Name
Street Address
City
State or Province
ZIP or Postal Code
+ +
diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/style.css b/KCLS/openils/var/templates_kcls/circ/selfcheck/style.css new file mode 100644 index 0000000000..a12f77d7de --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/style.css @@ -0,0 +1,179 @@ +@charset "utf-8"; +/* CSS Document */ + +html, body { + margin:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + background:#333; + width:100%; +} + +img { + border: none; +} + +a { + color: #003399; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +h1 { + margin:0; + margin-bottom: 5px; + font-size: 20px; + font-weight:normal; +} + +h2 { + margin:0; + margin-bottom: 5px; + font-size: 14px; + font-weight:bold; +} + +#header { + color: #bda964; + font-weight:bold; + padding: 12px 0px 9px 17px; + width: 694px; + margin: auto; +} + +#content-wrapper { + background: white; + min-height: 260px; + border-bottom: 1px solid black; +} + +#main-content { + width: 694px; + margin:auto; + padding-left:17px; +} + +.checkout { + font-size:16px; +} + +.checkout h1 { + font-size:36px; +} + +.checkout h2 { + font-size:24px; +} + +.checkout .sidebar h3 { + font-size: 16px; + margin:0; + padding-left:3px; +} + +.checkout .sidebar a { + font-size:12px; +} + +.checkout .sidebar a span { + font-weight:bold; +} + +.checkout .sidebar p { + margin:4px 0px; + padding:3px; +} + +.checkout .sidebar div, .checkout .sidebar p { + font-size: 16px; + line-height: 1em; +} + +.checkout input[type=text], .checkout input[type=password] { + border: 1px solid black; + width:300px; + height:20px; + padding:2px; + padding-top:1px; + margin:0px; + font-size:16px; +} + +.checkout .sidebar { + background: #b0b0b0; + border-left:2px ridge #eee; + border-right:2px ridge #eee; + padding:10px 7px; +} + +.checkout .sidebar .top { + float:right; + padding-right:5px; +} + +.checkout .sidebar .greet { + clear:both; + padding:15px 3px; +} + +.checkout .sidebar .selected { + background:#999 +} + +.checkout .header1 { + height:108px; + border-bottom:1px solid #a83135; + padding-top:20px; +} + +.checkout .userid { + width:200px; + font-size:16px; + font-weight:bold; + padding:5px 6px 6px 6px !important; + border:2px solid black !important; + background: none !important; + margin:0 !important; +} + +.checkout .item_table { + border-collapse: collapse; +} + +.checkout .item_table td { + font-size:16px; + border:2px solid black; + text-align: left; +} + +.checkout .item_table table td.label { + font-weight:bold; + text-transform: uppercase; + text-align: right; + white-space:nowrap; + padding-right:5px; + width:1px; +} + +.checkout .item_table table td { + border:none; +} + +.checkout #back_button:hover { + text-decoration: none; +} + +.checkout .status_box { + color:red; + font-weight:bold; + height:20px; +} + +.checkout .oils-selfck-status-div { + height:inherit !important; + vertical-align:inherit !important; +} + diff --git a/KCLS/openils/var/templates_kcls/circ/selfcheck/summary.tt2 b/KCLS/openils/var/templates_kcls/circ/selfcheck/summary.tt2 new file mode 100644 index 0000000000..b037ad7d6b --- /dev/null +++ b/KCLS/openils/var/templates_kcls/circ/selfcheck/summary.tt2 @@ -0,0 +1,27 @@ +
+ +
+ Items Checked Out +
+
+
View Items Out
+
+
+ Holds +
+
+
View Holds
+
+
+ Fines +
+
+ View Details +
+
+
+ diff --git a/KCLS/openils/var/templates_kcls/opac/advanced.tt2 b/KCLS/openils/var/templates_kcls/opac/advanced.tt2 new file mode 100644 index 0000000000..f6e06038a5 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/advanced.tt2 @@ -0,0 +1,32 @@ +[%- PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l("Advanced Search"); + pane = CGI.param("pane") || "advanced"; + loc = ctx.search_ou; +-%] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] +
+
+ + + +
+
+
+
+
+
+ [% IF pane == 'advanced' %] + [% INCLUDE "opac/parts/advanced/search.tt2" %] + [% ELSIF pane == 'numeric' %] + [% INCLUDE "opac/parts/advanced/numeric.tt2" %] + [% ELSIF pane == 'expert' %] + [% INCLUDE "opac/parts/advanced/expert.tt2" %] + [% END %] +
+
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/cnbrowse.tt2 b/KCLS/openils/var/templates_kcls/opac/cnbrowse.tt2 new file mode 100644 index 0000000000..6e0ad0bb18 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/cnbrowse.tt2 @@ -0,0 +1,21 @@ +[% # This is the stand-alone call-number browser. This mainly wraps around + # the same guts as the "shelf browser" part of a record results page. + + PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l("Call Number Browse"); %] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+
+
+
+ [% INCLUDE "opac/parts/record/cnbrowse.tt2" %] +
+
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/home.tt2 b/KCLS/openils/var/templates_kcls/opac/home.tt2 new file mode 100644 index 0000000000..fa64e65503 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/home.tt2 @@ -0,0 +1,16 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l("Home") %] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+
+
+
+ [% INCLUDE "opac/parts/homesearch.tt2" %] +
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/login.tt2 b/KCLS/openils/var/templates_kcls/opac/login.tt2 new file mode 100644 index 0000000000..b5741e2c92 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/login.tt2 @@ -0,0 +1,27 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l("Account Login") %] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+
+
+ [% INCLUDE "opac/parts/login/form.tt2" %] +
+ +
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/mylist.tt2 b/KCLS/openils/var/templates_kcls/opac/mylist.tt2 new file mode 100644 index 0000000000..ac24efd385 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/mylist.tt2 @@ -0,0 +1,20 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l("Record Detail") %] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+
+
+ [% IF ctx.mylist.size; + INCLUDE "opac/parts/anon_list.tt2"; + ELSE %] +
[% l("You have not created a list yet."); %]
+ [% END %] +
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/circ_history.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/circ_history.tt2 new file mode 100644 index 0000000000..895356be12 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/circ_history.tt2 @@ -0,0 +1,110 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "circs" + limit = ctx.circ_history_limit; + offset = ctx.circ_history_offset; +%] + +
+ +
+
+ +
+
+ +
+
+
+ +
+ [% l('Previously Checked Out Items') %] + + + [%# TODO: get total to prevent paging off then end of the list.. %] + + + + [% l('Export List') %] + +
+
+ + [% IF ctx.circs.size < 1 %] +
+ [% l('There are no items in your circulation history.') %] +
+ [% ELSE %] + +
+ + + + + + + + + + + + + + [% FOR circ IN ctx.circs; + attrs = {marc_xml => circ.marc_xml}; + PROCESS get_marc_attrs args=attrs; %] + + + + + + + + + + [% END %] + +
+ [% l('Title') %] + + [% l('Author') %] + + [% l('Checkout Date') %] + + [% l('Due Date') %] + + [% l('Date Returned') %] + + [% l('Barcode') %] + + [% l('Call Number') %] +
+ [% attrs.title | html %] + + [% IF attrs.author %] + [% attrs.author | html %] + [% END %] + + [% date.format(ctx.parse_datetime(circ.circ.xact_start),DATE_FORMAT); %] + + [% date.format(ctx.parse_datetime(circ.circ.due_date),DATE_FORMAT); %] + + [% + IF circ.circ.checkin_time; + IF circ.circ.stop_fines == 'RENEW'; + l('renewed'); + ELSE; + date.format(ctx.parse_datetime(circ.circ.checkin_time),DATE_FORMAT); + END; + ELSE; %] + * + [% END; %] + [% circ.circ.target_copy.barcode | html %][% circ.circ.target_copy.call_number.label | html %]
+
+ [% END %] +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/circs.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/circs.tt2 new file mode 100644 index 0000000000..04ad17cb3d --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/circs.tt2 @@ -0,0 +1,161 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "circs" %] +
+ +
+
+ +
+
+ +
+
+
+ +
+ [% l('Current Items Checked Out') %] + + [% l('Export List') %] + +
+
+ [% IF ctx.circs.size < 1 %] +
+ [% l('You have no items checked out.') %] +
+ [% ELSE %] + [% IF ctx.success_renewals %] +
+ [% l("Successfully renewed [_1] item(s)", ctx.success_renewals) %] +
+ [% END %] + [% IF ctx.failed_renewals %] +
+ [% l("Failed to renew [_1] item(s)", ctx.failed_renewals) %] +
+ [% END %] +
+
+
+ + +
+ + + + + + + + + + +
+ + + + Title + + + + Author + + + Renews
Left +
+
+ Due Date + + barcode + + call number +
+ +
+
+ + [% FOR circ IN ctx.circs; + attrs = {marc_xml => circ.marc_xml}; + PROCESS get_marc_attrs args=attrs; %] + + + + + + [% + due_date = ctx.parse_datetime(circ.circ.due_date); + due_class = (date.now > date.format(due_date, '%s')) ? 'error' : ''; + %] + + + + + [% IF circ.renewal_response AND + circ.renewal_response.textcode != 'SUCCESS' %] + + + + [% END; + END %] +
+ + + [% attrs.title | html %] + + [% IF attrs.author %] + [% attrs.author | html %] + [% END %] + + [% circ.circ.renewal_remaining %] + + [% date.format(due_date, DATE_FORMAT) %] + + [% circ.circ.target_copy.barcode | html %] + + [% circ.circ.target_copy.call_number.label | html %] +
[%# XXX colspan="0" does not work in IE %] + + [% (circ.renewal_response.desc || circ.renewal_response.payload.fail_part || circ.renewal_response.textcode) | html %] + +
+
+
+
+
+ [% END %] +
+
+
[% l("Other Circulations") %]
+ + + + + + + + + + + + +
[% l("Circulating Library") %][% l("Circulation Type") %][% l("Please return by ...") %]
+ + +
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/hold_history.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/hold_history.tt2 new file mode 100644 index 0000000000..548cf3ea52 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/hold_history.tt2 @@ -0,0 +1,90 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + PROCESS "opac/parts/hold_status.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "holds"; + limit = ctx.hold_history_limit; + offset = ctx.hold_history_offset; +%] + +
+ +
+
+ +
+
+ +
+
+
+ +
+ [% l("Previously Held Items") %] + + + [%# TODO: get total to prevent paging off then end of the list.. %] + + + + Export List + +
+
+ +
+ [% IF ctx.holds.size < 1 %] +
+ [% l('No holds found.') %] +
+ [% ELSE %] + + + + + + + + + + + + [% FOR hold IN ctx.holds; + attrs = {marc_xml => hold.marc_xml}; + PROCESS get_marc_attrs args=attrs; + ahr = hold.hold.hold %] + + + + + + + + + + [% END %] + +
[% l('Title') %][% l('Author') %][% l('Format') %][% l('Date Placed') %][% l('Pickup Location') %]
+ + + + +
+ [% IF attrs.format_icon %] + [% attrs.format_label | html %] + [% END %] +
+
+ [% date.format(ctx.parse_datetime(ahr.request_time), DATE_FORMAT) %] + + [% ctx.get_aou(ahr.pickup_lib).name | html %] +
+ [% END %] +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/holds.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/holds.tt2 new file mode 100644 index 0000000000..807f22d1c8 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/holds.tt2 @@ -0,0 +1,232 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + PROCESS "opac/parts/hold_status.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "holds" %] +
+ +
+
+ +
+
+ +
+
+
+ +
+ + [% IF CGI.param("available"); + l("Items Ready for Pickup"); + ELSE; + l("Current Items on Hold"); + END + %] + + + Export List + +
+
+
+
+ + + + + + + + +
+ + + + + Holds Help + + [% 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; + %] +
+ [% l("Show") %]     + [% IF CGI.param("available") %] + [% l('all') %] | + [% l("only available") %] + [% ELSE %] + [% l("all") %] | + [% l("only available") %] + [% END %]     + [% l("holds") %] + +
+ [% IF ctx.holds.size < 1 %] +
+ [% l('No holds found.') %] +
+ [% ELSE %] + + + + + + + + + + + + +
+ + + + Title + + + Author + + Format + + Pickup Location + ActivateCancel if not
filled by
Active + Status +
+
+ +
+ + + + [% FOR hold IN ctx.holds; + attrs = {marc_xml => hold.marc_xml}; + PROCESS get_marc_attrs args=attrs; + ahr = hold.hold.hold %] + + + + + + + + + + + + + [% END %] + +
+ + + + + + +
+ [% IF attrs.format_icon %] + [% attrs.format_label | html %] + [% END %] +
+
+ [% ctx.get_aou(ahr.pickup_lib).name | html %] + + + [% IF ahr.frozen == 't' AND + ahr.thaw_date; + date.format(ctx.parse_datetime(ahr.thaw_date), DATE_FORMAT); + END %] + + + [% IF ahr.expire_time; + date.format(ctx.parse_datetime(ahr.expire_time), DATE_FORMAT); + END %] + + + [% l(ahr.frozen == 'f' ? 'Active' : 'Suspended') %] + +
+ [% PROCESS get_hold_status hold=hold; %] +
+
+ Edit +
+ [% END %] +
+
+ + [% l("Are you sure you wish to cancel the selected holds?") %] + [% l("Are you sure you wish to suspend the selected holds? If an item has already been selected to fulfill the hold, it will not be suspended") %] + [% l("Are you sure you wish to activate the selected holds?") %] + [% l("Are you sure you wish to change the activate date for the selected holds?") %] + [% l("Select an automatic activation date. If no date is chosen, the holds will remain suspended until they are manually activated.") %] + + + +
[% l("Processing holds... This may take a moment.") %]
+ + + [% l("If you wish to cancel the selected hold, click OK, otherwise click Cancel.") %] + +
+
+
+ [% l("Select an automatic activation date. If no date is chosen, the holds will remain suspended until they are manually activated.") %] +
+

+ +

+

+ +

+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/holds/edit.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/holds/edit.tt2 new file mode 100644 index 0000000000..d31fbd8740 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/holds/edit.tt2 @@ -0,0 +1,117 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + PROCESS "opac/parts/hold_status.tt2"; + PROCESS "opac/parts/org_selector.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "holds"; # in this case, just for tab coloring. + + hold = ctx.holds.0; + ahr = hold.hold.hold; + attrs = {marc_xml => hold.marc_xml}; + PROCESS get_marc_attrs args=attrs; + hold.human_status = PROCESS get_hold_status hold=hold; + + # Do this up front to avoid verbosity later + 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) : ''; +%] +
+
+ [% l('Editing Hold') %] +         + [% l('List all holds') %] +
+
+ [% IF hold %] +

[% attrs.title | html %]

+

[% attrs.author | html %]

+ [% IF attrs.format_icon %]

+ [% l('Format:') %] + [% attrs.format_label | html %] +

[% END %] +

+ [% l('Status') %]: [% hold.human_status %] +

+
+ + + + + + [%# IF hold.hold.status < 3 %] + [%# The following actions cannot be performed on holds that + have already been captured... %] + + + + + + + + + + + + + + + [% #END %] + + + + +
+ + + [% l('Pickup library') %] + + [% PROCESS build_org_selector + name='pickup_lib' value=ahr.pickup_lib can_have_vols_only=1 hold_pickup_lib=1 %] +
+ [% l('Cancel unless filled by') %] + + + + [% l('Enter date in MM/DD/YYYY format') %] + +
+ [% l('Active?') %] + + +
+ [% l('If suspended, activate on') %] + + + + [% l('Enter date in MM/DD/YYYY format') %] +
+ [% l('Cancel') %] + + +
+
+ [% ELSE; + l('Hold not found'); + END %] +
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/lists.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/lists.tt2 new file mode 100644 index 0000000000..c11dccbf3c --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/lists.tt2 @@ -0,0 +1,306 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + + myopac_page = "lists" + + limit = ctx.bookbags_limit; + offset = ctx.bookbags_offset; + itemPage = ctx.bookbags_itemPage; + +%] +
+ + +
+ + + +
+

[% l('Create new list') %]

+ + + + + + +
+ + + + + + + [% l('Sharing Help') %] + + +       + [% l('Cancel') %] +
+
+ + [% INCLUDE "opac/parts/anon_list.tt2" %] + [% IF ctx.bookbags.size %] + +
+ [% l('Saved Lists') %] + [% IF limit < ctx.bookbag_count; %] + + [%- IF offset > 0 -%] + limit, offset => (offset - limit) + }) %]'>[% l('Previous') %] + [%- END; -%] + [%- IF (ctx.bookbag_count - offset) > limit; -%] + limit, offset => (offset + limit) + }) %]'>[% l('Next') %] + + [%- END; -%] + [% END %] +
+
+ +
+ [% FOR bbag IN ctx.bookbags %] +
+
+
+
+ + [% IF bbag.pub != 't' %] + + + [% ELSE %] + + + [% END %] +
+
+
+
+ + + +
+
+
+ + [% baseurl = ctx.opac_root _ '/myopac/lists'; + IF bbag.id != CGI.param("bbid"); + url = mkurl(baseurl, {bbid => bbag.id, itemPage => 1}, ['edit_notes','sort']); + ltitle = l("Show items in list"); + ELSE; + url = mkurl(baseurl, {}, ['bbid', 'edit_notes', 'sort']); + ltitle = l("Hide items in list"); + END %] + [% bbag.name | html %] + +
+
+ [% IF bbag.pub == 't'; %] + [% l('RSS Feed') %] + [% END %] +
+
+
+ +
+ + + [% IF CGI.param("bbid") == bbag.id %] + + + + + + + + + + + [% UNLESS bbag.items.size %] + + [% END %] + [% FOR item IN bbag.items; + rec_id = item.target_biblio_record_entry.id; + attrs = {marc_xml => ctx.bookbags_marc_xml.$rec_id}; + PROCESS get_marc_attrs args=attrs %] + + + + + + [% END %] + +
+ + + [% l('Title') %][% l('Author(s)') %] + + +
+ [% l("This list contains no items.") %] +
+ + + [% attrs.title | html %] + + [% attrs.author | html %] +
+ + [% IF ctx.bb_page_count > 1; %] +
+ [% l('Navigate Selected List ') %] + + [%- IF itemPage > 1 -%] + itemPage - 1 + }) %]'>[% l('Previous') %] + [%- END; -%] + + [%- IF (itemPage - 3) >= 1 -%] + itemPage - 3 + }) %]'>[% itemPage - 3 %] + [%- END; -%] + [%- IF (itemPage - 2) >= 1 -%] + itemPage - 2 + }) %]'>[% itemPage - 2 %] + [%- END; -%] + [%- IF (itemPage - 1) >= 1 -%] + itemPage - 1 + }) %]'>[% itemPage - 1%] + [%- END; -%] + [% itemPage %] + [%- IF (itemPage + 1) <= ctx.bb_page_count -%] + itemPage + 1 + }) %]'>[% itemPage + 1 %] + [%- END; -%] + [%- IF (itemPage + 2) <= ctx.bb_page_count -%] + itemPage + 2 + }) %]'>[% itemPage + 2 %] + [%- END; -%] + [%- IF (itemPage + 3) <= ctx.bb_page_count -%] + itemPage + 3 + }) %]'>[% itemPage + 3 %] + [%- END; -%] + + [%- IF (itemPage + 1) <= ctx.bb_page_count; -%] + itemPage + 1 + }) %]'>[% l('Next') %] + [%- END; -%] + +
+
+ [% END %] +
+ + [% END %] +
+ +
+ [% END %] +
+ +
+ [% l('Saved Lists') %] + [% IF limit < ctx.bookbag_count; %] + + [%- IF offset > 0 -%] + limit, offset => (offset - limit) + }) %]'>[% l('Previous') %] + [%- END; -%] + [%- IF (ctx.bookbag_count - offset) > limit; -%] + limit, offset => (offset + limit) + }) %]'>[% l('Next') %] + + [%- END; -%] + [% END %] +
+
+ + + + + [% END %] + +
+ [% l("This will remove the selected bookbag and all items contained within the bookbag. Are you sure you wish to continue?") %] +
+
[% l("You have not created any bookbags") %]
+
+ +
+ +[% |l %]Sharing a Bookbag means that the contents +of the Bookbag will be visible to others. +To see the public view of a shared Bookbag, +click on the Bookbag's name in the Bookbag list.[% END %] + + + [% l("Are you sure you wish to remove this bookbag item?") %] + + + [% l("Sharing this bookbag will allow the contents of the bookbag to be seen by others. Are you sure you wish to share this bookbag?") %] + + + [% l("Are you sure you wish to hide this bookbag?") %] + + + [% l("The Bookbag was successfully updated.") %] + + + [% l("Warning: Adding items to a bookbag creates a link between you and the items in the database. The contents of the bookbag are NOT publicly viewable unless the bookbag is shared. However, if you prefer not to have any link between your patron record and a particular item or items, we suggest that you do not place said items in a bookbag or that you avoid using bookbags all together. Thank you.") %] + + + [% l("Bookbags are...") %] + + + [% l("Bookbag successfully updated") %] + + +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/main.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/main.tt2 new file mode 100644 index 0000000000..363ffeb167 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/main.tt2 @@ -0,0 +1,172 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/main_base.tt2"; + myopac_page = "main"; + myopac_main_page = "main"; +%] +
+ [% IF ctx.fines.circulation.size > 0 %] +
+ + + + + + + + + + + + + + + + + [% FOR f IN ctx.fines.circulation; + NEXT IF f.xact.balance_owed < 0; # XXX middle layer + 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 %] + + + + + + + + + + [% END %] + +
+ [% l("Fines") %] +
[% l("Title") %][% l("Author") %][% l("Checkout Date") %][% l("Due Date") %][% l("Date Returned") %][% l("Balance Owed") %] + + +
+ [% recid = f.xact.circulation.target_copy.call_number.record.id || f.xact.reservation.target_resource_type.record.id; + IF recid; %] + [% attrs.title | html %] + [% ELSE %] + [% attrs.title | html %] + [% END %] + + [% attrs.author | html %] + + [% ts = f.xact.circulation.xact_start || f.xact.reservation.start_time || 0; + IF ts; + date.format(ctx.parse_datetime(ts), DATE_FORMAT); + END %] + + [% ts = f.xact.circulation.due_date || f.xact.reservation.end_time || 0; + IF ts; + date.format(ctx.parse_datetime(ts), DATE_FORMAT); + END %] + + [% ts = f.xact.circulation.checkin_time || f.xact.reservation.return_time || 0; + IF ts; + date.format(ctx.parse_datetime(ts), DATE_FORMAT); + ELSE %] + + [% l('(fines accruing)') %] + [% END %] + + + [% money(f.xact.balance_owed) %] + + + +
+
+ [% END %] + + [% IF ctx.fines.grocery.size > 0 %] + +
+
+
+
+ + + + + + + + + + + + + + + + + [% FOR f IN ctx.fines.grocery %] + [% NEXT IF f.xact.balance_owed < 0 %] + + + + + + + + + + [% END %] + +
+ [% l("Other Fees") %] +
[% l("Transaction Start Time") %][% l("Last Payment Time") %][% l("Initial Amount Owed") %][% l("Total Amount Paid") %][% l("Balance Owed") %][% l("Billing Type") %] + + +
[% date.format( + ctx.parse_datetime(f.xact.xact_start), + DATE_FORMAT + ) %] + [% IF f.xact.last_payment_ts; + date.format( + ctx.parse_datetime( + f.xact.last_payment_ts + ), DATE_FORMAT + ); + END %] + [% money(f.xact.total_owed) %][% money(f.xact.total_paid) %] + + [% money(f.xact.balance_owed) %] + + [% f.xact.last_billing_type %] + +
+
+ [% END %] + [% UNLESS ctx.fines.grocery.size OR ctx.fines.circulation.size %] +
[% l('You have no current fines.') %]
+ [% ELSE %] +
+ +
+ [% END %] +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/main_pay.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/main_pay.tt2 new file mode 100644 index 0000000000..e02d956511 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/main_pay.tt2 @@ -0,0 +1,57 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "main"; + myopac_main_page = "pay" %] +
+ + [% IF ctx.payment_response.textcode %] +
+ + [% ctx.payment_response.desc || ctx.payment_response.textcode %] +
+ [% ctx.payment_response.note %] + [% ctx.payment_response.payload.error_message %] +
+

+ [% + url_args = {xact => [], xact_misc => []}; + FOR k IN ['xact', 'xact_misc']; + FOR val IN CGI.param(k); + url_args.$k.push(val); + END; + END; + retry_url = mkurl(ctx.opac_root _ '/myopac/main_payment_form', url_args, 1); + %] +
+ [% l('Go back') %] + [% l('to try again or to cancel this payment attempt.') %] +

+ [% ELSE %] +

[% l('Your payment has been approved.') %]

+ [% IF ctx.printable_receipt.template_output; + print_args = []; + FOR p IN ctx.payment_response.payments; + print_args.push('payment=' _ p); + END %] +

[ [% l('Print receipt') %] ]

+ + [% ctx.printable_receipt.template_output.data %] + + [% ELSE %] +
+ [% l( + 'Error creating 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 %] +
+ [% END %] +

[ [% + l("Back to Account Summary") %] ]

+ [% END %] +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/main_pay_init.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/main_pay_init.tt2 new file mode 100644 index 0000000000..835571070f --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/main_pay_init.tt2 @@ -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" %] +
+ +
+ [% l('Processing...') %]

+ [% l('Processing your payment may take some time.') %]
+ [% l("Please do not Refresh or use your browser's Back button or your credit card may be charged more than once.") %]
+
+ +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/main_payment_form.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/main_payment_form.tt2 new file mode 100644 index 0000000000..daee808c8f --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/main_payment_form.tt2 @@ -0,0 +1,189 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/main_base.tt2"; + myopac_page = "main"; + myopac_main_page = "payment_form"; + + last_chance = CGI.param("last_chance"); + +%] +[% IF ctx.fines.balance_owed <= 0 %] +
+ [% l("You either have no fines to pay or you have selected fines whose " _ + "total is non-positive. We cannot process non-positive amounts.") %] +
+[% ELSE %] +
+ [% IF last_chance %] +

[% l("Are you sure you are ready to charge [_1] to your credit card?", money(ctx.fines.balance_owed)) %]

+
+ [% FOR k IN CGI.Vars; + NEXT UNLESS k; + FOR val IN CGI.param(k) %] + + [% END; END %] + + [% l('Cancel') %] + [% ELSE %] + + + [% FOR xact IN CGI.param('xact') %] + + [% END %] + [% FOR xact IN CGI.param('xact_misc') %] + + [% END %] + +
+

[% l('KCLS only accepts Visa or MasterCard') %]

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [% INCLUDE "opac/parts/myopac/main_refund_policy.tt2" %] + +
[% l('Billing Information') %] +

[% l('Selected fines you are paying for:') %]

+ + + + + + + + + [% + FOR f IN ctx.fines.circulation; + NEXT IF CGI.param('xact').size && + !CGI.param('xact').grep(f.xact.id).size; + 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 %] + + + + + [% + END; + FOR f IN ctx.fines.grocery; + NEXT IF CGI.param('xact_misc').size && + !CGI.param('xact_misc').grep(f.xact.id).size %] + + + + + [% END %] + +
[% l('Name') %][% l('Amount') %]
[% attrs.title | html %][% money(f.xact.balance_owed) %]
[% f.xact.last_billing_type | html %][% money(f.xact.balance_owed) %]
+
+
+ [% l('Total amount to pay:') %] + [% money(ctx.fines.balance_owed) %] +
+
+ [% | l('', '') %]Click [_1]Cancel[_2] to go back and (un)select other fines.[% END %] +
[% l('First Name') %]
[% l('Last Name') %]
[% l('Email Address') %] + + [% l("Update") %] +
[% l('Street Address') %]
[% l('City' )%]
[% l('State or Province') %]
[% l('ZIP or Postal Code') %]
[% l('Credit Card Information') %]
[% l('Credit Card #') %]
[% l('Security Code') %] + +
[% l('Expiration Month') %] + +
[% l('Expiration Year') %] + +
+ + [% l('Cancel') %] +
+ [% END %] +
+
+ +[% END %] +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/main_payments.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/main_payments.tt2 new file mode 100644 index 0000000000..6de3bbb665 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/main_payments.tt2 @@ -0,0 +1,63 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/main_base.tt2"; + myopac_page = "main"; + myopac_main_page = "payments"; + limit = ctx.payment_history_limit; + offset = ctx.payment_history_offset; +%] + +
+
+ [% l('Payments History') %] + + + [%# TODO: get total to prevent paging off then end of the list.. %] + + +
+
+ + [% IF ctx.payments.size %] + + + + + + + + + [% FOR payment IN ctx.payments %] + [% IF payment.mp.amount > 0 %] + + + + + + + [% END %] + [% END %] + +
[% l('Payment Date') %][% l('Payment For') %][% l('Amount') %][% l('Receipt') %]
[% date.format(ctx.parse_datetime(payment.mp.payment_ts), DATE_FORMAT) %][% + btype = payment.last_billing_type | html; + ptitle = payment.title | html; + (payment.xact_type == 'grocery') ? btype : ptitle + %][% money(payment.mp.amount) %] + [% IF payment.mp.payment_type == 'credit_card_payment' %] +
+ + +
+
+ + +
+ [% END %] +
+ [% ELSE %] +
[% l('You have no historical payments to display.') %]
+ [% END %] +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/prefs.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/prefs.tt2 new file mode 100644 index 0000000000..af33c8f7cb --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/prefs.tt2 @@ -0,0 +1,360 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/myopac/prefs_base.tt2"; + myopac_page = "prefs"; + prefs_page = 'personal' %] + +
+
+ + + + + + +
+ [% l("Your account expired on") %] + ! + [% l("Please see a librarian to renew your account.") %]
+
+ +
+ + + + + + + + + + + + +
+ [% l("* Staff Notes *") %]
:

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [% IF ctx.username_change_disallowed %] + + [% ELSE %] + + [% END %] + + + + + + + + + + + + + [% IF ctx.user.ident_value %] + + + + + [% END %] + + + + + + + + + + + + + + + + + + + + + + + +
[% l("Name") %][% l( + HUMAN_NAME_FORMAT, + ctx.user.prefix, ctx.user.first_given_name, + ctx.user.second_given_name, ctx.user.family_name, + ctx.user.suffix + ) | html %]
+ [% l("Day Phone") %][% ctx.user.day_phone | html %][% l("Change") %]
+ + Enter New [% l("Day Phone") %]: + + + + + + + + + +
+ [% l("Evening Phone") %][% ctx.user.evening_phone | html %][% l("Change") %]
New + [% l("Evening Phone") %]: + + + +
+ [% l("Other Phone") %][% ctx.user.other_phone | html %][% l("Change") %]
Enter + New [% l("Other Phone") %]: + + + +
+
+
+ Username Help +
+
[% l("Username") %] +
[% ctx.user.usrname | html %][% l("Change") %]
[% l("Password") %][% l("(not shown)") %][% l("Change") %]
[% l("Email Address") %][% ctx.user.email | html %][% l('Change') %]
+ [% l("Primary Identification") %] + [% + # l('[_1] ([_2])', ctx.user.ident_value, ctx.user.ident_type.name) | html + # XXX uncomment the above line to show primary + # identification. With a minor tweak it could + # alternatively be shown but partially obscured. + %] +
+ [% l("Active Barcode") %][% ctx.user.card.barcode %]
+ [% l("Home Library") %][% ctx.user.home_ou.name | html %][% l("Change") %]
+ + New home library: + + + + + + + +
+ [% l("Account Creation Date") %] +

+
+
+ + + + + + + + + + [% + # cycle through the non-pending address. For each non-pending addr + # that has a corresponding pending addr, render the pending addr + # along the right inside it's own edit form + pending = {}; + regular = []; + edit_addr_id = CGI.param('edit_address'); + FOR addr IN ctx.user.addresses; + IF addr.pending == 't'; + replaces = addr.replaces; + pending.$replaces = addr; + ELSE; + regular.push(addr); + END; + END; + FOR addr IN regular; + cur_id = addr.id; + pending_addr = pending.$cur_id; + %] + + + + + [% IF pending_addr OR edit_addr_id == cur_id; + update_addr = pending_addr || addr %] + + [% END %] + + [% END %] + +
[% l("Addresses") %][% l("Pending Addresses") %]
+ + + + + + + + + + + [% IF ctx.get_org_setting(ctx.user.home_ou.id, 'opac.allow_pending_address') + AND !pending_addr AND edit_addr_id != cur_id %] + + + + [% END %] +
[% l("Address Type") %][% addr.address_type | html %]
[% l("Street") %][% addr.street1 | html %]
[% l("Street") %][% addr.street2 | html %]
[% l("City") %][% addr.city | html %]
[% l("County") %][% addr.county| html %]
[% l("State") %][% addr.state | html %]
[% l("Country") %][% addr.country | html %]
[% l("Zip") %][% addr.post_code | html %]
+ [% l('Edit Address') %] +
+
+
+ [% IF pending_addr %] + + [% ELSE %] + + [% END %] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
[% l("Address Type") %]
[% l("Street") %]
[% l("Street") %]
[% l("City") %]
[% l("County") %]
[% l("State") %] +
[% l("Country") %]
[% l("Zip") %]
+ [% IF pending_addr; + url = mkurl('', {delete_pending => pending_addr.id}, 1); + ELSE; + url = mkurl('', {}, 1); + END %] + [% l('Discard Pending Address') %] +
[% l('Address changes will be verified by staff') %]
+
+
+
+ +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/prefs_notify.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/prefs_notify.tt2 new file mode 100644 index 0000000000..91a3ce55a2 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/prefs_notify.tt2 @@ -0,0 +1,128 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/myopac/prefs_base.tt2"; + myopac_page = "prefs_notify"; + prefs_page = 'notify' %] + + +
+ +
+ +
+ + + + + + + + [% IF optin.size == 0 %] + [% l('No notification preferences are configured') %] + [% END %] + [% FOR optin IN ctx.opt_in_settings %] + + + + + [% END %] + +
[% l('Notifation Type') %][% l('Enabled') %]
[% optin.cust.label | html %] + +
+
+ + + + + +[% END %] + + diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/prefs_settings.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/prefs_settings.tt2 new file mode 100644 index 0000000000..530f1c3cd4 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/prefs_settings.tt2 @@ -0,0 +1,126 @@ + [% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/org_selector.tt2"; + WRAPPER "opac/parts/myopac/prefs_base.tt2"; + myopac_page = "prefs_notify"; + prefs_page = 'settings' %] + + +
+ +
+
+
+ +
+
+
+ + + + + [% IF ctx.updated_user_settings %] + + [% END %] + + + + + + + + + + + + + + + + + + + + + + +
+
+ [% l('Account Successfully Updated') %] +
+
[% l("Search hits per page") %] +
+
+ [% l('Search Hits Help') %] +
+
+ [% setting = 'opac.hits_per_page' %] + +
[% l("Preferred pickup location") %] + [%- setting = 'opac.default_pickup_location'; + thang = ctx.user.home_ou.id; + IF ctx.user_setting_map.$setting; + thang = ctx.user_setting_map.$setting; + END; + INCLUDE build_org_selector name=setting value=thang can_have_vols_only=1; + %] +
[% l('Keep history of checked out items?') %] + [% setting = 'history.circ.retention_start' %] + +
[% l('Keep history of holds?') %] + [% setting = 'history.hold.retention_start' %] + +
+
+ [% INCLUDE "opac/parts/myopac/prefs_hints.tt2" %] +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/receipt_email.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/receipt_email.tt2 new file mode 100644 index 0000000000..15b744f8cf --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/receipt_email.tt2 @@ -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 %] +
+ [% l('Error preparing receipt:') %] + + [% ctx.email_receipt_result.desc | html %] + +
+ [% ELSE %] +
+ [% l('Your receipt will be emailed to [_1]', ctx.user.email) | html %] +
+ [% END %] +

+ [ [% + l("Back to Payments History") %] ] +

+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/receipt_print.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/receipt_print.tt2 new file mode 100644 index 0000000000..fe6849502b --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/receipt_print.tt2 @@ -0,0 +1,25 @@ +[%# sic! no wrapper %] + + + [% l('Receipt') %] + + + [% IF ctx.printable_receipt.template_output %] + + [% ctx.printable_receipt.template_output.data %] + + [% ELSE %] +
+ [% 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 %] +
+ [% END %] +
+

[ [% + l("Back to Payments History") %] ]

+ + diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/update_email.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/update_email.tt2 new file mode 100644 index 0000000000..7134d1c90b --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/update_email.tt2 @@ -0,0 +1,25 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "prefs" %] +
+ +[% IF ctx.invalid_email %] +
+ [% l('The email address "[_1]" is invalid. Please try a different email address.', ctx.invalid_email) | html %] +
+[% END %] + +
+ [% IF CGI.param("return_to_referer") %] + + [% END %] + + + + + +
[% l('Current Email') %][% ctx.user.email | html %]
[% l('Current Password') %]
[% l('New Email') %]
+
+ +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/update_password.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/update_password.tt2 new file mode 100644 index 0000000000..c87fc5d71f --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/update_password.tt2 @@ -0,0 +1,33 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "prefs" %] + +
+ +[% IF ctx.password_invalid %] +
+ [% |l %] New password is invalid. Please try a different password. [% END %] +
+ +[% ELSIF ctx.password_nomatch %] +
+ [% |l %] Passwords do not match. [% END %] +
+ +[% ELSIF ctx.password_incorrect %] +
+ [% |l %] Your current password was not correct. [% END %] +
+[% END %] + +
+ + + + + +
[% l('Current Password') %]
[% l('New Password') %]
[% l('New Password Again') %]
+
+ +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/myopac/update_username.tt2 b/KCLS/openils/var/templates_kcls/opac/myopac/update_username.tt2 new file mode 100644 index 0000000000..70449ccedd --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/myopac/update_username.tt2 @@ -0,0 +1,37 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; + myopac_page = "prefs" %] +
+ +[% IF ctx.invalid_username %] +
+ [% bad_user = ctx.invalid_username | html %] + [% l('"[_1]" is not a valid username. Usernames cannot have any spaces. Please try a different username.', bad_user) %] +
+ +[% ELSIF ctx.username_exists %] +
+ [% bad_user = ctx.username_exists | html %] + [% | l(bad_user) %] + The username "[_1]" is taken. Please try a different username. + [% END %] +
+ +[% ELSIF ctx.password_incorrect %] +
+ [% |l %] Your current password was not correct. [% END %] +
+ +[% END %] + +
+ + + + + +
[% l('Current Username') %][% ctx.user.usrname | html %]
[% l('Current Password') %]
[% l('New Username') %]
+
+ +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/advanced/expert.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/advanced/expert.tt2 new file mode 100644 index 0000000000..935da519b9 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/advanced/expert.tt2 @@ -0,0 +1,29 @@ +
+
[% l("Expert Search") %]
+ + + + + + + + + + + + + + + + + + + + +
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/advanced/global_row.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/advanced/global_row.tt2 new file mode 100644 index 0000000000..f5b22ebeea --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/advanced/global_row.tt2 @@ -0,0 +1,52 @@ +[% + contains_options = [ + {value => 'contains', label => l('Contains')}, + {value => 'nocontains', label => l('Does not contain')}, + {value => 'phrase', label => l('Contains phrase')}, + {value => 'exact', label => l('Matches exactly')} + ]; + contains = CGI.param('contains'); + queries = CGI.param('query'); + bools = CGI.param('bool'); + qtypes = CGI.param('qtype'); + rowcount = 3; + + # scalar.merge treats the scalar as a 1-item array + WHILE queries.size < rowcount; queries = queries.merge(['']); END; + WHILE bools.size < rowcount; bools = bools.merge(['and']); END; + WHILE qtypes.size < rowcount; qtypes = qtypes.merge(['keyword']); END; + + FOR qtype IN qtypes; + c = contains.shift; + b = bools.shift; + q = queries.shift; %] + + + + + + + + + + + [% INCLUDE "opac/parts/qtype_selector.tt2" + query_type=qtype %] + + + + + [% IF loop.first %][% END %] + + + +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/advanced/numeric.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/advanced/numeric.tt2 new file mode 100644 index 0000000000..47efc9987b --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/advanced/numeric.tt2 @@ -0,0 +1,28 @@ +
+
[% l("Numeric Search") %]
+ + + + + + + + + +
+ + + +
+ +
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/advanced/search.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/advanced/search.tt2 new file mode 100644 index 0000000000..13155df424 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/advanced/search.tt2 @@ -0,0 +1,251 @@ +
+ + + + + + + + + + + + + + + + + +
+ + + + +[% IF ctx.is_staff %] + + +[% END %] + + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/anon_list.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/anon_list.tt2 new file mode 100644 index 0000000000..89273a605e --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/anon_list.tt2 @@ -0,0 +1,65 @@ + [% IF ctx.mylist.size %] +
+
+
+ + + + + +
+ [% l('Temporary List') %] + + +
+
+
+
+ + + + + + + + + + + [% FOR item IN ctx.mylist; + attrs = {marc_xml => ctx.mylist_marc_xml.$item}; + PROCESS get_marc_attrs args=attrs %] + + + + + + [% END %] + +
+ + [% l('Title') %][% l('Author(s)') %] + + +
+ + [% attrs.title | html %][% attrs.author | html %]
+

+
+
+ [% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/banner.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/banner.tt2 new file mode 100644 index 0000000000..e69de29bb2 diff --git a/KCLS/openils/var/templates_kcls/opac/parts/base.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/base.tt2 new file mode 100644 index 0000000000..f1b32cae1b --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/base.tt2 @@ -0,0 +1,22 @@ + + + + + [% IF ctx.refresh %] + + [% ELSIF ctx.authtime %] + + [% END %] + + + [% l('Catalog - [_1]', ctx.page_title) %] + + [% INCLUDE 'opac/parts/goog_analytics.tt2' %] + + + [% INCLUDE 'opac/parts/js.tt2' %] + [% content %] + [% INCLUDE 'opac/parts/footer.tt2' %] + [% INCLUDE 'opac/parts/chilifresh.tt2' %] + + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/chilifresh.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/chilifresh.tt2 new file mode 100644 index 0000000000..d58b3f5b97 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/chilifresh.tt2 @@ -0,0 +1,20 @@ + + + +[% IF ENV.OILS_CHILIFRESH_URL AND ENV.OILS_CHILIFRESH_ACCOUNT + AND (ctx.page == 'rresult' OR ctx.page == 'record'); + chili_url = ENV.OILS_CHILIFRESH_URL; + IF CGI.https AND ENV.OILS_CHILIFRESH_HTTPS_URL; + chili_url = ENV.OILS_CHILIFRESH_HTTPS_URL; + END; +%] + + + + + + +[% END %] + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/coded_value_selector.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/coded_value_selector.tt2 new file mode 100644 index 0000000000..4315bc29fb --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/coded_value_selector.tt2 @@ -0,0 +1,32 @@ + +[%- + # If caller passes a list of possible attribute types, + # search all until we find some values + + IF !attr.size; attr = [attr]; END; + all_values = []; + attr_class = ''; + FOR attr_class IN attr; + all_values = ctx.search_ccvm('ctype', attr_class); + IF all_values.size > 0; LAST; END; + END; + name = name || "fi:" _ attr_class; + id = id || attr_class _ "_selector"; + values = values || CGI.param(name); +-%] + + + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/config.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/config.tt2 new file mode 100644 index 0000000000..696a99d794 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/config.tt2 @@ -0,0 +1,71 @@ +[% + +############################################################################## +# This file contains skin-level configuration settings. +# Many of these settings will probably migrate into actor.org_unit_settings. +############################################################################## + +############################################################################## +# RefWorks configuration +############################################################################## +# RefWorks is a Web-based citation manager +ctx.refworks.enabled = 'false'; + +# Base URL for RefWorks +ctx.refworks.url = 'http://www.refworks.com'; + +# Some sites have a hosted RefWorks instance at a different URL; +# in addition, you might want to proxy access to RefWorks - for example: +# ctx.refworks.url = 'http://librweb.laurentian.ca/login?url=http://refworks.scholarsportal.info'; + +############################################################################## +# OpenURL resolution +############################################################################## +# Evergreen provides the ability to point at an OpenURL resolver to find +# electronic resources for a given ISSN or ISBN. Currently, only the SFX +# resolver is supported. +# +# You must enable the open-ils.resolver instance in opensrf.xml to use +# this feature. +############################################################################## + +openurl.enabled = 'false'; +openurl.baseurl = 'http://sfx.example.com/instance'; + +############################################################################## +# Google Analytics support +############################################################################## +# You can enable Google Analytics support in Evergreen by entering a +# valid Google Analytics code and changing 'false' to 'true' +############################################################################## +google_analytics.enabled = 'false'; +google_analytics.code = 'UA-9999999-99'; + +############################################################################## +# Enable "Forgot your password?" prompt at login +############################################################################## +reset_password = 'true'; + +############################################################################## +# Misc. UI Settings +############################################################################## + +############################################################################## +# Size of the jacket image to display on the record detail summary. +# Sizes vary depending on added content provider. +# Options are "small", "medium", and "large" +record.summary.jacket_size = 'medium'; + +############################################################################## +# Define the order in which facets are displayed. Only facets listed here +# will be displayed. To show all facets sorted by name, comment out this +# setting. +# facet.display = [] # show no facets +facet.display = [ + {facet_class => 'subject', facet_order => ['complete']} + {facet_class => 'series', facet_order => ['seriestitle']}, + {facet_class => 'identifier', facet_order => ['mattype']}, +]; + + +%] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/filtersort.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/filtersort.tt2 new file mode 100644 index 0000000000..664be17fc3 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/filtersort.tt2 @@ -0,0 +1,16 @@ + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/footer.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/footer.tt2 new file mode 100644 index 0000000000..9ab3ace033 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/footer.tt2 @@ -0,0 +1,10 @@ + + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/goog_analytics.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/goog_analytics.tt2 new file mode 100644 index 0000000000..e3e0ed8bf0 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/goog_analytics.tt2 @@ -0,0 +1,14 @@ + + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/header.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/header.tt2 new file mode 100644 index 0000000000..f23c3e779e --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/header.tt2 @@ -0,0 +1,73 @@ +[%- USE money = format(l('$%.2f')); + USE date; + USE CGI = CGI_utf8; + USE POSIX; + SET DATE_FORMAT = l('%m/%d/%Y'); + + PROCESS "opac/parts/config.tt2"; + + # Don't wrap in l() here; do that where this format string is actually used. + SET HUMAN_NAME_FORMAT = '[_1] [_2] [_3] [_4] [_5]'; + + is_advanced = CGI.param("_adv").size; + is_special = CGI.param("_special").size; + + # ----------------------------------------------------------------------------- + # mkurl( destination_page, params_to_set, params_to_clear ) + # + # Current page, updated params: + # mkurl('', {foo => 'bar', boo => 'baz'}); + # + # New page, one param is a list: + # 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); + # + # Current page, clear 'some_param' from the existing params: + # mkurl('', {foo => 'bar', boo => 'baz'}, ['some_param']); + MACRO mkurl(page, params, clear_params) BLOCK; + + # clone the query string to avoid clobberation + cgi = CGI.new(CGI.query_string); + + # remove requested params + IF clear_params.0; # array + FOR p IN clear_params; cgi.delete(p); END; + ELSIF clear_params; + cgi.delete_all(); + END; + + # x and y are artifacts of using tags + # instead of true submit buttons, and their values are never used. + cgi.delete('x', 'y'); + + # apply user params + FOR k IN params.keys; + encoded = []; + max = params.$k.max; + list = (params.$k.0 OR max == -1) ? params.$k : [params.$k]; + IF list.size == 0; NEXT; END; + # CGI croaks on already-decoded strings. force-encode to be safe. + FOR p IN list; encoded.push(ctx.encode_utf8(p)); END; + foo = cgi.param("-name", k, "-values", encoded); + END; + + # for url brevity, remove any params that have no value + FOR p IN cgi.param; + val = cgi.param(p); + IF val == ''; cgi.delete(p); END; + END; + + IF page; + IF cgi.query_string; + page _ '?' _ cgi.query_string; + ELSE; + page; + END; + ELSE; + # staying on the current page + cgi.url("-path" => 1, "-query" => 1); + END; + END; +%] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/hold_error_messages.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/hold_error_messages.tt2 new file mode 100644 index 0000000000..e79e81df1b --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/hold_error_messages.tt2 @@ -0,0 +1,39 @@ +[% + # XXX It might be cleaner to move this into its own file or something. + # + # The following hash should have fail_parts as keys and user/patron-friendly + # strings as values. If the system returns an event with a fail_part when + # you attempt to place a hold and the fail part matches something in this + # hash, this is the message that will be displayed to the user. Wait until + # these are used to pass them through l() for i18n. + + FAIL_PART_MSG_MAP = { + "actor.usr.barred" => l("The patron is barred"), + "asset.copy.circulate" => l("The item does not circulate"), + "asset.copy_location.circulate" => l("Items from this shelving location do not circulate"), + "asset.copy.status" => l("The item cannot circulate at this time"), + "circ.holds.target_skip_me" => l("The item's circulation library does not fulfill holds"), + "config.circ_matrix_circ_mod_test" => l("The patron has too many items of this type checked out"), + "config.circ_matrix_test.available_copy_hold_ratio" => l("The available item-to-hold ratio is too low"), + "config.circ_matrix_test.circulate" => l("Circulation rules reject this item as non-circulatable"), + "config.circ_matrix_test.total_copy_hold_ratio" => l("The total item-to-hold ratio is too low"), + "config.hold_matrix_test.holdable" => l("Hold rules reject this item as unholdable"), + "config.hold_matrix_test.max_holds" => l("The patron has reached the maximum number of holds"), + "config.rule_age_hold_protect.prox" => l("The item is too new to transit this far"), + "no_item" => l("The system could not find this item"), + "no_ultimate_items" => l("The system could not find any items to match this hold request"), + "no_matchpoint" => l("System rules do not define how to handle this item"), + "no_user" => l("The system could not find this patron"), + "transit_range" => l("The item cannot transit this far") + }; + + + # This works like the above has, but instead of fail_parts for keys, use + # the textcode of the event. This will only be consulted for events + # that do not have a fail_part matching something in the above hash. + # Wait until these are used to pass them through l() for i18n. + + EVENT_MSG_MAP = { + "PATRON_EXCEEDS_FINES" => l("Patron has reached the maximum fine amount") + }; +%] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/hold_status.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/hold_status.tt2 new file mode 100644 index 0000000000..f2b3deb60c --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/hold_status.tt2 @@ -0,0 +1,31 @@ +[% BLOCK get_hold_status %] +
+ [% + IF hold.hold.status == 4 %] + [% l("Available"); %] [% + IF ahr.shelf_expire_time; + l('
Expires [_1]', + date.format(ctx.parse_datetime(ahr.shelf_expire_time), DATE_FORMAT)); + END; + END; + %] + [%# + + ELSIF hold.hold.estimated_wait AND hold.hold.estimated_wait > 0; + # estimated wait is delivered as seconds. + SET hwait = POSIX.ceil(hold.hold.estimated_wait / 86400); + l("Estimated wait: [quant,_1,day,days]", hwait); + + ELSIF hold.hold.status == 3; + l("In Transit"); + + ELSIF hold.hold.status < 3; + l("Waiting for copy"); + END + %] +
+
+ [% l('[_1] hold on [quant,_2,circulating copy,circulating copies]', + hold.hold.queue_position, hold.hold.potential_copies) %] +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/homesearch.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/homesearch.tt2 new file mode 100644 index 0000000000..22e33d77a5 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/homesearch.tt2 @@ -0,0 +1,101 @@ + + + + +
+
+

Need Help Using the Library
Catalog? Start Here.

+ The KCLS catalog provides access to nearly
+ 15 million items. Learn how to make the most
+ of this valuable resource.
+
+ Learn more »
+
+
+ + + + + + +
+
+
+
+
+ +
+
+ +
+
+ +
+
+ +
+
+ +
+
+
+
+
+ + + + +
+
+ +
+
+ +
+
+ +
+
+ + Locations + +
+
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/js.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/js.tt2 new file mode 100644 index 0000000000..9fd52aa3ae --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/js.tt2 @@ -0,0 +1,72 @@ + + + +[%- IF ctx.is_staff %] + + + + + + [% IF ctx.page == 'record' %] + [% IF ctx.search_result_index >= 0 %] + + [% END %] + [% IF ctx.mfhd_summaries.size %] + + [% END %] + [% END %] +[%- END %] + +[%- IF ENV.OILS_NOVELIST_URL AND ctx.page == 'record'; + url = ENV.OILS_NOVELIST_URL; + IF CGI.https; url = url.replace('^http:', 'https:'); END; %] + +[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/login/form.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/login/form.tt2 new file mode 100644 index 0000000000..8d800822c9 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/login/form.tt2 @@ -0,0 +1,154 @@ + + +[% IF ctx.login_failed_event %] +
+[% + IF ctx.login_failed_event.textcode == 'PATRON_CARD_INACTIVE'; + l("The barcode used to login is marked as inactive. Please contact your local library."); + ELSIF ctx.login_failed_event.textcode == 'PATRON_INACTIVE'; + l("This account has been deactivated. Please contact your local library."); + ELSE; + l("Login failed. The username or password provided was not valid. + Ensure Caps-Lock is off and try again or contact your local library."); + END; +%] +
+[% END %] + +
+
+
+ + + + + [% INCLUDE "opac/parts/login/help.tt2" %] + +
+
+
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/login/help.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/login/help.tt2 new file mode 100644 index 0000000000..a6d7ebbeb9 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/login/help.tt2 @@ -0,0 +1,12 @@ + + + [% l('Questions?') %] + +
+ [% l('Visit our FAQs section for answers to common questions about how to use your account.') %] +
+ + [% l('FAQs') %] + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/login/password_hint.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/login/password_hint.tt2 new file mode 100644 index 0000000000..a95b47fa78 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/login/password_hint.tt2 @@ -0,0 +1,5 @@ + + [% | l('
', '
') %] + If this is your first time logging in, please enter [_1] the last 4 digits of your phone number. [_2] Example: 0926 + [% END %] +
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/misc_util.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/misc_util.tt2 new file mode 100644 index 0000000000..49a17141c7 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/misc_util.tt2 @@ -0,0 +1,144 @@ +[% + # Extract MARC fields from XML + # get_marc_attrs( { marc_xml => doc } ) + BLOCK get_marc_attrs; + xml = args.marc_xml; + + args.isbns = []; + FOR isbn IN xml.findnodes('//*[@tag="020"]/*[@code="a"]'); + args.isbns.push(isbn.textContent); + END; + + args.upcs = []; + FOR upc IN xml.findnodes('//*[@tag="024"]/*[@code="a"]'); + args.upcs.push(upc.textContent); + END; + args.upc = args.upcs.0; # use first UPC as the default + args.issn = xml.findnodes('//*[@tag="022"]/*[@code="a"]').textContent; + + titresults = xml.findnodes('//*[@tag="245"]/*[@code="a" or @code="b" or @code="n" or @code="p"]'); + titresults_content = []; + FOR sub IN titresults; + titresults_content.push(sub.textContent); + END; + attrs.title = titresults_content.join(" "); + attrs.title = attrs.title | replace('[:;/,]$', ''); + + args.title_extended = ''; + FOR node IN xml.findnodes('//*[@tag="245"]/*'); + args.title_extended = args.title_extended _ ' ' _ node.textContent; + END; + + args.author = xml.findnodes('//*[@tag="100"]/*[@code="a"]').textContent || xml.findnodes('//*[@tag="110"]/*[@code="a"]').textContent || ''; + + args.publishers = xml.findnodes('//*[@tag="260"]/*[@code="b"]') + || xml.findnodes('//*[@tag="264" and @ind2="1"]/*[@code="b"]') + || ''; + args.publishers_content = []; + FOR sub IN args.publishers; + args.publishers_content.push(sub.textContent); + END; + args.publisher = (args.publishers_content.size) ? args.publishers_content.0 : ''; + + args.pubdates = xml.findnodes('//*[@tag="260"]/*[@code="c"]'); + args.pubdates_content = []; + IF args.pubdates; + FOR sub IN args.pubdates; + args.pubdates_content.push(sub.textContent); + END; + ELSE; + args.pubdates = xml.findnodes('//*[@tag="264" and @ind2="1"]/*[@code="c"]'); + args.pubdates_content = []; + FOR sub IN args.pubdates; + args.pubdates_content.push(sub.textContent); + END; + IF args.pubdates; + args.copyright = xml.findnodes('//*[@tag="264" and @ind2="4"]/*[@code="c"]').textContent || ''; + END; + END; + args.pubdate = (args.pubdates_content.size) ? args.pubdates_content.0 : ''; + + args.edition = xml.findnodes('//*[@tag="250"]/*[@code="a"]').textContent || + xml.findnodes('//*[@tag="534"]/*[@code="b"]').textContent || + xml.findnodes('//*[@tag="775"]/*[@code="b"]').textContent; + phys = xml.findnodes( + '//*[@tag="300"]/*[@code="a" or @code="b" or @code="c" or @code="e"]' + ); + phys_content = []; + FOR p IN phys; phys_content.push(p.textContent); END; + args.phys_desc = phys_content.join(""); + + args.contents = xml.findnodes('//*[@tag="505"]').textContent; + + # capture all of the 520a's + args.summary = []; + FOR s IN xml.findnodes('//*[@tag="520"]/*[@code="a"]'); + args.summary.push(s.textContent); + END; + + # Marc CN + marcresults = xml.findnodes('//*[@tag="092"]/*[@code="a"]') || xml.findnodes('//*[@tag="099"]/*[@code="a"]'); + marcresults_content = []; + FOR sub IN marcresults; + marcresults_content.push(sub.textContent); + END; + IF marcresults_content.size; + attrs.marc_cn = marcresults_content.join(" "); + ELSE; + attrs.marc_cn = "N/A"; + END; + + # clean up the ISBN + args.isbn_clean = args.isbns.0.replace('\ .*', ''); + + # Extract the 856 URLs that are not otherwise represented by asset.uri's + args.online_res = []; + FOR node IN xml.findnodes('//*[@tag="856"]'); + IF node.findnodes('./*[@code="9" or @code="w" or @code="n"]'); NEXT; END; # asset.uri's + label = node.findnodes('./*[@code="z"]'); # XXX KCLS => y -> z + #notes = node.findnodes('./*[@code="z" or @code="3"]'); # XXX KCLS + FOR href IN node.findnodes('./*[@code="u"]'); + NEXT UNLESS href; + # it's possible for multiple $u's to exist within 1 856 tag. + # in that case, honor the label/notes data for the first $u, but + # leave any subsequent $u's as unadorned href's. + # use href/link/note keys to be consistent with args.uri's + args.online_res.push({ + href => href.textContent, + link => (loop.first AND label) ? label.textContent : href.textContent, + #note => (loop.first) ? notes.textContent : '' # XXX KCLS + note => '' + }); + END; + END; + + args.holdings = []; + FOR holding IN xml.findnodes('//*[local-name()="volumes"]/*[local-name()="volume"]'); + args.holdings.push( + holding.getAttribute('label') + ); + END; + + # Extract the copy count summary + count_type = (ctx.is_staff) ? 'staff' : 'public'; + xpath = '//*[local-name()="counts"]/*[local-name()="count"][@type="' _ count_type _ '"]'; + FOR node IN xml.findnodes(xpath); + args.copy_counts = {}; + FOR attr IN ['count', 'available', 'unshadow', 'transcendant']; + args.copy_counts.$attr = node.getAttribute(attr); + END; + END; + + # "mattype" == "custom marc format specifier" + FOR icon_style IN ['mattype', 'item_type']; + node = xml.findnodes( + '//*[local-name()="attributes"]/*[local-name()="field"][@name="' _ icon_style _ '"]'); + IF node AND node.textContent; + args.format_label = node.getAttribute('coded-value') + args.format_icon = ctx.media_prefix _ '/images/format_icons/' _ icon_style _ '/' _ node.textContent _ '.png'; + LAST; + END; + END; + END; +%] + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/myopac/base.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/myopac/base.tt2 new file mode 100644 index 0000000000..6a4e839be4 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/myopac/base.tt2 @@ -0,0 +1,37 @@ +[% WRAPPER "opac/parts/base.tt2" %] + +[% myopac_pages = [ + {url => "main", name => "Account Summary"}, + {url => "circs", name => "Items Checked Out"}, + {url => "holds", name => "Holds"}, + {url => "prefs", name => "Account Preferences"}, + {url => "lists", name => "My Lists"} + ]; + skin_root = "../" +%] + [% INCLUDE "opac/parts/topnav.tt2" %] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+
+
+
+ [%- FOREACH page IN myopac_pages; + IF page.url == myopac_page; + cls_which = "on"; + ctx.page_title = "Your Account - " _ page.name; + ELSE; + cls_which = "off"; + END -%] + + [% END %] +
+
+
+ [% content %] +
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/myopac/main_base.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/myopac/main_base.tt2 new file mode 100644 index 0000000000..87b2389be3 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/myopac/main_base.tt2 @@ -0,0 +1,102 @@ +[% PROCESS "opac/parts/header.tt2"; + PROCESS "opac/parts/misc_util.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; +%] + +
+ +
+
[% l('Account Summary') %]
+
+ + + [% IF myopac_main_page == "payment_form" OR ( + !ctx.fines.circulation.size AND !ctx.fines.grocery.size + ) %] +
+ [% ELSE %] +
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+
+
+ +
+
+ [% l('Fines:') %] + + [% money(ctx.user_stats.fines.balance_owed) %] +
+ +
+
+ [% END %] + +
+
+
+
+ + + + + +
[% l("Items Currently Checked out ([_1])", ctx.user_stats.checkouts.total_out) %] + [% l("View All") %] +
+
+
+ + + + + +
[% l('Items Currently on Hold ([_1])', ctx.user_stats.holds.total) %] + [% l('View All') %] +
+
+
+ + + + + +
[% l('Items ready for pickup ([_1])', ctx.user_stats.holds.ready) %] + [% l('View All') %] +
+
+
+
+
+
+
+ [% IF myopac_main_page == 'main' %] + + + [% ELSE %] + + + [% END %] +
+
+ [% content %] +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/myopac/main_refund_policy.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/myopac/main_refund_policy.tt2 new file mode 100644 index 0000000000..937d167d3a --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/myopac/main_refund_policy.tt2 @@ -0,0 +1,27 @@ + + +
+ + Important! You must have a printed receipt to be + eligible for a refund on lost items (regulations allow + for no exceptions). + +
+
+ + To ensure your necessary receipt information is + not lost, enter your email address above and a + receipt will be emailed to you. Otherwise, make + certain you have a printed receipt in hand before + closing the payment receipt screen. + +
+ Refunds are not available for parts and pieces, overdue + fines, or items that do not display a specific title in + My Account. For a full list of refundable and + non-refundable items, visit + http://www.kcls.org/usingthelibrary/borrowing/refundable.cfm

+ This site uses VeriSign SSL encryption to ensure your + privacy. + + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/myopac/prefs_base.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/myopac/prefs_base.tt2 new file mode 100644 index 0000000000..1b641a6001 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/myopac/prefs_base.tt2 @@ -0,0 +1,60 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/myopac/base.tt2"; %] + +
+
+
+ + [% IF prefs_page == 'personal' %] +
+ +
+ [% IF ctx.opt_in_settings.size > 0 %] +
+ +
+ [% END %] +
+ +
+ [% ELSIF prefs_page == 'notify' %] +
+ +
+
+ +
+
+ +
+ [% ELSE %] +
+ +
+ [% IF ctx.opt_in_settings.size > 0 %] +
+ +
+ [% END %] +
+ +
+ [% END %] +
+
+ +

+ +
+ [% l('Account Information and Preferences') %] + + [% l('Export List') %] + +
+ +
+ +[% content; %] + +
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/myopac/prefs_hints.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/myopac/prefs_hints.tt2 new file mode 100644 index 0000000000..bb7c6428c5 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/myopac/prefs_hints.tt2 @@ -0,0 +1,4 @@ +Try + Library Elf-to manage library materials! + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/place_hold.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/place_hold.tt2 new file mode 100644 index 0000000000..115e7a17d4 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/place_hold.tt2 @@ -0,0 +1,133 @@ +[% PROCESS "opac/parts/misc_util.tt2"; + PROCESS "opac/parts/hold_error_messages.tt2"; +%] + +
+

[% l('Place Hold') %]

+
+ + [% + 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:') + %] + + + [% IF ctx.is_staff %] +

+ + +
+ + + + + +

+ [% END %] + + + + [% FOR hdata IN ctx.hold_data; + attrs = {marc_xml => hdata.marc_xml}; + PROCESS get_marc_attrs args=attrs %] + + + + [% END %] +
+ +
[% attrs.title_extended | html %]
+ [% IF hdata.parts %] + [% IF hdata.parts.size > 0 %] +
+ [% hdata.part_required ? l('Select a Part:') : l('Select a Part (optional):') %] + +
+ [% ELSE %] + + [% END %] + [% END %] +
+ +

+ [% l('Pickup location:') %] + [% PROCESS "opac/parts/org_selector.tt2"; + INCLUDE build_org_selector name='pickup_lib' + value=ctx.default_pickup_lib id='pickup_lib' can_have_vols_only=1 hold_pickup_lib=1 %] +

+ +

+ [% |l %]If you use the Traveling Library Center (TLC) and ABC Express + services, please select "Outreach" to have the item delivered + during your scheduled visit.[% END %] +

+ + + + + +        + + [% l('Cancel') %] + +
+

+

+ [% |l %]* If you need your item today, and it is checked in at your + library, please place your hold and then call your library to set it + aside. Placing a hold without calling the library will increase your + wait time.[% END %] +
[% l('Library phone numbers.') %] +

+

+ [% |l %]* For best possible service, we recommend keeping + a printed copy of your most recent holds list.[% END %] +

+
+ diff --git a/KCLS/openils/var/templates_kcls/opac/parts/place_hold_result.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/place_hold_result.tt2 new file mode 100644 index 0000000000..c5efcc2408 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/place_hold_result.tt2 @@ -0,0 +1,145 @@ +[% PROCESS "opac/parts/misc_util.tt2"; + PROCESS "opac/parts/hold_error_messages.tt2"; + override_possible = 0; + any_failures = 0; + any_success = 0; +%] + + + +
+

[% l('Place Hold') %]

+ +
+ + [% FOR k IN ctx.orig_params.keys %] + + [% END %] + + + + [% FOR hdata IN ctx.hold_data; + attrs = {marc_xml => hdata.marc_xml}; + PROCESS get_marc_attrs args=attrs %] + + + + + [% END %] +
+ [% + override = 0; + IF hdata.could_override || hdata.hold_local_alert; + override_possible = 1; + override = 1; + END; + %] + + + [% + title = attrs.title_extended; + IF hdata.selected_part AND hdata.parts AND hdata.parts.size > 0; + FOREACH part IN hdata.parts; + IF hdata.selected_part == part.id; + title = l('[_1] ([_2])', title, part.label); + END; + END; + END; + %] + +
[% title | html %]
+ [% IF hdata.parts %] + + [% END %] +
+ [% IF hdata.hold_success; any_success = 1 %] + +
[% l("Hold was successfully placed"); %]
+ + [% IF ctx.is_staff %] + + [% END %] + + [% ELSIF hdata.hold_failed; any_failures = 1 %] + +
[% l("Hold was not successfully placed"); %]
+ [% IF hdata.hold_local_block %] +
[% l("There is already a copy available at your local library.") %]
+ [% ELSIF hdata.hold_failed_event || hdata.hold_local_alert %] +
+ [% l('Problem:') %] + + [% + fail_part_key = hdata.hold_failed_event.payload.fail_part; + event_key = hdata.hold_failed_event.textcode; + + # display: + (hdata.age_protect ? + l("All available copies are temporarily unavailable at your pickup library. Placing this hold could result in longer wait times.") : + FAIL_PART_MSG_MAP.$fail_part_key || + EVENT_MSG_MAP.$event_key || + l(hdata.hold_failed_event.desc) || + hdata.hold_failed_event.payload.fail_part || + hdata.hold_failed_event.textcode || + (hdata.hold_local_alert ? + l("There is already a copy available at your local library.") : + l("Unknown problem"))) | html + %] + [% IF event_key == 'PERM_FAILURE' %] +
[% l('Permission: "[_1]"', hdata.hold_failed_event.ilsperm) | html %]
+ [% END %] +
+ [% IF hdata.hold_copy_available %] +

[% l('Find a copy in the shelving location, "[_1]."', locname) | html %]

+ [% END %] +
+ [% END; + END %] +
+
+
+
+ [% IF override_possible %] +
+ [% |l %]You have permission to override some of the failed holds.
+ Click Submit to override and place your hold on the selected items.[% END %] +
+ + + + + [% l('Return') %] + + [% ELSE %] + [% IF !any_success %] + + [% l('Cancel') %] + [% ELSE %] + + [% l('Return') %] + + [% END %] + [% END %] + +
+ diff --git a/KCLS/openils/var/templates_kcls/opac/parts/printnav.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/printnav.tt2 new file mode 100644 index 0000000000..13a8f666f5 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/printnav.tt2 @@ -0,0 +1,25 @@ +
+
+
+ +
+ [% l('Back') %] + [% l('Homepage') %] + [% l('Print Page') %] + [% l('Help') %] + [% l('Forward') %] +
+ +
+
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/qtype_selector.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/qtype_selector.tt2 new file mode 100644 index 0000000000..9ae152ef40 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/qtype_selector.tt2 @@ -0,0 +1,18 @@ +[% query_types = [ + {value => "keyword", label => l("Keyword")}, + {value => "title", label => l("Title")}, + {value => "author", label => l("Author")}, + {value => "subject", label => l("Subject")}, + {value => "series", label => l("Series")}, + {value => "id|bibcn", label => l("Bib Call Number")} + {value => "identifier", label => l("ISBN/ISSN/Other")} + {value => "keyword|publisher", label => l("Publisher")} +] %] + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/authors.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/authors.tt2 new file mode 100644 index 0000000000..7304aeb7af --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/authors.tt2 @@ -0,0 +1,51 @@ +[% + +authors = [ + { + type => 'author', + label => l('Authors: '), + xpath => '//*[@tag="100"]|//*[@tag="110"]|//*[@tag="111"]' + }, { + type => 'added', + label => l('Added Authors: '), + xpath => '//*[@tag="700"]|//*[@tag="710"]|//*[@tag="711"]' + }, { + type => 'credits', + label => l('Credits: '), + xpath => '//*[@tag="100"]|//*[@tag="110"]|//*[@tag="111"]' + }, { + type => 'cast', + label => l('Cast: '), + xpath => '//*[@tag="508"]' + }, { + type => 'notes', + label => l('Author Notes: '), + xpath => '' # Comes from added content... + } +]; + +BLOCK build_author_links; + FOR node IN ctx.marc_xml.findnodes(xpath); + FOR subfield IN node.childNodes; + NEXT UNLESS subfield.nodeName == "subfield"; + code = subfield.getAttribute('code'); + NEXT UNLESS code.match('[a-z]'); + term = subfield.textContent | html; + '
' _ term _ ''; + END; + END; +END; +%] + +
+[% FOREACH author IN authors; + NEXT UNLESS author.xpath; + links = PROCESS build_author_links(xpath=author.xpath); + IF links.match('\S') %] + [% author.label | html %] +
[% links %]
+ [% END %] +[% END %] +
+ + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/awards.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/awards.tt2 new file mode 100644 index 0000000000..fa8b4f6998 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/awards.tt2 @@ -0,0 +1,32 @@ +
+
+ + + [% l('Patron Reviews:') %] +
+ + +
+ + + [% IF 0 %] + [% l('Reviews:') %] +
+ [% END %] + + + [% IF ENV.OILS_NOVELIST_URL %] + [% l('Similar Books:') %] +
+
+
+
+
+
+
+
+
+ [% END %] +
+
+ diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/body.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/body.tt2 new file mode 100644 index 0000000000..d685d9212e --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/body.tt2 @@ -0,0 +1,57 @@ +[%- attrs = {marc_xml => ctx.marc_xml}; + PROCESS "opac/parts/misc_util.tt2"; + PROCESS get_marc_attrs args=attrs; + stop_parms = ['expand','cnoffset']; +%] +
+ + [% IF ctx.search_result_index >= 0 %] +
+ + [% l('◄ Search Results') %] + + [% l('Showing Item [_1] of [_2]', ctx.search_result_index + 1, ctx.hit_count) %] + + + [%#- INCLUDE "opac/parts/pref_lib_display.tt2" %] +
+ [% + IF ctx.prev_search_record; + prev_args = {}; + IF ctx.search_page > 0 AND + ctx.search_result_index % ((ctx.page_size * ctx.search_page)) == 0; # first record in the page + prev_args.page = ctx.search_page - 1; + END; + ctx.prev_rec_url = mkurl(ctx.prev_search_record, prev_args, stop_parms); + %] + ◄ [% l('Previous') %] + [% END %] + + + + [% + IF ctx.next_search_record; + next_args = {}; + IF (ctx.page_size * (ctx.search_page + 1)) == ctx.search_result_index + 1; + next_args.page = ctx.search_page + 1; + END; + ctx.next_rec_url = mkurl(ctx.next_search_record, next_args, stop_parms); + %] + [% l('Next') %] ► + [% END %] + +
+
+
+ [% END %] + [%- IF ctx.bib_is_dead %] +
+ [% l("This record has been deleted from the database. We recommend that you remove this title from any bookbags it may have been added to.") %] +
+ [%- END %] + [% INCLUDE "opac/parts/record/summary.tt2" %] +
+ [% INCLUDE "opac/parts/record/extras.tt2" %] +
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/cn_details.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/cn_details.tt2 new file mode 100644 index 0000000000..2865026a61 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/cn_details.tt2 @@ -0,0 +1,91 @@ + + + + + + +
+
+ [% l("print these details") %] + + + + + + + + + +
+ + + + + + + +
+ + [% l("Copy Note") %] + + + [% l("Copy Category") %] + + + : +
+
+
+
+ +[% l("Yes") %] +[% l("No") %] + +
+
+
+ +
+
+ + + + + + + + + + + + + + + + + +
[% l("Library") %]
[% l("Title") %]
[% l("Author") %]
[% l("Edition") %]
[% l("Publication Date") %]
[% l("Publisher") %]
[% l("Physical Description") %]
[% l("Call Number") %]
+
+
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/cnbrowse.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/cnbrowse.tt2 new file mode 100644 index 0000000000..1b8364213d --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/cnbrowse.tt2 @@ -0,0 +1,61 @@ +[% + cnoffset = CGI.param('cnoffset'); + cnoffset = cnoffset.match('^\d+$') ? cnoffset : 0; # verify cnoffset is a sane value +%] + +
+
+
+ [% l("You are now browsing") %] + [% ctx.browsing_ou.name | html %] +
+ + + + + + + + + + [% tr_open = 0; FOR cn IN ctx.browsed_call_numbers %] + [%- IF loop.index % 3 == 0; tr_open = 1 %] + + [% END -%] + + [% IF loop.index % 3 == 2; tr_open = 0 %] + + [% END %] + [% END; IF tr_open %][% END %] + +
+ [% l("<< Previous Page") %] + [% l("Shelf Browser") %] + [% l("Next Page >>") %] +
+ [% rec_attrs = {marc_xml => cn.record.marc}; + PROCESS get_marc_attrs args=rec_attrs; + ident = rec_attrs.isbn_clean || rec_attrs.upc; + IF ident %] + + [% END %] +
[% cn.label | html %]
+ + [% IF rec_attrs.author %][% END %] +
[% cn.owning_lib.name | html %]
+
+
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/copy_table.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/copy_table.tt2 new file mode 100644 index 0000000000..7e37c63851 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/copy_table.tt2 @@ -0,0 +1,183 @@ +[%- + +# If being used in serial mode, flatten list of units so that they can be +# used like one long list of copies without changing so much code below. +IF serial_holdings; + copies = []; + FOREACH h IN serial_holdings; + units = h.units.slice(0); # copy + FOREACH unit IN units; + unit.holding_label = h.label; + END; + copies = copies.merge(units); + END; +END; + +FOREACH copy_info IN copies; + IF copy_info.call_number_label != '##URI##'; + has_copies = 'true'; + END; + IF copy_info.part_label != ''; + has_parts = 'true'; + END; + IF has_parts && has_copies; + LAST; + END; +END; +-%] +[%- IF has_copies; %] + + + + [% IF serial_holdings -%] + + [%- ELSE -%] + + [%- END %] + + [%- IF has_parts == 'true' %] + + [%- END %] + + + [%- IF ctx.is_staff %] + + + [%- END %] + [%- IF ctx.is_staff OR serial_holdings %] + + [%- END %] + + + + + + [%- last_cn = 0; + FOR copy_info IN copies; + callnum = copy_info.call_number_label; + NEXT IF callnum == '##URI##'; + + callnum_prefix = copy_info.call_number_prefix_label; + IF callnum_prefix != ""; + callnum = callnum_prefix _ " " _ callnum; + END; + + callnum_suffix = copy_info.call_number_suffix_label; + IF callnum_suffix != ""; + callnum = callnum _ " " _ callnum_suffix; + END; + -%] + + [%- IF serial_holdings %] + [%- ELSE %][% END %] + + [%- IF has_parts == 'true' %] + + [%- END %] + + + [%- IF ctx.is_staff %] + + + [% END # is_staff %] + [% IF ctx.is_staff OR serial_holdings %] + + [%- END %] + + + + [%- END %] + + [%- IF ctx.copy_offset > 0 AND NOT serial_holdings; + new_offset = ctx.copy_offset - ctx.copy_limit; + IF new_offset < 0; new_offset = 0; END %] + + [%- END %] + [%- IF copies.size >= ctx.copy_limit AND NOT serial_holdings %] + + [%- END %] + + [% IF NOT serial_holdings -%] + + + + [%- END %] + +
[% l("Issue Label") %][% l("Location") %][% l("Call Number") %][% l("Part") %][% l("Barcode") %][% l("Shelving Location") %][% l("Age Hold Protection") %][% l("Create Date") %][% l("Holdable?") %][% l("Status") %][% l("Due Date") %]
+ [%- copy_info.holding_label | html; -%] + + [%- + org_name = ctx.get_aou(copy_info.circ_lib).name; + org_name | html + -%] + [% callnum | html %] [% IF ctx.get_org_setting(CGI.param('loc') OR ctx.aou_tree.id, 'sms.enable') == 1 %](Text)[% END %][% copy_info.part_label | html %] + [%- IF ctx.is_staff -%] + [% copy_info.barcode | html %] + [%- ELSE -%][% copy_info.barcode | html %] + [%- END -%][% copy_info.copy_location | html %] + [% copy_info.age_protect ? + ctx.get_crahp(copy_info.age_protect).name : l('None') | html %] + [% date.format( + ctx.parse_datetime(copy_info.create_date), + DATE_FORMAT + ) %][% # Show copy/volume hold links to staff (without + # checking whether they have permissions to do those). + overall_holdable = ( + copy_info.holdable == 't' AND + copy_info.location_holdable == 't' AND + copy_info.status_holdable == 't'); + IF overall_holdable; + l("Place on"); + IF ctx.is_staff; + %] + [% l("copy") %] + [%- IF copy_info.call_number != last_cn; + last_cn = copy_info.call_number; + l(" / "); %] + [% l("volume") %] + [%- END; + IF serial_holdings; + l(" / "); + END; + END; + IF serial_holdings; + %] + [% l("issue") %][%- + END; + ELSE; + l("No"); + END %][% copy_info.copy_status | html %][% + IF copy_info.due_date; + date.format( + ctx.parse_datetime(copy_info.due_date), + DATE_FORMAT + ); + ELSE; + '-'; + END %]
+ « [% + l('Previous [_1]', ctx.copy_offset - new_offset) %] + + [% + l('Next [_1]', ctx.copy_limit) %] » +
+ [%- more_copies_limit = 50 %] [%# TODO: config %] + [%- IF ctx.copy_limit != more_copies_limit AND copies.size >= ctx.copy_limit %] + + [%- ELSIF ctx.copy_limit == more_copies_limit %] + + [%- END %] +
+[% END; %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/copyinfo.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/copyinfo.tt2 new file mode 100644 index 0000000000..9d4673f120 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/copyinfo.tt2 @@ -0,0 +1,68 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + +
[% l("Library") %][% l("Callnumber") %] + [% l("Copy Location") %] + [% l("Actions") %] +
+
+ [% l("Print Call Numbers for this library") %] + + + + + +
+ [% l("Loading copy information...") %] +
+ +

+
[% l(" * There are no copies in this location") %]
+
+ diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/extras.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/extras.tt2 new file mode 100644 index 0000000000..e676b91388 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/extras.tt2 @@ -0,0 +1,77 @@ +
+
+ + [% # Hidden extras are not yet implemented. Some may require JS + + # Let's see if we should hide the content cafe / simple summary content + hide_summary = 1; + IF attrs.summary.0; hide_summary = 0; ELSE; + # Expose content cafe if it's reasonable to do so. + # This approach only works when using embedded content cafe. + IF ENV.OILS_CONTENT_CAFE_USER; + ident = attrs.isbn_clean || attrs.upc; + IF ident; hide_summary = 0; END; + END; + END; + + extras = [ + {name => 'subjects', label => l('Subject')}, + {name => 'summaryplus', label => l('Summaries & More'), hide => hide_summary}, + {name => 'contents', label => l('Contents'), hide => !attrs.contents}, + {name => 'authors', label => l('Authors')}, + {name => 'series', label => l('Series')}, + {name => 'annotation', label => l('Annotation'), hide => 1}, + {name => 'awards', label => l('Awards, Reviews, & Suggested Reads')}, + {name => 'excerpt', label => l('Excerpt'), hide => 1}, + {name => 'issues', label => l('Issues Held'), hide => !(ctx.have_holdings_to_show || ctx.have_mfhd_to_show)}, + {name => 'preview', label => l('Preview'), hide => 1}, + {name => 'copyinfo', label => l('Copy Summary'), hide => 1}, + {name => 'marchtml', label => l('MARC Record')} + ]; + + MACRO tab_is_active(tab) BLOCK; + exp_name = 'expand_' _ tab; + IF ctx.$exp_name OR ctx.expand_all; 1; END; + END; + + FOREACH extra IN extras; + IF extra.hide; NEXT; END; + name = extra.name; + %] +
+
+ +
+
+ [% IF tab_is_active(name); + IF name == 'marchtml'; + ctx.marchtml; + ELSIF name == 'contents'; + attrs.contents; + ELSE; + # Load the template for the selected extra + INCLUDE "opac/parts/record/${name}.tt2"; + END; + END; + %] +
+ [% END %] +
+ +
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/issues.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/issues.tt2 new file mode 100644 index 0000000000..15e421493e --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/issues.tt2 @@ -0,0 +1,67 @@ +
+[% +base_expando = ctx.full_path _ "?expand=issues"; +FOREACH type IN ctx.holding_summaries.keys; + NEXT UNLESS ctx.holding_summaries.$type.size; + expanded = CGI.param('expand_holding_type') == type; %] +
+ [[% expanded ? '-' : '+' %]] + [% ctx.holding_summaries.$type.join(", ") %] + [% IF expanded %] + + [% FOR blob IN ctx.expanded_holdings %] + + + [% IF blob.has_units %] + + [% END %] + + [% END %] +
[% blob.issuance.label | html %] + [% l("Place Hold") %] +
+ [% END %] +
+[% END %] +[% IF ctx.mfhd_summaries.size; %] +
+ +[% + mfhd = { + basic_holdings = l('Volumes'), + basic_holdings_add = l('Additional Volume Information'), + supplement_holdings = l('Supplements'), + supplement_holdings_add = l('Additional Supplement Information'), + index_holdings = l('Indexes'), + index_holdings_add = l('Additional Index Information'), + online = l('Online'), + missing = l('Missing'), + incomplete = l('Incomplete'), + }; + + FOREACH serial IN ctx.mfhd_summaries; +%] + + + +[% + FOREACH type IN mfhd.keys; + NEXT UNLESS serial.$type.size; +%] + + + + + [% END %] + + + + [% END %] +
[% l('Holdings summary ([_1])', serial.location) %]
[% mfhd.$type %][% + FOR thing IN serial.$type; + thing.join(", "); + END %]
+
+[% END %] +
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/series.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/series.tt2 new file mode 100644 index 0000000000..cdfe588f08 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/series.tt2 @@ -0,0 +1,16 @@ +[% + series_tags = ['440', '490', '800', '810', '811', '830', '694']; + loc = CGI.param('loc'); +%] + +
+ + [% FOR tag IN series_tags; %] +
+ [% FOR node IN ctx.marc_xml.findnodes('//*[@tag="' _ tag _ '"]/*') %] + [% IF !loop.first %] [% END %] + [% node.textContent | html %] + [% END %] + [% END; %] +
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/subjects.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/subjects.tt2 new file mode 100644 index 0000000000..3d022313fb --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/subjects.tt2 @@ -0,0 +1,70 @@ +[% + subjects = [ + { + label => l('Subject: '), + xpath => '//*[@tag="600" or @tag="610" or @tag="611" or @tag="630" or @tag="650" or @tag="651"]' + }, { + label => l('Genre: '), + xpath => '//*[@tag="655"]|//*[@tag="659"]' + }, { + label => l('Topic Heading: '), + xpath => '//*[@tag="690"]' + }, { + label => l('Geographic Setting: '), + xpath => '//*[@tag="691"]' + }, { + label => l('Biographical Subject: '), + xpath => '//*[@tag="692"]' + }, { + label => l('Character Attributes: '), + xpath => '//*[@tag="693"]' + }, { + label => l('Setting: '), + xpath => '//*[@tag="698"]' + }, { + label => l('Time Period: '), + xpath => '//*[@tag="699"]' + } + ]; + + BLOCK render_subject; + loc = CGI.param('loc') | uri; + xpath = xpath || '//*[starts-with(@tag,"6")]'; + FOR node IN ctx.marc_xml.findnodes(xpath); + all_terms = []; + FOR subfield IN node.childNodes; + NEXT UNLESS subfield.nodeName == "subfield"; + code = subfield.getAttribute('code'); + NEXT UNLESS code.match('[a-z]'); + IF code.match('[vxyz]'); " — "; END; + # at this point, we actually have a partial term to use. + single_term = subfield.textContent | html; + all_terms.push(subfield.textContent); + total_term = all_terms.join(" ").replace('\s+$', '') | uri; + '' _ single_term _ ''; + END; + IF all_terms.size; "
"; END; + END; + END +%] + +
+ + [% any_subjects = 0; + FOREACH subj IN subjects; + content = PROCESS render_subject(xpath=subj.xpath); + IF content.match('\S'); + any_subjects = 1; %] + + + + + [% END; %] + [% END; %] + [% IF any_subjects == 0 %] + + [% END; %] +
+ [% subj.label %] +
[% content %]
[% l('No Subjects') %]
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/summary.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/summary.tt2 new file mode 100644 index 0000000000..bca479ed0a --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/summary.tt2 @@ -0,0 +1,269 @@ +[% ctx.page_title = attrs.title | html %] + + + + + + + + + + + + +
+ [% ident = attrs.isbn_clean || attrs.upc; IF ident; %] + [% l('Image of item') %] + [% END %] +
+
+ + + + + +
+ [% attrs.title_extended | html %]
+ [% IF attrs.author %] + [% l("Author") %]: + [% attrs.author | html %] + [% END %] + [% IF attrs.online_res.size > 0 %] +
[% l("Online Resources") %]:
+ [% FOR uri IN attrs.online_res %] +
+ [% text = uri.link; IF uri.notes; text = text _ ' - ' _ uri.notes; END %] + [% text | html %] +
+ [% END %] + [% END %] +
+
+
+ +
+ [% + operation = ctx.mylist.grep(ctx.bre_id).size ? "delete" : "add"; + label = (operation == "add") ? l("Add to my list") : l("Remove from my list"); + %] +
+ +
+
+ +
+
+ +
+
+
+
+ [% IF attrs.format_icon %] + [% attrs.format_label %] + [% END %] +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ [% IF attrs.isbns.0 %][% l("ISBN") %][% END %] + + [% FOR isbn IN attrs.isbns %][% IF !loop.first; %]
[% END; isbn | html ; END %] +
+ [% IF attrs.phys_desc %][% l("Physical Description") %][% END %] + [% attrs.phys_desc | html %]
+ [% IF attrs.marc_cn; l("Call Number"); END %] + [% attrs.marc_cn | html %] + [% IF attrs.edition; l("Edition"); END %] + [% attrs.edition | html %]
+ [% IF attrs.publisher; l("Publisher"); END %] + [% attrs.publisher | html %] + [% IF attrs.pubdate; l("Publication Date"); END %] + [% attrs.pubdate | html %]
+ [% IF args.copyright; l("Copyright Date"); END %] + [% args.copyright | html %]
+ + +
+
+ [% l("[quant,_1,Hold,Holds] with [quant,_2,total copy,total copies]", + ctx.record_hold_count, ctx.copy_summary.0.count) %] +
+
[% l('[quant,_1,Copy,Copies] available', ctx.copy_summary.0.available) %]
+
+ +
+
+

+ + + + + + + + + [% IF ctx.is_staff %] + + + + [% END %] + + + + + + [% last_cn = 0; + FOR copy_info IN ctx.copies %] + + + + + + [% IF ctx.is_staff %] + + + + [% END %] + + + + [% END %] + + [% IF ctx.copy_offset > 0; + new_offset = ctx.copy_offset - ctx.copy_limit; + IF new_offset < 0; new_offset = 0; END %] + + [% END %] + [% IF ctx.copies.size >= ctx.copy_limit %] + + [% END %] + + + + + + + + + +
[% l("Location") %][% l("Call Number") %][% l("Barcode") %][% l("Shelving Location") %][% l("Age Hold Protection") %][% l("Create Date") %][% l("Holdable?") %][% l("Status") %][% l("Due Date") %]
[% + # XXX KCLS-specific kludging + org_name = ctx.get_aou(copy_info.circ_lib).name; + dir = org_name | lower | replace('[^\w]', '') | + replace('.+320th', '320th'); %] + [% org_name %] + [% copy_info.call_number_label | html %][% copy_info.barcode | html %][% copy_info.copy_location | html %] + [% copy_info.age_protect ? + ctx.get_crahp(copy_info.age_protect).name : l('None') | html %] + [% date.format( + ctx.parse_datetime(copy_info.create_date), + DATE_FORMAT + ) %][% # Show copy/volume hold links to staff (without + # checking whether they have permissions to do those). + overall_holdable = (copy_info.holdable == 't' AND + copy_info.location_holdable == 't' AND + copy_info.status_holdable == 't'); + IF overall_holdable; + l("Place on"); %] + [% l("copy") %] + + [% copy_info.copy_status | html %][% + IF copy_info.due_date; + date.format( + ctx.parse_datetime(copy_info.due_date), + DATE_FORMAT + ); + ELSE; + '-'; + END %]
+ « [% + l('Previous [_1]', ctx.copy_offset - new_offset) %] + + [% + l('Next [_1]', ctx.copy_limit) %] » +
+ [% more_copies_limit = 50 %] [%# TODO: config %] + [% IF ctx.copy_limit != more_copies_limit AND ctx.copies.size >= ctx.copy_limit %] + + [% ELSIF ctx.copy_limit == more_copies_limit %] + + [% END %] +
+ [% IF CGI.param('expand') == 'all' %] + + [% l('Collapse all tabs') %] + [% ELSE %] + + [% l('Expand all tabs') %] + [% END %] +
+ + + + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/record/summaryplus.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/record/summaryplus.tt2 new file mode 100644 index 0000000000..7796213fa8 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/record/summaryplus.tt2 @@ -0,0 +1,19 @@ +
+ [% IF attrs.summary %] +
+ [% l('Summary: ') %] + [% FOR sum IN attrs.summary %] + [% IF !loop.first; '
'; END %] + [% sum | html %] + [% END %] +
+ [% END %] + + + [% ident = attrs.isbn_clean || attrs.upc %] + +
+ diff --git a/KCLS/openils/var/templates_kcls/opac/parts/result/facets.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/result/facets.tt2 new file mode 100644 index 0000000000..dd27dd9d27 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/result/facets.tt2 @@ -0,0 +1,129 @@ +
+[% + +close_facets = CGI.param('close_facet') || []; +selected_facets = CGI.param('facet') || []; + +# sorted list of search facets +sorted_facets = []; + +IF facet.display; + + # facet display configuration present. Traverse the + # configuration lists, find the matching facets from + # search facet data, and append them to the sorted + # list of facets. + + FOR display_chunk IN facet.display; + FOR display_field IN display_chunk.facet_order; + # find the matching facet in the facet data + FOR facet IN ctx.search_facets.values; + IF facet.cmf.field_class == display_chunk.facet_class + AND facet.cmf.name == display_field; + sorted_facets.push(facet); + END; + END; + END; + END; + +ELSE; + + # No facet display configuration is present. + # show all facets, sorted by name. + + # collect facet type labels for easier sorting + labels = []; + FOR facet IN ctx.search_facets.values; + labels.push(facet.cmf.label); + END; + + FOR facet_label IN labels.sort; + FOR facet IN ctx.search_facets.values; + IF facet.cmf.label == facet_label; + sorted_facets.push(facet); + END; + END; + END; +END; + +FOR facet IN sorted_facets; + fclass = facet.cmf.field_class; + fname = facet.cmf.name; + close_key = fclass _ fname %] + +
+
+ + + [% IF close_facets.grep(close_key).0; + new_close = []; + FOR fct IN close_facets; + IF fct != close_key; + new_close.push(fct); + END; + END; + expand_url = mkurl('', {close_facet => new_close}); + IF new_close.size == 0; + expand_url = mkurl('', {}, ['close_facet']); + END; + %] + [% l('Expand') %] + [% ELSE %] + [% l('Collapse') %] + [% END %] + +
[% facet.cmf.label %]
+
+ [% IF !close_facets.grep(close_key).0 %] +
+
+ [% FOR facet_data IN facet.data; + display_value = facet_data.value | html; + param_string = fclass _ '|' _ fname _ '[' _ facet_data.value _ ']'; + new_facets = []; + this_selected = 0; + FOR selected IN selected_facets; + IF selected == param_string; + this_selected = 1; + ELSE; + new_facets.push(selected); + END; + END; + IF this_selected; + # This facet is already selected by the user. + # Link removes the facet from the set of selected facets. + %] +
+
+ [% IF new_facets.size == 0 %] + [% display_value %] + [% ELSE %] + [% display_value %] + [% END %] +
+
([% facet_data.count %])
+
 
+
+ [% + ELSE; + # This facet is not currently selected. If selected, + # append this facet to the list of currently active facets. + %] + + [% END %] + [% END %] +
+
+ [% END %] +
+[% END %] +
+ diff --git a/KCLS/openils/var/templates_kcls/opac/parts/result/lowhits.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/result/lowhits.tt2 new file mode 100644 index 0000000000..fe2d1608e8 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/result/lowhits.tt2 @@ -0,0 +1,94 @@ +
+
+
+

[% l('Sorry, no entries were found for') %] + [% IF is_advanced OR is_special; l('your search'); ELSE %] + [% CGI.param('query') | html %] + [% END %] +
+ [% l('Did you mean') %] + ? +

+ + + + + +
+ [% l('Other Possibilities:') %] +
+
+
+ [% INCLUDE "opac/parts/result/lowhits_purchase.tt2" %] +

+ Keyword Search Tips
+ Try changing to Advanced Search. +

+

+ Adjacency
+ Multiple words are not searched together as a phrase. They will + be found in various parts of the record. To search for a phrase, enclose your + search terms in quotation marks.
+ (example: "garcia marquez") +

+

+ Truncation
+ Words may be right-hand truncated using an asterisk. Use a single asterisk * + to truncate any number of characters.
+ (example: environment* agency) +

+

+ Anchored Searching
+ You may use ^ and $ to indicate "phrase begins with" and + "phrase ends with," respectively, within a search phrase + enclosed in quotation marks.
+ (examples: "^harry" for phrases that begin with + the term harry. + "stone$" for phrases that end in stone.) +

+
+
+
+
+
[% l("Few hits were returned for your search.") %]
+
[% l("Zero hits were returned for your search.") %]
+
+ + +
+ [% l("Maybe you meant:") %] + +
+ +
+ [% l("You will find more hits when searching all item formats:") %] + [% l("Search again with all formats?") %] +
+ +
+ [% l("You may also like to try these related searches:") %] +
+ +
+
+ +
+ [% l("You may also wish to expand your search range to:") %] + +
+ +
+ [% l("You can try searching the same terms by:") %] + [% l("title") %] + [% l("author") %] + [% l("subject") %] + [% l("series") %] + [% l("keyword") %] +
+
+
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/result/lowhits_purchase.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/result/lowhits_purchase.tt2 new file mode 100644 index 0000000000..cdfde4641c --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/result/lowhits_purchase.tt2 @@ -0,0 +1,6 @@ +

+ Still not finding what you are looking for?
+ Request that KCLS purchase the material you are looking for by making a + Purchase Request
+ Note: You must be logged in to make a Purchase Request
+

diff --git a/KCLS/openils/var/templates_kcls/opac/parts/result/paginate.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/result/paginate.tt2 new file mode 100644 index 0000000000..6582c01bb8 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/result/paginate.tt2 @@ -0,0 +1,59 @@ +[% BLOCK results_count_header %] +
+ + + + + + +
[% l('Search Results') %] + [% |l(ctx.result_start, ctx.result_stop, ctx.hit_count) %] + Results [_1] - [_2] of [_3] + [% END %] + + [% |l(page + 1, page_count) %](page [_1] of [_2])[% END %] + + + + + [% class = 'search_page_nav_link'; + href = '#'; + IF page > 0; + href = mkurl('', {page => page - 1}); + ELSE; class = class _ ' invisible'; END; + %] + [% l('Previous') %] + + + [% # show links to 4 previous pages, the current page, and 3 more pages. + added = 0; + pageitr = page - 5; + IF page_count > 1; # no need to paginate 1 page + WHILE (pageitr = pageitr + 1) < page_count; + IF pageitr < 0; NEXT; END; + IF pageitr == page; %] + [% pageitr + 1%] + [% ELSE %] + [% pageitr + 1%] + [% END; + added = added + 1; + IF added == 8; LAST; END; + END; + END; + %] + + + [% class = 'search_page_nav_link'; + href = '#'; + IF (page + 1) < page_count; + href = mkurl('', {page => page + 1}); + ELSE; class = class _ ' invisible'; END; + %] + [% l('Next') %] + +
+
+[% END %] + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/result/table.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/result/table.tt2 new file mode 100644 index 0000000000..e7bd470a6a --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/result/table.tt2 @@ -0,0 +1,272 @@ +[% PROCESS "opac/parts/misc_util.tt2"; + + ctx.result_start = 1 + ctx.page_size * page; + ctx.result_stop = ctx.page_size * (page + 1); + IF ctx.result_stop > ctx.hit_count; ctx.result_stop = ctx.hit_count; END; + + result_count = ctx.result_start; +%] + +[% IF ctx.is_staff %] + +[% END %] + +
+ +[% PROCESS "opac/parts/result/paginate.tt2" %] +[% ctx.results_count_header = PROCESS results_count_header; + ctx.results_count_header %] + +
+ + + + + + +
+ + + + + [% FOR rec IN ctx.records; + attrs = {marc_xml => rec.marc_xml}; + PROCESS get_marc_attrs args=attrs %] + + + + [% END %] + +
+ + + + + + + + + + + + + + + + + + +
[% + result_count; result_count = result_count + 1 + %]. + [% ident = attrs.isbn_clean || attrs.upc; IF ident; %] + [% l('Image of item') %]
+ [% END %] +
+
+ [% IF ctx.is_staff %] + + [% attrs.title_extended | html %] + + [% END %] + [% IF !ctx.is_staff %] + [% attrs.title_extended | html %] + [% END %] +
+
+ + + + + + + [% IF !CGI.param('detail_record_view') %] + + + + + + [% ELSIF CGI.param('detail_record_view') %] + + + + + + + + + + + + + + + + + + + + + + [% END %] + +
+ [% l('Call number:') %] + [% attrs.marc_cn | html %]
+ [% l('Publication Date:') %] + [% attrs.pubdate | html %]
+ [% l('Publisher:') %] + [% attrs.publisher | html %]
+ [% l('Publication Date:') %] + [% attrs.pubdate | html %]
+ [% l('ISBN:') %] + [% attrs.isbns.0 | html %]
+ [% l('Edition:') %] + [% attrs.edition | html %]
+ [% l('Phys. Desc.:') %] + + [% args.phys_desc | html %] +
+
+ [% l('[quant,_1,hold,holds] on first copy returned of [quant,_2,copy,copies]', + rec.hold_count, attrs.copy_counts.count) %] +
+ [% l('[quant,_1,copy,copies] available', attrs.copy_counts.available) %] +
+ [% IF rec.user_circulated %] +
+ [% l('Checked Out Before') %] + [% l('I have checked this item out before') %] +
+ [% END %] +
+
+ + + | + | + + + +
+
+ + [% IF attrs.format_icon %] + [% attrs.format_label | html %] + [% END %] + + + + + + + [% l("Browse in Google Books Search") %] + + + +
+
+ +
+ [% operation = ctx.mylist.grep(rec.id).size ? "delete" : "add"; + label = (operation == "add") ? l("Add to") : l("Remove from"); %] +
+ + +
+
+ +
+
+ +
+
+ [% IF ENV.OILS_CONTENT_CAFE_USER %] + + [% END %] +
+
+
+ + +
+ + +
+
+
+
+
+ [% ctx.results_count_header %] +
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/result/table_grouped.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/result/table_grouped.tt2 new file mode 100644 index 0000000000..57a7403dcd --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/result/table_grouped.tt2 @@ -0,0 +1,159 @@ + + +[% PROCESS "opac/parts/misc_util.tt2"; + USE ResolverResolver; + + ctx.result_start = 1 + ctx.page_size * page; + ctx.result_stop = ctx.page_size * (page + 1); + + IF ctx.result_stop > ctx.hit_count; ctx.result_stop = ctx.hit_count; END; + + result_count = ctx.result_start; +%] + +[% IF ctx.is_staff %] + +[% END %] + +
+ +[% PROCESS "opac/parts/result/paginate.tt2" %] +[% ctx.results_count_header = PROCESS results_count_header; + ctx.results_count_header %] + +
+ + + + + + + +
+
+ [% INCLUDE 'opac/parts/result/facets.tt2' %] +
+
+ + + [% FOR group IN ctx.groupings; + attrs = {marc_xml => rec.marc_xml}; + PROCESS get_marc_attrs args=attrs; + IF CGI.param( 'detail_record_view' ); + attrs.title = attrs.title_extended; + END; %] +
+
+
+ + + + + + + + + + + + + + [% END %] + +
+ [% result_count; result_count = result_count + 1 %]. + + +
+ [% + href = mkurl( '', { + groupings_result_start => ctx.result_start, + groupings_page => ctx.search_page, + groupings_query => 'true', + grouping_name => group.value, + query_slice => ctx.query_slice, + query => ctx.query, + query_look_up => group.query + } ); + %] + [% IF ctx.is_staff %] + + 25 %] + tabname = "[% group.value.substr( 0, 22 ) %]..."; + [% ELSE %] + tabname = "[% group.value %]"; + [% END %] + onclick = "new_tab( this )";> + [% group.value %] + + [% END %] + [% IF !ctx.is_staff %] + + [% group.value %] + + [% END %] +
+
+
+
+
+

Items: [% group.count %]

+
+
+
+
+
+
+
+
+ + + +
+
+ [% ctx.results_count_header %] +
diff --git a/KCLS/openils/var/templates_kcls/opac/parts/searchbar.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/searchbar.tt2 new file mode 100644 index 0000000000..2faf28cb54 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/searchbar.tt2 @@ -0,0 +1,81 @@ +[% PROCESS "opac/parts/org_selector.tt2" %] + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/tips.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/tips.tt2 new file mode 100644 index 0000000000..f4e73ed08b --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/tips.tt2 @@ -0,0 +1,11 @@ + +
+
+
+ [% l("Click on a folder icon in the sidebar to access related quick searches") %] + [% l("If you don't find what you want try expanding your search using the range selector at the right of the search bar") %] +
+ [% l("Tip:") %] +
+
+ diff --git a/KCLS/openils/var/templates_kcls/opac/parts/topnav.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/topnav.tt2 new file mode 100644 index 0000000000..763c57f9ea --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/topnav.tt2 @@ -0,0 +1,107 @@ +[% INCLUDE "opac/parts/banner.tt2" %] +[% IF !ctx.is_staff %] + +[% END %] +[% INCLUDE "opac/parts/topnav_links.tt2" %] diff --git a/KCLS/openils/var/templates_kcls/opac/parts/topnav_links.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/topnav_links.tt2 new file mode 100644 index 0000000000..cff369302f --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/topnav_links.tt2 @@ -0,0 +1,13 @@ + diff --git a/KCLS/openils/var/templates_kcls/opac/parts/topnav_logo.tt2 b/KCLS/openils/var/templates_kcls/opac/parts/topnav_logo.tt2 new file mode 100644 index 0000000000..f9d4320790 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/parts/topnav_logo.tt2 @@ -0,0 +1,2 @@ + [% l('KCLS Logo') %] diff --git a/KCLS/openils/var/templates_kcls/opac/password_reset.tt2 b/KCLS/openils/var/templates_kcls/opac/password_reset.tt2 new file mode 100644 index 0000000000..beccb2abac --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/password_reset.tt2 @@ -0,0 +1,72 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l('Library system password reset request form'); +%] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+ +[% + uuid = ctx.page_args.0; + msg_map = { + SUCCESS => l('Password has been reset'), + NO_MATCH => l('Passwords did not match. Please try again'), + NOT_ACTIVE => l('This was not an active password reset request. Your password has not been reset.'), + NOT_STRONG => l('The password you chose was not considered complex enough to protect your account. Your password has not been reset.'), + TWO_PASSWORDS => l('Please enter and repeat your new password.'), + REQUEST_SUCCESS => l('Your user name or barcode has been submitted for a password reset. ' _ + 'If a matching account with an email address is found, you will soon receive an email at that address with further instructions for resetting your password.') + } +%] +
+
+
+

[% stat = ctx.pwreset.status; msg_map.$stat %]

+ [% IF uuid %] + [% IF stat == 'SUCCESS' %] +

[% l('Log in to My Account') %] + [% ELSE %] +

+ + + + + + + + + + + + + +
+ +
+
+ [% END %] + [% ELSIF !ctx.pwreset.status %] +

[% l('Please enter your user name or barcode to identify your library account and request a password reset') %]

+
+ + + + + + + + + +
+ [% IF ctx.get_org_setting(ctx.physical_loc || ctx.aou_tree.id, 'circ.password_reset_request_requires_matching_email') %] +
+ [% END %] + +
+ [% END %] +
+
+[% END %] + diff --git a/KCLS/openils/var/templates_kcls/opac/place_hold.tt2 b/KCLS/openils/var/templates_kcls/opac/place_hold.tt2 new file mode 100644 index 0000000000..bbe6951c33 --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/place_hold.tt2 @@ -0,0 +1,20 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l("Place Hold") %] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+
+
+
+ [% IF ctx.hold_attempt_made %] + [% INCLUDE "opac/parts/place_hold_result.tt2" %] + [% ELSE %] + [% INCLUDE "opac/parts/place_hold.tt2" %] + [% END %] +
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/record.tt2 b/KCLS/openils/var/templates_kcls/opac/record.tt2 new file mode 100644 index 0000000000..2507a4457d --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/record.tt2 @@ -0,0 +1,15 @@ +[% PROCESS "opac/parts/header.tt2"; + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + ctx.page_title = l("Record Detail") %] +
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" %] +
+
+
+ [% INCLUDE "opac/parts/record/body.tt2" %] +
+
+
+[% END %] diff --git a/KCLS/openils/var/templates_kcls/opac/results.tt2 b/KCLS/openils/var/templates_kcls/opac/results.tt2 new file mode 100644 index 0000000000..13a3746abb --- /dev/null +++ b/KCLS/openils/var/templates_kcls/opac/results.tt2 @@ -0,0 +1,95 @@ +[% PROCESS "opac/parts/header.tt2"; + + WRAPPER "opac/parts/base.tt2"; + INCLUDE "opac/parts/topnav.tt2"; + + IF is_advanced || is_special; + ctx.page_title = l("Search Results"); + ELSE; + ctx.page_title = l("Search Results: ") _ CGI.param('query') | html; + END; + + page = ctx.search_page; + page = page.match('^\d+$') ? page : 0; # verify page is a sane value + + page_count = ctx.page_size == 0 ? 1 : POSIX.ceil(ctx.hit_count / ctx.page_size); +%] +
+
+ [% INCLUDE "opac/parts/printnav.tt2" %] + [% INCLUDE "opac/parts/searchbar.tt2" took_care_of_form=1 %] +
+
+
+
+ +
+ [% l('Another Search') %] +
+
+ [% l('Advanced Search') %] +
+ + [% IF ctx.mylist.size %] +
+ [%- IF ctx.user; %] + [% l('View My List') %] + [%- ELSE %] + [% l('View My List') %] + [%- END %] +
+ [% END %] +
+ + + [% INCLUDE "opac/parts/filtersort.tt2" value=CGI.param('sort') submit_on_change=1 %] +
+ + +
+ + + + +
+
+
+
+
+
+
+
+
+ + [% IF ctx.display_groupings %] + [% path = "opac/parts/result/" _ + ( ctx.records.size ? "table_grouped.tt2" : "lowhits.tt2" ); + INCLUDE $path %] + [% ELSE %] + [% path = "opac/parts/result/" _ + ( ctx.records.size ? "table.tt2" : "lowhits.tt2" ); + INCLUDE $path %] + [% END %] +
+
+
+
+
+[% END %] diff --git a/Open-ILS/examples/fm_IDL.xml b/Open-ILS/examples/fm_IDL.xml index f8fc0eaad0..8e20c9eaa2 100644 --- a/Open-ILS/examples/fm_IDL.xml +++ b/Open-ILS/examples/fm_IDL.xml @@ -229,7 +229,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - + + + @@ -350,7 +352,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - + diff --git a/Open-ILS/web/css/skin/default/acq.css b/Open-ILS/web/css/skin/default/acq.css index 928bcb9b1a..d753fffb72 100644 --- a/Open-ILS/web/css/skin/default/acq.css +++ b/Open-ILS/web/css/skin/default/acq.css @@ -166,10 +166,6 @@ label[for="attr_search_type_scalar"] { vertical-align: top; } span[name="worksheet"] { padding: 0 6px; } #acq-lit-li-claim-dia-lid-list-init { margin-left: 8px; } -#acq-batch-update { padding: 20px 0; } -#acq-batch-update th { font-weight: bold; } -#acq-batch-update td { white-space: nowrap; padding-right: 0.5em; } - #acq-worksheet-contents thead th { font-weight: bold; background-color: #ccc; text-align: center; border-bottom: 1px #000 solid; border-right: 1px #000 solid; padding: 0 6px; } #acq-worksheet-contents tbody td { text-align: left; vertical-align: top; border: 1px #999 inset; padding: 0 2px; } @@ -215,13 +211,11 @@ span[name="notes_alert_flag"] {color: #c00;font-weight: bold;font-size: 110%;mar .acq-inoice-item-extra-info { padding-left: 10px; } .acq-inoice-item-info { font-weight: bold; } .acq-invoice-row td { border-bottom: 1px solid #e0e0e0; } -.acq-invoice-invalid-amount { color: red; font-weight: bold; } +.acq-invoice-invalid-amount input { color: red; font-weight: bold; } .acq-link-invoice-dialog td,.acq-link-invoice-dialog th {padding-top: 10px;} .acq-invoice-paid-col {background : #E0E0E0; text-align: center;} .acq-invoice-center-col { text-align: center; } .acq-invoice-money { width: 7em; } -#acq-invoice-entry-thead th { white-space: nowrap; } -#acq-invoice-item-thead th { white-space: nowrap; } .acq-lineitem-summary { font-weight: bold; } .acq-lineitem-summary-extra { padding-left: 10px; } diff --git a/Open-ILS/web/css/skin/default/opac/contentslider.css b/Open-ILS/web/css/skin/default/opac/contentslider.css new file mode 100644 index 0000000000..64a6d25457 --- /dev/null +++ b/Open-ILS/web/css/skin/default/opac/contentslider.css @@ -0,0 +1,39 @@ +.sliderwrapper{ +position: relative; /*leave as is*/ +overflow: hidden; /*leave as is*/ +width: 675px; /*width of featured content slider*/ +height: 213px; +} + + + +.sliderwrapper .contentdiv{ +visibility: hidden; /*leave as is*/ +position: absolute; /*leave as is*/ +left: 0; /*leave as is*/ +top: 0; /*leave as is*/ +width: 675px; /*width of content DIVs within slider. Total width should equal slider's inner width (390+5+5=400) */ +height: 100%; +filter:progid:DXImageTransform.Microsoft.alpha(opacity=100); +-moz-opacity: 1; +opacity: 1; +} + +.pagination{ +width: 400px; /*Width of pagination DIV. Total width should equal slider's outer width (400+10+10=420)*/ +text-align: right; +background-color: navy; +padding: 5px 10px; +} + +.pagination a{ +padding: 0 5px; +text-decoration: none; +color: #00007D; +background: white; +} + +.pagination a:hover, .pagination a.selected{ +color: #000; +background-color: #FEE496; +} \ No newline at end of file diff --git a/Open-ILS/web/css/skin/default/opac/semiauto.css b/Open-ILS/web/css/skin/default/opac/semiauto.css index 5ce8dade3b..96729ebdb0 100644 --- a/Open-ILS/web/css/skin/default/opac/semiauto.css +++ b/Open-ILS/web/css/skin/default/opac/semiauto.css @@ -1,35 +1,186 @@ /* once done renaming and everything, combine with style.css */ + +/* Verfied in-use classes --------------------------- */ +.opac-auto-004 { background: #E0F0E0; } +.opac-auto-009 { border: 3px solid #E0E0E0; } +.opac-auto-010 { border-bottom: 1px dotted #ccc; padding-top: 10px; } +.opac-auto-011 { border-bottom: 1px dotted #ccc; padding-top: 6px; } +.opac-auto-012 { border-bottom: none; } +.opac-auto-013 { border-bottom: none; *height: 0px; } +.opac-auto-015 { border-left: 1px solid #e9ebf3; padding-right: 27px; } +.opac-auto-017 { border: none; width: 100%; } +.opac-auto-018 { border-top: 1px dotted #ccc; padding-top: 17px; } +.clear-both { clear: both; } +.common-no-pad { clear: both; height: 0px; margin: 0px; padding: 0px; } +.common-full-pad { clear: both; height: 15px; } +.opac-auto-029 { color: #333; font-weight: bold; font-size: 13px; } +.opac-auto-030 { color: #545454; } +.opac-auto-031 { color: #9999FF; padding-left: 10px; font-size: 7pt; font-weight: 300; } +.red { color: red; } +.bold-red { color: red; font-weight: bold } +.pointer { cursor: pointer; } +/* ------------------------------------------- */ + + +#lib_selector_span { display: none } +.float-left { float: left; } +.bookbag-share { float: left; padding: 5px 0; } +.bookbag-controls { float: left; padding: 5px 0px 0px 10px; } +.left-corner { float: left; width: 163px; height: 30px; background: url('/images/utils-corner-mid.png') repeat-x top; } +.float-right { float: right; } +.opac-auto-045 { float: right; margin-right: 17px; } +.opac-auto-046 { float: right; width: 214px; } +.opac-auto-047 { float: right; width: 353px; background: #ccc; padding: 10px; margin-top: 7px; } +.opac-auto-048 { float: right; width: 65px; } +#they_said_dont_touch { float: right; width: 675px; height: 213px; color: green; overflow: hidden; } +.opac-auto-050 { float: right; width: 85px; } +.ten-px { font-size: 10px; } +.eleven-px { font-size: 11px; } +.eight-pt { font-size: 8pt; } +.opac-auto-054 { font-size: 8pt; padding-left: 20px; } .bold { font-weight: bold; } +.opac-auto-057 { font-weight: bold; padding: 5px; margin: 5px; width: 100%; } +.opac-auto-058 { font-weight: bold; padding-left: 10px; } +#anon_list_name { font-weight: bold; padding-right: 10px; } +.opac-auto-060 { font-weight: normal; } +.opac-auto-061 { height: 0px; border-top: 1px solid #b7b7b7; border-bottom: 1px solid #d4d4d4; margin: 15px 0px; } +.small-height { height: 10px; } .normal-height { height: 15px; } .big-height { height: 20px; } .very-big-height { height: 30px; } +#gold-links-holder { height: 24px; background: #252525; } +.opac-auto-067 { margin: 3px; width: 100%; } .big-block { margin: auto; width: 974px; height: 0px; } -.qtype_selector_margin { margin-right: 7px; } -.warning_box { - margin-top: 10px; - font-weight: bold; - font-size: larger; -} +.opac-auto-069 { margin-bottom: 10px; } +.opac-auto-070 { margin-bottom: 20px; } +.opac-auto-071 { margin-bottom: 5px; } +.opac-auto-072 { margin-left: 20px; } +.bookbag-list { margin-left: 5px; margin-top: 5px; width: 91%; border: 0;} +#cn_browse_where { margin-left: 6px; } +.opac-auto-075 { margin-right: 20px; } +.opac-auto-076 { margin-right: 3px; } +.opac-auto-077 { margin-right: 4px; position: relative; top: -10px; } +.opac-auto-078 { margin-right: 7px; } +.opac-auto-079 { margin-top: 10px; } +.opac-auto-080 { margin-top: 10px; margin-bottom: 10px; } +.opac-auto-081 { margin-top: 13px; } +.opac-auto-082 { margin-top: 29px; } +.opac-auto-083 { margin-top: 2px; } +.opac-auto-084 { margin-top: 5px; } +.opac-auto-085 { margin-top: 6px; margin-left: 20px; width: 250px; padding: 5px; } +.opac-auto-086 { margin-top: 8px; } +.opac-auto-087 { max-width: 11em; } +.opac-auto-088 { padding: 0px; } +.opac-auto-089 { padding: 0px 10px; } +.opac-auto-090 { padding: 10px; } +.opac-auto-091 { padding: 10px 0px; } +.opac-auto-092 { padding: 4px; text-align: center; } .pad-bottom-five { padding: 5px; } .item_list_padding { padding: 8px 0px 6px 0px; border: 0; } +.opac-auto-094 { padding: 5px 7px 0px 0px; } +.opac-auto-095 { padding: 5px 7px 0px 0px; white-space: nowrap; } +.opac-auto-096 { padding: 6px } +.opac-auto-097 { padding: 8px 0px 6px 0px; width: 100%; border: 0; } +.opac-auto-097b { padding: 8px 0px 6px 0px; border: 0; } +.opac-auto-098 { padding-bottom: 10px; } +.opac-auto-099 { padding-bottom: 12px; color: #666; } +.opac-auto-100 { padding-bottom: 16px; } +.opac-auto-101 { padding-bottom: 1px; } +.opac-auto-102 { padding-bottom: 7px; } +.opac-auto-103 { padding-left: 10px; } +.opac-auto-104 { padding-left: 11px; padding-right: 11px; } +.opac-auto-105 { padding-left: 11px; padding-right: 13px; } +.opac-auto-106 { padding-left: 15px; } +.opac-auto-107 { padding-left: 15px; padding-bottom: 10px; } .opac-auto-108 { padding-left: 5px; } +.opac-auto-109 { padding-left: 5px; padding-bottom: 10px; } +.opac-auto-110 { padding-left: 6px; } +.opac-auto-111 { padding-left: 8px; } +.opac-auto-112 { padding-left: 9px; } +.opac-auto-113 { padding-right: 10px; } +.opac-auto-114 { padding-right: 15px; padding-left: 15px; } +.opac-auto-115 { padding-right: 20px; } +.opac-auto-116 { padding-right: 5px; } +.opac-auto-117 { padding-right: 7px; } .pad-top-ten { padding-top: 10px; } +.opac-auto-119 { padding-top: 14px; } +.opac-auto-120 { padding-top: 5px; } .opac-auto-121 { padding-top: 6px; } +.opac-auto-122 { padding-top: 7px; } +.opac-auto-123 { padding-top: 8px; } +.pos-abs { position: absolute; } +#new_cat_link_holder { position: absolute; z-index: 101; } #new_cat_link_holder a { display: block; width: 675px; height: 213px; } .pos-rel { position: relative; } #search-box table { position: relative; left: -10px; } +.opac-auto-129 { position: relative; left: -19px; } +.opac-auto-130 { position: relative; left: 80px; } +.opac-auto-131 { position: relative; top: 0px; left: 55px; } +.opac-auto-132 { position: relative; top: 13px; } +.opac-auto-133 { position: relative; top: -13px; left: 2px; font-size: 10px; } +.opac-auto-134 { position: relative; top: -15px; left: 172px; } +.opac-auto-135 { position: relative; top: -15px; left: -23px; } +.opac-auto-136 { position: relative; top: 161px; left: 172px; } +.opac-auto-137 { position: relative; top: 161px; left: -23px; } +#home_adv_search_link { position: relative; top: -1px; left: 10px; } #util_back_btn { position: relative; top: 1px; left: 10px; } +.opac-auto-140 { position: relative; top: -2px; } #util_help_btn { position: relative; top: 2px; left: 40px; } #util_forw_btn { position: relative; top: 2px; left: 50px; } +.opac-auto-143 { position: relative; top: -3px; } #util_home_btn { position: relative; top: 3px; left: 20px; } +.opac-auto-145 { position: relative; top: -3px; left: 3px; } +.opac-auto-146 { position: relative; top: -3px; left: -5px; } +.opac-auto-147 { position: relative; top: -5px; } .pos-rel-top-5 { position: relative; top: 5px; } +.opac-auto-149 { position: relative; top: 5px; left: 25px; } #util_print_btn { position: relative; top: 5px; left: 30px; } +.opac-auto-151 { position: relative; top: 75px; } +#adv_reset { position: relative; top: -9px; } +.opac-auto-153 { position: relative; z-index: 100; } +.text-center { text-align: center; } +.opac-auto-156 { text-align: center; font-weight: bold; } #adv_quick_search_sidebar { text-align: center; margin-top: 20px; width: 400px; } +.opac-auto-158 { text-align: center; margin-top: 6px; margin-bottom: 6px } +.opac-auto-159 { text-align: center; padding: 20px; width: 100% } +.opac-auto-160 { text-align: center; padding-bottom: 8px; } .opac-auto-161 { text-align: right; padding-right: 7px; width: 62px; } +.opac-auto-162 { vertical-align: top; } .nowrap { white-space: nowrap; } .opac-auto-164 { white-space: nowrap; padding-left: 5px; } .full-width { width: 100%; } .selector_actions_for_list { width: 175px; margin-right: 11px; } .selector_actions_for_list_inner_option { margin-left: 2em; } /* XXX ".opac-auto-179 optgroup option" doesn't work!? */ +.opac-auto-167 { width: 100%; border: 1px solid black; padding: 6px; margin-top: 5px; } +.opac-auto-168 { width: 100%; border: 2px solid #E0F0E0; margin-bottom: 20px; } +.opac-auto-169 { width: 100%; height: 100%; } +.opac-auto-170 { width: 100%; margin-top: 20px; border-top: 1px dotted #ccc; padding-top: 8px; } +.opac-auto-171 { font-size: 120%; text-align: center; font-style: italic; } +.opac-auto-172 { width: 100%; text-align: center; padding-bottom: 5px; } +.opac-auto-173 { width: 10px; } +.opac-auto-174 { width: 111px; height: 25px; } +.opac-auto-175 { width: 125px; height: 21px; } +.opac-auto-176 { width: 129px; } +#search_box { width: 162px; } +.opac-auto-178 { width: 174px; } +.opac-auto-179 { width: 175px; margin-right: 11px; } +.opac-auto-179 optgroup { margin-left: 1em; font-weight: normal; font-style: italic; } +.opac-auto-179-inner-option { margin-left: 2em; } /* XXX ".opac-auto-179 optgroup option" doesn't work!? */ +.opac-auto-180 { width: 182px; color: black; padding: 5px 25px; } +.opac-auto-181 { width: 195px; } +.opac-auto-182 { width: 230px; text-align: left; margin-top: 3px; } +.opac-auto-183 { width: 250px; text-align: left; } +.opac-auto-184 { width: 26px; height: 23px; margin-top: 6px; margin-bottom: 6px; } +.opac-auto-185 { width: 324px; } +.opac-auto-186 { width: 400px; margin-top: 20px; } +.opac-auto-187 { width: 662px; } +.opac-auto-188 { width: 700px; height: 30px; border: 1px solid red; } +.opac-auto-189 { width: 742px; float: left; } +.opac-auto-190 { width: 88px; } +.opac-auto-191 { width: 90px; } #cn_browse_div > div { width: 90%; text-align: center; margin: 10px; } +.opac-auto-193 { width: 91px; } #cn_browse { width: 95%; text-align: center; padding: 15px; } +.opac-auto-195 { width: 99%; text-align: center } +#homesearch_thing { width: 664px; height: 117px; background: #bda964; } +#mystery_thing { width: 664px; height: 35px; background: #ffffff; } diff --git a/Open-ILS/web/css/skin/default/opac/style.css b/Open-ILS/web/css/skin/default/opac/style.css new file mode 100644 index 0000000000..a8fee6de87 --- /dev/null +++ b/Open-ILS/web/css/skin/default/opac/style.css @@ -0,0 +1,1154 @@ +body { + margin:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + background:#333; +} + +img { + border: none; +} + +a { + color: #003399; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +#search-wrapper input[type=text] { + border:none; + margin:0; + padding:0; +} + +#search-wrapper select { + border:1px solid #e9ebf3; + margin:0; + padding:0; + width:168px; +} + +/* +#search-wrapper select { + border:0px solid black; + filter:alpha(opacity=0); + -moz-opacity:0; + -khtml-opacity:0; + opacity:0; + padding:0; + margin:0; + height:18px; + font-size: 12px; +} +*/ +h1 { + margin:0; + margin-bottom: 5px; + font-size: 20px; + font-weight:normal; +} + +h2 { + margin:0; + margin-bottom: 5px; + font-size: 14px; + font-weight:bold; +} + +.hide_me, .hidden { + display: none; + visibility: hidden; +} + +div.select-box-wrapper { + position:absolute; + padding-top:2px; + padding-left:3px; + overflow:hidden; + text-align:left; +} + +div.select-wrapper { + border:1px solid #4C8AB0; + display:inline-block; + position:relative; + z-index:2; + background:url('/images/dropdown.gif') no-repeat right center; +} + +div.select-wrapper:hover { + background:url('/images/dropdown-hover.gif') no-repeat right center; +} + +#dash_wrapper { + width:500px; + position:relative; + top:-26px; +} + +#dashboard { + clear:both; + float:right; + width:384px; +} + +#dashboard span { + font-weight:bold; + position:relative; + left:-1px; +} + +#dash_user { + font-weight: bold; + text-transform: capitalize; + position: relative; + top: 10px; +} + +#dash_corner_mid1a { + vertical-align: top; + background: url('/images/dash-corner-mid1.png') repeat-x; + padding-left: 8px; +} +#dash_corner_mid1b { + background: url('/images/dash-corner-mid1.png') repeat-x; + padding: 0px 8px 0px 10px; +} +#dash_corner_mid1b img { position: relative; top: -1px; } +#dash_corner_mid1c { + background: url('/images/dash-corner-mid1.png') repeat-x; + vertical-align: top; +} +#dash_corner_mid2a { + vertical-align: top; + width: 372px; + background: url('/images/dash-corner-mid2.png') repeat-x; +} +.dash-pos-out { position: relative; left: 3px; } +.dash-pos-holds { position: relative; left: 100px; } +.dash-align-out { text-align: right; width: 86px; } +.dash-align-holds { text-align: right; width: 62px; } +.dash-pos-pickup { position: relative; left: 170px; } +.dash-align-pickup { text-align: right; width: 111px; } +.dash-pos-fines { position: relative; left: 284px; } +.dash-align-fines { text-align: right; width: 76px; } +.pos-rel-top4 { position: relative; top: 4px; } +#dash_number_row { position: relative; top: 6px; } +#logout_link { left: 1px; } + +#dash_checked { color: #ffcc33; } +#dash_holds { color: #ffcc33; } +#dash_pickup { color: #1dd93c; } +#dash_fines { color: #f41d36; } +#header { + color: #fff; + padding: 26px 0px 26px 0px; + width: 974px; + margin: auto; + font-size:11px; +} + +#header a { + color: #fff; +} + +#header a:hover { + color: white; + text-decoration: none; +} + +#header-links { + color: #afafaf; + font-size: 11px; + font-weight: bold; + position: relative; + top:4px; + +} + +#header-links a { + color: #afafaf; + display: block; + float:left; + margin-right:22px; +} + +#header-links a:hover { + color: white; + text-decoration: none; +} + +#header #header-links2 { + position:relative; + top:-8px; + color: white; + padding-bottom: 15px; +} + +#header #header-links2 a { + color: white; +} + +#header #header-links2 a:hover { + text-decoration: underline; +} + +#header #your-acct-login { + padding-top:10px; +} + +#gold-links { + margin:auto; + width:974px; + padding-left:0px; +} + +#gold-links-home { + margin:auto; + width:694px; + padding-left:0px; +} + +#util-bar { + margin:auto; + width:974px; + padding-left:0px; + height:0px; +} + +#search-wrapper { + border-bottom: 1px solid #e9ebf3; + padding-bottom: 5px; + background: white; +} + +#search_box_wrapper { + border:1px solid #e9ebf3; + padding: 1px; + padding-left: 3px; +} + +#search-wrapper #breadcrumb { + margin-top:0px; + font-size: 10px; + float:left; +} + +#search-wrapper #search-within { + margin-top:10px; + float:right; + position:relative; + left:-173px; +} + +#search-wrapper #breadcrumb a { + color: black; +} + +#search-wrapper #search_frm label { + font-size: 10px; +} + +#search-wrapper #search-box { + width:974px; + margin:auto; + padding-left: 0px; +} + +#utils { + float:right; + z-index:1; + width:150px; + height:30px; + background:url('/images/utils-corner-left.png') no-repeat left top; + padding-left: 3px; + color: white; + position:relative; +} + +#utils a { + color: white; + font-size: 10px; +} +#adv_search_tabs { + height:33px; + width:974px; + margin:auto; +} + +#adv_search_tabs a { + float: left; + display: block; + height:33px; + margin-right:7px; +} + +#adv_search { + width:156px; + background:url('/images/adv_search_off.gif') no-repeat bottom; +} +#adv_search.on { + background: url('/images/adv_search_on.gif') no-repeat bottom !important; +} + +#num_search { + width:156px; + background:url('/images/num_search_off.gif') no-repeat bottom; +} +#num_search.on { + background: url('/images/num_search_on.gif') no-repeat bottom !important; +} + +#expert_search { + width:156px; + background:url('/images/expert_search_off.gif') no-repeat bottom; +} +#expert_search.on { + background: url('/images/expert_search_on.gif') no-repeat bottom !important; +} + +#acct_tabs, #acct_fines_tabs { + height:33px; + width:974px; + margin:auto; +} + +#acct_tabs a, #acct_fines_tabs a { + float: left; + display: block; + height:33px; + margin-right:7px; +} + +.acct-tab { + background-repeat: no-repeat; + background-position: bottom; + width:156px; +} + +.acct-main-off { + background-image:url('/images/acct_summary_off.gif'); +} +.acct-main-on { + background-image:url('/images/acct_summary_on.gif'); +} + +.acct-circs-off { + background-image:url('/images/acct_checked_out_off.gif'); +} +.acct-circs-on { + background-image:url('/images/acct_checked_out_on.gif'); +} + +.acct-holds-off { + background-image:url('/images/acct_holds_off.gif'); +} +.acct-holds-on { + background-image:url('/images/acct_holds_on.gif'); +} + +.acct-prefs-off { + background-image:url('/images/acct_prefs_off.gif'); +} +.acct-prefs-on { + background-image:url('/images/acct_prefs_on.gif'); +} + +.acct-lists-off { + background-image:url('/images/acct_lists_off.gif'); +} +.acct-lists-on { + background-image:url('/images/acct_lists_on.gif'); +} + +#rdetail_header { + font-size:14px; + font-weight:bold; + color:#074079; + padding: 5px 7px 6px 0px; + border-bottom: 1px dotted #ccc; +} + +#rdetail_result_count { + color: black; + font-size: 11px; + font-weight: normal; + padding-left: 10px; +} + +#rdetail_result_nav { + float:right; + font-size: 11px; + font-weight:normal; +} + +#rdetail_details_table { + margin-top: 15px; +} + +#rdetail_title { + font-size: 18px; +} + +#rdetail_image { border: none; } +#rdetail_image_cell { + padding-top: 3px; + padding-right: 10px; +} + +.rdetail_aux_utils { + border-left:1px dotted #ccc; + padding-left: 17px; + padding-bottom: 6px; + padding-right: 70px; +} + +.results_aux_utils { + border-left:1px dotted #ccc; + padding-left: 17px; + padding-bottom: 6px; + padding-right: 50px; +} + +#rdetails_status td, #rdetails_status2 td { + white-space:nowrap !important; + padding: 7px 0px 3px 13px; +} + +#rdetails_status thead td { + background-color: #d8d8d8; + padding: 13px 0px 13px 13px; + font-size: 10px; + text-transform: uppercase; + font-weight: bold; +} + +#rdetails_status tbody td { + padding-left: 13px;; +} + +.rdetail_extras { + height: 29px; + background: #9ad0f1; + padding-top:1px; + margin-bottom: 10px; + margin-top: 10px; + clear:both; +} + +.rdetail_extras_hr { + height: 1px; + background: #b7def5; + margin-left: 1px; + margin-right: 1px; +} + +.rdetail_extras_link { + padding-top: 4px; + padding-left: 12px; + font-size: 10px; + text-transform: uppercase; + font-weight: bold; +} + +.rdetail_extras_lbl { + position: relative; + top: -4px; + left: 7px; +} + +#paginate-homebanner a.toc { + display:block; + width:20px; + height:20px; + background:gray; + float:left; + margin-left:2px; + margin-right:2px; + margin-top:2px; +} + +#rdetail_extras_expand, #rdetail_extras_collapse, #rdetail_locs_collapse { + margin-left: 13px; +} + +#rdetail_locs_expand, #rdetail_locs_collapse { + padding-bottom:3px; + margin-top:15px; + margin-left:13px; +} + +#rdetail_anotes_div .biography { + margin:0; +} + +#paginate-homebanner a.selected { + border: 2px solid black; + margin-top:0px; + margin-left:0px; + margin-right:0px; +} + +#hp-buttons { + margin: auto; + margin-top: 6px; + /*width: 694px;*/ + width: 974px; +} + +#hp-welcome { + position:absolute; + width:295px; + height:192px; + background: url('/images/banner-bg.png') no-repeat; + color: #fff; + padding-left: 33px; + padding-top: 21px; + z-index:9999999999; +} + +#hp-welcome h1 { + font-size: 25px; + margin-bottom:15px; +} + +#hp-welcome a { + color: #fff; + text-decoration: underline; +} + +#hp-banner { + margin: auto; + /*width: 694px;*/ /* formerly 974px */ + width: 974px; + height: 213px; +} + +#hp-ql-table { + margin-left: 2px; + padding-top: 3px; +} + +#hp-ql-table a { + color: #333; + font-weight: bold; + font-size: 13px; + text-decoration: none; + display: block; + width: 200px; + height: 25px; + padding-top: 9px; + padding-left: 15px; + background: url('/images/button-bg.png') no-repeat; +} + +#hp-ql-bottom { + width: 640px; + height: 31px; + padding-left: 24px; + padding-top: 13px; + background: url('/images/hp-links-mid.jpg') repeat-x; +} + +#hp-ql-bottom a { + display: inline-block; + text-decoration: none; + color: white; + font-size: 15px; + font-weight: bold; +} + +#hp-ql-bottom img { + position:relative; + top:-1px; + left:2px; +} + +.almost-content-wrapper { + background: white; +} + +#content-wrapper { + background: white; + min-height: 260px; + border-bottom: 1px solid black; +} + +.content-wrapper-record-page { top: -15px; position: relative; } + +#main-content-home { width: 974px; margin: auto; padding-left: 0px; } +#main-content { width: 974px; margin:auto; padding-left: 0px; } + +#main-content .login_boxes { + border: 1px solid #dedede; + background:url('/images/login-bg.jpg') top repeat-x; + color: #333; +} + +#main-content .login_boxes h1 { + font-weight: normal; + font-size: 25px; + margin:0; +} + +#main-content .left_brain { + padding-left:28px; + padding-top:25px; +} + +#main-content .left_brain input[type=text], #main-content .left_brain input[type=password] { + width:167px; + height:18px; + margin:0; + padding:0; + border:none; + background: none; + font-size: 15px; + color: #666; +} + +#main-content .left_brain .input_bg { + padding:10px 10px 0px 13px; + background: url('/images/login-box-bg.jpg') no-repeat; + width:167px; + height:29px; +} + +#home-buttons-inner { + width:664px; + height:117px; + background:#bda964; +} + +#holds_temp_parent td { + border-bottom:1px solid #dcdbdb; +} + +#holds_temp_parent input, #holds_temp_parent select { + margin:0; +} + + + + +#results_header_bar { + background: #929292; + border-top:1px solid #8b8b8b; +} + +#results_header_inner { + height:32px; + width:974px; + margin:auto; + padding-top:6px; +} + +.results_header_btns { + float:left; + margin-right: 6px; +} + +.cached_list_div { width: 111px; height: 25px; } + +.results_header_div { + float: left; + width: 0px; + height: 25px; + border-left: 1px solid #7c7c7c; + border-right: 1px solid #9c9c9c; + margin: 0px 13px; +} + +.results_header_lbl { + font-weight: bold; + float: left; + font-size: 11px; + color: #191919; + position: relative; + top: 5px; + margin-right: 6px; +} + +.results_header_sel { + /* width: 88px; */ + float:left; + position: relative; + top: 2px; + margin:0; +} + +.results_header_nav1 { + padding: 5px 7px 6px 0px; + border-bottom: 1px dotted #ccc; +} + +.results_header_nav1 .h1 { + font-size:14px; + font-weight:bold; + color:#074079; +} + +.start_end_links_span { + font-size: 11px; +} + +.nav_arrow_fix { + font-size:8px; + position:relative; + top:-1px; +} + +#result_table_div { + margin-top: 20px; +} + +.result_numbers { + font-size: 11px; padding-left:15px; white-space: nowrap; width: 320px; +} + +.result_table_subtable { width: 100%; border-collapse: collapse; border: 0; } + + + + +.icon_text { + text-transform:capitalize; +} + +.result_table_title_cell { + padding-left: 7px; +} + +#myopac_summary_div p { + margin:0; + margin-bottom: 10px; +} + +#acct_sum_checked_table td { + padding-bottom:5px; +} + +#zero_search_hits div { float:left;width:300px;margin-top:20px; } + +#zero_search_hits p { + margin-top:0; +} + +#zero_hits_term { + text-transform: uppercase; + font-weight: bold; +} + +#zero_search_hits #spell_check_link { + text-transform: uppercase; +} + +#zero_search_hits #zero_hits_suggestions { + text-transform: uppercase; +} + +.results_info_table td { + padding-right: 10px; +} + +#myopac_holds_main_table { + border-collapse: collapse; +} + +#myopac_holds_main_table td { + border: 1px solid black; + +} + +#myopac_prefs_div .data_grid { + border-collapse:collapse; +} + +#myopac_prefs_div .data_grid td { + background:#f0f0f0; + border-bottom:3px solid white; + padding:6px 0px 7px 17px; +} + +.header_middle { + height:22px; + font-size:14px; + font-weight:bold; + color:#074079; + padding: 0px 7px 0px 0px; + border-bottom: 1px dotted #ccc; +} + +.header_middle a { + font-size: 12px; + font-weight: normal; +} + +.acct_sum_row { + padding: 7px 15px; + width: 712px; + background: #f0f0f0; + margin-bottom: 2px; + font-size: 10px; + font-weight: bold; + text-transform: uppercase; +} + +.acct_sum_row a { + text-transform: none; + font-size: 12px; + position:relative; + top:-1px; +} + +.acct_sum_row .view_link { + font-weight: normal; + font-size:12px; +} + +#myopac_sum_fines { + float:right; + padding: 15px 0px 0px 23px; + background: #f0f0f0; + width: 177px; + height: 166px; +} + +#myopac_sum_fines_placehold { float: right; width: 177px; height: 166px; } + +.acct_holds_temp td { + text-align: left; +} + +#acct_checked_tabs .align, #acct_holds_tabs .align, #acct_prefs_tabs .align { + float:left; + /*padding-left:10px;*/ +} + +#acct_checked_tabs .selected, #acct_holds_tabs .selected, #acct_prefs_tabs .selected { + /*background:url('/images/gray-arrow.png') left 3px no-repeat;*/ +} + +#acct_checked_main_header, #acct_holds_main_header, #acct_checked_hist_header, #acct_list_header, #acct_list_header_anon, #temp_list_holds { + font-weight:bold; + text-transform:uppercase; + font-size: 10px; +} + +#acct_checked_main_header td, #acct_holds_main_header td, #acct_checked_hist_header td, #acct_list_header td, #acct_list_header_anon td, #temp_list_holds td { + background: #d8d8d8; + padding: 8px 0px 7px 0px; +} + +#acct_list_header select, #acct_list_header_anon select { + font-weight:normal; + text-transform:none; +} + +#acct_holds_activates_table label { + font-weight: bold; + font-size: 11px; + text-transform:uppercase; + padding-right: 5px; +} + +.adv_search_font { + font-size: 10px; +} + +.search_catalog_lbl { + font-size: 14px; +} + +.lbl1 { + font-size:14px; + font-weight:bold; +} + +.lbl2 { + font-size:10px; + font-weight:normal; + position:relative; + top:3px; +} + +#myopac_tabs, #adv_search_parent, #fines_payments_wrapper { + background: #929292; + border-top:1px solid #8b8b8b; + padding-top:5px; + margin-bottom:20px; +} + +#fines_payments_wrapper { + padding-left: 5px; + padding-right: 5px; +} + +.myopac_payments_table th { text-align: left; } +.myopac_payments_table thead th { border-bottom: 1px dashed #333; } +.myopac_payments_table thead th:first-child { width: 8em; } +.myopac_payments_table tbody tr:nth-child(odd) { background-color: #ddd; } +.myopac_payments_table form { display: inline; } +.myopac_payments_table input[type="submit"] { padding: 1px; } + +.payment-error { + font-weight: bold; color: red; + padding: 10px; border: 1px solid #888; +} + +.payment-processing { + font-weight: bold; color: green; + font-size: 120%; + padding: 10px; border: 1px solid #888; + text-align: center; +} + +#adv_search_parent { + margin-bottom:0px; +} + +#myopac_loading { + width:100%; + text-align:center; + padding-top:20px; + font-size:16px; + font-weight:bold; +} + +.chili_link { + width:100px !important; + text-align: center !important; +} + +.chili_review div.chili_link div { + margin: auto; +} + +/* some facet styling */ +/* +.facetClassContainer { margin: 2px; border: 1px solid #CCC; } +.facetClassLabelContainer { border: 1px solid #CCC; } +.facetClassLabel { font-weight: bold; text-align: center; } +.facetFieldContainer { } +.facetFieldLabel { padding-left: 2px; margin-top: 5px; margin-bottom: 5px; font-weight: bold; text-align: left; } +.extraFacetFieldsWrapper { } +.toggleExtraFacetFieldsButton { float: right; margin: 0px; padding: 0px; } +.facetFieldLineCount { display: inline-block; border-right: 1px solid #CCC; color: gray; width: 3em; margin-right: 3px } +.facetField { border-top: 1px solid #CCC; } +.facetFields { padding-left: 5px; } +.facetFieldLineValue { overflow: hidden; text-overflow: ellipsis; } +*/ + +.facet_box_temp { + padding-bottom:3px; + width:180px; + overflow:hidden; +} + +.facet_box_temp .header { + width:180px; + height:31px; + overflow:hidden; + background:url('/images/facet_box_bg.png') no-repeat; + font-weight:bold; + color:#074079; + padding-top:4px; +} + +.facet_box_temp .header .title { + float:left; + padding-top:6px; + padding-left:12px; + width:134px; + overflow:hidden; +} + +.facet_box_temp .header .button { + float:right; + padding-right:6px; +} + +.facet_box_wrapper .box_wrapper { + position:relative; + top:-4px; + margin-bottom:-5px; + *margin-bottom:-6px; +} + +.facet_box_wrapper .box_wrapper .box { + width:166px; + border-top:1px solid #7ebee5; + border-left:1px solid #f3f3f3; + border-right:1px solid #f3f3f3; + background:white; + padding-left:12px; + padding-top:6px; +} + +.facet_box_wrapper .box_wrapper .bottom { + background:url('/images/facet_box_bg_bottom.png') no-repeat; +} + +.facet_template { + padding-bottom:5px; +} + +.facet_template .facet { + float:left; + width:124px; +} + +.facet_template .count { + float:right; + color:#818080; + padding-right:11px; +} + +.facet_template_selected { + background-color: #d7d7d7; +} + +#footer-wrap { + background: linear-gradient(lightGreen, #252525); + background: -moz-linear-gradient(lightGreen, #252525); + background: -o-linear-gradient(lightGreen, #252525); + background: -webkit-linear-gradient(lightGreen, #252525); + background-color: lightGreen; +} + +#footer { + padding-top:5px; + padding-bottom: 10px; + color: white; + margin: auto; + width: 974px; + color: #afafaf; + font-size: 11px; +} + +#footer a { + color: white; + color: #afafaf; +} + +.color_4 { + text-transform: uppercase; + font-weight: bold; + font-size: 10px; +} + +.advanced_div { padding-top: 15px; } +#adv_global_search select { width: 13em; } +#adv_global_input_table select { width: 7em; } +.adv_adv_link { font-size: 8pt; color: red; } +#acct_prefs_header { float: left; } +#limit_to_available { + float: left; position: relative; top: 2px; + left: -2px; margin-right: 4px; +} +#rdetail_copy_info_table { font-size: 8pt; } +#rdetail_copy_info_table td { padding: 3px; } +.search_page_nav_link { cursor: pointer; } +#opac.result.sort { width: 160px; } +.renew-summary { font-size: 125%; font-style: italic; margin: 0.5ex 0; } +.failure-text { margin-left: 4em; font-style: italic; color: #ff0000; } +.refine-controls { font-size: 125%; padding: 0.5ex 0; } +#adv_search_refine input[type=text] { border: 1px inset #ccc !important; } +#adv_search_refine select { border: 1px inset #ccc !important; } +#adv_search_refine { + padding-left: 5em; background-color: #d7d7d7; margin: 2ex 0; +} +.row-remover { position: relative; top: 1px; vertical-align: middle; } +.subtle-button { + background-color: #ffffff; + color: #003399; text-decoration: none; + font-size: 12px; + padding: 0; border: 0; margin: 0; + vertical-align: middle; +} +.subtle-button:hover { text-decoration: underline; cursor: pointer; } +.no-dec:hover { text-decoration: none; } +.pending-addr td { background-color: #ffcccc !important; border: 0 !important; } + +#account-update-email table { text-align: center; padding: 20px; margin-top: 30px; border-collapse: collapse; } +#account-update-email table td { padding: 5px 15px 5px 15px; border-bottom: 1px solid #ddd; text-align: left;} +#account-update-email-error { font-size: 1.5em; padding: 10px; border:1px solid #e9ebf3;} +a.dash-link:hover { text-decoration: underline !important; } +#list_create_table td { vertical-align: middle; padding: 0 8px; } +#list_create_table { + background-color: #ccc; + padding-bottom: 4px; + margin-bottom: 10px; + border-bottom: 1px dotted #666; +} +.list-create-table-buttons input[type=image] { margin-top: 2px; } +.result_table_format_cell { padding: 0px 10px; text-align: center; } +#hold_editor h1 { font-size: 120%; font-weight: bold; } +#hold_editor h2 { font-size: 111%; font-weight: normal; text-indent: 2em; font-style: italic; } +#hold_editor h1, #hold_editor h2 { margin: 2px 0; } +#hold_editor_table { background-color: #ddd; padding: 0.5em; } +#hold_editor_table th { text-align: right; padding-right: 1em; } +#hold_editor_table td { padding: 0.25em 0; } +.fmt-note { vertical-align: middle; padding-left: 1em !important; } +.hold-editor-controls { text-align: center; padding-top: 1em !important; } +.hold-editor-controls a { padding-left: 2em; } + +.text-right { text-align: right; } +.rdetail-author-div { padding-bottom: 10px; } + +.invisible { visibility: hidden; } +.rdetail-extras-summary { margin: 10px; } +.staff-hold { background-color: #eee; } +.expert-search tbody tr th { text-align: right; padding-left: 2em; } +.bookshelf thead tr td { + border-bottom: 1px dashed #999; + padding-bottom: 1ex; +} +.cn_browse_item { padding: 2ex; } + +.results-paginator-selected { color: red; } +.inactive-hold { background: #e5e5e5; } + +#hold-items-list td { padding: 5px; margin-bottom: 20px; } +.hold-items-list-title { font-size: 120%; } +.hold-items-list-problem { color: red; } + +.big-strong {font-weight: bold; font-size: 120%; } + +.rdetail-mfhd-head { + margin-top: 5px; + padding-top: 5px; + background-color: #D8D8D8; +} + +.rdetail-mfhd-type { + padding-left: 1em; +} + +.rdetail-mfhd-bottom { + border-bottom: thin solid black; + width: 100%; +} + +#myopac_checked_div { + padding: 0px; +} + + +.bookbag-item-row td { vertical-align: top; } + +.error { color: red; font-weight: bold; } +.success { color: green; font-weight: bold; } + +#login-failed-message { + color: red; + font-weight: bold; + font-size: 120%; + padding-top: 15px; +} +.result_item_circulated { + padding-top: 4px; +} diff --git a/Open-ILS/web/css/skin/default/register_custom.css b/Open-ILS/web/css/skin/default/register_custom.css new file mode 100644 index 0000000000..3e76a62e09 --- /dev/null +++ b/Open-ILS/web/css/skin/default/register_custom.css @@ -0,0 +1,21 @@ +tr[fmfield=email] .dijitTextBox { width:24em; } +tr[fmfield=ident_value2] .dijitTextBox { width:24em; } +tr[fmfield=street1] .dijitTextBox { width:24em; } +/* Make the FIelds Bigger */ +tr[id^=stat-cat-row] td { } + +/* + Set All Three to the Width you Want +*/ +tr[id^=stat-cat-row] td[name=widget] { + width:400px; +} +tr[id^=stat-cat-row] td[name=widget] .dijitComboBox, +tr[id^=stat-cat-row] td[name=widget] .dijitSpinner, +tr[id^=stat-cat-row] td[name=widget] .dijitTextBox { + width:400px; +} + +tr[id^=stat-cat-row] td[name=widget] input { + width:400px; +} \ No newline at end of file diff --git a/Open-ILS/web/css/skin/default/vandelay.css b/Open-ILS/web/css/skin/default/vandelay.css index 7f70d35605..b1987f8e37 100644 --- a/Open-ILS/web/css/skin/default/vandelay.css +++ b/Open-ILS/web/css/skin/default/vandelay.css @@ -48,5 +48,3 @@ table.dijitTooltipTable { border-collapse: separate; } .queue-pager-span { padding-right: 5px; margin-right: 5px; border-right: 2px solid #e8e1cf; } #vl-queue-paging-table td { padding-bottom: 0px; } #vl-file-label { margin-right: 10px; } - -#vlQueueSelectList td { padding-top: 5px; padding-bottom: 5px; } diff --git a/Open-ILS/web/css/skin/kcls/selfcheck.css b/Open-ILS/web/css/skin/kcls/selfcheck.css new file mode 100644 index 0000000000..a12f2748c8 --- /dev/null +++ b/Open-ILS/web/css/skin/kcls/selfcheck.css @@ -0,0 +1,213 @@ +@charset "utf-8"; +/* CSS Document */ + +html, body { + margin:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 18px; + background:#fff; + width:100%; +} + +img { + border: none; +} + +a { + color: #003399; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +h1 { + margin:0; + margin-bottom: 5px; + font-size: 22px; + font-weight:normal; +} + +h2 { + margin:0; + margin-bottom: 5px; + font-size: 20px; + font-weight:bold; +} + +#header { + color: #bda964; + font-weight:bold; + padding: 12px 0px 9px 17px; + width: 694px; + margin: auto; +} + +#content-wrapper { + background: white; +} + +#main-content { + width: 694px; + margin:auto; + padding-left:17px; +} + +.checkout { + font-size:18px; +} + +.checkout h1 { + font-size:36px; +} + +.checkout h2 { + font-size:24px; +} + +.checkout .sidebar h3 { + font-size: 19px; + margin:0; + padding-left:3px; +} + +.checkout .sidebar a { + font-size:18px; +} + +.checkout .sidebar a span { + font-weight:bold; +} + +.checkout .sidebar p { + margin:4px 0px; + padding:3px; +} + +.checkout .sidebar div, .checkout .sidebar p { + font-size: 18px; + line-height: 1em; +} + +.checkout input[type=text], .checkout input[type=password] { + border: 2px solid black; + width:300px; + height:22px; + padding:2px; + padding-top:1px; + margin:0px; + font-size:18px; +} + +.checkout .sidebar { + background: #b0b0b0; + border-left:2px ridge #eee; + border-right:2px ridge #eee; + border-bottom:2px ridge #eee; + padding:10px 7px; +} + +.checkout .sidebar .top { + float:right; + padding-right:5px; +} + +.checkout .sidebar .greet { + clear:both; + padding:15px 3px; +} + +.checkout .sidebar .selected { + background:#999 +} + +.checkout .header1 { + height:108px; + border-bottom:1px solid #a83135; + padding-top:20px; +} + +.checkout .userid { + width:200px !important; + font-size:18px; + font-weight:bold; + padding:5px 6px 6px 6px !important; + border:2px solid black !important; + background: none !important; + margin:0 !important; +} + +.checkout .item_table { + border-collapse: collapse; +} + +.checkout .item_table td { + font-size:18px; + border:2px solid black; + text-align: left; +} + +.checkout .item_table table td.label { + font-weight:bold; + text-transform: uppercase; + text-align: right; + white-space:nowrap; + padding-right:5px; + width:1px; +} + +.checkout .item_table table td { + border:none; +} + +.checkout #back_button:hover { + text-decoration: none; +} + +.checkout .status_box { + color:red; + font-weight:bold; + height:20px; +} + +.checkout .oils-selfck-status-div { + height:inherit !important; + vertical-align:inherit !important; + font-size: 18px; + font-weight: bold; + color: blue; +} + +.checkout_failure { + color: red !important; +} + +#oils-base-body-block { + height: auto; +} + +body .dijitAlignClient { + position:inherit; +} + +.dijitLayoutContainer { + position: inherit; +} + +#oils-base-content-block { + height: auto !important; + width: auto !important; + padding:0; +} + +#oils-base-main-block { + height: auto !important; + width: auto !important; +} + +#oils-base-header-block { + width:0px !important; +} + + diff --git a/Open-ILS/web/css/skin/kcls/style.css b/Open-ILS/web/css/skin/kcls/style.css new file mode 100644 index 0000000000..a12f77d7de --- /dev/null +++ b/Open-ILS/web/css/skin/kcls/style.css @@ -0,0 +1,179 @@ +@charset "utf-8"; +/* CSS Document */ + +html, body { + margin:0; + font-family: Arial, Helvetica, sans-serif; + font-size: 12px; + background:#333; + width:100%; +} + +img { + border: none; +} + +a { + color: #003399; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +h1 { + margin:0; + margin-bottom: 5px; + font-size: 20px; + font-weight:normal; +} + +h2 { + margin:0; + margin-bottom: 5px; + font-size: 14px; + font-weight:bold; +} + +#header { + color: #bda964; + font-weight:bold; + padding: 12px 0px 9px 17px; + width: 694px; + margin: auto; +} + +#content-wrapper { + background: white; + min-height: 260px; + border-bottom: 1px solid black; +} + +#main-content { + width: 694px; + margin:auto; + padding-left:17px; +} + +.checkout { + font-size:16px; +} + +.checkout h1 { + font-size:36px; +} + +.checkout h2 { + font-size:24px; +} + +.checkout .sidebar h3 { + font-size: 16px; + margin:0; + padding-left:3px; +} + +.checkout .sidebar a { + font-size:12px; +} + +.checkout .sidebar a span { + font-weight:bold; +} + +.checkout .sidebar p { + margin:4px 0px; + padding:3px; +} + +.checkout .sidebar div, .checkout .sidebar p { + font-size: 16px; + line-height: 1em; +} + +.checkout input[type=text], .checkout input[type=password] { + border: 1px solid black; + width:300px; + height:20px; + padding:2px; + padding-top:1px; + margin:0px; + font-size:16px; +} + +.checkout .sidebar { + background: #b0b0b0; + border-left:2px ridge #eee; + border-right:2px ridge #eee; + padding:10px 7px; +} + +.checkout .sidebar .top { + float:right; + padding-right:5px; +} + +.checkout .sidebar .greet { + clear:both; + padding:15px 3px; +} + +.checkout .sidebar .selected { + background:#999 +} + +.checkout .header1 { + height:108px; + border-bottom:1px solid #a83135; + padding-top:20px; +} + +.checkout .userid { + width:200px; + font-size:16px; + font-weight:bold; + padding:5px 6px 6px 6px !important; + border:2px solid black !important; + background: none !important; + margin:0 !important; +} + +.checkout .item_table { + border-collapse: collapse; +} + +.checkout .item_table td { + font-size:16px; + border:2px solid black; + text-align: left; +} + +.checkout .item_table table td.label { + font-weight:bold; + text-transform: uppercase; + text-align: right; + white-space:nowrap; + padding-right:5px; + width:1px; +} + +.checkout .item_table table td { + border:none; +} + +.checkout #back_button:hover { + text-decoration: none; +} + +.checkout .status_box { + color:red; + font-weight:bold; + height:20px; +} + +.checkout .oils-selfck-status-div { + height:inherit !important; + vertical-align:inherit !important; +} + diff --git a/Open-ILS/web/images/2012fiestas.jpg b/Open-ILS/web/images/2012fiestas.jpg new file mode 100644 index 0000000000..71e8372062 Binary files /dev/null and b/Open-ILS/web/images/2012fiestas.jpg differ diff --git a/Open-ILS/web/images/2013LLG.jpg b/Open-ILS/web/images/2013LLG.jpg new file mode 100644 index 0000000000..45a6a05cdb Binary files /dev/null and b/Open-ILS/web/images/2013LLG.jpg differ diff --git a/Open-ILS/web/images/GOBACK.png b/Open-ILS/web/images/GOBACK.png new file mode 100644 index 0000000000..97a383157f Binary files /dev/null and b/Open-ILS/web/images/GOBACK.png differ diff --git a/Open-ILS/web/images/KCLS_logo_horiz.gif b/Open-ILS/web/images/KCLS_logo_horiz.gif new file mode 100644 index 0000000000..8e1d56ed5f Binary files /dev/null and b/Open-ILS/web/images/KCLS_logo_horiz.gif differ diff --git a/Open-ILS/web/images/READometer.jpg b/Open-ILS/web/images/READometer.jpg new file mode 100644 index 0000000000..008c43d466 Binary files /dev/null and b/Open-ILS/web/images/READometer.jpg differ diff --git a/Open-ILS/web/images/TTTRgiveaway.jpg b/Open-ILS/web/images/TTTRgiveaway.jpg new file mode 100644 index 0000000000..4becfc57dd Binary files /dev/null and b/Open-ILS/web/images/TTTRgiveaway.jpg differ diff --git a/Open-ILS/web/images/access_video.jpg b/Open-ILS/web/images/access_video.jpg new file mode 100644 index 0000000000..ba3a193f81 Binary files /dev/null and b/Open-ILS/web/images/access_video.jpg differ diff --git a/Open-ILS/web/images/acct-btn-hover.png b/Open-ILS/web/images/acct-btn-hover.png new file mode 100644 index 0000000000..1e6e20a292 Binary files /dev/null and b/Open-ILS/web/images/acct-btn-hover.png differ diff --git a/Open-ILS/web/images/acct-btn.png b/Open-ILS/web/images/acct-btn.png new file mode 100644 index 0000000000..c9b92cd204 Binary files /dev/null and b/Open-ILS/web/images/acct-btn.png differ diff --git a/Open-ILS/web/images/acct_checked_out_off.gif b/Open-ILS/web/images/acct_checked_out_off.gif new file mode 100644 index 0000000000..dcfcfcb93b Binary files /dev/null and b/Open-ILS/web/images/acct_checked_out_off.gif differ diff --git a/Open-ILS/web/images/acct_checked_out_on.gif b/Open-ILS/web/images/acct_checked_out_on.gif new file mode 100644 index 0000000000..f364d3878d Binary files /dev/null and b/Open-ILS/web/images/acct_checked_out_on.gif differ diff --git a/Open-ILS/web/images/acct_favs_off.gif b/Open-ILS/web/images/acct_favs_off.gif new file mode 100644 index 0000000000..5ffc024382 Binary files /dev/null and b/Open-ILS/web/images/acct_favs_off.gif differ diff --git a/Open-ILS/web/images/acct_favs_on.gif b/Open-ILS/web/images/acct_favs_on.gif new file mode 100644 index 0000000000..f96342a8d1 Binary files /dev/null and b/Open-ILS/web/images/acct_favs_on.gif differ diff --git a/Open-ILS/web/images/acct_fines_off.jpg b/Open-ILS/web/images/acct_fines_off.jpg new file mode 100644 index 0000000000..b73b61df14 Binary files /dev/null and b/Open-ILS/web/images/acct_fines_off.jpg differ diff --git a/Open-ILS/web/images/acct_fines_on.jpg b/Open-ILS/web/images/acct_fines_on.jpg new file mode 100644 index 0000000000..4ea7e89a1d Binary files /dev/null and b/Open-ILS/web/images/acct_fines_on.jpg differ diff --git a/Open-ILS/web/images/acct_holds_off.gif b/Open-ILS/web/images/acct_holds_off.gif new file mode 100644 index 0000000000..6179396e78 Binary files /dev/null and b/Open-ILS/web/images/acct_holds_off.gif differ diff --git a/Open-ILS/web/images/acct_holds_on.gif b/Open-ILS/web/images/acct_holds_on.gif new file mode 100644 index 0000000000..d1c75bb38f Binary files /dev/null and b/Open-ILS/web/images/acct_holds_on.gif differ diff --git a/Open-ILS/web/images/acct_lists_off.gif b/Open-ILS/web/images/acct_lists_off.gif new file mode 100644 index 0000000000..9a5b2a2708 Binary files /dev/null and b/Open-ILS/web/images/acct_lists_off.gif differ diff --git a/Open-ILS/web/images/acct_lists_on.gif b/Open-ILS/web/images/acct_lists_on.gif new file mode 100644 index 0000000000..668b0c9664 Binary files /dev/null and b/Open-ILS/web/images/acct_lists_on.gif differ diff --git a/Open-ILS/web/images/acct_payments_off.jpg b/Open-ILS/web/images/acct_payments_off.jpg new file mode 100644 index 0000000000..c8a50f5513 Binary files /dev/null and b/Open-ILS/web/images/acct_payments_off.jpg differ diff --git a/Open-ILS/web/images/acct_payments_on.jpg b/Open-ILS/web/images/acct_payments_on.jpg new file mode 100644 index 0000000000..c571398eff Binary files /dev/null and b/Open-ILS/web/images/acct_payments_on.jpg differ diff --git a/Open-ILS/web/images/acct_prefs_off.gif b/Open-ILS/web/images/acct_prefs_off.gif new file mode 100644 index 0000000000..c357add484 Binary files /dev/null and b/Open-ILS/web/images/acct_prefs_off.gif differ diff --git a/Open-ILS/web/images/acct_prefs_on.gif b/Open-ILS/web/images/acct_prefs_on.gif new file mode 100644 index 0000000000..67d1f475e6 Binary files /dev/null and b/Open-ILS/web/images/acct_prefs_on.gif differ diff --git a/Open-ILS/web/images/acct_summary_off.gif b/Open-ILS/web/images/acct_summary_off.gif new file mode 100644 index 0000000000..63456c1b74 Binary files /dev/null and b/Open-ILS/web/images/acct_summary_off.gif differ diff --git a/Open-ILS/web/images/acct_summary_on.gif b/Open-ILS/web/images/acct_summary_on.gif new file mode 100644 index 0000000000..99d4990d39 Binary files /dev/null and b/Open-ILS/web/images/acct_summary_on.gif differ diff --git a/Open-ILS/web/images/add_mylist.gif b/Open-ILS/web/images/add_mylist.gif new file mode 100644 index 0000000000..a30b32d738 Binary files /dev/null and b/Open-ILS/web/images/add_mylist.gif differ diff --git a/Open-ILS/web/images/add_mylist_sel.gif b/Open-ILS/web/images/add_mylist_sel.gif new file mode 100644 index 0000000000..0448d21bb4 Binary files /dev/null and b/Open-ILS/web/images/add_mylist_sel.gif differ diff --git a/Open-ILS/web/images/add_mylist_sel.kcls.gif b/Open-ILS/web/images/add_mylist_sel.kcls.gif new file mode 100644 index 0000000000..45bd8b6d2d Binary files /dev/null and b/Open-ILS/web/images/add_mylist_sel.kcls.gif differ diff --git a/Open-ILS/web/images/add_search_row_btn.gif b/Open-ILS/web/images/add_search_row_btn.gif new file mode 100644 index 0000000000..a48e68c40c Binary files /dev/null and b/Open-ILS/web/images/add_search_row_btn.gif differ diff --git a/Open-ILS/web/images/adv_search.png b/Open-ILS/web/images/adv_search.png new file mode 100644 index 0000000000..79fb08a457 Binary files /dev/null and b/Open-ILS/web/images/adv_search.png differ diff --git a/Open-ILS/web/images/adv_search_hover.png b/Open-ILS/web/images/adv_search_hover.png new file mode 100644 index 0000000000..0cb3fe1ef4 Binary files /dev/null and b/Open-ILS/web/images/adv_search_hover.png differ diff --git a/Open-ILS/web/images/adv_search_off.gif b/Open-ILS/web/images/adv_search_off.gif new file mode 100644 index 0000000000..a129b93198 Binary files /dev/null and b/Open-ILS/web/images/adv_search_off.gif differ diff --git a/Open-ILS/web/images/adv_search_on.gif b/Open-ILS/web/images/adv_search_on.gif new file mode 100644 index 0000000000..d0faa4f9e3 Binary files /dev/null and b/Open-ILS/web/images/adv_search_on.gif differ diff --git a/Open-ILS/web/images/another_search.png b/Open-ILS/web/images/another_search.png new file mode 100644 index 0000000000..4bcd21458b Binary files /dev/null and b/Open-ILS/web/images/another_search.png differ diff --git a/Open-ILS/web/images/another_search_hover.png b/Open-ILS/web/images/another_search_hover.png new file mode 100644 index 0000000000..08efaf56fb Binary files /dev/null and b/Open-ILS/web/images/another_search_hover.png differ diff --git a/Open-ILS/web/images/aplaceatthetable.jpg b/Open-ILS/web/images/aplaceatthetable.jpg new file mode 100644 index 0000000000..f80395284c Binary files /dev/null and b/Open-ILS/web/images/aplaceatthetable.jpg differ diff --git a/Open-ILS/web/images/aplaceatthetable_summer.jpg b/Open-ILS/web/images/aplaceatthetable_summer.jpg new file mode 100644 index 0000000000..9d12d2d191 Binary files /dev/null and b/Open-ILS/web/images/aplaceatthetable_summer.jpg differ diff --git a/Open-ILS/web/images/arrow-down.gif b/Open-ILS/web/images/arrow-down.gif new file mode 100644 index 0000000000..ebf64c48ed Binary files /dev/null and b/Open-ILS/web/images/arrow-down.gif differ diff --git a/Open-ILS/web/images/arrow-right.gif b/Open-ILS/web/images/arrow-right.gif new file mode 100644 index 0000000000..6c8265584c Binary files /dev/null and b/Open-ILS/web/images/arrow-right.gif differ diff --git a/Open-ILS/web/images/asknow_available.gif b/Open-ILS/web/images/asknow_available.gif new file mode 100644 index 0000000000..326c8d11e3 Binary files /dev/null and b/Open-ILS/web/images/asknow_available.gif differ diff --git a/Open-ILS/web/images/banner-bg.png b/Open-ILS/web/images/banner-bg.png new file mode 100644 index 0000000000..6d990c5c1f Binary files /dev/null and b/Open-ILS/web/images/banner-bg.png differ diff --git a/Open-ILS/web/images/banner1.jpg b/Open-ILS/web/images/banner1.jpg new file mode 100644 index 0000000000..28eaafcb39 Binary files /dev/null and b/Open-ILS/web/images/banner1.jpg differ diff --git a/Open-ILS/web/images/btnCancel.png b/Open-ILS/web/images/btnCancel.png new file mode 100644 index 0000000000..4cfacaf87b Binary files /dev/null and b/Open-ILS/web/images/btnCancel.png differ diff --git a/Open-ILS/web/images/btnSubmit.png b/Open-ILS/web/images/btnSubmit.png new file mode 100644 index 0000000000..7a67408ca3 Binary files /dev/null and b/Open-ILS/web/images/btnSubmit.png differ diff --git a/Open-ILS/web/images/button-bg.png b/Open-ILS/web/images/button-bg.png new file mode 100644 index 0000000000..0ae33794a5 Binary files /dev/null and b/Open-ILS/web/images/button-bg.png differ diff --git a/Open-ILS/web/images/cancel_btn.gif b/Open-ILS/web/images/cancel_btn.gif new file mode 100644 index 0000000000..1cebf59cc7 Binary files /dev/null and b/Open-ILS/web/images/cancel_btn.gif differ diff --git a/Open-ILS/web/images/clouddrives.jpg b/Open-ILS/web/images/clouddrives.jpg new file mode 100644 index 0000000000..2b70f2c9c7 Binary files /dev/null and b/Open-ILS/web/images/clouddrives.jpg differ diff --git a/Open-ILS/web/images/connect.jpg b/Open-ILS/web/images/connect.jpg new file mode 100644 index 0000000000..d443d74f72 Binary files /dev/null and b/Open-ILS/web/images/connect.jpg differ diff --git a/Open-ILS/web/images/dash-corner-left1.png b/Open-ILS/web/images/dash-corner-left1.png new file mode 100644 index 0000000000..9559e8bf30 Binary files /dev/null and b/Open-ILS/web/images/dash-corner-left1.png differ diff --git a/Open-ILS/web/images/dash-corner-left2.png b/Open-ILS/web/images/dash-corner-left2.png new file mode 100644 index 0000000000..5bc8112c90 Binary files /dev/null and b/Open-ILS/web/images/dash-corner-left2.png differ diff --git a/Open-ILS/web/images/dash-corner-mid1.png b/Open-ILS/web/images/dash-corner-mid1.png new file mode 100644 index 0000000000..546b8a8038 Binary files /dev/null and b/Open-ILS/web/images/dash-corner-mid1.png differ diff --git a/Open-ILS/web/images/dash-corner-mid2.png b/Open-ILS/web/images/dash-corner-mid2.png new file mode 100644 index 0000000000..15af112586 Binary files /dev/null and b/Open-ILS/web/images/dash-corner-mid2.png differ diff --git a/Open-ILS/web/images/dash-corner-right1.png b/Open-ILS/web/images/dash-corner-right1.png new file mode 100644 index 0000000000..061afc92db Binary files /dev/null and b/Open-ILS/web/images/dash-corner-right1.png differ diff --git a/Open-ILS/web/images/dash-corner-right2.png b/Open-ILS/web/images/dash-corner-right2.png new file mode 100644 index 0000000000..8663e0c69d Binary files /dev/null and b/Open-ILS/web/images/dash-corner-right2.png differ diff --git a/Open-ILS/web/images/dash-divider.jpg b/Open-ILS/web/images/dash-divider.jpg new file mode 100644 index 0000000000..19dda7d23b Binary files /dev/null and b/Open-ILS/web/images/dash-divider.jpg differ diff --git a/Open-ILS/web/images/digitaldownloads.jpg b/Open-ILS/web/images/digitaldownloads.jpg new file mode 100644 index 0000000000..2b0debab2d Binary files /dev/null and b/Open-ILS/web/images/digitaldownloads.jpg differ diff --git a/Open-ILS/web/images/dropdown-hover.gif b/Open-ILS/web/images/dropdown-hover.gif new file mode 100644 index 0000000000..1ac62ae3f0 Binary files /dev/null and b/Open-ILS/web/images/dropdown-hover.gif differ diff --git a/Open-ILS/web/images/dropdown.gif b/Open-ILS/web/images/dropdown.gif new file mode 100644 index 0000000000..3aab6fedca Binary files /dev/null and b/Open-ILS/web/images/dropdown.gif differ diff --git a/Open-ILS/web/images/ebookssurvey2012.jpg b/Open-ILS/web/images/ebookssurvey2012.jpg new file mode 100644 index 0000000000..349e2dca35 Binary files /dev/null and b/Open-ILS/web/images/ebookssurvey2012.jpg differ diff --git a/Open-ILS/web/images/expert_search_off.gif b/Open-ILS/web/images/expert_search_off.gif new file mode 100644 index 0000000000..96b4f5148e Binary files /dev/null and b/Open-ILS/web/images/expert_search_off.gif differ diff --git a/Open-ILS/web/images/expert_search_on.gif b/Open-ILS/web/images/expert_search_on.gif new file mode 100644 index 0000000000..6a41861505 Binary files /dev/null and b/Open-ILS/web/images/expert_search_on.gif differ diff --git a/Open-ILS/web/images/facet_box_bg.png b/Open-ILS/web/images/facet_box_bg.png new file mode 100644 index 0000000000..996f0a8331 Binary files /dev/null and b/Open-ILS/web/images/facet_box_bg.png differ diff --git a/Open-ILS/web/images/facet_box_bg_bottom.png b/Open-ILS/web/images/facet_box_bg_bottom.png new file mode 100644 index 0000000000..fc776c3304 Binary files /dev/null and b/Open-ILS/web/images/facet_box_bg_bottom.png differ diff --git a/Open-ILS/web/images/faqs-btn.png b/Open-ILS/web/images/faqs-btn.png new file mode 100644 index 0000000000..38134ece87 Binary files /dev/null and b/Open-ILS/web/images/faqs-btn.png differ diff --git a/Open-ILS/web/images/fiestas_better.jpg b/Open-ILS/web/images/fiestas_better.jpg new file mode 100644 index 0000000000..dc57e48440 Binary files /dev/null and b/Open-ILS/web/images/fiestas_better.jpg differ diff --git a/Open-ILS/web/images/format_icons/item_type/1.png b/Open-ILS/web/images/format_icons/item_type/1.png new file mode 100644 index 0000000000..2562eed72e Binary files /dev/null and b/Open-ILS/web/images/format_icons/item_type/1.png differ diff --git a/Open-ILS/web/images/format_icons/mattype/1.png b/Open-ILS/web/images/format_icons/mattype/1.png new file mode 100644 index 0000000000..2562eed72e Binary files /dev/null and b/Open-ILS/web/images/format_icons/mattype/1.png differ diff --git a/Open-ILS/web/images/format_icons/mattype/d.jpg b/Open-ILS/web/images/format_icons/mattype/d.jpg new file mode 100644 index 0000000000..609acd9c3e Binary files /dev/null and b/Open-ILS/web/images/format_icons/mattype/d.jpg differ diff --git a/Open-ILS/web/images/format_icons/mattype/d.png b/Open-ILS/web/images/format_icons/mattype/d.png index c134cef17a..33be68fb28 100644 Binary files a/Open-ILS/web/images/format_icons/mattype/d.png and b/Open-ILS/web/images/format_icons/mattype/d.png differ diff --git a/Open-ILS/web/images/format_icons/mattype/d.png.040812 b/Open-ILS/web/images/format_icons/mattype/d.png.040812 new file mode 100644 index 0000000000..9f4b0f9a6a Binary files /dev/null and b/Open-ILS/web/images/format_icons/mattype/d.png.040812 differ diff --git a/Open-ILS/web/images/format_icons/mattype/g.png b/Open-ILS/web/images/format_icons/mattype/g.png new file mode 100644 index 0000000000..11c1e42738 Binary files /dev/null and b/Open-ILS/web/images/format_icons/mattype/g.png differ diff --git a/Open-ILS/web/images/format_icons/mattype/m.jpg b/Open-ILS/web/images/format_icons/mattype/m.jpg new file mode 100644 index 0000000000..9f0a3102fd Binary files /dev/null and b/Open-ILS/web/images/format_icons/mattype/m.jpg differ diff --git a/Open-ILS/web/images/format_icons/mattype/m.png.040812 b/Open-ILS/web/images/format_icons/mattype/m.png.040812 new file mode 100644 index 0000000000..95e6652908 Binary files /dev/null and b/Open-ILS/web/images/format_icons/mattype/m.png.040812 differ diff --git a/Open-ILS/web/images/format_icons/mattype/u.png b/Open-ILS/web/images/format_icons/mattype/u.png new file mode 100644 index 0000000000..64197e160e Binary files /dev/null and b/Open-ILS/web/images/format_icons/mattype/u.png differ diff --git a/Open-ILS/web/images/go-btn-hover.png b/Open-ILS/web/images/go-btn-hover.png new file mode 100644 index 0000000000..9b878b2025 Binary files /dev/null and b/Open-ILS/web/images/go-btn-hover.png differ diff --git a/Open-ILS/web/images/go-btn.png b/Open-ILS/web/images/go-btn.png new file mode 100644 index 0000000000..24091c9936 Binary files /dev/null and b/Open-ILS/web/images/go-btn.png differ diff --git a/Open-ILS/web/images/go_but_long.gif b/Open-ILS/web/images/go_but_long.gif new file mode 100644 index 0000000000..79d2f9a471 Binary files /dev/null and b/Open-ILS/web/images/go_but_long.gif differ diff --git a/Open-ILS/web/images/golive.jpg b/Open-ILS/web/images/golive.jpg new file mode 100644 index 0000000000..8b34912198 Binary files /dev/null and b/Open-ILS/web/images/golive.jpg differ diff --git a/Open-ILS/web/images/header_left.gif b/Open-ILS/web/images/header_left.gif new file mode 100644 index 0000000000..95437951d8 Binary files /dev/null and b/Open-ILS/web/images/header_left.gif differ diff --git a/Open-ILS/web/images/header_right.gif b/Open-ILS/web/images/header_right.gif new file mode 100644 index 0000000000..f00ff76c0f Binary files /dev/null and b/Open-ILS/web/images/header_right.gif differ diff --git a/Open-ILS/web/images/homebasedfoodbus.jpg b/Open-ILS/web/images/homebasedfoodbus.jpg new file mode 100644 index 0000000000..1e4da1cc8b Binary files /dev/null and b/Open-ILS/web/images/homebasedfoodbus.jpg differ diff --git a/Open-ILS/web/images/hp-links-left.jpg b/Open-ILS/web/images/hp-links-left.jpg new file mode 100644 index 0000000000..e7806c37fa Binary files /dev/null and b/Open-ILS/web/images/hp-links-left.jpg differ diff --git a/Open-ILS/web/images/hp-links-mid.jpg b/Open-ILS/web/images/hp-links-mid.jpg new file mode 100644 index 0000000000..c9cdabf505 Binary files /dev/null and b/Open-ILS/web/images/hp-links-mid.jpg differ diff --git a/Open-ILS/web/images/hp-links-right.jpg b/Open-ILS/web/images/hp-links-right.jpg new file mode 100644 index 0000000000..0b713d912d Binary files /dev/null and b/Open-ILS/web/images/hp-links-right.jpg differ diff --git a/Open-ILS/web/images/kcls_minus_sign.png b/Open-ILS/web/images/kcls_minus_sign.png new file mode 100644 index 0000000000..0d612b180a Binary files /dev/null and b/Open-ILS/web/images/kcls_minus_sign.png differ diff --git a/Open-ILS/web/images/kcls_plus_sign.png b/Open-ILS/web/images/kcls_plus_sign.png new file mode 100644 index 0000000000..a17d58a192 Binary files /dev/null and b/Open-ILS/web/images/kcls_plus_sign.png differ diff --git a/Open-ILS/web/images/kcls_rdetail_arrow.png b/Open-ILS/web/images/kcls_rdetail_arrow.png new file mode 100644 index 0000000000..e464bf2a76 Binary files /dev/null and b/Open-ILS/web/images/kcls_rdetail_arrow.png differ diff --git a/Open-ILS/web/images/kcls_rdetail_arrow_down.png b/Open-ILS/web/images/kcls_rdetail_arrow_down.png new file mode 100644 index 0000000000..3dd6bfdf21 Binary files /dev/null and b/Open-ILS/web/images/kcls_rdetail_arrow_down.png differ diff --git a/Open-ILS/web/images/libraryelf.jpg b/Open-ILS/web/images/libraryelf.jpg new file mode 100644 index 0000000000..3c7b82d18d Binary files /dev/null and b/Open-ILS/web/images/libraryelf.jpg differ diff --git a/Open-ILS/web/images/libraryoftheyear.jpg b/Open-ILS/web/images/libraryoftheyear.jpg new file mode 100644 index 0000000000..c37f25931b Binary files /dev/null and b/Open-ILS/web/images/libraryoftheyear.jpg differ diff --git a/Open-ILS/web/images/locations.jpg b/Open-ILS/web/images/locations.jpg new file mode 100644 index 0000000000..56e7785f72 Binary files /dev/null and b/Open-ILS/web/images/locations.jpg differ diff --git a/Open-ILS/web/images/login-bg.jpg b/Open-ILS/web/images/login-bg.jpg new file mode 100644 index 0000000000..46fc85fc2d Binary files /dev/null and b/Open-ILS/web/images/login-bg.jpg differ diff --git a/Open-ILS/web/images/login-btn-hover.png b/Open-ILS/web/images/login-btn-hover.png new file mode 100644 index 0000000000..442f33fd14 Binary files /dev/null and b/Open-ILS/web/images/login-btn-hover.png differ diff --git a/Open-ILS/web/images/login-btn.gif b/Open-ILS/web/images/login-btn.gif new file mode 100644 index 0000000000..69d6a5633d Binary files /dev/null and b/Open-ILS/web/images/login-btn.gif differ diff --git a/Open-ILS/web/images/login-btn.png b/Open-ILS/web/images/login-btn.png new file mode 100644 index 0000000000..5548b99515 Binary files /dev/null and b/Open-ILS/web/images/login-btn.png differ diff --git a/Open-ILS/web/images/login-btn2.png b/Open-ILS/web/images/login-btn2.png new file mode 100644 index 0000000000..ff4af146a0 Binary files /dev/null and b/Open-ILS/web/images/login-btn2.png differ diff --git a/Open-ILS/web/images/logout-btn-hover.png b/Open-ILS/web/images/logout-btn-hover.png new file mode 100644 index 0000000000..411fc013cd Binary files /dev/null and b/Open-ILS/web/images/logout-btn-hover.png differ diff --git a/Open-ILS/web/images/logout-btn.png b/Open-ILS/web/images/logout-btn.png new file mode 100644 index 0000000000..bd31a4777b Binary files /dev/null and b/Open-ILS/web/images/logout-btn.png differ diff --git a/Open-ILS/web/images/mango.jpg b/Open-ILS/web/images/mango.jpg new file mode 100644 index 0000000000..70ce4de40f Binary files /dev/null and b/Open-ILS/web/images/mango.jpg differ diff --git a/Open-ILS/web/images/masterbuilders_programs.jpg b/Open-ILS/web/images/masterbuilders_programs.jpg new file mode 100644 index 0000000000..03f8501321 Binary files /dev/null and b/Open-ILS/web/images/masterbuilders_programs.jpg differ diff --git a/Open-ILS/web/images/mathandscience.jpg b/Open-ILS/web/images/mathandscience.jpg new file mode 100644 index 0000000000..f19e30a140 Binary files /dev/null and b/Open-ILS/web/images/mathandscience.jpg differ diff --git a/Open-ILS/web/images/media_3dobject.jpg b/Open-ILS/web/images/media_3dobject.jpg new file mode 100644 index 0000000000..21ee11da35 Binary files /dev/null and b/Open-ILS/web/images/media_3dobject.jpg differ diff --git a/Open-ILS/web/images/media_3dobject.png b/Open-ILS/web/images/media_3dobject.png new file mode 100644 index 0000000000..65a2de24a4 Binary files /dev/null and b/Open-ILS/web/images/media_3dobject.png differ diff --git a/Open-ILS/web/images/media_book.jpg b/Open-ILS/web/images/media_book.jpg new file mode 100644 index 0000000000..d928e6e58c Binary files /dev/null and b/Open-ILS/web/images/media_book.jpg differ diff --git a/Open-ILS/web/images/media_book.png b/Open-ILS/web/images/media_book.png new file mode 100644 index 0000000000..57ee12c592 Binary files /dev/null and b/Open-ILS/web/images/media_book.png differ diff --git a/Open-ILS/web/images/media_bookoncassette.jpg b/Open-ILS/web/images/media_bookoncassette.jpg new file mode 100644 index 0000000000..acc469e485 Binary files /dev/null and b/Open-ILS/web/images/media_bookoncassette.jpg differ diff --git a/Open-ILS/web/images/media_bookoncassette.png b/Open-ILS/web/images/media_bookoncassette.png new file mode 100644 index 0000000000..f36fe75967 Binary files /dev/null and b/Open-ILS/web/images/media_bookoncassette.png differ diff --git a/Open-ILS/web/images/media_bookoncassettecd.jpg b/Open-ILS/web/images/media_bookoncassettecd.jpg new file mode 100644 index 0000000000..e288689cee Binary files /dev/null and b/Open-ILS/web/images/media_bookoncassettecd.jpg differ diff --git a/Open-ILS/web/images/media_bookoncd.jpg b/Open-ILS/web/images/media_bookoncd.jpg new file mode 100644 index 0000000000..9e49aedd3a Binary files /dev/null and b/Open-ILS/web/images/media_bookoncd.jpg differ diff --git a/Open-ILS/web/images/media_bookoncd.png b/Open-ILS/web/images/media_bookoncd.png new file mode 100644 index 0000000000..62b1af2874 Binary files /dev/null and b/Open-ILS/web/images/media_bookoncd.png differ diff --git a/Open-ILS/web/images/media_cassettewithbook.jpg b/Open-ILS/web/images/media_cassettewithbook.jpg new file mode 100644 index 0000000000..c434af6837 Binary files /dev/null and b/Open-ILS/web/images/media_cassettewithbook.jpg differ diff --git a/Open-ILS/web/images/media_cassettewithbook.png b/Open-ILS/web/images/media_cassettewithbook.png new file mode 100644 index 0000000000..b874f44e69 Binary files /dev/null and b/Open-ILS/web/images/media_cassettewithbook.png differ diff --git a/Open-ILS/web/images/media_cdrom.jpg b/Open-ILS/web/images/media_cdrom.jpg new file mode 100644 index 0000000000..59f97026f9 Binary files /dev/null and b/Open-ILS/web/images/media_cdrom.jpg differ diff --git a/Open-ILS/web/images/media_cdwithbook.jpg b/Open-ILS/web/images/media_cdwithbook.jpg new file mode 100644 index 0000000000..b1828d8672 Binary files /dev/null and b/Open-ILS/web/images/media_cdwithbook.jpg differ diff --git a/Open-ILS/web/images/media_cdwithbook.png b/Open-ILS/web/images/media_cdwithbook.png new file mode 100644 index 0000000000..dba509d00f Binary files /dev/null and b/Open-ILS/web/images/media_cdwithbook.png differ diff --git a/Open-ILS/web/images/media_downloadableebook.png b/Open-ILS/web/images/media_downloadableebook.png new file mode 100644 index 0000000000..82f66ba5f3 Binary files /dev/null and b/Open-ILS/web/images/media_downloadableebook.png differ diff --git a/Open-ILS/web/images/media_downloadablemovie.png b/Open-ILS/web/images/media_downloadablemovie.png new file mode 100644 index 0000000000..a5db0672ac Binary files /dev/null and b/Open-ILS/web/images/media_downloadablemovie.png differ diff --git a/Open-ILS/web/images/media_downloadablemusic.png b/Open-ILS/web/images/media_downloadablemusic.png new file mode 100644 index 0000000000..bcd621c9de Binary files /dev/null and b/Open-ILS/web/images/media_downloadablemusic.png differ diff --git a/Open-ILS/web/images/media_downloadebook.jpg b/Open-ILS/web/images/media_downloadebook.jpg new file mode 100644 index 0000000000..ce97463aa7 Binary files /dev/null and b/Open-ILS/web/images/media_downloadebook.jpg differ diff --git a/Open-ILS/web/images/media_downloadmusic.jpg b/Open-ILS/web/images/media_downloadmusic.jpg new file mode 100644 index 0000000000..953b7e738d Binary files /dev/null and b/Open-ILS/web/images/media_downloadmusic.jpg differ diff --git a/Open-ILS/web/images/media_downloadvideo.jpg b/Open-ILS/web/images/media_downloadvideo.jpg new file mode 100644 index 0000000000..e3abfc33d1 Binary files /dev/null and b/Open-ILS/web/images/media_downloadvideo.jpg differ diff --git a/Open-ILS/web/images/media_dvd.jpg b/Open-ILS/web/images/media_dvd.jpg new file mode 100644 index 0000000000..905f623e97 Binary files /dev/null and b/Open-ILS/web/images/media_dvd.jpg differ diff --git a/Open-ILS/web/images/media_dvd.png b/Open-ILS/web/images/media_dvd.png new file mode 100644 index 0000000000..8afcef9dd8 Binary files /dev/null and b/Open-ILS/web/images/media_dvd.png differ diff --git a/Open-ILS/web/images/media_eaudio.jpg b/Open-ILS/web/images/media_eaudio.jpg new file mode 100644 index 0000000000..0d810baa53 Binary files /dev/null and b/Open-ILS/web/images/media_eaudio.jpg differ diff --git a/Open-ILS/web/images/media_ebook.png b/Open-ILS/web/images/media_ebook.png new file mode 100644 index 0000000000..53a192e35f Binary files /dev/null and b/Open-ILS/web/images/media_ebook.png differ diff --git a/Open-ILS/web/images/media_ebookaudio.png b/Open-ILS/web/images/media_ebookaudio.png new file mode 100644 index 0000000000..1270685a66 Binary files /dev/null and b/Open-ILS/web/images/media_ebookaudio.png differ diff --git a/Open-ILS/web/images/media_ebooktext.jpg b/Open-ILS/web/images/media_ebooktext.jpg new file mode 100644 index 0000000000..c45f944495 Binary files /dev/null and b/Open-ILS/web/images/media_ebooktext.jpg differ diff --git a/Open-ILS/web/images/media_electronicgames.png b/Open-ILS/web/images/media_electronicgames.png new file mode 100644 index 0000000000..b696a7abe9 Binary files /dev/null and b/Open-ILS/web/images/media_electronicgames.png differ diff --git a/Open-ILS/web/images/media_equipment.jpg b/Open-ILS/web/images/media_equipment.jpg new file mode 100644 index 0000000000..47b83770e5 Binary files /dev/null and b/Open-ILS/web/images/media_equipment.jpg differ diff --git a/Open-ILS/web/images/media_equipment.png b/Open-ILS/web/images/media_equipment.png new file mode 100644 index 0000000000..96d0eede1b Binary files /dev/null and b/Open-ILS/web/images/media_equipment.png differ diff --git a/Open-ILS/web/images/media_evideo.png b/Open-ILS/web/images/media_evideo.png new file mode 100644 index 0000000000..09a7ea62b6 Binary files /dev/null and b/Open-ILS/web/images/media_evideo.png differ diff --git a/Open-ILS/web/images/media_films.jpg b/Open-ILS/web/images/media_films.jpg new file mode 100644 index 0000000000..99b74a033f Binary files /dev/null and b/Open-ILS/web/images/media_films.jpg differ diff --git a/Open-ILS/web/images/media_films.png b/Open-ILS/web/images/media_films.png new file mode 100644 index 0000000000..dcfd8939bc Binary files /dev/null and b/Open-ILS/web/images/media_films.png differ diff --git a/Open-ILS/web/images/media_games.jpg b/Open-ILS/web/images/media_games.jpg new file mode 100644 index 0000000000..24d50ae65c Binary files /dev/null and b/Open-ILS/web/images/media_games.jpg differ diff --git a/Open-ILS/web/images/media_kit.jpg b/Open-ILS/web/images/media_kit.jpg new file mode 100644 index 0000000000..ea50e561e9 Binary files /dev/null and b/Open-ILS/web/images/media_kit.jpg differ diff --git a/Open-ILS/web/images/media_kit.png b/Open-ILS/web/images/media_kit.png new file mode 100644 index 0000000000..c60d039bce Binary files /dev/null and b/Open-ILS/web/images/media_kit.png differ diff --git a/Open-ILS/web/images/media_language.jpg b/Open-ILS/web/images/media_language.jpg new file mode 100644 index 0000000000..0d86b5bab6 Binary files /dev/null and b/Open-ILS/web/images/media_language.jpg differ diff --git a/Open-ILS/web/images/media_largeprint.jpg b/Open-ILS/web/images/media_largeprint.jpg new file mode 100644 index 0000000000..bd8b0a4483 Binary files /dev/null and b/Open-ILS/web/images/media_largeprint.jpg differ diff --git a/Open-ILS/web/images/media_largeprint.png b/Open-ILS/web/images/media_largeprint.png new file mode 100644 index 0000000000..09496307fa Binary files /dev/null and b/Open-ILS/web/images/media_largeprint.png differ diff --git a/Open-ILS/web/images/media_magazine.png b/Open-ILS/web/images/media_magazine.png new file mode 100644 index 0000000000..c2276605c7 Binary files /dev/null and b/Open-ILS/web/images/media_magazine.png differ diff --git a/Open-ILS/web/images/media_magazines.jpg b/Open-ILS/web/images/media_magazines.jpg new file mode 100644 index 0000000000..e8bb7370d9 Binary files /dev/null and b/Open-ILS/web/images/media_magazines.jpg differ diff --git a/Open-ILS/web/images/media_map.jpg b/Open-ILS/web/images/media_map.jpg new file mode 100644 index 0000000000..92367241d6 Binary files /dev/null and b/Open-ILS/web/images/media_map.jpg differ diff --git a/Open-ILS/web/images/media_map.png b/Open-ILS/web/images/media_map.png new file mode 100644 index 0000000000..ccf1fed6b3 Binary files /dev/null and b/Open-ILS/web/images/media_map.png differ diff --git a/Open-ILS/web/images/media_microform.jpg b/Open-ILS/web/images/media_microform.jpg new file mode 100644 index 0000000000..7e7e0dc2d2 Binary files /dev/null and b/Open-ILS/web/images/media_microform.jpg differ diff --git a/Open-ILS/web/images/media_microform.png b/Open-ILS/web/images/media_microform.png new file mode 100644 index 0000000000..9f4b0f9a6a Binary files /dev/null and b/Open-ILS/web/images/media_microform.png differ diff --git a/Open-ILS/web/images/media_musiccassete.jpg b/Open-ILS/web/images/media_musiccassete.jpg new file mode 100644 index 0000000000..7d9a779900 Binary files /dev/null and b/Open-ILS/web/images/media_musiccassete.jpg differ diff --git a/Open-ILS/web/images/media_musiccassette.jpg b/Open-ILS/web/images/media_musiccassette.jpg new file mode 100644 index 0000000000..c4a673f771 Binary files /dev/null and b/Open-ILS/web/images/media_musiccassette.jpg differ diff --git a/Open-ILS/web/images/media_musiccd.jpg b/Open-ILS/web/images/media_musiccd.jpg new file mode 100644 index 0000000000..f82eaed0d4 Binary files /dev/null and b/Open-ILS/web/images/media_musiccd.jpg differ diff --git a/Open-ILS/web/images/media_musiccd.png b/Open-ILS/web/images/media_musiccd.png new file mode 100644 index 0000000000..84cc188c7c Binary files /dev/null and b/Open-ILS/web/images/media_musiccd.png differ diff --git a/Open-ILS/web/images/media_musiconcassette.png b/Open-ILS/web/images/media_musiconcassette.png new file mode 100644 index 0000000000..96a9f35f5c Binary files /dev/null and b/Open-ILS/web/images/media_musiconcassette.png differ diff --git a/Open-ILS/web/images/media_musicrecord.jpg b/Open-ILS/web/images/media_musicrecord.jpg new file mode 100644 index 0000000000..4731692ee7 Binary files /dev/null and b/Open-ILS/web/images/media_musicrecord.jpg differ diff --git a/Open-ILS/web/images/media_musicrecord.png b/Open-ILS/web/images/media_musicrecord.png new file mode 100644 index 0000000000..4ba36f1e75 Binary files /dev/null and b/Open-ILS/web/images/media_musicrecord.png differ diff --git a/Open-ILS/web/images/media_newspaper.jpg b/Open-ILS/web/images/media_newspaper.jpg new file mode 100644 index 0000000000..8a7b769c82 Binary files /dev/null and b/Open-ILS/web/images/media_newspaper.jpg differ diff --git a/Open-ILS/web/images/media_newspaper.png b/Open-ILS/web/images/media_newspaper.png new file mode 100644 index 0000000000..009d292505 Binary files /dev/null and b/Open-ILS/web/images/media_newspaper.png differ diff --git a/Open-ILS/web/images/media_online.jpg b/Open-ILS/web/images/media_online.jpg new file mode 100644 index 0000000000..2f9cfccc53 Binary files /dev/null and b/Open-ILS/web/images/media_online.jpg differ diff --git a/Open-ILS/web/images/media_online.png b/Open-ILS/web/images/media_online.png new file mode 100644 index 0000000000..437f91f32f Binary files /dev/null and b/Open-ILS/web/images/media_online.png differ diff --git a/Open-ILS/web/images/media_onlinejournal.jpg b/Open-ILS/web/images/media_onlinejournal.jpg new file mode 100644 index 0000000000..3528f1c007 Binary files /dev/null and b/Open-ILS/web/images/media_onlinejournal.jpg differ diff --git a/Open-ILS/web/images/media_onlinejournal.png b/Open-ILS/web/images/media_onlinejournal.png new file mode 100644 index 0000000000..65cac4c421 Binary files /dev/null and b/Open-ILS/web/images/media_onlinejournal.png differ diff --git a/Open-ILS/web/images/media_player.png b/Open-ILS/web/images/media_player.png new file mode 100644 index 0000000000..64197e160e Binary files /dev/null and b/Open-ILS/web/images/media_player.png differ diff --git a/Open-ILS/web/images/media_podcasts.jpg b/Open-ILS/web/images/media_podcasts.jpg new file mode 100644 index 0000000000..c65727c4ec Binary files /dev/null and b/Open-ILS/web/images/media_podcasts.jpg differ diff --git a/Open-ILS/web/images/media_podcasts.png b/Open-ILS/web/images/media_podcasts.png new file mode 100644 index 0000000000..d563fbb2cd Binary files /dev/null and b/Open-ILS/web/images/media_podcasts.png differ diff --git a/Open-ILS/web/images/media_printedmusic.jpg b/Open-ILS/web/images/media_printedmusic.jpg new file mode 100644 index 0000000000..2379dbdff7 Binary files /dev/null and b/Open-ILS/web/images/media_printedmusic.jpg differ diff --git a/Open-ILS/web/images/media_projectedmedia.jpg b/Open-ILS/web/images/media_projectedmedia.jpg new file mode 100644 index 0000000000..99b74a033f Binary files /dev/null and b/Open-ILS/web/images/media_projectedmedia.jpg differ diff --git a/Open-ILS/web/images/media_sheetmusic.jpg b/Open-ILS/web/images/media_sheetmusic.jpg new file mode 100644 index 0000000000..92072689c9 Binary files /dev/null and b/Open-ILS/web/images/media_sheetmusic.jpg differ diff --git a/Open-ILS/web/images/media_sheetmusic.png b/Open-ILS/web/images/media_sheetmusic.png new file mode 100644 index 0000000000..26f481857d Binary files /dev/null and b/Open-ILS/web/images/media_sheetmusic.png differ diff --git a/Open-ILS/web/images/media_slide.jpg b/Open-ILS/web/images/media_slide.jpg new file mode 100644 index 0000000000..62aca57091 Binary files /dev/null and b/Open-ILS/web/images/media_slide.jpg differ diff --git a/Open-ILS/web/images/media_slideset.png b/Open-ILS/web/images/media_slideset.png new file mode 100644 index 0000000000..94cebfb530 Binary files /dev/null and b/Open-ILS/web/images/media_slideset.png differ diff --git a/Open-ILS/web/images/media_software.jpg b/Open-ILS/web/images/media_software.jpg new file mode 100644 index 0000000000..090cee263a Binary files /dev/null and b/Open-ILS/web/images/media_software.jpg differ diff --git a/Open-ILS/web/images/media_software.png b/Open-ILS/web/images/media_software.png new file mode 100644 index 0000000000..95e6652908 Binary files /dev/null and b/Open-ILS/web/images/media_software.png differ diff --git a/Open-ILS/web/images/media_streamingaudio.jpg b/Open-ILS/web/images/media_streamingaudio.jpg new file mode 100644 index 0000000000..3efafe8c7c Binary files /dev/null and b/Open-ILS/web/images/media_streamingaudio.jpg differ diff --git a/Open-ILS/web/images/media_streamingaudio.png b/Open-ILS/web/images/media_streamingaudio.png new file mode 100644 index 0000000000..51c31c3b30 Binary files /dev/null and b/Open-ILS/web/images/media_streamingaudio.png differ diff --git a/Open-ILS/web/images/media_streamingvideo.jpg b/Open-ILS/web/images/media_streamingvideo.jpg new file mode 100644 index 0000000000..ab9bf9c7b0 Binary files /dev/null and b/Open-ILS/web/images/media_streamingvideo.jpg differ diff --git a/Open-ILS/web/images/media_streamingvideo.png b/Open-ILS/web/images/media_streamingvideo.png new file mode 100644 index 0000000000..3fe2cbe906 Binary files /dev/null and b/Open-ILS/web/images/media_streamingvideo.png differ diff --git a/Open-ILS/web/images/media_vhs.jpg b/Open-ILS/web/images/media_vhs.jpg new file mode 100644 index 0000000000..228d1563db Binary files /dev/null and b/Open-ILS/web/images/media_vhs.jpg differ diff --git a/Open-ILS/web/images/media_vhs.png b/Open-ILS/web/images/media_vhs.png new file mode 100644 index 0000000000..11c1e42738 Binary files /dev/null and b/Open-ILS/web/images/media_vhs.png differ diff --git a/Open-ILS/web/images/num_search_off.gif b/Open-ILS/web/images/num_search_off.gif new file mode 100644 index 0000000000..1062802cdf Binary files /dev/null and b/Open-ILS/web/images/num_search_off.gif differ diff --git a/Open-ILS/web/images/num_search_on.gif b/Open-ILS/web/images/num_search_on.gif new file mode 100644 index 0000000000..f7d7829696 Binary files /dev/null and b/Open-ILS/web/images/num_search_on.gif differ diff --git a/Open-ILS/web/images/one_land.gif b/Open-ILS/web/images/one_land.gif new file mode 100644 index 0000000000..082b996813 Binary files /dev/null and b/Open-ILS/web/images/one_land.gif differ diff --git a/Open-ILS/web/images/override.png b/Open-ILS/web/images/override.png new file mode 100644 index 0000000000..f4f2d558b3 Binary files /dev/null and b/Open-ILS/web/images/override.png differ diff --git a/Open-ILS/web/images/pay-fines-btn-hover.png b/Open-ILS/web/images/pay-fines-btn-hover.png new file mode 100644 index 0000000000..b7708da421 Binary files /dev/null and b/Open-ILS/web/images/pay-fines-btn-hover.png differ diff --git a/Open-ILS/web/images/pay-fines-btn.png b/Open-ILS/web/images/pay-fines-btn.png new file mode 100644 index 0000000000..356433b4c0 Binary files /dev/null and b/Open-ILS/web/images/pay-fines-btn.png differ diff --git a/Open-ILS/web/images/pay_fines_btn.gif b/Open-ILS/web/images/pay_fines_btn.gif new file mode 100644 index 0000000000..eb4816f4d7 Binary files /dev/null and b/Open-ILS/web/images/pay_fines_btn.gif differ diff --git a/Open-ILS/web/images/place_hold.gif b/Open-ILS/web/images/place_hold.gif new file mode 100644 index 0000000000..3f72215a80 Binary files /dev/null and b/Open-ILS/web/images/place_hold.gif differ diff --git a/Open-ILS/web/images/playingwithwords.jpg b/Open-ILS/web/images/playingwithwords.jpg new file mode 100644 index 0000000000..18ffa19796 Binary files /dev/null and b/Open-ILS/web/images/playingwithwords.jpg differ diff --git a/Open-ILS/web/images/questions.png b/Open-ILS/web/images/questions.png new file mode 100644 index 0000000000..9be69b2a99 Binary files /dev/null and b/Open-ILS/web/images/questions.png differ diff --git a/Open-ILS/web/images/readersurvey.jpg b/Open-ILS/web/images/readersurvey.jpg new file mode 100644 index 0000000000..79064fd0ad Binary files /dev/null and b/Open-ILS/web/images/readersurvey.jpg differ diff --git a/Open-ILS/web/images/readfilmwin2012.jpg b/Open-ILS/web/images/readfilmwin2012.jpg new file mode 100644 index 0000000000..fa6892e0cd Binary files /dev/null and b/Open-ILS/web/images/readfilmwin2012.jpg differ diff --git a/Open-ILS/web/images/renewselected.png b/Open-ILS/web/images/renewselected.png new file mode 100644 index 0000000000..6d8d77acf0 Binary files /dev/null and b/Open-ILS/web/images/renewselected.png differ diff --git a/Open-ILS/web/images/reset_form_btn.gif b/Open-ILS/web/images/reset_form_btn.gif new file mode 100644 index 0000000000..6b70964671 Binary files /dev/null and b/Open-ILS/web/images/reset_form_btn.gif differ diff --git a/Open-ILS/web/images/return.png b/Open-ILS/web/images/return.png new file mode 100644 index 0000000000..19c07a98d3 Binary files /dev/null and b/Open-ILS/web/images/return.png differ diff --git a/Open-ILS/web/images/reviews.gif b/Open-ILS/web/images/reviews.gif new file mode 100644 index 0000000000..b78fa2548b Binary files /dev/null and b/Open-ILS/web/images/reviews.gif differ diff --git a/Open-ILS/web/images/save_btn.gif b/Open-ILS/web/images/save_btn.gif new file mode 100644 index 0000000000..f87282adbf Binary files /dev/null and b/Open-ILS/web/images/save_btn.gif differ diff --git a/Open-ILS/web/images/search_btn.gif b/Open-ILS/web/images/search_btn.gif new file mode 100644 index 0000000000..f2fdc9b558 Binary files /dev/null and b/Open-ILS/web/images/search_btn.gif differ diff --git a/Open-ILS/web/images/season2012.jpg b/Open-ILS/web/images/season2012.jpg new file mode 100644 index 0000000000..49b8fb1092 Binary files /dev/null and b/Open-ILS/web/images/season2012.jpg differ diff --git a/Open-ILS/web/images/seewhatsnew.jpg b/Open-ILS/web/images/seewhatsnew.jpg new file mode 100644 index 0000000000..0eee71996d Binary files /dev/null and b/Open-ILS/web/images/seewhatsnew.jpg differ diff --git a/Open-ILS/web/images/selfcheck/KCLS_logo_horiz.gif b/Open-ILS/web/images/selfcheck/KCLS_logo_horiz.gif new file mode 100644 index 0000000000..8e1d56ed5f Binary files /dev/null and b/Open-ILS/web/images/selfcheck/KCLS_logo_horiz.gif differ diff --git a/Open-ILS/web/images/selfcheck/arrow.gif b/Open-ILS/web/images/selfcheck/arrow.gif new file mode 100644 index 0000000000..bf17978429 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/arrow.gif differ diff --git a/Open-ILS/web/images/selfcheck/barcodedetailbook.jpg b/Open-ILS/web/images/selfcheck/barcodedetailbook.jpg new file mode 100644 index 0000000000..f0a237e924 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/barcodedetailbook.jpg differ diff --git a/Open-ILS/web/images/selfcheck/blue-arrow.png b/Open-ILS/web/images/selfcheck/blue-arrow.png new file mode 100644 index 0000000000..c9bdc90a39 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/blue-arrow.png differ diff --git a/Open-ILS/web/images/selfcheck/book-example.png b/Open-ILS/web/images/selfcheck/book-example.png new file mode 100644 index 0000000000..b33ef5bd8e Binary files /dev/null and b/Open-ILS/web/images/selfcheck/book-example.png differ diff --git a/Open-ILS/web/images/selfcheck/check-out.png b/Open-ILS/web/images/selfcheck/check-out.png new file mode 100644 index 0000000000..45d5ac3926 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/check-out.png differ diff --git a/Open-ILS/web/images/selfcheck/dotted-line.png b/Open-ILS/web/images/selfcheck/dotted-line.png new file mode 100644 index 0000000000..7aa6cdc8cd Binary files /dev/null and b/Open-ILS/web/images/selfcheck/dotted-line.png differ diff --git a/Open-ILS/web/images/selfcheck/finish-btn.png b/Open-ILS/web/images/selfcheck/finish-btn.png new file mode 100644 index 0000000000..a096a49f5b Binary files /dev/null and b/Open-ILS/web/images/selfcheck/finish-btn.png differ diff --git a/Open-ILS/web/images/selfcheck/go-btn.png b/Open-ILS/web/images/selfcheck/go-btn.png new file mode 100644 index 0000000000..24091c9936 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/go-btn.png differ diff --git a/Open-ILS/web/images/selfcheck/gobutton.jpg b/Open-ILS/web/images/selfcheck/gobutton.jpg new file mode 100644 index 0000000000..33e7c380e5 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/gobutton.jpg differ diff --git a/Open-ILS/web/images/selfcheck/icon-printer.png b/Open-ILS/web/images/selfcheck/icon-printer.png new file mode 100644 index 0000000000..e10e04ac70 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/icon-printer.png differ diff --git a/Open-ILS/web/images/selfcheck/kcls-logo.jpg b/Open-ILS/web/images/selfcheck/kcls-logo.jpg new file mode 100644 index 0000000000..b57f1d69c8 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/kcls-logo.jpg differ diff --git a/Open-ILS/web/images/selfcheck/libcard_barcode.jpg b/Open-ILS/web/images/selfcheck/libcard_barcode.jpg new file mode 100644 index 0000000000..31419f65a5 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/libcard_barcode.jpg differ diff --git a/Open-ILS/web/images/selfcheck/library-card.png b/Open-ILS/web/images/selfcheck/library-card.png new file mode 100644 index 0000000000..ab9e87138c Binary files /dev/null and b/Open-ILS/web/images/selfcheck/library-card.png differ diff --git a/Open-ILS/web/images/selfcheck/login-btn.png b/Open-ILS/web/images/selfcheck/login-btn.png new file mode 100644 index 0000000000..ae9d9de5c7 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/login-btn.png differ diff --git a/Open-ILS/web/images/selfcheck/logout.gif b/Open-ILS/web/images/selfcheck/logout.gif new file mode 100644 index 0000000000..11d616015e Binary files /dev/null and b/Open-ILS/web/images/selfcheck/logout.gif differ diff --git a/Open-ILS/web/images/selfcheck/logoutbutton.jpg b/Open-ILS/web/images/selfcheck/logoutbutton.jpg new file mode 100644 index 0000000000..61092eddb7 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/logoutbutton.jpg differ diff --git a/Open-ILS/web/images/selfcheck/logoutnoreceipt.gif b/Open-ILS/web/images/selfcheck/logoutnoreceipt.gif new file mode 100644 index 0000000000..1c88f4adb5 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/logoutnoreceipt.gif differ diff --git a/Open-ILS/web/images/selfcheck/logoutwithoutreceiptbutton.jpg b/Open-ILS/web/images/selfcheck/logoutwithoutreceiptbutton.jpg new file mode 100644 index 0000000000..20228bddb7 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/logoutwithoutreceiptbutton.jpg differ diff --git a/Open-ILS/web/images/selfcheck/mousy.png b/Open-ILS/web/images/selfcheck/mousy.png new file mode 100644 index 0000000000..3c4bc22ebd Binary files /dev/null and b/Open-ILS/web/images/selfcheck/mousy.png differ diff --git a/Open-ILS/web/images/selfcheck/print-list-btn.png b/Open-ILS/web/images/selfcheck/print-list-btn.png new file mode 100644 index 0000000000..fda799bf0f Binary files /dev/null and b/Open-ILS/web/images/selfcheck/print-list-btn.png differ diff --git a/Open-ILS/web/images/selfcheck/printlist.jpg b/Open-ILS/web/images/selfcheck/printlist.jpg new file mode 100644 index 0000000000..a83c0fc575 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/printlist.jpg differ diff --git a/Open-ILS/web/images/selfcheck/submit-btn.png b/Open-ILS/web/images/selfcheck/submit-btn.png new file mode 100644 index 0000000000..dcfddc4ed8 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/submit-btn.png differ diff --git a/Open-ILS/web/images/selfcheck/tool_font.gif b/Open-ILS/web/images/selfcheck/tool_font.gif new file mode 100644 index 0000000000..9dc10a95f6 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/tool_font.gif differ diff --git a/Open-ILS/web/images/selfcheck/tool_mail.gif b/Open-ILS/web/images/selfcheck/tool_mail.gif new file mode 100644 index 0000000000..83c357369e Binary files /dev/null and b/Open-ILS/web/images/selfcheck/tool_mail.gif differ diff --git a/Open-ILS/web/images/selfcheck/tool_print.gif b/Open-ILS/web/images/selfcheck/tool_print.gif new file mode 100644 index 0000000000..d3d7ee388e Binary files /dev/null and b/Open-ILS/web/images/selfcheck/tool_print.gif differ diff --git a/Open-ILS/web/images/selfcheck/txt-box-bg.png b/Open-ILS/web/images/selfcheck/txt-box-bg.png new file mode 100644 index 0000000000..87c4e06089 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/txt-box-bg.png differ diff --git a/Open-ILS/web/images/selfcheck/utils-corner-right.jpg b/Open-ILS/web/images/selfcheck/utils-corner-right.jpg new file mode 100644 index 0000000000..1559897142 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/utils-corner-right.jpg differ diff --git a/Open-ILS/web/images/selfcheck/utils-corner.jpg b/Open-ILS/web/images/selfcheck/utils-corner.jpg new file mode 100644 index 0000000000..4932a28672 Binary files /dev/null and b/Open-ILS/web/images/selfcheck/utils-corner.jpg differ diff --git a/Open-ILS/web/images/socialnetwork.jpg b/Open-ILS/web/images/socialnetwork.jpg new file mode 100644 index 0000000000..c2748612b4 Binary files /dev/null and b/Open-ILS/web/images/socialnetwork.jpg differ diff --git a/Open-ILS/web/images/srp2012.jpg b/Open-ILS/web/images/srp2012.jpg new file mode 100644 index 0000000000..44bcbc49d7 Binary files /dev/null and b/Open-ILS/web/images/srp2012.jpg differ diff --git a/Open-ILS/web/images/srp_2013.jpg b/Open-ILS/web/images/srp_2013.jpg new file mode 100644 index 0000000000..c35bf86489 Binary files /dev/null and b/Open-ILS/web/images/srp_2013.jpg differ diff --git a/Open-ILS/web/images/stars2012.jpg b/Open-ILS/web/images/stars2012.jpg new file mode 100644 index 0000000000..e4201d7f49 Binary files /dev/null and b/Open-ILS/web/images/stars2012.jpg differ diff --git a/Open-ILS/web/images/stars_fall2012.jpg b/Open-ILS/web/images/stars_fall2012.jpg new file mode 100644 index 0000000000..001ac2a3a1 Binary files /dev/null and b/Open-ILS/web/images/stars_fall2012.jpg differ diff --git a/Open-ILS/web/images/studyzone.jpg b/Open-ILS/web/images/studyzone.jpg new file mode 100644 index 0000000000..62dad120b4 Binary files /dev/null and b/Open-ILS/web/images/studyzone.jpg differ diff --git a/Open-ILS/web/images/sub_checked_hist_off.jpg b/Open-ILS/web/images/sub_checked_hist_off.jpg new file mode 100644 index 0000000000..7fda1c320d Binary files /dev/null and b/Open-ILS/web/images/sub_checked_hist_off.jpg differ diff --git a/Open-ILS/web/images/sub_checked_hist_on.jpg b/Open-ILS/web/images/sub_checked_hist_on.jpg new file mode 100644 index 0000000000..703aac1000 Binary files /dev/null and b/Open-ILS/web/images/sub_checked_hist_on.jpg differ diff --git a/Open-ILS/web/images/sub_checked_out_off.jpg b/Open-ILS/web/images/sub_checked_out_off.jpg new file mode 100644 index 0000000000..0573fbde7d Binary files /dev/null and b/Open-ILS/web/images/sub_checked_out_off.jpg differ diff --git a/Open-ILS/web/images/sub_checked_out_on.jpg b/Open-ILS/web/images/sub_checked_out_on.jpg new file mode 100644 index 0000000000..97bb178742 Binary files /dev/null and b/Open-ILS/web/images/sub_checked_out_on.jpg differ diff --git a/Open-ILS/web/images/sub_holds_hist_off.jpg b/Open-ILS/web/images/sub_holds_hist_off.jpg new file mode 100644 index 0000000000..020abe9d98 Binary files /dev/null and b/Open-ILS/web/images/sub_holds_hist_off.jpg differ diff --git a/Open-ILS/web/images/sub_holds_hist_on.jpg b/Open-ILS/web/images/sub_holds_hist_on.jpg new file mode 100644 index 0000000000..020abe9d98 Binary files /dev/null and b/Open-ILS/web/images/sub_holds_hist_on.jpg differ diff --git a/Open-ILS/web/images/sub_holds_off.jpg b/Open-ILS/web/images/sub_holds_off.jpg new file mode 100644 index 0000000000..b888359b3d Binary files /dev/null and b/Open-ILS/web/images/sub_holds_off.jpg differ diff --git a/Open-ILS/web/images/sub_holds_on.jpg b/Open-ILS/web/images/sub_holds_on.jpg new file mode 100644 index 0000000000..9505638c9a Binary files /dev/null and b/Open-ILS/web/images/sub_holds_on.jpg differ diff --git a/Open-ILS/web/images/sub_prefs_info_off.jpg b/Open-ILS/web/images/sub_prefs_info_off.jpg new file mode 100644 index 0000000000..896e227a76 Binary files /dev/null and b/Open-ILS/web/images/sub_prefs_info_off.jpg differ diff --git a/Open-ILS/web/images/sub_prefs_info_on.jpg b/Open-ILS/web/images/sub_prefs_info_on.jpg new file mode 100644 index 0000000000..0895969b58 Binary files /dev/null and b/Open-ILS/web/images/sub_prefs_info_on.jpg differ diff --git a/Open-ILS/web/images/sub_prefs_notify_off.jpg b/Open-ILS/web/images/sub_prefs_notify_off.jpg new file mode 100644 index 0000000000..55df9da4e6 Binary files /dev/null and b/Open-ILS/web/images/sub_prefs_notify_off.jpg differ diff --git a/Open-ILS/web/images/sub_prefs_notify_on.jpg b/Open-ILS/web/images/sub_prefs_notify_on.jpg new file mode 100644 index 0000000000..fd536a8945 Binary files /dev/null and b/Open-ILS/web/images/sub_prefs_notify_on.jpg differ diff --git a/Open-ILS/web/images/sub_prefs_search_off.jpg b/Open-ILS/web/images/sub_prefs_search_off.jpg new file mode 100644 index 0000000000..89115f6a80 Binary files /dev/null and b/Open-ILS/web/images/sub_prefs_search_off.jpg differ diff --git a/Open-ILS/web/images/sub_prefs_search_on.jpg b/Open-ILS/web/images/sub_prefs_search_on.jpg new file mode 100644 index 0000000000..3eab9faa2f Binary files /dev/null and b/Open-ILS/web/images/sub_prefs_search_on.jpg differ diff --git a/Open-ILS/web/images/submit_btn.gif b/Open-ILS/web/images/submit_btn.gif new file mode 100644 index 0000000000..5286943032 Binary files /dev/null and b/Open-ILS/web/images/submit_btn.gif differ diff --git a/Open-ILS/web/images/surveykclsorg.jpg b/Open-ILS/web/images/surveykclsorg.jpg new file mode 100644 index 0000000000..51d8d43a08 Binary files /dev/null and b/Open-ILS/web/images/surveykclsorg.jpg differ diff --git a/Open-ILS/web/images/telephonenotices.png b/Open-ILS/web/images/telephonenotices.png new file mode 100644 index 0000000000..3647d58a6c Binary files /dev/null and b/Open-ILS/web/images/telephonenotices.png differ diff --git a/Open-ILS/web/images/thebest.jpg b/Open-ILS/web/images/thebest.jpg new file mode 100644 index 0000000000..a41e73cc1a Binary files /dev/null and b/Open-ILS/web/images/thebest.jpg differ diff --git a/Open-ILS/web/images/tool_back.gif b/Open-ILS/web/images/tool_back.gif new file mode 100644 index 0000000000..37d1278ebd Binary files /dev/null and b/Open-ILS/web/images/tool_back.gif differ diff --git a/Open-ILS/web/images/tool_back.png b/Open-ILS/web/images/tool_back.png new file mode 100644 index 0000000000..41a13e21ee Binary files /dev/null and b/Open-ILS/web/images/tool_back.png differ diff --git a/Open-ILS/web/images/tool_font.gif b/Open-ILS/web/images/tool_font.gif new file mode 100644 index 0000000000..9dc10a95f6 Binary files /dev/null and b/Open-ILS/web/images/tool_font.gif differ diff --git a/Open-ILS/web/images/tool_forward.gif b/Open-ILS/web/images/tool_forward.gif new file mode 100644 index 0000000000..db0d800acc Binary files /dev/null and b/Open-ILS/web/images/tool_forward.gif differ diff --git a/Open-ILS/web/images/tool_forward.png b/Open-ILS/web/images/tool_forward.png new file mode 100644 index 0000000000..582a6b99b9 Binary files /dev/null and b/Open-ILS/web/images/tool_forward.png differ diff --git a/Open-ILS/web/images/tool_help.gif b/Open-ILS/web/images/tool_help.gif new file mode 100644 index 0000000000..2a3de8628b Binary files /dev/null and b/Open-ILS/web/images/tool_help.gif differ diff --git a/Open-ILS/web/images/tool_help.png b/Open-ILS/web/images/tool_help.png new file mode 100644 index 0000000000..3007c20b77 Binary files /dev/null and b/Open-ILS/web/images/tool_help.png differ diff --git a/Open-ILS/web/images/tool_home.gif b/Open-ILS/web/images/tool_home.gif new file mode 100644 index 0000000000..9b83ccf9c0 Binary files /dev/null and b/Open-ILS/web/images/tool_home.gif differ diff --git a/Open-ILS/web/images/tool_home.png b/Open-ILS/web/images/tool_home.png new file mode 100644 index 0000000000..062020087a Binary files /dev/null and b/Open-ILS/web/images/tool_home.png differ diff --git a/Open-ILS/web/images/tool_mail.gif b/Open-ILS/web/images/tool_mail.gif new file mode 100644 index 0000000000..83c357369e Binary files /dev/null and b/Open-ILS/web/images/tool_mail.gif differ diff --git a/Open-ILS/web/images/tool_print.gif b/Open-ILS/web/images/tool_print.gif new file mode 100644 index 0000000000..d3d7ee388e Binary files /dev/null and b/Open-ILS/web/images/tool_print.gif differ diff --git a/Open-ILS/web/images/tool_print.png b/Open-ILS/web/images/tool_print.png new file mode 100644 index 0000000000..2c0dc0bb01 Binary files /dev/null and b/Open-ILS/web/images/tool_print.png differ diff --git a/Open-ILS/web/images/utils-corner-left.png b/Open-ILS/web/images/utils-corner-left.png new file mode 100644 index 0000000000..db70a75741 Binary files /dev/null and b/Open-ILS/web/images/utils-corner-left.png differ diff --git a/Open-ILS/web/images/utils-corner-mid.png b/Open-ILS/web/images/utils-corner-mid.png new file mode 100644 index 0000000000..80d4857eb3 Binary files /dev/null and b/Open-ILS/web/images/utils-corner-mid.png differ diff --git a/Open-ILS/web/images/utils-corner-right.jpg b/Open-ILS/web/images/utils-corner-right.jpg new file mode 100644 index 0000000000..1559897142 Binary files /dev/null and b/Open-ILS/web/images/utils-corner-right.jpg differ diff --git a/Open-ILS/web/images/utils-corner-right.png b/Open-ILS/web/images/utils-corner-right.png new file mode 100644 index 0000000000..303ab75156 Binary files /dev/null and b/Open-ILS/web/images/utils-corner-right.png differ diff --git a/Open-ILS/web/images/utils-corner.jpg b/Open-ILS/web/images/utils-corner.jpg new file mode 100644 index 0000000000..4932a28672 Binary files /dev/null and b/Open-ILS/web/images/utils-corner.jpg differ diff --git a/Open-ILS/web/images/view_my_list.png b/Open-ILS/web/images/view_my_list.png new file mode 100644 index 0000000000..d5f1b83b16 Binary files /dev/null and b/Open-ILS/web/images/view_my_list.png differ diff --git a/Open-ILS/web/images/view_my_list_hover.png b/Open-ILS/web/images/view_my_list_hover.png new file mode 100644 index 0000000000..369cb1abbf Binary files /dev/null and b/Open-ILS/web/images/view_my_list_hover.png differ diff --git a/Open-ILS/web/images/walkingtour.jpg b/Open-ILS/web/images/walkingtour.jpg new file mode 100644 index 0000000000..cbbee59273 Binary files /dev/null and b/Open-ILS/web/images/walkingtour.jpg differ diff --git a/Open-ILS/web/images/womenartists.jpg b/Open-ILS/web/images/womenartists.jpg new file mode 100644 index 0000000000..87cf911d18 Binary files /dev/null and b/Open-ILS/web/images/womenartists.jpg differ diff --git a/Open-ILS/web/images/yearinreview2011.jpg b/Open-ILS/web/images/yearinreview2011.jpg new file mode 100644 index 0000000000..622ae191e2 Binary files /dev/null and b/Open-ILS/web/images/yearinreview2011.jpg differ diff --git a/Open-ILS/web/images/zinio_slide.jpg b/Open-ILS/web/images/zinio_slide.jpg new file mode 100644 index 0000000000..f076309e36 Binary files /dev/null and b/Open-ILS/web/images/zinio_slide.jpg differ diff --git a/Open-ILS/web/js/ui/default/opac/contentslider.js b/Open-ILS/web/js/ui/default/opac/contentslider.js new file mode 100644 index 0000000000..4231e80911 --- /dev/null +++ b/Open-ILS/web/js/ui/default/opac/contentslider.js @@ -0,0 +1,235 @@ +//** Featured Content Slider script- (c) Dynamic Drive DHTML code library: http://www.dynamicdrive.com. +//** May 2nd, 08'- Script rewritten and updated to 2.0. +//** June 12th, 08'- Script updated to v 2.3, which adds the following features: + //1) Changed behavior of script to actually collapse the previous content when the active one is shown, instead of just tucking it underneath the later. + //2) Added setting to reveal a content either via "click" or "mouseover" of pagination links (default is former). + //3) Added public function for jumping to a particular slide within a Featured Content instance using an arbitrary link, for example. + +//** July 11th, 08'- Script updated to v 2.4: + //1) Added ability to select a particular slide when the page first loads using a URL parameter (ie: mypage.htm?myslider=4 to select 4th slide in "myslider") + //2) Fixed bug where the first slide disappears when the mouse clicks or mouses over it when page first loads. + +var featuredcontentslider={ + +//3 variables below you can customize if desired: +ajaxloadingmsg: '', +bustajaxcache: true, //bust caching of external ajax page after 1st request? +enablepersist: true, //persist to last content viewed when returning to page? + +settingcaches: {}, //object to cache "setting" object of each script instance + +jumpTo:function(fcsid, pagenumber){ //public function to go to a slide manually. + this.turnpage(this.settingcaches[fcsid], pagenumber) +}, + +ajaxconnect:function(setting){ + var page_request = false + if (window.ActiveXObject){ //Test for support for ActiveXObject in IE first (as XMLHttpRequest in IE7 is broken) + try { + page_request = new ActiveXObject("Msxml2.XMLHTTP") + } + catch (e){ + try{ + page_request = new ActiveXObject("Microsoft.XMLHTTP") + } + catch (e){} + } + } + else if (window.XMLHttpRequest) // if Mozilla, Safari etc + page_request = new XMLHttpRequest() + else + return false + var pageurl=setting.contentsource[1] + page_request.onreadystatechange=function(){ + featuredcontentslider.ajaxpopulate(page_request, setting) + } + document.getElementById(setting.id).innerHTML=this.ajaxloadingmsg + var bustcache=(!this.bustajaxcache)? "" : (pageurl.indexOf("?")!=-1)? "&"+new Date().getTime() : "?"+new Date().getTime() + page_request.open('GET', pageurl+bustcache, true) + page_request.send(null) +}, + +ajaxpopulate:function(page_request, setting){ + if (page_request.readyState == 4 && (page_request.status==200 || window.location.href.indexOf("http")==-1)){ + document.getElementById(setting.id).innerHTML=page_request.responseText + this.buildpaginate(setting) + } +}, + +buildcontentdivs:function(setting){ + var alldivs=document.getElementById(setting.id).getElementsByTagName("div") + for (var i=0; i'+(typeof toc=="string"? toc.replace(/#increment/, i) : toc[i-1])+' ' + } + phtml=(nextprev[0]!=''? ' ' : '') + phtml + (nextprev[1]!=''? '' : '') + pdiv.innerHTML=phtml + } + var pdivlinks=pdiv.getElementsByTagName("a") + var toclinkscount=0 //var to keep track of actual # of toc links + for (var i=0; isetting.contentdivs.length-1){ //if this toc link is out of range (user defined more toc links then there are contents) + pdivlinks[i].style.display="none" //hide this toc link + continue + } + pdivlinks[i].setAttribute("rel", ++toclinkscount) //store page number inside toc link + pdivlinks[i][setting.revealtype]=function(){ + featuredcontentslider.turnpage(setting, this.getAttribute("rel")) + return false + } + setting.toclinks.push(pdivlinks[i]) + } + else if (this.css(pdivlinks[i], "prev", "check") || this.css(pdivlinks[i], "next", "check")){ //check for links with class "prev" or "next" + pdivlinks[i].onclick=function(){ + featuredcontentslider.turnpage(setting, this.className) + return false + } + } + } + this.turnpage(setting, setting.currentpage, true) + if (setting.autorotate[0]){ //if auto rotate enabled + pdiv[setting.revealtype]=function(){ + featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id]) + } + sliderdiv["onclick"]=function(){ //stop content slider when slides themselves are clicked on + featuredcontentslider.cleartimer(setting, window["fcsautorun"+setting.id]) + } + setting.autorotate[1]=setting.autorotate[1]+(1/setting.enablefade[1]*50) //add time to run fade animation (roughly) to delay between rotation + this.autorotate(setting) + } +}, + +urlparamselect:function(fcsid){ + var result=window.location.search.match(new RegExp(fcsid+"=(\\d+)", "i")) //check for "?featuredcontentsliderid=2" in URL + return (result==null)? null : parseInt(RegExp.$1) //returns null or index, where index (int) is the selected tab's index +}, + +turnpage:function(setting, thepage, autocall){ + var currentpage=setting.currentpage //current page # before change + var totalpages=setting.contentdivs.length + var turntopage=(/prev/i.test(thepage))? currentpage-1 : (/next/i.test(thepage))? currentpage+1 : parseInt(thepage) + turntopage=(turntopage<1)? totalpages : (turntopage>totalpages)? 1 : turntopage //test for out of bound and adjust + if (turntopage==setting.currentpage && typeof autocall=="undefined") //if a pagination link is clicked on repeatedly + return + setting.currentpage=turntopage + setting.contentdivs[turntopage-1].style.zIndex=++setting.topzindex + this.cleartimer(setting, window["fcsfade"+setting.id]) + setting.cacheprevpage=setting.prevpage + if (setting.enablefade[0]==true){ + setting.curopacity=0 + this.fadeup(setting) + } + if (setting.enablefade[0]==false){ //if fade is disabled, fire onChange event immediately (verus after fade is complete) + setting.contentdivs[setting.prevpage-1].style.display="none" //collapse last content div shown (it was set to "block") + setting.onChange(setting.prevpage, setting.currentpage) + } + setting.contentdivs[turntopage-1].style.visibility="visible" + setting.contentdivs[turntopage-1].style.display="block" + if (setting.prevpage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted) + this.css(setting.toclinks[setting.prevpage-1], "selected", "remove") + if (turntopage<=setting.toclinks.length) //make sure pagination link exists (may not if manually defined via "markup", and user omitted) + this.css(setting.toclinks[turntopage-1], "selected", "add") + setting.prevpage=turntopage + if (this.enablepersist) + this.setCookie("fcspersist"+setting.id, turntopage) +}, + +setopacity:function(setting, value){ //Sets the opacity of targetobject based on the passed in value setting (0 to 1 and in between) + var targetobject=setting.contentdivs[setting.currentpage-1] + if (targetobject.filters && targetobject.filters[0]){ //IE syntax + if (typeof targetobject.filters[0].opacity=="number") //IE6 + targetobject.filters[0].opacity=value*100 + else //IE 5.5 + targetobject.style.filter="alpha(opacity="+value*100+")" + } + else if (typeof targetobject.style.MozOpacity!="undefined") //Old Mozilla syntax + targetobject.style.MozOpacity=value + else if (typeof targetobject.style.opacity!="undefined") //Standard opacity syntax + targetobject.style.opacity=value + setting.curopacity=value +}, + +fadeup:function(setting){ + if (setting.curopacity<1){ + this.setopacity(setting, setting.curopacity+setting.enablefade[1]) + window["fcsfade"+setting.id]=setTimeout(function(){featuredcontentslider.fadeup(setting)}, 10) + } + else{ //when fade is complete + if (setting.cacheprevpage!=setting.currentpage) //if previous content isn't the same as the current shown div (happens the first time the page loads/ script is run) + setting.contentdivs[setting.cacheprevpage-1].style.display="none" //collapse last content div shown (it was set to "block") + setting.onChange(setting.cacheprevpage, setting.currentpage) + } +}, + +cleartimer:function(setting, timervar){ + if (typeof timervar!="undefined"){ + clearTimeout(timervar) + clearInterval(timervar) + if (setting.cacheprevpage!=setting.currentpage){ //if previous content isn't the same as the current shown div + setting.contentdivs[setting.cacheprevpage-1].style.display="none" + } + } +}, + +css:function(el, targetclass, action){ + var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig") + if (action=="check") + return needle.test(el.className) + else if (action=="remove") + el.className=el.className.replace(needle, "") + else if (action=="add") + el.className+=" "+targetclass +}, + +autorotate:function(setting){ + window["fcsautorun"+setting.id]=setInterval(function(){featuredcontentslider.turnpage(setting, "next")}, setting.autorotate[1]) +}, + +getCookie:function(Name){ + var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair + if (document.cookie.match(re)) //if cookie found + return document.cookie.match(re)[0].split("=")[1] //return its value + return null +}, + +setCookie:function(name, value){ + document.cookie = name+"="+value + +}, + + +init:function(setting){ + var persistedpage=this.getCookie("fcspersist"+setting.id) || 1 + var urlselectedpage=this.urlparamselect(setting.id) //returns null or index from: mypage.htm?featuredcontentsliderid=index + this.settingcaches[setting.id]=setting //cache "setting" object + setting.contentdivs=[] + setting.toclinks=[] + setting.topzindex=0 + setting.currentpage=urlselectedpage || ((this.enablepersist)? persistedpage : 1) + setting.prevpage=setting.currentpage + setting.revealtype="on"+(setting.revealtype || "click") + setting.curopacity=0 + setting.onChange=setting.onChange || function(){} + if (setting.contentsource[0]=="inline") + this.buildpaginate(setting) + if (setting.contentsource[0]=="ajax") + this.ajaxconnect(setting) +} + +} \ No newline at end of file diff --git a/Open-ILS/web/js/ui/kcls/circ/selfcheck/floating.js b/Open-ILS/web/js/ui/kcls/circ/selfcheck/floating.js new file mode 100644 index 0000000000..b8b57809de --- /dev/null +++ b/Open-ILS/web/js/ui/kcls/circ/selfcheck/floating.js @@ -0,0 +1,223 @@ +/* Script by: www.jtricks.com + * Version: 20071017 + * Latest version: + * www.jtricks.com/javascript/navigation/floating.html + */ +var floatingMenuId = 'floatdiv'; +var floatingMenu = +{ + targetX: -250, + targetY: -75, + + hasInner: typeof(window.innerWidth) == 'number', + hasElement: typeof(document.documentElement) == 'object' + && typeof(document.documentElement.clientWidth) == 'number', + + menu: + document.getElementById + ? document.getElementById(floatingMenuId) + : document.all + ? document.all[floatingMenuId] + : document.layers[floatingMenuId] +}; + +floatingMenu.move = function () +{ + floatingMenu.menu.style.left = floatingMenu.nextX + 'px'; + floatingMenu.menu.style.top = floatingMenu.nextY + 'px'; +} + +floatingMenu.computeShifts = function () +{ + var de = document.documentElement; + + floatingMenu.shiftX = + floatingMenu.hasInner + ? pageXOffset + : floatingMenu.hasElement + ? de.scrollLeft + : document.body.scrollLeft; + if (floatingMenu.targetX < 0) + { + floatingMenu.shiftX += + floatingMenu.hasElement + ? de.clientWidth + : document.body.clientWidth; + } + + floatingMenu.shiftY = + floatingMenu.hasInner + ? pageYOffset + : floatingMenu.hasElement + ? de.scrollTop + : document.body.scrollTop; +floatingMenu.shiftY = ( floatingMenu.shiftY < 76 ) ? 76 : +floatingMenu.shiftY; + if (floatingMenu.targetY < -75) + { + if (floatingMenu.hasElement && floatingMenu.hasInner) + { + // Handle Opera 8 problems + floatingMenu.shiftY += + de.clientHeight > window.innerHeight + ? window.innerHeight + : de.clientHeight + } + else + { + floatingMenu.shiftY += + floatingMenu.hasElement + ? de.clientHeight + : document.body.clientHeight; + } + } +} + +floatingMenu.calculateCornerX = function() +{ + return 0; + if (floatingMenu.targetX != 'center') + return floatingMenu.shiftX + floatingMenu.targetX; + + var width = parseInt(floatingMenu.menu.offsetWidth); + + var cornerX = + floatingMenu.hasElement + ? (floatingMenu.hasInner + ? pageXOffset + : document.documentElement.scrollLeft) + + (document.documentElement.clientWidth - width)/2 + : document.body.scrollLeft + + (document.body.clientWidth - width)/2; + return cornerX; +}; + +floatingMenu.calculateCornerY = function() +{ + if (floatingMenu.targetY != 'center') + return floatingMenu.shiftY + floatingMenu.targetY; + + var height = parseInt(floatingMenu.menu.offsetHeight); + + // Handle Opera 8 problems + var clientHeight = + floatingMenu.hasElement && floatingMenu.hasInner + && document.documentElement.clientHeight + > window.innerHeight + ? window.innerHeight + : document.documentElement.clientHeight + + var cornerY = + floatingMenu.hasElement + ? (floatingMenu.hasInner + ? pageYOffset + : document.documentElement.scrollTop) + + (clientHeight - height)/2 + : document.body.scrollTop + + (document.body.clientHeight - height)/2; + return cornerY; +}; + +floatingMenu.doFloat = function() +{ + // Check if reference to menu was lost due + // to ajax manipuations + if (!floatingMenu.menu) + { + menu = document.getElementById + ? document.getElementById(floatingMenuId) + : document.all + ? document.all[floatingMenuId] + : document.layers[floatingMenuId]; + + initSecondary(); + } + + var stepX, stepY; + + floatingMenu.computeShifts(); + + var cornerX = floatingMenu.calculateCornerX(); + + var stepX = (cornerX - floatingMenu.nextX) * .07; + if (Math.abs(stepX) < .5) + { + stepX = cornerX - floatingMenu.nextX; + } + + var cornerY = floatingMenu.calculateCornerY(); + + var stepY = (cornerY - floatingMenu.nextY) * .07; + if (Math.abs(stepY) < .5) + { + stepY = cornerY - floatingMenu.nextY; + } + + if (Math.abs(stepX) > 0 || + Math.abs(stepY) > 0) + { + floatingMenu.nextX += stepX; + floatingMenu.nextY += stepY; + floatingMenu.move(); + } + + setTimeout('floatingMenu.doFloat()', 20); +}; + +// addEvent designed by Aaron Moore +floatingMenu.addEvent = function(element, listener, handler) +{ + if(typeof element[listener] != 'function' || + typeof element[listener + '_num'] == 'undefined') + { + element[listener + '_num'] = 0; + if (typeof element[listener] == 'function') + { + element[listener + 0] = element[listener]; + element[listener + '_num']++; + } + element[listener] = function(e) + { + var r = true; + e = (e) ? e : window.event; + for(var i = element[listener + '_num'] -1; i >= 0; i--) + { + if(element[listener + i](e) == false) + r = false; + } + return r; + } + } + + //if handler is not already stored, assign it + for(var i = 0; i < element[listener + '_num']; i++) + if(element[listener + i] == handler) + return; + element[listener + element[listener + '_num']] = handler; + element[listener + '_num']++; +}; + +floatingMenu.init = function() +{ + floatingMenu.initSecondary(); + floatingMenu.doFloat(); +}; + +// Some browsers init scrollbars only after +// full document load. +floatingMenu.initSecondary = function() +{ + floatingMenu.computeShifts(); + floatingMenu.nextX = floatingMenu.calculateCornerX(); + floatingMenu.nextY = floatingMenu.calculateCornerY(); + floatingMenu.move(); +} + +if (document.layers) + floatingMenu.addEvent(window, 'onload', floatingMenu.init); +else +{ + floatingMenu.init(); + floatingMenu.addEvent(window, 'onload', + floatingMenu.initSecondary); +} \ No newline at end of file diff --git a/Open-ILS/web/js/ui/kcls/circ/selfcheck/payment.js b/Open-ILS/web/js/ui/kcls/circ/selfcheck/payment.js new file mode 100644 index 0000000000..1c58d63e08 --- /dev/null +++ b/Open-ILS/web/js/ui/kcls/circ/selfcheck/payment.js @@ -0,0 +1,120 @@ +function PaymentForm() {} +var proto = (typeof(SelfCheckManager) == "undefined" ? + PaymentForm : SelfCheckManager).prototype; + +proto.drawPayFinesPage = function(patron, total, xacts, onPaymentSubmit) { + if (typeof(this.authtoken) == "undefined") + this.authtoken = patron.session; + + dojo.query("span", "oils-selfck-cc-payment-summary")[0].innerHTML = total; + + var d = new Date().getFullYear(); + oilsSelfckCCNumber.attr('value', ''); + oilsSelfckCCCVV.attr('value', ''); + oilsSelfckCCMonth.attr('value', '01'); + oilsSelfckCCYear.attr('value', d); + oilsSelfckCCFName.attr('value', patron.first_given_name()); + oilsSelfckCCLName.attr('value', patron.family_name()); + oilsSelfckCCYear.constraints.min=d; + oilsSelfckCCYear.constraints.max=d+10; + + var addr = patron.billing_address() || patron.mailing_address(); + + if (typeof(addr) != "object") { + /* still don't have usable address? try getting better user object. */ + fieldmapper.standardRequest( + ["open-ils.actor", "open-ils.actor.user.fleshed.retrieve"], { + "params": [ + patron.session, patron.id(), [ + "billing_address", "mailing_address" + ] + ], + "async": false, + "oncomplete": function(r) { + var usr = openils.Util.readResponse(r); + if (usr) + addr = usr.billing_address() || usr.mailing_address(); + } + } + ); + } + + if (addr) { + oilsSelfckCCStreet.attr('value', addr.street1()+' '+addr.street2()); + oilsSelfckCCCity.attr('value', addr.city()); + oilsSelfckCCState.attr('value', addr.state()); + oilsSelfckCCZip.attr('value', addr.post_code()); + } + + dojo.connect(oilsSelfckEditDetails, 'onChange', + function(newVal) { + dojo.forEach( + [ oilsSelfckCCFName, + oilsSelfckCCLName, + oilsSelfckCCStreet, + oilsSelfckCCCity, + oilsSelfckCCState, + oilsSelfckCCZip + ], + function(dij) { dij.attr('disabled', !newVal); } + ); + } + ); + + + var self = this; + dojo.connect(oilsSelfckCCSubmit, 'onClick', + function() { + /* XXX better to replace this check on progressDialog with some + * kind of passed-in function to support different use cases */ + if (typeof(progressDialog) != "undefined") + progressDialog.show(true); + + self.sendCCPayment(patron, xacts, onPaymentSubmit); + } + ); +} + +// In this form, this code only supports global on/off credit card +// payments and does not dissallow payments to transactions that started +// at remote locations or transactions that have accumulated billings at +// remote locations that dissalow credit card payments. +// TODO add per-transaction blocks for orgs that do not support CC payments + +proto.sendCCPayment = function(patron, xacts, onPaymentSubmit) { + this.keepMeLoggedIn(); + var args = { + userid : patron.id(), + payment_type : 'credit_card_payment', + payments : xacts, + cc_args : { + where_process : 1, + //type : 'MasterCard',//oilsSelfckCCType.attr('value'), + number : oilsSelfckCCNumber.attr('value'), + cvv2 : oilsSelfckCCCVV.attr('value'), + expire_year : oilsSelfckCCYear.attr('value'), + expire_month : oilsSelfckCCMonth.attr('value'), + billing_first : oilsSelfckCCFName.attr('value'), + billing_last : oilsSelfckCCLName.attr('value'), + billing_address : oilsSelfckCCStreet.attr('value'), + billing_city : oilsSelfckCCCity.attr('value'), + billing_state : oilsSelfckCCState.attr('value'), + billing_zip : oilsSelfckCCZip.attr('value') + } + } + + var resp = fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.money.payment'], + {params : [this.authtoken, args, patron.last_xact_id()]} + ); + + if (typeof(progressDialog) != "undefined") + progressDialog.hide(); + + if (typeof(onPaymentSubmit) == "function") { + onPaymentSubmit(resp); + } else { + var evt = openils.Event.parse(resp); + if (evt) alert(evt); + } +} diff --git a/Open-ILS/web/js/ui/kcls/circ/selfcheck/selfcheck.js b/Open-ILS/web/js/ui/kcls/circ/selfcheck/selfcheck.js new file mode 100644 index 0000000000..38dc721519 --- /dev/null +++ b/Open-ILS/web/js/ui/kcls/circ/selfcheck/selfcheck.js @@ -0,0 +1,1508 @@ +dojo.require('dojo.date.locale'); +dojo.require('dojo.date.stamp'); +dojo.require('dijit.form.CheckBox'); +dojo.require('dijit.form.NumberSpinner'); +dojo.require('openils.CGI'); +dojo.require('openils.Util'); +dojo.require('openils.User'); +dojo.require('openils.Event'); +dojo.require('openils.widget.ProgressDialog'); +dojo.require('openils.widget.OrgUnitFilteringSelect'); + +dojo.requireLocalization('openils.circ', 'selfcheck'); +var localeStrings = dojo.i18n.getLocalization('openils.circ', 'selfcheck'); +var selfCheckMgr; +var itemsOutCirc = []; +var itemsOutMod = []; +var itemsOutCopy = []; +var TIMEOUT = 60; // logout timer + + +const SET_BARCODE_REGEX = 'opac.barcode_regex'; +const SET_PATRON_TIMEOUT = 'circ.selfcheck.patron_login_timeout'; +const SET_AUTO_OVERRIDE_EVENTS = 'circ.selfcheck.auto_override_checkout_events'; +const SET_PATRON_PASSWORD_REQUIRED = 'circ.selfcheck.patron_password_required'; +const SET_AUTO_RENEW_INTERVAL = 'circ.checkout_auto_renew_age'; +const SET_WORKSTATION_REQUIRED = 'circ.selfcheck.workstation_required'; +const SET_ALERT_POPUP = 'circ.selfcheck.alert.popup'; +const SET_ALERT_SOUND = 'circ.selfcheck.alert.sound'; +const SET_CC_PAYMENT_ALLOWED = 'credit.payments.allow'; +// This setting only comes into play if COPY_NOT_AVAILABLE is in the SET_AUTO_OVERRIDE_EVENTS list +const SET_BLOCK_CHECKOUT_ON_COPY_STATUS = 'circ.selfcheck.block_checkout_on_copy_status'; + +function SelfCheckManager() { + selfCheckMgr = this; + switchTo('step1'); + + this.timer = null; + this.cgi = new openils.CGI(); + this.staff = null; + this.workstation = null; + this.authtoken = null; + + this.patron = null; + this.patronBarcodeRegex = null; + + this.checkouts = []; + this.itemsOut = []; + + // During renewals, keep track of the ID of the previous circulation. + // Previous circ is used for tracking failed renewals (for receipts). + this.prevCirc = null; + + // current item barcode + this.itemBarcode = null; + + // are we currently performing a renewal? + this.isRenewal = false; + + // dict of org unit settings for "here" + this.orgSettings = {}; + + // Construct a mock checkout for debugging purposes + if(this.mockCheckouts = this.cgi.param('mock-circ')) { + + this.mockCheckout = { + payload : { + record : new fieldmapper.mvr(), + copy : new fieldmapper.acp(), + circ : new fieldmapper.circ() + } + }; + + this.mockCheckout.payload.record.title('Jazz improvisation for guitar'); + this.mockCheckout.payload.record.author('Wise, Les'); + this.mockCheckout.payload.record.isbn('0634033565'); + this.mockCheckout.payload.copy.barcode('123456789'); + this.mockCheckout.payload.circ.renewal_remaining(1); + this.mockCheckout.payload.circ.parent_circ(1); + this.mockCheckout.payload.circ.due_date('2012-12-21'); + } + + this.initPrinter(); +} + +SelfCheckManager.prototype.keepMeLoggedIn = function() { + //alert(this.timer); + if(this.timer) try {clearTimeout(this.timer)} catch(e){} + this.timer = setTimeout('selfCheckMgr.logoutPatron();', TIMEOUT*1000); +} + +/** + * Fetch the org-unit settings, initialize the display, etc. + */ +SelfCheckManager.prototype.init = function() { + this.staff = openils.User.user; + this.workstation = openils.User.workstation; + this.authtoken = openils.User.authtoken; + this.loadOrgSettings(); + + this.circTbody = dojo.byId('oils-selfck-circ-tbody'); + this.itemsOutTbody = dojo.byId('oils-selfck-circ-out-tbody'); + + // workstation is required but none provided + if(this.orgSettings[SET_WORKSTATION_REQUIRED] && !this.workstation) { + if(confirm(dojo.string.substitute(localeStrings.WORKSTATION_REQUIRED))) { + this.registerWorkstation(); + } + return; + } + + var self = this; + // connect onclick handlers to the various navigation links + var linkHandlers = { + 'oils-selfck-hold-details-link' : function() { self.drawHoldsPage(true); }, + 'oils-selfck-view-fines-link' : function() { self.drawFinesPage(); openils.Util.show('oils-selfck-fines-tbody'); openils.Util.hide('pay_fines'); }, + 'oils-selfck-pay-fines-link' : function() { + switchTo('step3','step3c'); + openils.Util.hide('oils-selfck-fines-tbody'); + openils.Util.show('pay_fines'); + self.keepMeLoggedIn(); + self.drawPayFinesPage( + self.patron, + self.getSelectedFinesTotal(), + self.getSelectedFineTransactions(), + function(resp) { + var evt = openils.Event.parse(resp); + if(evt) { + var message = evt + ''; + if(evt.textcode == 'CREDIT_PROCESSOR_DECLINED_TRANSACTION' && evt.payload) + message += '\n' + evt.payload.error_message; + self.handleAlert(message, true, 'payment-failure'); + return; + } + self.patron.last_xact_id(resp.last_xact_id); + self.printPaymentReceipt( + resp, + function() { + self.updateFinesSummary(); + self.drawFinesPage(); + } + ); + } + ); + }, + //'oils-selfck-nav-home' : function() { self.drawCircPage(); }, + 'oils-selfck-nav-logout' : function() { self.logoutPatron(); }, + 'oils-selfck-nav-logout-print' : function() { self.logoutPatron(true); }, + 'oils-selfck-items-out-details-link' : function() { self.drawItemsOutPage(); }, + //'oils-selfck-print-list-link' : function() { self.printList(); } + } + + for(var id in linkHandlers) { + //var obj1 = dojo.byId(id); + //obj1.onclick = linkHandlers[id]; + dojo.connect(dojo.byId(id), 'onclick', linkHandlers[id]); + } + + + if(this.cgi.param('patron')) { + + // Patron barcode via cgi param. Mainly used for debugging and + // only works if password is not required by policy + this.loginPatron(this.cgi.param('patron')); + + } else { + this.drawLoginPage(); + } + + /** + * To test printing, pass a URL param of 'testprint'. The value for the param + * should be a JSON string like so: [{circ:}, ...] + */ + var testPrint = this.cgi.param('testprint'); + if(testPrint) { + this.checkouts = JSON2js(testPrint); + this.printSessionReceipt(); + this.checkouts = []; + } +} + + +SelfCheckManager.prototype.getSelectedFinesTotal = function() { + var total = 0; + dojo.forEach( + dojo.query("[name=selector]", this.finesTbody), + function(input) { + if(input.checked) + total += Number(input.balance_owed); + } + ); + return total.toFixed(2); +}; + +SelfCheckManager.prototype.getSelectedFineTransactions = function() { + return dojo.query("[name=selector]", this.finesTbody). + filter(function (o) { return o.checked }). + map( + function (o) { + return [ + o.getAttribute("xact"), + Number(o.balance_owed).toFixed(2) + ]; + } + ); +}; + +/** + * Registers a new workstion + */ +SelfCheckManager.prototype.registerWorkstation = function() { + + oilsSelfckWsDialog.show(); + + new openils.User().buildPermOrgSelector( + 'REGISTER_WORKSTATION', + oilsSelfckWsLocSelector, + this.staff.home_ou() + ); + + + var self = this; + dojo.connect(oilsSelfckWsSubmit, 'onClick', + + function() { + oilsSelfckWsDialog.hide(); + var name = oilsSelfckWsLocSelector.attr('displayedValue') + '-' + oilsSelfckWsName.attr('value'); + + var res = fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.workstation.register'], + { params : [ + self.authtoken, name, oilsSelfckWsLocSelector.attr('value') + ] + } + ); + + if(evt = openils.Event.parse(res)) { + if(evt.textcode == 'WORKSTATION_NAME_EXISTS') { + if(confirm(localeStrings.WORKSTATION_EXISTS)) { + location.href = location.href.replace(/\?.*/, '') + '?ws=' + name; + } else { + self.registerWorkstation(); + } + return; + } else { + alert(evt); + } + } else { + location.href = location.href.replace(/\?.*/, '') + '?ws=' + name; + } + } + ); +} + +/** + * Loads the org unit settings + */ +SelfCheckManager.prototype.loadOrgSettings = function() { + + var settings = fieldmapper.aou.fetchOrgSettingBatch( + this.staff.ws_ou(), [ + SET_BARCODE_REGEX, + SET_PATRON_TIMEOUT, + SET_ALERT_POPUP, + SET_ALERT_SOUND, + SET_AUTO_OVERRIDE_EVENTS, + SET_BLOCK_CHECKOUT_ON_COPY_STATUS, + SET_PATRON_PASSWORD_REQUIRED, + SET_AUTO_RENEW_INTERVAL, + SET_WORKSTATION_REQUIRED, + SET_CC_PAYMENT_ALLOWED + ] + ); + + for(k in settings) { + if(settings[k]) + this.orgSettings[k] = settings[k].value; + } + + if(settings[SET_BARCODE_REGEX]) + this.patronBarcodeRegex = new RegExp(settings[SET_BARCODE_REGEX].value); +} + +SelfCheckManager.prototype.drawLoginPage = function() { + var self = this; + var bcHandler = function(barcode) { + // handle patron barcode entry + + if(self.orgSettings[SET_PATRON_PASSWORD_REQUIRED]) { + + // password is required. wire up the scan box to read it + self.updateScanBox({ + msg : 'Please enter your password', // TODO i18n + handler : function(pw) { self.loginPatron(barcode, pw); }, + password : true + }); + + } else { + // password is not required, go ahead and login + self.loginPatron(barcode); + } + }; + + this.updateScanBox({ + msg : 'Please log in with your library barcode.', // TODO + handler : bcHandler + }); + + var txtBox = (dojo.byId('step2').style.display=='none') ? 'patron-login-username' : 'patron-login-password'; + try{var a=dojo.byId(txtBox);a.focus();a.select();}catch(e){} +} + +/** + * Login the patron. + */ +SelfCheckManager.prototype.loginPatron = function(barcode_or_usrname, passwd) { + + //if(this.orgSettings[SET_PATRON_PASSWORD_REQUIRED]) { // password always reqired, per KCLS - fail safe + if(!passwd) { + // would only happen in dev/debug mode when using the patron= param + alert('password required by org setting. remove patron= from URL'); + return; + } + + var barcode = null; + var usrname = null; + if(barcode_or_usrname.match(this.patronBarcodeRegex)) { + barcode = barcode_or_usrname; + } else { + usrname = barcode_or_usrname; + } + // patron password is required. Verify it. + + var res = fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.verify_user_password'], + {params : [this.authtoken, barcode, usrname, hex_md5(passwd)]} + ); + + if(res == 0) { + // user-not-found results in login failure + this.handleAlert( + dojo.string.substitute(localeStrings.LOGIN_FAILED, [barcode || usrname]), + false, 'login-failure' + ); + this.drawLoginPage(); + openils.Util.show('back_to_login'); + return; + } + //} + + // retrieve the fleshed user by barcode + var patron_id = fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.user.retrieve_id_by_barcode_or_username'], + {params : [this.authtoken, barcode, usrname]} + ); + + this.patron = fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.user.fleshed.retrieve.authoritative'], + {params : [this.authtoken, patron_id]} + ); + + var evt = openils.Event.parse(this.patron); + if(evt) { + this.handleAlert( + dojo.string.substitute(localeStrings.LOGIN_FAILED, [barcode || usrname]), + false, 'login-failure' + ); + this.drawLoginPage(); + openils.Util.show('back_to_login'); + + } else { + + this.handleAlert('', true, 'login-success'); + dojo.byId('user_name').innerHTML = + dojo.string.substitute(localeStrings.WELCOME_BANNER, [this.patron.first_given_name()]); + dojo.byId('oils-selfck-status-div').innerHTML = ''; + dojo.byId('oils-selfck-status-div2').innerHTML = ''; + dojo.byId('oils-selfck-status-div3').innerHTML = ''; + openils.Util.hide('back_to_login'); + this.drawCircPage(); + } +} + + +SelfCheckManager.prototype.handleAlert = function(message, shouldPopup, sound) { + console.log("Handling alert " + message); + + dojo.byId('oils-selfck-status-div').innerHTML = message; + if(!this.patron){ + dojo.byId('oils-selfck-status-div2').innerHTML = message; + dojo.byId('oils-selfck-status-div3').innerHTML = message; + } + + + if(shouldPopup) + openils.Util.addCSSClass( dojo.byId('oils-selfck-status-div'), 'checkout_failure' ); + else + openils.Util.removeCSSClass( dojo.byId('oils-selfck-status-div'), 'checkout_failure' ); + + if(message && shouldPopup && this.orgSettings[SET_ALERT_POPUP]) + alert(message); + + if(this.orgSettings[SET_ALERT_SOUND]) + openils.Util.playAudioUrl(SelfCheckManager.audioConfig[sound]); +} + + +/** + * Manages the main input box + * @param msg The context message to display with the box + * @param clearOnly Don't update the context message, just clear the value and re-focus + * @param handler Optional "on-enter" handler. + */ +SelfCheckManager.prototype.updateScanBox = function(args) { + args = args || {}; + + if(args.select) { + selfckScanBox.domNode.select(); + } else { + selfckScanBox.attr('value', ''); + } + + if(args.password) { + selfckScanBox.domNode.setAttribute('type', 'password'); + } else { + selfckScanBox.domNode.setAttribute('type', ''); + } + + if(args.value) + selfckScanBox.attr('value', args.value); + + if(args.msg) + dojo.byId('oils-selfck-scan-text').innerHTML = args.msg; + + if(selfckScanBox._lastHandler && (args.handler || args.clearHandler)) { + dojo.disconnect(selfckScanBox._lastHandler); + } + + if(args.handler) { + + selfckScanBox._lastHandler = dojo.connect( + selfckScanBox, + 'onKeyDown', + function(e) { + if(e.keyCode == dojo.keys.ESCAPE) + selfCheckMgr.logoutPatron(true); + if(e.keyCode != dojo.keys.ENTER) + return; + args.handler(selfckScanBox.attr('value')); + } + ); + } + + selfckScanBox.focus(); +} + +/** + * Sets up the checkout/renewal interface + */ +SelfCheckManager.prototype.drawCircPage = function() { + this.keepMeLoggedIn(); + openils.Util.show('oils-selfck-circ-tbody', 'table-row-group'); + switchTo('step3'); + + var self = this; + this.updateScanBox({ + msg : 'Please enter an item barcode', // TODO i18n + handler : function(barcode) { + openils.Util.show('oils-selfck-fines-tbody'); + openils.Util.hide('pay_fines'); switchTo('step3'); + self.checkout(barcode); } + }); + + if(!this.circTemplate) + this.circTemplate = this.circTbody.removeChild(dojo.byId('oils-selfck-circ-row')); + + // fines summary + this.updateFinesSummary(); + + // holds summary + this.updateHoldsSummary(); + + // items out summary + this.updateCircSummary(); + + // render mock checkouts for debugging? + if(this.mockCheckouts) { + for(var i in [1,2,3]) + this.displayCheckout(this.mockCheckout, 'checkout'); + } +} + + +SelfCheckManager.prototype.updateFinesSummary = function() { + var self = this; + + // fines summary + fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.user.fines.summary'], + { async : true, + params : [this.authtoken, this.patron.id()], + oncomplete : function(r) { + var summary = openils.Util.readResponse(r); + var finesSum = dojo.byId('acct_fines'); + var bal = summary.balance_owed(); + var bal2 = parseFloat(bal); + + if(bal2>0) {finesSum.style.color="red"; openils.Util.show('oils-selfck-pay-fines-link');} + finesSum.innerHTML = dojo.string.substitute(localeStrings.TOTAL_FINES_ACCOUNT, [bal2.toFixed(2)]); + self.creditPayableBalance = bal2+''; + } + } + ); +} + + +SelfCheckManager.prototype.drawItemsOutPage = function() { + this.keepMeLoggedIn(); + switchTo('step3','step3d'); + + if(!this.outTemplate) + this.outTemplate = this.itemsOutTbody.removeChild(dojo.byId('oils-selfck-circ-out-row')); + while(this.itemsOutTbody.childNodes[0]) + this.itemsOutTbody.removeChild(this.itemsOutTbody.childNodes[0]); + + progressDialog.show(true); + var self = this; + + fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.actor.user.checked_out.atomic'], + { + async : true, + params : [this.authtoken, this.patron.id()], + oncomplete : function(r) { + var resp = openils.Util.readResponse(r); + + var circs = resp.sort( + function(a, b) { + if(a.circ.due_date() > b.circ.due_date()) + return -1; + return 1; + } + ); + + self.itemsOut = []; + dojo.forEach(circs, + function(circ) { + self.itemsOut.push(circ.circ.id()); + handleCheckedItems(circ); + } + ); + progressDialog.hide(); + } + } + ); +} + +function handleCheckedItems(circ) { + var self = selfCheckMgr; + var row = self.outTemplate.cloneNode(true); + + self.byName(row,'barcode').innerHTML = circ.copy.barcode(); + self.byName(row,'title').innerHTML = circ.record.title(); + self.byName(row,'author').innerHTML = circ.record.author(); + if(dojo.date.stamp.fromISOString(circ.circ.due_date())<(new Date())) self.byName(row,'due_date').style.color="red"; + self.byName(row,'due_date').innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(circ.circ.due_date()), {selector: 'date', fullYear: true}); + self.byName(row,'format').innerHTML = circ.record.types_of_resource()[0]; + + self.itemsOutTbody.appendChild(row); +} + +SelfCheckManager.prototype.goToTab = function(name) { + this.tabName = name; + + openils.Util.hide('oils-selfck-fines-page'); + openils.Util.hide('oils-selfck-payment-page'); + openils.Util.hide('oils-selfck-holds-page'); + openils.Util.hide('oils-selfck-circ-page'); + openils.Util.hide('oils-selfck-pay-fines-link'); + + switch(name) { + case 'checkout': + openils.Util.show('oils-selfck-circ-page'); + break; + case 'items_out': + openils.Util.show('oils-selfck-circ-page'); + break; + case 'holds': + openils.Util.show('oils-selfck-holds-page'); + break; + case 'fines': + openils.Util.show('oils-selfck-fines-page'); + break; + case 'payment': + openils.Util.show('oils-selfck-payment-page'); + break; + } +} + + +SelfCheckManager.prototype.printList = function(which) { + this.keepMeLoggedIn(); + switch(which) { + case 'checkout': + this.printSessionReceipt(); + break; + case 'items_out': + this.printItemsOutReceipt(); + break; + case 'holds': + this.printHoldsReceipt(); + break; + case 'fines': + this.printFinesReceipt(); + break; + } +} + +SelfCheckManager.prototype.updateHoldsSummary = function() { + if(!this.holdsSummary) { + var summary = fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.holds.user_summary'], + {params : [this.authtoken, this.patron.id()]} + ); + + this.holdsSummary = {}; + this.holdsSummary.ready = Number(summary['4']); + this.holdsSummary.total = 0; + + for(var i in summary) + this.holdsSummary.total += Number(summary[i]); + } + + dojo.byId('oils-selfck-holds-total').innerHTML =dojo.string.substitute("${0}) Item"+(this.holdsSummary.total==1?"":"s"),[this.holdsSummary.total]); + dojo.byId('oils-selfck-holds-ready').innerHTML =dojo.string.substitute("${0}) Item"+(this.holdsSummary.ready==1?"":"s"),[this.holdsSummary.ready]); +} + + +SelfCheckManager.prototype.updateCircSummary = function(increment) { + if(!this.circSummary) { + + var summary = fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.user.checked_out.count'], + {params : [this.authtoken, this.patron.id()]} + ); + + this.circSummary = { + total : Number(summary.out) + Number(summary.overdue), + overdue : Number(summary.overdue), + session : 0 + }; + } + + if(increment) { + // local checkout occurred. Add to the total and the session. + this.circSummary.total += 1; + this.circSummary.session += 1; + } + + dojo.byId('oils-selfck-circ-account-total').innerHTML = dojo.string.substitute("${0}) Item"+(this.circSummary.total==1?"":"s"), [this.circSummary.total]); + + /* + dojo.byId('oils-selfck-circ-session-total').innerHTML = + dojo.string.substitute( + localeStrings.TOTAL_ITEMS_SESSION, + [this.circSummary.session] + ); + */ +} + + +SelfCheckManager.prototype.drawHoldsPage = function(bool) { + this.keepMeLoggedIn(); + if(bool) switchTo('step3','step3f'); else switchTo('step3','step3e'); + + this.holdTbody = dojo.byId('oils-selfck-hold-tbody'); + this.readyTbody = dojo.byId('oils-selfck-rdy-tbody'); + if(!this.readyTemplate) + this.readyTemplate = this.readyTbody.removeChild(dojo.byId('oils-selfck-rdy-row')); + if(!this.holdTemplate) + this.holdTemplate = this.holdTbody.removeChild(dojo.byId('oils-selfck-hold-row')); + while(this.holdTbody.childNodes[0]) + this.holdTbody.removeChild(this.holdTbody.childNodes[0]); + while(this.readyTbody.childNodes[0]) + this.readyTbody.removeChild(this.readyTbody.childNodes[0]); + + progressDialog.show(true); + + var self = this; + fieldmapper.standardRequest( // fetch the hold IDs + + ['open-ils.circ', 'open-ils.circ.holds.id_list.retrieve'], + { async : true, + params : [this.authtoken, this.patron.id()], + + oncomplete : function(r) { + var ids = openils.Util.readResponse(r); + if(!ids || ids.length == 0) { + progressDialog.hide(); + return; + } + + fieldmapper.standardRequest( // fetch the hold objects with fleshed details + ['open-ils.circ', 'open-ils.circ.hold.details.batch.retrieve'], + { async : true, + params : [self.authtoken, ids], + + onresponse : function(rr) { + progressDialog.hide(); + self.drawHolds(openils.Util.readResponse(rr)); + } + } + ); + } + } + ); +} + +/** + * Fetch and add a single hold to the list of holds + */ +SelfCheckManager.prototype.drawHolds = function(holds) { + //this.keepMeLoggedIn(); + this.holds = holds; + progressDialog.hide(); + + var data = holds; + if(!data) return; + var row = this.holdTemplate.cloneNode(true); + var row2 = this.readyTemplate.cloneNode(true); + + //if(data.mvr.isbn()) { + // this.byName(row, 'jacket').setAttribute('src', '/opac/extras/ac/jacket/small/' + data.mvr.isbn()); + //} + + if(data.status == 4) { + this.byName(row2, 'title').innerHTML = data.mvr.title(); + this.byName(row2, 'format').innerHTML = data.mvr.types_of_resource()[0]; + this.byName(row2, 'lib').innerHTML = fieldmapper.aou.findOrgUnit(data.hold.pickup_lib()).name(); + if(dojo.date.stamp.fromISOString(data.hold.shelf_expire_time())<(new Date())) this.byName(row2, 'date').style.color="red"; + this.byName(row2, 'date').innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(data.hold.shelf_expire_time()), {selector: 'date', fullYear: true}); + this.readyTbody.appendChild(row2); + } else { + + this.byName(row, 'title').innerHTML = data.mvr.title(); + this.byName(row, 'author').innerHTML = data.mvr.author(); + this.byName(row, 'format').innerHTML = data.mvr.types_of_resource()[0]; + + // hold is still pending + this.byName(row, 'status').innerHTML = dojo.string.substitute(localeStrings.HOLD_STATUS_WAITING,[data.queue_position, data.potential_copies]); + this.holdTbody.appendChild(row); + } +} + + +SelfCheckManager.prototype.drawFinesPage = function() { + this.keepMeLoggedIn(); + // TODO add option to hid scanBox + // this.updateScanBox(...) + + //this.goToTab('fines'); + switchTo('step3','step3c'); + progressDialog.show(true); + + //if(this.creditPayableBalance > 0 && this.orgSettings[SET_CC_PAYMENT_ALLOWED]) + // openils.Util.show('oils-selfck-pay-fines-link', 'inline'); + + + this.finesTbody = dojo.byId('oils-selfck-fines-tbody'); + if(!this.finesTemplate) + this.finesTemplate = this.finesTbody.removeChild(dojo.byId('oils-selfck-fines-row')); + while(this.finesTbody.childNodes[0]) + this.finesTbody.removeChild(this.finesTbody.childNodes[0]); + +/* + // when user clicks on a selector checkbox, update the total owed + var updateSelected = function() { + var total = 0; + dojo.forEach( + dojo.query('[name=selector]', this.finesTbody), + function(input) { + if(input.checked) + total += Number(input.getAttribute('balance_owed')); + } + ); + + total = total.toFixed(2); + dojo.byId('oils-selfck-selected-total').innerHTML = + dojo.string.substitute(localeStrings.TOTAL_FINES_SELECTED, [total]); + } + + // wire up the batch on/off selector + var sel = dojo.byId('oils-selfck-fines-selector'); + sel.onchange = function() { + dojo.forEach( + dojo.query('[name=selector]', this.finesTbody), + function(input) { + input.checked = sel.checked; + } + ); + }; +*/ + var self = this; + var handler = function(dataList) { + + self.finesCount = dataList.length; + self.finesData = dataList; + + for(var i in dataList) { + + var data = dataList[i]; + var row = self.finesTemplate.cloneNode(true); + var type = data.transaction.xact_type(); + + if(type == 'circulation') { + self.byName(row, 'title').innerHTML = data.record.title(); + if(dojo.date.stamp.fromISOString(data.circ.due_date())<(new Date())) self.byName(row, 'due_date').style.color="red"; + self.byName(row, 'due_date').innerHTML = dojo.date.locale.format(dojo.date.stamp.fromISOString(data.circ.due_date()), {selector: 'date', fullYear: true}); + self.byName(row, 'date_return').innerHTML = (data.circ.checkin_time())?dojo.date.locale.format(dojo.date.stamp.fromISOString(data.circ.checkin_time()), {selector: 'date', fullYear: true}):""; + + } else if(type == 'grocery') { + self.byName(row, 'title').innerHTML = (data.transaction.last_billing_type())?("Miscellaneous - "+data.transaction.last_billing_type()):"Miscellaneous"; // Go ahead and head off any confusion around "grocery". TODO i18n + } + + //self.byName(row, 'total_owed').innerHTML = data.transaction.total_owed(); + //self.byName(row, 'total_paid').innerHTML = data.transaction.total_paid(); + self.byName(row, 'balance').innerHTML = data.transaction.balance_owed(); + self.byName(row, 'selector').balance_owed = data.transaction.balance_owed(); + self.byName(row, 'selector').setAttribute('xact', data.transaction.id()); +/* + // row selector + var selector = self.byName(row, 'selector') + selector.onchange = updateSelected; + selector.setAttribute('xact', data.transaction.id()); + selector.setAttribute('balance_owed', data.transaction.balance_owed()); + selector.checked = true; +*/ + self.finesTbody.appendChild(row); + } + + //updateSelected(); + } + + + fieldmapper.standardRequest( + ['open-ils.actor', 'open-ils.actor.user.transactions.have_balance.fleshed'], + { async : true, + params : [this.authtoken, this.patron.id()], + oncomplete : function(r) { + progressDialog.hide(); + handler(openils.Util.readResponse(r)); + } + } + ); +} + +SelfCheckManager.prototype.checkin = function(barcode, abortTransit) { + var resp = fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.transit.abort'], + {params : [this.authtoken, {barcode : barcode}]} + ); + + // resp == 1 on success + if(openils.Event.parse(resp)) + return false; + + var resp = fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.checkin.override'], + {params : [ + this.authtoken, { + patron_id : this.patron.id(), + copy_barcode : barcode, + noop : true + } + ]} + ); + + if(!resp.length) resp = [resp]; + for(var i = 0; i < resp.length; i++) { + var tc = openils.Event.parse(resp[i]).textcode; + if(tc == 'SUCCESS' || tc == 'NO_CHANGE') { + continue; + } else { + return false; + } + } + + return true; +} + +/** + * Check out a single item. If the item is already checked + * out to the patron, redirect to renew() + */ +SelfCheckManager.prototype.checkout = function(barcode, override) { + this.keepMeLoggedIn(); + this.prevCirc = null; + + if(!barcode) { + this.updateScanbox(null, true); + return; + } + + if(this.mockCheckouts) { + // if we're in mock-checkout mode, just insert another + // fake circ into the table and get out of here. + this.displayCheckout(this.mockCheckout, 'checkout'); + return; + } + + // TODO see if it's a patron barcode + // TODO see if this item has already been checked out in this session + + var method = 'open-ils.circ.checkout.full'; + if(override) method += '.override'; + + console.log("Checkout out item " + barcode + " with method " + method); + + var result = fieldmapper.standardRequest( + ['open-ils.circ', method], + {params: [ + this.authtoken, { + patron_id : this.patron.id(), + copy_barcode : barcode + } + ]} + ); + + var stat = this.handleXactResult('checkout', barcode, result); + + if(stat.override) { + this.checkout(barcode, true); + } else if(stat.doOver) { + this.checkout(barcode); + } else if(stat.renew) { + this.renew(barcode); + } +} + +SelfCheckManager.prototype.failPartMessage = function(result) { + if (result.payload && result.payload.fail_part) { + var stringKey = "FAIL_PART_" + + result.payload.fail_part.replace(/\./g, "_"); + return localeStrings[stringKey]; + } else { + return null; + } +} + +SelfCheckManager.prototype.handleXactResult = function(action, item, result) { + var displayText = ''; + + // If true, the display message is important enough to pop up. Whether or not + // an alert() actually occurs, depends on org unit settings + var popup = false; + var sound = ''; // sound file reference + var payload = result.payload || {}; + var overrideEvents = this.orgSettings[SET_AUTO_OVERRIDE_EVENTS]; + var blockStatuses = this.orgSettings[SET_BLOCK_CHECKOUT_ON_COPY_STATUS]; + result.payload = payload; + + if(result.textcode == 'NO_SESSION') { + + return this.logoutStaff(); + + } else if(result.textcode == 'SUCCESS') { + + if(action == 'checkout') { + + displayText = dojo.string.substitute(localeStrings.CHECKOUT_SUCCESS, [item]); + this.displayCheckout(result, 'checkout'); + + if(payload.holds_fulfilled && payload.holds_fulfilled.length) { + // A hold was fulfilled, update the hold numbers in the circ summary + console.log("fulfilled hold " + payload.holds_fulfilled + " during checkout"); + this.holdsSummary = null; + this.updateHoldsSummary(); + } + + this.updateCircSummary(true); + + } else if(action == 'renew') { + + displayText = dojo.string.substitute(localeStrings.RENEW_SUCCESS, [item]); + this.displayCheckout(result, 'renew'); + } + + this.checkouts.push({circ : result.payload.circ.id()}); + sound = 'checkout-success'; + this.updateScanBox(); + + } else if(result.textcode == 'OPEN_CIRCULATION_EXISTS' && action == 'checkout') { + + // Server says the item is already checked out. If it's checked out to the + // current user, we may need to renew it. + + if(payload.old_circ) { + + /* + old_circ refers to the previous checkout IFF it's for the same user. + If no auto-renew interval is not defined, assume we should renew it + If an auto-renew interval is defined and the payload comes back with + auto_renew set to true, do the renewal. Otherwise, let the patron know + the item is already checked out to them. */ + + if( !this.orgSettings[SET_AUTO_RENEW_INTERVAL] || + (this.orgSettings[SET_AUTO_RENEW_INTERVAL] && payload.auto_renew) ) { + this.prevCirc = payload.old_circ.id(); + return { renew : true }; + } + + popup = true; + sound = 'checkout-failure'; + displayText = dojo.string.substitute(localeStrings.ALREADY_OUT, [item]); + + } else { + + if( // copy is marked lost. if configured to do so, check it in and try again. + result.payload.copy && + result.payload.copy.status() == /* LOST */ 3 && + overrideEvents && overrideEvents.length && + overrideEvents.indexOf('COPY_STATUS_LOST') != -1) { + + if(this.checkin(item)) { + return { doOver : true }; + } + } + + + // item is checked out to some other user + popup = true; + sound = 'checkout-failure'; + displayText = dojo.string.substitute(localeStrings.OPEN_CIRCULATION_EXISTS, [item]); + } + + this.updateScanBox(); + + } else { + + + if(overrideEvents && overrideEvents.length) { + + // see if the events we received are all in the list of + // events to override + + if(!result.length) result = [result]; + + var override = true; + for(var i = 0; i < result.length; i++) { + + var match = overrideEvents.filter(function(e) { return (e == result[i].textcode); })[0]; + + if(!match) { + override = false; + break; + } + + if(result[i].textcode == 'COPY_NOT_AVAILABLE' && blockStatuses && blockStatuses.length) { + + var stat = result[i].payload.status(); // copy status + if(typeof stat == 'object') stat = stat.id(); + + var match2 = blockStatuses.filter(function(e) { return (e == stat); })[0]; + + if(match2) { // copy is in a blocked status + override = false; + break; + } + } + + if(result[i].textcode == 'COPY_IN_TRANSIT') { + // to override a transit, we have to abort the transit and check it in first + if(this.checkin(item, true)) { + return { doOver : true }; + } else { + override = false; + } + } + } + + if(override) + return { override : true }; + } + + this.updateScanBox(); + popup = true; + sound = 'checkout-failure'; + + if(action == 'renew') + this.checkouts.push({circ : this.prevCirc, renewal_failure : true}); + + if(result.length) + result = result[0]; + + switch(result.textcode) { + + // TODO custom handler for blocking penalties + + case 'MAX_RENEWALS_REACHED' : + displayText = dojo.string.substitute( + localeStrings.MAX_RENEWALS, [item]); + break; + + case 'ITEM_NOT_CATALOGED' : + displayText = dojo.string.substitute( + localeStrings.ITEM_NOT_CATALOGED, [item]); + break; + + case 'OPEN_CIRCULATION_EXISTS' : + displayText = dojo.string.substitute( + localeStrings.OPEN_CIRCULATION_EXISTS, [item]); + + break; + + default: + console.error('Unhandled event ' + result.textcode); + + if (!(displayText = this.failPartMessage(result))) { + if (action == 'checkout' || action == 'renew') { + displayText = dojo.string.substitute( + localeStrings.GENERIC_CIRC_FAILURE, [item]); + } else { + displayText = dojo.string.substitute( + localeStrings.UNKNOWN_ERROR, [result.textcode]); + } + } + } + } + + this.handleAlert(displayText, popup, sound); + return {}; +} + + +/** + * Renew an item + */ +SelfCheckManager.prototype.renew = function(barcode, override) { + + var method = 'open-ils.circ.renew'; + if(override) method += '.override'; + + console.log("Renewing item " + barcode + " with method " + method); + + var result = fieldmapper.standardRequest( + ['open-ils.circ', method], + {params: [ + this.authtoken, { + patron_id : this.patron.id(), + copy_barcode : barcode + } + ]} + ); + + console.log(js2JSON(result)); + + var stat = this.handleXactResult('renew', barcode, result); + + if(stat.override) + this.renew(barcode, true); +} + +/** + * Display the result of a checkout or renewal in the items out table + */ +SelfCheckManager.prototype.displayCheckout = function(evt, type, itemsOut) { + var copy = evt.payload.copy; + var record = evt.payload.record; + var circ = evt.payload.circ; + var row = this.circTemplate.cloneNode(true); + + //if(record.isbn()) { + // this.byName(row, 'jacket').setAttribute('src', '/opac/extras/ac/jacket/small/' + record.isbn()); + //} + + this.byName(row, 'barcode').innerHTML = copy.barcode(); + this.byName(row, 'title').innerHTML = record.title(); + //this.byName(row, 'author').innerHTML = record.author(); + //this.byName(row, 'remaining').innerHTML = circ.renewal_remaining(); + openils.Util.show(this.byName(row, type)); + + var date = dojo.date.stamp.fromISOString(circ.due_date()); + this.byName(row, 'due_date').innerHTML = + dojo.date.locale.format(date, {selector : 'date'}); + + // put new circs at the top of the list + var tbody = this.circTbody; + if(itemsOut) tbody = this.itemsOutTbody; + tbody.insertBefore(row, tbody.getElementsByTagName('tr')[0]); +} + + +SelfCheckManager.prototype.byName = function(node, name) { + return dojo.query('[name=' + name+']', node)[0]; +} + + +SelfCheckManager.prototype.initPrinter = function() { + try { // Mozilla only + netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead"); + netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect'); + netscape.security.PrivilegeManager.enablePrivilege('UniversalPreferencesRead'); + netscape.security.PrivilegeManager.enablePrivilege('UniversalPreferencesWrite'); + var pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch); + if (pref) + pref.setBoolPref('print.always_print_silent', true); + } catch(E) { + console.log("Unable to initialize auto-printing"); + } +} + +/** + * Print a receipt for this session's checkouts + */ +SelfCheckManager.prototype.printSessionReceipt = function(callback) { + var circIds = []; + var circCtx = []; // circ context data. in this case, renewal_failure info + + // collect the circs and failure info + dojo.forEach( + this.checkouts, + function(blob) { + circIds.push(blob.circ); + circCtx.push({renewal_failure:blob.renewal_failure}); + } + ); + + var params = [ + this.authtoken, + this.staff.ws_ou(), + null, + 'format.selfcheck.checkout', + 'print-on-demand', + circIds, + circCtx + ]; + + var self = this; + fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.fire_circ_trigger_events'], + { + async : true, + params : params, + oncomplete : function(r) { + var resp = openils.Util.readResponse(r); + var output = resp.template_output(); + if(output) { + self.printData(output.data(), self.checkouts.length, callback); + } else { + var error = resp.error_output(); + if(error) { + throw new Error("Error creating receipt: " + error.data()); + } else { + throw new Error("No receipt data returned from server"); + } + } + } + } + ); +} + +SelfCheckManager.prototype.printData = function(data, numItems, callback) { + var win = window.open('', '', 'resizable,width=350,height=250,scrollbars=1'); + win.document.body.innerHTML = data; + win.print(); + + /* + * There is no way to know when the browser is done printing. + * Make a best guess at when to close the print window by basing + * the setTimeout wait on the number of items to be printed plus + * a small buffer + */ + var sleepTime = 1000; + if(numItems > 0) + sleepTime += (numItems / 2) * 1000; + + setTimeout( + function() { + win.close(); // close the print window + if(callback) callback(); // fire optional post-print callback + }, + sleepTime + ); +} + + +/** + * Print a receipt for this user's items out + */ +SelfCheckManager.prototype.printItemsOutReceipt = function(callback) { + if(!this.itemsOut.length) return; + + progressDialog.show(true); + + var params = [ + this.authtoken, + this.staff.ws_ou(), + null, + 'format.selfcheck.items_out', + 'print-on-demand', + this.itemsOut + ]; + + var self = this; + fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.fire_circ_trigger_events'], + { + async : true, + params : params, + oncomplete : function(r) { + progressDialog.hide(); + var resp = openils.Util.readResponse(r); + var output = resp.template_output(); + if(output) { + self.printData(output.data(), self.itemsOut.length, callback); + } else { + var error = resp.error_output(); + if(error) { + throw new Error("Error creating receipt: " + error.data()); + } else { + throw new Error("No receipt data returned from server"); + } + } + } + } + ); +} + +/** + * Print a receipt for this user's items out + */ +SelfCheckManager.prototype.printHoldsReceipt = function(callback) { + if(!this.holds.length) return; + + progressDialog.show(true); + + var holdIds = []; + var holdData = []; + + dojo.forEach(this.holds, + function(data) { + holdIds.push(data.hold.id()); + if(data.status == 4) { + holdData.push({ready : true}); + } else { + holdData.push({ + queue_position : data.queue_position, + potential_copies : data.potential_copies + }); + } + } + ); + + var params = [ + this.authtoken, + this.staff.ws_ou(), + null, + 'format.selfcheck.holds', + 'print-on-demand', + holdIds, + holdData + ]; + + var self = this; + fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.fire_hold_trigger_events'], + { + async : true, + params : params, + oncomplete : function(r) { + progressDialog.hide(); + var resp = openils.Util.readResponse(r); + var output = resp.template_output(); + if(output) { + self.printData(output.data(), self.holds.length, callback); + } else { + var error = resp.error_output(); + if(error) { + throw new Error("Error creating receipt: " + error.data()); + } else { + throw new Error("No receipt data returned from server"); + } + } + } + } + ); +} + + +SelfCheckManager.prototype.printPaymentReceipt = function(paymentIds, callback) { + var self = this; + progressDialog.show(true); + + fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.money.payment_receipt.print'], + { + async : true, + params : [this.authtoken, paymentIds], + oncomplete : function(r) { + var resp = openils.Util.readResponse(r); + var output = resp.template_output(); + progressDialog.hide(); + if(output) { + self.printData(output.data(), 1, callback); + } else { + var error = resp.error_output(); + if(error) { + throw new Error("Error creating receipt: " + error.data()); + } else { + throw new Error("No receipt data returned from server"); + } + } + } + } + ); +} + +/** + * Print a receipt for this user's items out + */ +SelfCheckManager.prototype.printFinesReceipt = function(callback) { + progressDialog.show(true); + + var params = [ + this.authtoken, + this.staff.ws_ou(), + null, + 'format.selfcheck.fines', + 'print-on-demand', + [this.patron.id()] + ]; + + var self = this; + fieldmapper.standardRequest( + ['open-ils.circ', 'open-ils.circ.fire_user_trigger_events'], + { + async : true, + params : params, + oncomplete : function(r) { + progressDialog.hide(); + var resp = openils.Util.readResponse(r); + var output = resp.template_output(); + if(output) { + self.printData(output.data(), self.finesCount, callback); + } else { + var error = resp.error_output(); + if(error) { + throw new Error("Error creating receipt: " + error.data()); + } else { + throw new Error("No receipt data returned from server"); + } + } + } + } + ); +} + + +/** + * Logout the patron and return to the login page + */ +SelfCheckManager.prototype.logoutPatron = function(print) { + progressDialog.show(true); // prevent patron from clicking logout link twice + if(print && this.checkouts.length) { + this.printSessionReceipt( + function() { + location.href = location.href; + } + ); + } else { + location.href = location.href; + } +} + + +function checkLogin() { + selfCheckMgr.keepMeLoggedIn(); + if(selfCheckMgr.orgSettings[SET_PATRON_PASSWORD_REQUIRED]) { + switchTo('step2'); + try{dojo.byId('patron-login-password').focus();}catch(e){} + } else { + selfCheckMgr.loginPatron(dojo.byId('patron-login-username').value); + } +} + + +function cancelLogin() { + dojo.byId('oils-selfck-status-div').innerHTML = ''; + dojo.byId('oils-selfck-status-div2').innerHTML = ''; + dojo.byId('oils-selfck-status-div3').innerHTML = ''; + dojo.byId('patron-login-password').value = ''; + openils.Util.hide('back_to_login'); + switchTo('step1'); + try { + dojo.byId('patron-login-username').focus(); + dojo.byId('patron-login-username').select(); + } catch(e) {} +} + +/** + * Fire up the manager on page load + */ +openils.Util.addOnLoad( + function() { + new SelfCheckManager().init(); + openils.Util.registerEnterHandler(dojo.byId('patron-login-username'), function(){checkLogin();}); + openils.Util.registerEnterHandler(dojo.byId('patron-login-password'), function(){selfCheckMgr.loginPatron(dojo.byId('patron-login-username').value,dojo.byId('patron-login-password').value);}); + } +); diff --git a/Open-ILS/xul/staff_client/server/skin/cat_custom.css b/Open-ILS/xul/staff_client/server/skin/cat_custom.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Open-ILS/xul/staff_client/server/skin/circ_custom.css b/Open-ILS/xul/staff_client/server/skin/circ_custom.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Open-ILS/xul/staff_client/server/skin/global.css b/Open-ILS/xul/staff_client/server/skin/global.css index 25412f5efa..87c0c9e70a 100644 --- a/Open-ILS/xul/staff_client/server/skin/global.css +++ b/Open-ILS/xul/staff_client/server/skin/global.css @@ -4,9 +4,9 @@ @namespace html url("http://www.w3.org/TR/REC-html40"); @namespace xhtml url("http://www.w3.org/1999/xhtml"); -help { -moz-binding: url('/xul/server/main/bindings.xml#help'); } -messagecatalog { -moz-binding: url('/xul/server/main/bindings.xml#messagecatalog'); } -.shrinkable_groupbox { font-weight: bold; -moz-binding: url('/xul/server/main/bindings.xml#caption'); } +help { -moz-binding: url('/xul/rel_2_4_1/server/main/bindings.xml#help'); } +messagecatalog { -moz-binding: url('/xul/rel_2_4_1/server/main/bindings.xml#messagecatalog'); } +.shrinkable_groupbox { font-weight: bold; -moz-binding: url('/xul/rel_2_4_1/server/main/bindings.xml#caption'); } window:not([active="true"]) menubar > menu { color: menutext !important } diff --git a/Open-ILS/xul/staff_client/server/skin/global_custom.css b/Open-ILS/xul/staff_client/server/skin/global_custom.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Open-ILS/xul/staff_client/server/skin/patron_display_custom.css b/Open-ILS/xul/staff_client/server/skin/patron_display_custom.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Open-ILS/xul/staff_client/server/skin/patron_summary_custom.css b/Open-ILS/xul/staff_client/server/skin/patron_summary_custom.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Open-ILS/xul/staff_client/server/skin/print_custom.css b/Open-ILS/xul/staff_client/server/skin/print_custom.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Open-ILS/xul/staff_client/server/skin/serial_custom.css b/Open-ILS/xul/staff_client/server/skin/serial_custom.css new file mode 100644 index 0000000000..e69de29bb2 diff --git a/Open-ILS/xul/staff_client/server/skin/simple_auth_custom.css b/Open-ILS/xul/staff_client/server/skin/simple_auth_custom.css new file mode 100644 index 0000000000..e69de29bb2