Steven Mayo [Fri, 1 Dec 2023 15:00:43 +0000 (10:00 -0500)]
LP#2043127-Marking org unit as non-visible in the OPAC defaults patrons' preferred pickup locations to the first org unit
Added a check to the OPAC place_hold.tt2 that detects if the patron's
preferred pickup location is missing from the dropdown. If it is, it
adds a default message to the dropdown asking them to choose a pickup
location and chooses it, as well as disabling the submit button and
changing the dropdown color to alert the user.
Steps to test:
[1] Go to Administration -> Server Administration -> Organizational
Units
[2] Select an org unit and uncheck OPAC Visible
[3] Rerun autogen.sh
[4] Find a patron account with that org unit as their home library (it
will also be their preferred pickup library)
[5] Log into that account on the OPAC and attempt to place a hold on a
book
[6] Observe the state of the holds screen
Signed-off-by: Steven Mayo <smayo@georgialibraries.org> Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
Jane Sandberg [Tue, 28 Nov 2023 22:32:26 +0000 (14:32 -0800)]
LP2045078: remove unneeded i18n and label semantics from spacing element
This <label> element doesn't label anything, nor does it contain any meaningful
content for translation. Since it is just used for spacing (so that the
Show Batch Actions button is in line with the actions themselves), let's just
use an untranslateable span instead.
Jason Boyer [Fri, 9 Jun 2023 20:21:28 +0000 (16:21 -0400)]
LP2023418: Ignore system and user psqlrc settings when determining Pg version
Ignore any settings in the system or user .psqlrc files when determining
postgres version as some combinations can confuse cut. Passing -A also means
that the call to xargs to trim spaces is no longer necessary.
Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu>
After the initial release of the Did You Mean code, suggestion-time
optimizations were added to address some performance pitfalls that
showed up in certain, especially very large, data sets. During later
development to build on the core infrastructure, those optimizations
were lost.
This commit brings those optimizations back (see upgrade 1282).
Signed-off-by: Mike Rylander <mrylander@gmail.com> Signed-off-by: Galen Charlton <gmc@equinoxOLI.org> Signed-off-by: Jeff Davis <jeff.davis@bc.libraries.coop> Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
Angela Kilsdonk [Mon, 20 Nov 2023 16:35:13 +0000 (11:35 -0500)]
Docs: Update Best_Hold_Selection_Sort_Order.adoc
Added additional BHSSO information from the following Evergreen conference presentation: https://docs.google.com/presentation/d/1iTDaNItUgD33ew57tPTipHEqwI7utxBy-6-jvBoORdE/edit#slide=id.gd947c15582_0_83
Writing credit goes to Angela Kilsdonk from Equinox.
Also added a couple new screenshots. Will upload a new folder of images with new naming conventions.
Signed-off-by: Angela Kilsdonk <akilsdonk@equinoxoli.org> Signed-off-by: Susan Morrison <smorrison@georgialibraries.org> Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxinitiative.org>
Stephanie Leary [Tue, 30 May 2023 14:48:56 +0000 (14:48 +0000)]
LP1965985 Empty alt text for OPAC decorative images
Removes alt text from images that are decorative, including book covers
and format icons, from the OPAC and BOOPAC search results pages. Since
all of these images appear next to text equivalents that repeat the same
information, these alt attributes were redundant.
Stephanie Leary [Fri, 17 Nov 2023 20:22:25 +0000 (20:22 +0000)]
LP2043847 Holdings count highlight color contrast
Reduces the intensity of the colors used to highlight staff catalog
search results with zero holdings, and specifies a text color in
addition to the background to ensure accessible color contrast ratios.
Before customizable Best Hold Selection Sort Order was implemented, the
non-FIFO hold order considered more-constrained holds before
less-constrained ones on the assumption that there would be more copies
available to less-constrained ones. That ordering didn't make it into
the BHSSO implementation, so this commit corrects that by sorting this
part in descending selection depth order rather than the default
ascending.
This is not relevant in most cases, but when soft hold boundaries are
used, and during the transition from a non-resource-sharing to a
resource-sharing enviroment, it can have an effect if "depth" is
selected as a BHSSO component.
Signed-off-by: Mike Rylander <mrylander@gmail.com> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Stephanie Leary [Fri, 10 Nov 2023 15:51:32 +0000 (15:51 +0000)]
LP2015163 Force MARC fixed field layout refresh
Removes a check that was intended to speed up MARC record loading, but
was preventing the fixed fields from refreshing between consecutive MARC
record views, as when paging between search results of mixed record
types.
Stephanie Leary [Fri, 10 Nov 2023 16:19:43 +0000 (16:19 +0000)]
LP2043134 Fix match set expression form button size
Places the MARC import/export match set expression buttons in columns to
avoid the forced full-width effect of items outside defined columns in
Bootstrap 5 rows.
briankennedy [Thu, 24 Aug 2023 19:51:20 +0000 (12:51 -0700)]
LP2023579 - Fix for renaming new statistical catergories editor
To reproduce:
1) Go to Local Administrator splash menu
2) Note that "Statistical Categories Editor" was split between "Patron" and "Item" and the new naming put these out of alphabetical order
The fix:
The relevent Satistical Categories Editors have been renamed to fit alphabetical order
Each Editor page has been renamed to better match the link title.
briankennedy [Tue, 22 Aug 2023 18:05:46 +0000 (11:05 -0700)]
LP2023579 - Fix for renaming new statistical catergories editor
To reproduce:
1) Go to Local Administrator splash menu
2) Note that "Statistical Categories Editor" was split between "Patron" and "Item" and the new naming put these out of alphabetical order
The fix:
The relevent Satistical Categories Editors have been renamed to fit alphabetical order
Each Editor page has been renamed to better match the link title.
Stephanie Leary [Tue, 3 Jan 2023 17:44:40 +0000 (11:44 -0600)]
LP1947906 Remove spellcheck="false" on MARC inputs
Removes the spellcheck="false" attributes on editable content fields in
the MARC rich editor, to allow browser-based spellcheckers to work as
expected. This change does not affect the flat editor.
Garry Collum [Fri, 27 Oct 2023 20:02:19 +0000 (20:02 +0000)]
LP2040305 MARC Barch Import/Export Queue Links should open in a New Tab
Fixes the links for the bib ID in the Record ID column of the Record Matches tab and the
linke for the bib ID in the Imported As column in the main queue page, so that they open
in a new browser tab.
I tested by:
1. In the Concerto data I created a record match set for 901c
2. I exported 4 marc records from the data and changed the title for two of these marc records,
and removed the 901c for theother two.
3. On reimport - two records were merged and two new records were created.
4. On reimport the Imported As links on the main page, and in this case the
Record ID links for the records that were merge can be tested.
5. Clicking the links open the bib record in the same page.
6. Applying the patch and retesting should result in the pages opening in new tabs.
Jeff Davis [Thu, 26 May 2022 21:43:58 +0000 (14:43 -0700)]
LP#1966096: check permissions when deleting lineitem
Hitherto EG has only prevented you from deleting a lineitem if it's
attached to a picklist belonging to someone else (in which case the
deletion would silently fail). This commit checks whether you have the
CREATE_PURCHASE_ORDER perm if the line item is attached to a purchase
order, or else the CREATE_PICKLIST perm if the line item is attached to
a picklist.
Signed-off-by: Jeff Davis <jeff.davis@bc.libraries.coop> Signed-off-by: Eva Cerniňáková <cerninakova@gmail.com> Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Dan Briem [Mon, 23 Oct 2023 22:28:00 +0000 (22:28 +0000)]
LP#1998605 Prevent Checked Out Items from Being Marked Missing
- Remove mark missing actions from the patron items out grids.
- The circ.mark_item... service will not allow a checkin
attempt on a checked out item if it's being marked missing.
- Keep the promise chain alive in AngularJS when marking
multiple items missing and one fails (consistent with the
behavior in Angular).
To test:
- Patron items out grids should not display missing actions.
- Item status (both detail and list view) should not allow
checked out items to be marked missing.
- While checked out items shouldn't typically appear on the
pull list, holds shelf, or patron holds grids, if stale data
is there (ex. multiple tabs), checked out items will not be
marked missing.
Signed-off-by: Dan Briem <dbriem@wlsmail.org> Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxOLI.org> Signed-off-by: Susan Morrison <smorrison@georgialibraries.org> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Stephanie Leary [Tue, 31 Oct 2023 16:12:39 +0000 (16:12 +0000)]
LP2019031 Prefix line items' checkbox IDs
Adds a 'lineitem-' prefix to the row selection checkboxes' IDs in line
item lists, such as those on a purchase order. This prevents JavaScript
errors related to element IDs that start with numbers.
Jane Sandberg [Thu, 26 Oct 2023 22:42:29 +0000 (15:42 -0700)]
LP2032717: fix endless observable loop in booking create reservation
Previously, this pipe/tap had an unusual behavior when a resourceId
was passed in via url params. `from` created an Observable from
the this.resources array, but `tap` tried to add to that same array
that was under observation. This apparently worked before the Angular
15 migration, but afterwards caused an infinite loop.
If the resourceId is passed in, we know there will only be a single
resource in this.resources. Therefore, we can just observe the first
element of the array in these cases.
This commit also eliminates one unnecessary trip through fetchData().
To test:
* Go to Booking > Create Reservation
* Choose the "Choose resource by barcode" tab
* Type in ROOM1231 (the barcode of a non-cataloged resource in the concerto data set)
* Confirm that you can place the reservation
Signed-off-by: Jane Sandberg <js7389@princeton.edu> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
When applying a template in the Angular volcopy editor, skip applying
a duplicate item alert. Prevents multiple alerts being applied
when a template gets applied more than once.
Testing Notes:
1. Create a copy template that includes one or more item alerts.
Use the AngularJS holdings editor to do so Admin -> local admin ->
Holdings Template Editor.
2. After saving, log out and back in. I've noticed my template
edits in the AngularJS interface sometimes don't make it
to the Angular interface witout logging out and back in.
3. Edit an item in the Angular holdings editor
/eg2/en-US/staff/cat/volcopy/holdings/item/xxxx
4. Apply the template several times and save the copy.
5. Check for duplicate item alerts.
There will also be a console for message about duplicate
alerts being detected when applying the template.
Signed-off-by: Josh Stompro <stomproj@larl.org> Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
Stephanie Leary [Tue, 31 Oct 2023 22:40:42 +0000 (22:40 +0000)]
LP2040319 Acq dropdowns should open on click
Adds [asyncSupportsEmptyTermClick]="true" to the selection list and
purchase order comboboxes in the Line Items Related to Bib Record
screen. This allows them to open on click when nothing has been entered
into the input.
Also fixes a typo in the screen title.
Signed-off-by: Stephanie Leary <stephanie.leary@equinoxoli.org> Signed-off-by: Christine Morgan <cmorgan@noblenet.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Dan Briem [Mon, 30 Oct 2023 04:12:40 +0000 (04:12 +0000)]
LP#2040528 Marc Editor Stack Subfields Bootstrap 5 Fix
Replaces the form-inline class with flex utility classes for
stacked subfields and removes a custom height calc to match
form-control heights in the marc editor. These were removed
in Bootstrap 5.
Signed-off-by: Dan Briem <dbriem@wlsmail.org> Signed-off-by: Christine Morgan <cmorgan@noblenet.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Stephanie Leary [Wed, 25 Oct 2023 21:18:42 +0000 (21:18 +0000)]
LP1934018 Restore 'more' link for staff cat facets
Adds a "More"/"Less" link next to the facet titles in the staff catalog
search results sidebar, to allow expanding the list to display all
available facets instead of the default limit of 5.
Steven Mayo [Thu, 24 Aug 2023 15:58:23 +0000 (11:58 -0400)]
LP#1919501 Button in Patron Messages interface in OPAC are not translatable
Added translation tag to the two lines listed in the ticket. Bite-size,
indeed.
Signed-off-by: Steven Mayo <smayo@georgialibraries.org> Signed-off-by: Eva Cerniňáková <cerninakova@gmail.com> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Jane Sandberg [Wed, 23 Aug 2023 04:48:34 +0000 (21:48 -0700)]
LP1804066: Don't allow overlapping bookings
Note: this includes a change to the concerto test data. You will
need to reload the concerto data set before successfully running
the included live tests.
To test:
1. Go to the Booking > Create Reservation
2. Choose resource by type: find a resource type that only has a single resource for ease of testing.
3. Select a time slot and press Create Reservation
4. Select a patron.
5. In a second tab, repeat the steps, being sure to select the same resource and time slot, but a
different patron.
6. Press Confirm Reservation in one of your tabs.
7. Confirm that the reservation was made correctly.
8. Press Confirm Reservation in the second tab.
9. Confirm that the conflicting booking does not go through.
Signed-off-by: Jane Sandberg <js7389@princeton.edu> Signed-off-by: Susan Morrison <smorrison@georgialibraries.org> Signed-off-by: Steven Mayo <smayo@georgialibraries.org> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Steven Mayo [Fri, 20 Oct 2023 20:21:29 +0000 (16:21 -0400)]
LP#1477154-Placing holds fails unintuitively when preferred pickup location is disabled via org unit setting opac.holds.org_unit_not_pickup_lib
Added a check in javascript that should fire when loading the page. Adds a
warning in red text, turns the org_selector yellow (like when the date
is invalid) and disables the submit button. These are all undone when
they select a different option, and never happen if their settings don't
prefer an invalid org.
Changed to a different shade of yellow and red that seemed better for
accessibility.
Steps to test:
[1] Go to Administration -> Local Administration -> Library Settings
Editor
[2] Make sure opac.hold.org_unit_not_pickup_lib is set to true for some
library
[3] Find a patron whose home library is set to that library and one
whose home library isn't
[4] Log in to the first patron and attempt to place a hold
[5] Observe the holds page
[6] Change the pickup library of the hold
[7] Observe the holds page
[8] Log in to the second patron and attempt to place a hold
[9] Observe
Never did find out when these bad hold requests bounced and why they
redirected to the same page.
Signed-off-by: Steven Mayo <smayo@georgialibraries.org> Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxOLI.org> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
spmorrison [Wed, 8 Nov 2023 15:53:57 +0000 (10:53 -0500)]
Docs LP2038779: Carousel docs list the wrong admin screen for Carousel Library Mapping
Changed Server Administration to Local Administration for Carousels and Carousel Library Mappings per https://bugs.launchpad.net/evergreen/+bug/2038779. Also removed notes pertaining to the interfaces moving to Local Admin.
Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Dan Briem [Sat, 4 Nov 2023 15:18:13 +0000 (15:18 +0000)]
LP#2040336 Prevent Duplicate Brief Records on Double Click
Allow only one in-flight save request at a time.
Unsubscribe from route changes when the component is destroyed.
Signed-off-by: Dan Briem <dbriem@wlsmail.org> Signed-off-by: Christine Morgan <cmorgan@noblenet.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Steven Mayo [Thu, 12 Oct 2023 18:42:01 +0000 (14:42 -0400)]
LP#1818912: Single Day Emergency Closings Fail to Update Due Dates
Correctly
The original version of evergreen.find_next_open_time() was only
checking the hours of operation of the organization after it recursed at least
once - meaning it was just taking the first day it looked at even if it
closed. The variable making it only check after a recursion had no other
uses afterwards, so I've removed it as an argument. I also made sure it
doesn't get stuck in a loop if all the hours of operation of the org it's
checking are closed, since that was on the mind.
There may still be timezone chicanery left, judging from launchpad
comments, but hopefully this is at least better. Gunkier databases that
are copies of your productions may be better for testing.
Steps to test:
[1] Have some circulations, loans, and expire times that fall on a
certain day.
[2] Have some days where your org is closed.
[3] Add an emergency closure that lasts until the day before your org is
closed, and process that closure.
[4] Check that the circs, loans and whatnot are now due the first day
your org is open again.
[5] Have some more circs and whatnot due the day before another closure
(emergency or otherwise)
[6] Add an emergency closure that ends the day before the other closure
and process the new closure.
[7] Check that the circs and whatnots are updated to the correct day.
Signed-off-by: Steven Mayo <smayo@georgialibraries.org> Signed-off-by: Andrea Buntz Neiman <abneiman@equinoxOLI.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Adds aria-describedby attributes to repetitive links in the staff
catalog items table. This appends the barcode to the text of the link
for screen readers, to help disambiguate links for different items.
Jane Sandberg [Thu, 23 Mar 2023 02:14:28 +0000 (19:14 -0700)]
lp1187993: Replace dojo autocomplete with accessible autocomplete
This autocomplete uses vanilla javascript to implement
the Combobox With List Autocomplete pattern from the
Aria Authoring Practices. This commit uses ES modules.
It makes use of some bootstrap styles. It should be
compatible with both bootsrap 4 and 5. It theoretically
works on the non-bootstrap TPAC as well, but will
likely need some design work to be satisfying in that
interface.
Otherwise, this autocomplete JS uses the same APIs as
the previous interface did.
Also included is a small test suite and an eslint
configuration.
Use Nodejs 18.18.0
Signed-off-by: Jane Sandberg <js7389@princeton.edu> Signed-off-by: Stephanie Leary <stephanie.leary@equinoxoli.org>
Jeff Davis [Wed, 27 Sep 2023 16:17:59 +0000 (09:17 -0700)]
LP#2035389: Don't use locg to determine whether course reserves links display in OPAC
Signed-off-by: Jeff Davis <jeff.davis@bc.libraries.coop> Signed-off-by: Jane Sandberg <js7389@princeton.edu> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Steven Mayo [Mon, 23 Oct 2023 15:41:07 +0000 (11:41 -0400)]
LP#2033067 The "prev" and "next" navigation buttons in carousels are not translated.
Quick change to the lines specified by the ticket. Don't have a
translated test box right now but should be it.
Signed-off-by: Steven Mayo <smayo@georgialibraries.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Brian Kennedy [Thu, 26 Oct 2023 19:59:34 +0000 (12:59 -0700)]
LP2037685 - Staff Catalog: Default Search and Preferred Library settings are deleted when Search Preference page is loaded
When Search Prefs page is loaded, eg.search.search_lib and eg.search.pref_lib values are 0.
Initializing the PreferencesComponent triggers saving these 0 values
and thus deleting the changes the user made.
This fix will simply check the value for the Default Search and
Preferred Library dropdowns and won't save if they are 0.
Signed-off-by: Brian Kennedy <brian@bc.libraries.coop> Signed-off-by: Elizabeth Davis <elizabeth.davis@sparkpa.org> Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Stephanie Leary [Mon, 23 Oct 2023 20:08:11 +0000 (20:08 +0000)]
LP2040186 Survey Q&A button colors and input labels
Fixes the button colors in the Administration > Local > Surveys > Edit >
Questions and Answers tab. Changes the colors to be less aggressive,
adds form input IDs and labels, and adds subheadings to the page.
Stephanie Leary [Fri, 13 Oct 2023 19:40:45 +0000 (19:40 +0000)]
LP2039310 Change Vandelay queue links to buttons
Changes <a> to <button> for several links in the MARC import/export
queue that have click actions but no URL or routerLink. This change
allows the links to be accessed via the keyboard and ensures that the
link pointer changes as expected when the user hovers using a mouse.
Garry Collum [Wed, 25 Oct 2023 22:05:27 +0000 (22:05 +0000)]
LP2040303 Record Match Sets: Buttons out of alignment
Fixes the alignment and spacing of the "Add to Selected Node" and
"Replace Selected Node" buttons in the Match Set Summary screen.
To view the buttons, go to Cataloging -> MARC Batch Import/Export ->
Record Match Set. Create a new match set or click on the name of
an existing match set. Click on Record Attribute, MARC Tag and
Subfield, or Boolean Operator.
This patch aligns the buttons and adds a margin of 1 between the
buttons.
Stephanie Leary [Tue, 17 Oct 2023 22:04:02 +0000 (22:04 +0000)]
LP2039606 Multiselect accessibility & button size
Fixes overly wide buttons in the multiselect and text multiselect
components. Also adds form labels and IDs, as well as ARIA labels and
tooltips for the Add and Remove buttons.
A debug logging line was trying to reference array entries that don't exist
when the local catalog search option is also selected.
open-ils.search [WARN:24303:Application.pm:624:169942320622879281]
open-ils.search.z3950.search_class: Use of uninitialized value in concatenation
(.) or string at /usr/local/share/perl/5.36.0/OpenILS/Application/Search/Z3950.pm line 282.
The debug line was trying to access by a counter variable, but the values were being pushed
to the array, so would get out of sync with the counter when native evergreen search
is also selected.
To trigger perform a Z39.50 search with a Z39.50 server and local evergreen catalog
selected.
Josh Stompro [Tue, 7 Nov 2023 19:01:04 +0000 (13:01 -0600)]
LP#1927870: MARC Source selector initialization - allow set to null
Allow setting the source selector back to unset on null.
This fixes the issue of paging through results and not having
the source selector get set back to unset when needed.
Testing notes:
You need a results list with a mix of bibs that have the source set
and that have it set to null.
Concerto data by default doesn't have bib source set.
Perform a keword search for 'concertos' and edit every other
bib to set a source of OCLC.
or
update biblio.record_entry set source=1 where id in (22,92,88);
Observe the behavior of the source field before and after the fix.
Before the fix, you will reach a record with the source set, and the source
field will stay set even when paging through records that don't have
it set.
Signed-off-by: Josh Stompro <stomproj@larl.org> Signed-off-by: Mike Rylander <mrylander@gmail.com>
Stephanie Leary [Thu, 25 May 2023 19:35:01 +0000 (19:35 +0000)]
LP1818086 Accessible text for grid flair icons (Angular)
Adds visually-hidden text alongside grid flair icons so that the title,
if given, will be announced in place of the icon keyword. Keywords are
hidden in ARIA regardless of whether the title was specified.
For the flair column, the ngbTooltip has been replaced with a standard
title attribute, for consistency with other icons throughout the
interface.
Signed-off-by: Stephanie Leary <stephanie.leary@equinoxoli.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu>
Jason Boyer [Wed, 18 Oct 2023 20:24:24 +0000 (16:24 -0400)]
LP2039612: Fix Carousel create / edit
You can't use this.whatever unless the function is also part of this.
Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org> Signed-off-by: Jane Sandberg <js7389@princeton.edu> Signed-off-by: Michele Morgan <mmorgan@noblenet.org>
Michele Morgan [Fri, 13 Oct 2023 16:52:40 +0000 (12:52 -0400)]
LP2002693 Remove forced reload to avoid endless logout loop
Removes a forced reload when navigating from acq/picklist/upload to itself
Signed-off-by: Michele Morgan <mmorgan@noblenet.org> Signed-off-by: Jeff Davis <jeff.davis@bc.libraries.coop> Signed-off-by: Garry Collum <gcollum@gmail.com>
Jason Boyer [Thu, 8 Jun 2023 20:01:16 +0000 (16:01 -0400)]
LP2023314: Allow Some Edits to Copy Location 1, as a Treat
Prevent deletion of locations with items attached and allow
edits to the 'Stacks' location, barring owning_lib and
deletion (regardless of active item count).
Signed-off-by: Jason Boyer <JBoyer@equinoxOLI.org> Signed-off-by: Susan Morrison <smorrison@georgialibraries.org>