umlaut 3.0.5 → 3.1.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/README.md +48 -5
- data/app/assets/images/umlaut_icons.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-book-go.png +0 -0
- data/app/assets/images/{famfamfam/book_open.png → umlaut_icons/famfamfam-book-open.png} +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-book.png +0 -0
- data/app/assets/images/{famfamfam/cross.png → umlaut_icons/famfamfam-cross.png} +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-error.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-help.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-information.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-link.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-page-sound.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-page-text.png +0 -0
- data/app/assets/images/umlaut_icons/famfamfam-page-up.png +0 -0
- data/app/assets/images/{famfamfam/page_white.png → umlaut_icons/famfamfam-page-white.png} +0 -0
- data/app/assets/images/{famfamfam/readme.html → umlaut_icons/famfamfam-readme.html} +0 -0
- data/app/assets/images/{famfamfam/tiny_cross.png → umlaut_icons/famfamfam-tiny-cross.png} +0 -0
- data/app/assets/images/{list_closed.png → umlaut_icons/list-closed.png} +0 -0
- data/app/assets/images/{list_open.png → umlaut_icons/list-open.png} +0 -0
- data/app/assets/javascripts/umlaut.js +5 -4
- data/app/assets/javascripts/umlaut/ajax_windows.js +41 -23
- data/app/assets/javascripts/umlaut/expand_contract_toggle.js +21 -29
- data/app/assets/javascripts/umlaut/load_permalink.js +26 -0
- data/app/assets/javascripts/umlaut/search_autocomplete.js +103 -44
- data/app/assets/stylesheets/umlaut.css.scss +19 -0
- data/app/assets/stylesheets/umlaut/_admin.scss +14 -0
- data/app/assets/stylesheets/umlaut/_az.scss +29 -0
- data/app/assets/stylesheets/umlaut/_forms.scss +31 -0
- data/app/assets/stylesheets/umlaut/_icons.scss +64 -0
- data/app/assets/stylesheets/umlaut/_layout.scss +52 -0
- data/app/assets/stylesheets/umlaut/_misc.scss +59 -0
- data/app/assets/stylesheets/umlaut/_mixins.scss +65 -0
- data/app/assets/stylesheets/umlaut/_modal.scss +4 -0
- data/app/assets/stylesheets/umlaut/_resolve.scss +308 -0
- data/app/assets/stylesheets/umlaut/_results.scss +34 -0
- data/app/assets/stylesheets/umlaut/_search.scss +14 -0
- data/app/assets/stylesheets/umlaut/_spinner.scss +12 -0
- data/app/assets/stylesheets/umlaut/_variables.scss +72 -0
- data/app/controllers/export_email_controller.rb +22 -39
- data/app/controllers/journal_tocs_controller +90 -0
- data/app/controllers/js_helper_controller.rb +2 -3
- data/app/controllers/link_router_controller.rb +32 -43
- data/app/controllers/open_search_controller.rb +3 -4
- data/app/controllers/resolve_controller.rb +68 -107
- data/app/controllers/resource_controller.rb +14 -20
- data/app/controllers/search_controller.rb +75 -94
- data/app/controllers/search_methods/README.md +28 -0
- data/app/controllers/search_methods/sfx4.rb +50 -119
- data/app/controllers/search_methods/sfx4_solr/README.md +57 -0
- data/app/controllers/search_methods/sfx4_solr/local.rb +40 -0
- data/app/controllers/search_methods/sfx4_solr/searcher.rb +90 -0
- data/app/controllers/store_controller.rb +24 -30
- data/app/controllers/umlaut/controller_behavior.rb +45 -17
- data/app/controllers/umlaut/error_handling.rb +20 -25
- data/{lib → app/controllers}/umlaut_configurable.rb +35 -21
- data/app/controllers/umlaut_controller.rb +43 -46
- data/app/helpers/emailer_helper.rb +9 -16
- data/app/helpers/export_email_helper.rb +8 -8
- data/app/helpers/open_search_helper.rb +2 -3
- data/app/helpers/resolve_helper.rb +130 -100
- data/app/helpers/search_helper.rb +17 -5
- data/app/helpers/umlaut/footer_helper.rb +1 -1
- data/app/helpers/umlaut/helper.rb +34 -0
- data/app/helpers/umlaut/html_head_helper.rb +12 -21
- data/{lib → app/mixin_logic}/marc_helper.rb +1 -1
- data/{lib → app/mixin_logic}/metadata_helper.rb +6 -5
- data/{lib → app/mixin_logic}/umlaut_http.rb +0 -0
- data/{lib → app/mixin_logic}/xml_schema_helper.rb +0 -0
- data/app/models/collection.rb +97 -95
- data/{lib → app/models}/hip3/bib.rb +0 -0
- data/{lib → app/models}/hip3/bib_searcher.rb +0 -0
- data/{lib → app/models}/hip3/custom_field_lookup.rb +0 -0
- data/{lib → app/models}/hip3/holding.rb +0 -0
- data/{lib → app/models}/hip3/item.rb +0 -0
- data/{lib → app/models}/hip3/receipt.rb +0 -0
- data/{lib → app/models}/hip3/serial_copy.rb +0 -0
- data/app/models/permalink.rb +3 -8
- data/app/models/referent.rb +29 -21
- data/app/models/request.rb +19 -8
- data/app/models/service_response.rb +24 -3
- data/app/models/service_store.rb +108 -39
- data/app/models/service_store.rb-NEW +73 -0
- data/app/models/service_wave.rb +2 -0
- data/app/models/sfx4/abstract/README.md +68 -0
- data/app/models/sfx4/abstract/az_extra_info.rb +44 -0
- data/app/models/sfx4/abstract/az_letter_group.rb +24 -0
- data/app/models/sfx4/abstract/az_title.rb +96 -0
- data/app/models/sfx4/abstract/az_title_search.rb +24 -0
- data/app/models/sfx4/abstract/base.rb +77 -0
- data/app/models/sfx4/global/base.rb +24 -0
- data/app/models/sfx4/global/kb_objects.rb +34 -0
- data/app/models/sfx4/local/az_extra_info.rb +7 -0
- data/app/models/sfx4/local/az_letter_group.rb +7 -0
- data/app/models/sfx4/local/az_title.rb +7 -0
- data/app/models/sfx4/local/az_title_search.rb +7 -0
- data/app/models/sfx4/local/base.rb +26 -0
- data/{lib → app/presentation}/section_renderer.rb +0 -12
- data/app/referent_filters/dissertation_catch.rb +67 -0
- data/{lib → app/referent_filters}/referent_filter.rb +0 -0
- data/{lib → app}/service_adaptors/ajax_export.rb +0 -0
- data/{lib → app}/service_adaptors/amazon.rb +2 -0
- data/{lib → app}/service_adaptors/blacklight.rb +22 -10
- data/{lib → app}/service_adaptors/book_finder.rb +0 -0
- data/{lib → app}/service_adaptors/bx.rb +0 -0
- data/{lib → app}/service_adaptors/cover_thing.rb +0 -0
- data/{lib → app}/service_adaptors/dummy_service.rb +0 -0
- data/{lib → app}/service_adaptors/elsevier_cover.rb +0 -0
- data/{lib → app}/service_adaptors/email_export.rb +0 -0
- data/{lib → app}/service_adaptors/ezproxy.rb +0 -0
- data/{lib → app}/service_adaptors/google_book_search.rb +0 -0
- data/app/service_adaptors/google_scholar_link.rb +71 -0
- data/{lib → app}/service_adaptors/gpo.rb +0 -0
- data/{lib → app}/service_adaptors/hathi_trust.rb +0 -0
- data/{lib → app}/service_adaptors/hip3_service.rb +0 -0
- data/{lib → app}/service_adaptors/hip_holding_search.rb +0 -0
- data/{lib → app}/service_adaptors/internet_archive.rb +0 -0
- data/{lib → app}/service_adaptors/isbn_db.rb +0 -0
- data/{lib → app}/service_adaptors/isi.rb +22 -13
- data/{lib → app}/service_adaptors/jcr.rb +0 -0
- data/{lib → app}/service_adaptors/opac.rb +0 -0
- data/{lib → app}/service_adaptors/open_library.rb +0 -0
- data/{lib → app}/service_adaptors/open_library_cover.rb +0 -0
- data/{lib → app}/service_adaptors/pubmed.rb +0 -0
- data/{lib → app}/service_adaptors/request_to_fixture.rb +0 -0
- data/{lib → app}/service_adaptors/scopus.rb +0 -0
- data/{lib → app/service_adaptors}/service.rb +3 -3
- data/{lib → app}/service_adaptors/sfx.rb +154 -11
- data/{lib → app}/service_adaptors/sfx_backchannel_record.rb +0 -0
- data/app/service_adaptors/tr_link.rb +267 -0
- data/app/service_adaptors/tr_links.rb +278 -0
- data/{lib → app}/service_adaptors/txt_holding_export.rb +0 -0
- data/{lib → app}/service_adaptors/ulrichs_cover.rb +0 -0
- data/{lib → app}/service_adaptors/ulrichs_link.rb +0 -0
- data/{lib → app}/service_adaptors/worldcat.rb +0 -0
- data/{lib → app}/service_adaptors/worldcat_identities.rb +0 -0
- data/app/views/admin/service_errors/_dispatched_service.html.erb +13 -13
- data/app/views/admin/service_errors/index.html.erb +11 -21
- data/app/views/export_email/email.html.erb +17 -2
- data/app/views/export_email/send_email.html.erb +2 -1
- data/app/views/export_email/send_txt.html.erb +2 -1
- data/app/views/export_email/txt.html.erb +30 -2
- data/app/views/layouts/umlaut.html.erb +29 -49
- data/app/views/resolve/_background_progress.html.erb +43 -50
- data/app/views/resolve/_background_updater.html.erb +23 -36
- data/app/views/resolve/_citation.html.erb +63 -87
- data/app/views/resolve/_compact_citation.html.erb +15 -33
- data/app/views/resolve/_cover_image.html.erb +34 -43
- data/app/views/resolve/_fulltext.html.erb +29 -50
- data/app/views/resolve/_help.html.erb +17 -14
- data/app/views/resolve/_holding.html.erb +65 -82
- data/app/views/resolve/_manually_entered_warning.html.erb +7 -0
- data/app/views/resolve/_modal.html.erb +19 -0
- data/app/views/resolve/_related_items.html.erb +20 -35
- data/app/views/resolve/_search_inside.html.erb +34 -57
- data/app/views/resolve/_section_display.html.erb +34 -46
- data/app/views/resolve/_section_heading.html.erb +17 -0
- data/app/views/resolve/_service_errors.html.erb +27 -28
- data/app/views/resolve/_standard_response_item.html.erb +42 -72
- data/app/views/resolve/background_status.html.erb +19 -23
- data/app/views/resolve/get_permalink.html.erb +6 -0
- data/app/views/resolve/index.html.erb +47 -73
- data/app/views/search/_a_to_z.html.erb +9 -6
- data/app/views/search/_citation.html.erb +73 -94
- data/app/views/search/_pager.html.erb +6 -6
- data/app/views/search/books.html.erb +34 -102
- data/app/views/search/journal_search.html.erb +53 -90
- data/app/views/search/journals.html.erb +73 -167
- data/app/views/umlaut/_header.html.erb +9 -0
- data/app/views/umlaut/error.html.erb +44 -44
- data/config/locales/en.yml +5 -0
- data/lib/{CronTab.rb → cron_tab.rb} +0 -0
- data/lib/generators/templates/umlaut_services.yml +57 -43
- data/lib/generators/umlaut/install_generator.rb +12 -0
- data/lib/service_adaptors/README.md +0 -0
- data/lib/tasks/umlaut.rake +8 -24
- data/lib/umlaut.rb +1 -21
- data/lib/umlaut/version.rb +1 -1
- data/test/README.md +75 -0
- data/test/dummy/app/controllers/umlaut_controller.rb +3 -3
- data/test/dummy/config/application.rb +3 -0
- data/test/dummy/config/sunspot.yml +20 -0
- data/test/dummy/config/travis_database.yml +96 -0
- data/test/dummy/config/umlaut_services.yml +16 -23
- data/test/dummy/db/migrate/20120927163304_sfx4_global.rb +26 -0
- data/test/dummy/db/migrate/20120927164040_sfx4_local.rb +54 -0
- data/test/dummy/tmp/cache/assets/BBA/6A0/sprockets%2F2a335471966f33256b321f8324041981 +0 -0
- data/test/dummy/tmp/cache/assets/C2A/410/sprockets%2Fd654b74912b4773a2534616863fb6565 +0 -0
- data/test/dummy/tmp/cache/assets/C45/A30/sprockets%2F39494895e462697b478d3d0c79298a26 +0 -0
- data/test/dummy/tmp/cache/assets/C49/730/sprockets%2F212d35831188417b5131e3e693aa69a6 +0 -0
- data/test/dummy/tmp/cache/assets/C55/1D0/sprockets%2F5af2f2a3403040f736981863fd278529 +0 -0
- data/test/dummy/tmp/cache/assets/C5A/A80/sprockets%2F2328c7370b56b4151776981a5f6d394e +0 -0
- data/test/dummy/tmp/cache/assets/C5F/340/sprockets%2F99692920160b7a279b86a80415b79db7 +0 -0
- data/test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80 +0 -0
- data/test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41 +0 -0
- data/test/dummy/tmp/cache/assets/C94/E20/sprockets%2F19579abc248373f419b1c3e287d74598 +0 -0
- data/test/dummy/tmp/cache/assets/C98/330/sprockets%2F0c81574ba94abc10657315d4190c201f +0 -0
- data/test/dummy/tmp/cache/assets/CA4/440/sprockets%2F0feb4425db6319d7d0582192a503671b +0 -0
- data/test/dummy/tmp/cache/assets/CA7/E80/sprockets%2F33310f455a870eaedd6d938e30620714 +0 -0
- data/test/dummy/tmp/cache/assets/CB8/3C0/sprockets%2F697cd846490fda9f0e20c558320610f8 +0 -0
- data/test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f +0 -0
- data/test/dummy/tmp/cache/assets/CC7/F10/sprockets%2F939637f806eef3f0f21584659458ab2e +0 -0
- data/test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d +0 -0
- data/test/dummy/tmp/cache/assets/CD8/370/sprockets%2F357970feca3ac29060c1e3861e2c0953 +0 -0
- data/test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46 +0 -0
- data/test/dummy/tmp/cache/assets/CF8/DA0/sprockets%2Ff5b8c8499d3da954d392fa57739503c5 +0 -0
- data/test/dummy/tmp/cache/assets/CF9/590/sprockets%2F096bcc45cd31b3796fa2121cd203215f +0 -0
- data/test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398 +0 -0
- data/test/dummy/tmp/cache/assets/D04/CC0/sprockets%2Fe9c1b92f2e437e1bbbe020d718739220 +0 -0
- data/test/dummy/tmp/cache/assets/D0B/090/sprockets%2F58009091c95e3ac328c91c68fca30e0e +0 -0
- data/test/dummy/tmp/cache/assets/D1A/B50/sprockets%2F2db5892438129fe94da8429b8be114ec +0 -0
- data/test/dummy/tmp/cache/assets/D2D/1A0/sprockets%2F376426b4896a3cff7969ce6c7b387e0e +0 -0
- data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
- data/test/dummy/tmp/cache/assets/D37/2B0/sprockets%2F40834fb07d7318c1fddd5003bd9e04f6 +0 -0
- data/test/dummy/tmp/cache/assets/D43/0D0/sprockets%2F682843a8d0795a5fbcfeb2f0c81727d0 +0 -0
- data/test/dummy/tmp/cache/assets/D46/F80/sprockets%2Fb15c08e749067d7aad9baf5e9388221c +0 -0
- data/test/dummy/tmp/cache/assets/D4E/1B0/sprockets%2Ff7cbd26ba1d28d48de824f0e94586655 +0 -0
- data/test/dummy/tmp/cache/assets/D5A/EA0/sprockets%2Fd771ace226fc8215a3572e0aa35bb0d6 +0 -0
- data/test/dummy/tmp/cache/assets/D6C/7D0/sprockets%2F8a05d6981ec0d38c51739bef0b3a9c2b +0 -0
- data/test/dummy/tmp/cache/assets/D6E/CF0/sprockets%2F5661c6e4f0cea86fe4523f27261aade5 +0 -0
- data/test/dummy/tmp/cache/assets/D94/FF0/sprockets%2F3b56a1aa77de0d570c38a4a9d5f4b1d6 +0 -0
- data/test/dummy/tmp/cache/assets/D97/6B0/sprockets%2Fb070e8c799d1a4ad5e62e0a1ae3b83e6 +0 -0
- data/test/dummy/tmp/cache/assets/D9A/2F0/sprockets%2Fbba0f4b972dc53c15ce6c8c1993b82a4 +0 -0
- data/test/dummy/tmp/cache/assets/D9C/860/sprockets%2Fec2d9f20b270d70e698ff33e53c21fca +0 -0
- data/test/dummy/tmp/cache/assets/DA6/A80/sprockets%2F92e26d8e58d5bcc8b8f6c25d1b05b9c1 +0 -0
- data/test/dummy/tmp/cache/assets/DA8/BB0/sprockets%2F0cf1c7e9f966dce425517c0e2a844efe +0 -0
- data/test/dummy/tmp/cache/assets/DA9/BC0/sprockets%2Fcb9062b73291befe5e5bf2a70978dec8 +0 -0
- data/test/dummy/tmp/cache/assets/DB6/ED0/sprockets%2Ff4482d9b9f76fb65eef16430bde2f8e6 +0 -0
- data/test/dummy/tmp/cache/assets/DDC/400/sprockets%2Fcffd775d018f68ce5dba1ee0d951a994 +0 -0
- data/test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8 +0 -0
- data/test/dummy/tmp/cache/assets/DF7/960/sprockets%2F99ac6db10b44a64fbba4ee847b35ba8b +0 -0
- data/test/dummy/tmp/cache/assets/DFD/300/sprockets%2Fabac9489cf7f1db8ef00d72a1571ee1e +0 -0
- data/test/dummy/tmp/cache/assets/E02/C10/sprockets%2F1463cadfce3fc70e61d482f9fcb75ac7 +0 -0
- data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
- data/test/dummy/tmp/cache/assets/E38/FE0/sprockets%2Fe1fc875efa817cbb94a5d8de25ea4e6b +0 -0
- data/test/dummy/tmp/cache/assets/E50/F00/sprockets%2Fec61afdbb1cc4df075e3dad46f0af571 +0 -0
- data/test/dummy/tmp/cache/assets/E5E/5F0/sprockets%2Feffaeb4d7f9bf4c0cc840ff320fde046 +0 -0
- data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_accordion.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_alerts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_breadcrumbs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_button-groups.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_buttons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_carousel.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_close.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_code.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_component-animations.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_dropdowns.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_grid.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_hero-unit.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_labels-badges.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_layouts.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_media.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_modals.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_navs.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_pager.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_pagination.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_popovers.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_progress-bars.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_reset.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-1200px-min.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-767px-max.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-768px-979px.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-navbar.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_responsive-utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_scaffolding.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_sprites.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_tables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_thumbnails.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_tooltip.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_type.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_utilities.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/_wells.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/310d901c169042855feb8cf3903e1e2821d27f13/responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_admin.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_az.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_base.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_forms.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_icons.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_misc.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_mixins.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_modal.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_resolve.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_results.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_search.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_spinner.scssc +0 -0
- data/test/dummy/tmp/cache/sass/3af72421a0fbed39d3047687ca0ad6e6e5545041/_variables.scssc +0 -0
- data/test/dummy/tmp/cache/sass/93d65682d6bddb0b2e6788c1232f4849af20a35e/bootstrap-responsive.scssc +0 -0
- data/test/dummy/tmp/cache/sass/93d65682d6bddb0b2e6788c1232f4849af20a35e/bootstrap.scssc +0 -0
- data/test/dummy/tmp/cache/sass/fb58c04fd15fcc38a8c4d91b7070bcfeaf1c3799/umlaut.css.scssc +0 -0
- data/test/fixtures/dispatched_services.yml +0 -4
- data/test/fixtures/permalinks.yml +23 -4
- data/test/fixtures/referent_values.yml +226 -1493
- data/test/fixtures/referents.yml +14 -137
- data/test/fixtures/requests.yml +22 -260
- data/test/fixtures/service_responses.yml +169 -5
- data/test/fixtures/sfx4/global/KB_OBJECTS.yml +46 -0
- data/test/fixtures/sfx4/local/AZ_EXTRA_INFO.yml +4802 -0
- data/test/fixtures/sfx4/local/AZ_LETTER_GROUP.yml +105 -0
- data/test/fixtures/sfx4/local/AZ_TITLE.yml +165 -0
- data/test/fixtures/sfx4/local/AZ_TITLE_SEARCH.yml +341 -0
- data/test/fixtures/sfx_urls.yml +3 -0
- data/test/functional/export_email_controller_test.rb +43 -0
- data/test/functional/link_router_controller_test.rb +16 -0
- data/test/functional/resolve_controller_test.rb +102 -0
- data/test/functional/search_controller_test.rb +40 -0
- data/test/functional/store_controller_test.rb +29 -0
- data/test/helper/list_with_limit_test.rb +90 -0
- data/test/integration/permalinks_test.rb +14 -0
- data/test/support/search_methods/test_case.rb +0 -0
- data/test/support/service_adaptors/test_case.rb +0 -0
- data/test/support/test_with_cassette.rb +37 -0
- data/test/test_helper.rb +76 -30
- data/test/unit/aws_product_sign_test.rb +2 -0
- data/test/unit/determine_services_test.rb +163 -0
- data/test/unit/google_book_search_test.rb +8 -25
- data/test/unit/google_scholar_link_test.rb +81 -0
- data/test/unit/internet_archive_test.rb +33 -0
- data/test/unit/permalink_test.rb +15 -0
- data/test/unit/service_store_test.rb +47 -0
- data/test/unit/service_test.rb +28 -13
- data/test/unit/sfx/sfx_target_roll_up_test.rb +369 -0
- data/test/unit/sfx4_search_test.rb +102 -0
- data/test/unit/sfx4_solr_search_test.rb +77 -0
- data/test/unit/sfx_test.rb +38 -0
- data/test/unit/worldcat_test.rb +7 -0
- data/test/vcr_cassettes/google_book_search/frankenstein_by_OCLC_number.yml +107 -0
- data/test/vcr_cassettes/internet_archive/momo_by_title_author.yml +116 -0
- data/test/vcr_cassettes/resolve/fulltext_with_edition_warning.yml +44 -0
- data/test/vcr_cassettes/resolve/no_holdings.yml +649 -0
- data/test/vcr_cassettes/resolve/nytimes_by_issn.yml +224 -0
- data/test/vcr_cassettes/sfx/nytimes_by_issn.yml +1395 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_group.yml +109 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_title_begins_with.yml +33 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_title_contains.yml +34 -0
- data/test/vcr_cassettes/sfx4_solr/find_by_title_exact.yml +32 -0
- data/test/view/holding_test.rb +30 -0
- metadata +435 -179
- data/app/assets/images/export_bg_bot.gif +0 -0
- data/app/assets/images/export_bg_mid.gif +0 -0
- data/app/assets/images/export_bg_top.gif +0 -0
- data/app/assets/images/famfamfam/page_sound.gif +0 -0
- data/app/assets/images/famfamfam/page_text.gif +0 -0
- data/app/assets/images/famfamfam/page_up.gif +0 -0
- data/app/assets/images/ico_go.gif +0 -0
- data/app/assets/images/more_info.gif +0 -0
- data/app/assets/images/rails.png +0 -0
- data/app/assets/images/request.gif +0 -0
- data/app/assets/javascripts/umlaut/simple_visible_toggle.js +0 -8
- data/app/assets/stylesheets/umlaut.css +0 -900
- data/app/assets/stylesheets/umlaut/_background_progress_spinner.scss +0 -21
- data/app/assets/stylesheets/umlaut/_expand_contract.scss +0 -28
- data/app/controllers/search_methods/sfx3.rb +0 -148
- data/app/models/sfx_db.rb +0 -10
- data/app/models/sfx_db/az_additional_title.rb +0 -11
- data/app/models/sfx_db/az_letter_group.rb +0 -11
- data/app/models/sfx_db/az_title.rb +0 -40
- data/app/models/sfx_db/az_title_v2.rb +0 -34
- data/app/models/sfx_db/isbn.rb +0 -12
- data/app/models/sfx_db/issn.rb +0 -12
- data/app/models/sfx_db/object.rb +0 -35
- data/app/models/sfx_db/object_portfolio.rb +0 -6
- data/app/models/sfx_db/publisher.rb +0 -10
- data/app/models/sfx_db/sfx_db_base.rb +0 -58
- data/app/models/sfx_db/target.rb +0 -10
- data/app/models/sfx_db/target_service.rb +0 -10
- data/app/models/sfx_db/title.rb +0 -10
- data/app/views/export_email/_email.html.erb +0 -25
- data/app/views/export_email/_send_email.html.erb +0 -3
- data/app/views/export_email/_send_txt.html.erb +0 -3
- data/app/views/export_email/_txt.html.erb +0 -62
- data/lib/holding.rb +0 -32
- data/lib/opensearch_feed.rb +0 -398
- data/lib/opensearch_query.rb +0 -98
- data/lib/referent_filters/dissertation_catch.rb +0 -45
- data/lib/service_adaptors/journal_tocs.progress +0 -68
- data/lib/service_adaptors/primo_service.rb +0 -452
- data/lib/service_adaptors/primo_source.rb +0 -82
- data/lib/umlaut/default_configuration.rb +0 -5
- data/test/dummy/config/primo.yml +0 -271
- data/test/unit/primo_service_test.rb +0 -947
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
MzY5Mzk3NDBhZjdkNGUxMDlkNWEyYmI2MzliNTU1OTM3NzUzM2RhNQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YWQ1M2NjMDliOTQxODhjODg0YWY2MjY2MTg2ODkwYTNlNmIzOGMyMw==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
ZTcyNDJkOTA3NGMyOWQxMDQ2NjVmZjkyYzkzYTM2OGI5MDNlY2I3MDFmOWU3
|
10
|
+
NGY2MzQ3YzdiNDI4NTUzZjg3ZTQyMzE0ZDAzNzEyZWVhODEwMjlhODFkNWFj
|
11
|
+
MjFhMTkwMDdiNTdiYWE2ZmIwOGRmMTBkZTZkNDg4NzE4ZDEwMjA=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
YTVhNjI2MzI4Y2FkOWQzMmM0YjVjM2QyNGNlMDViOGExYWI3YTliYmUxNjZj
|
14
|
+
NWEyMDhkODg2Mzc3ZjE1ZjNkYzQxZTIyZGIwMTQ4YWMxNWUwNjliZTlkZGYw
|
15
|
+
MDUxYmU0OTZlZmY3YTcxNTZiMWQxY2Q4MDRkYWQ5Y2FlMmZlZjU=
|
data/README.md
CHANGED
@@ -1,4 +1,10 @@
|
|
1
1
|
# Umlaut
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/umlaut.png)](http://badge.fury.io/rb/umlaut)
|
3
|
+
[![Build Status](https://secure.travis-ci.org/team-umlaut/umlaut.png)](http://travis-ci.org/team-umlaut/umlaut)
|
4
|
+
[![Dependency Status](https://gemnasium.com/team-umlaut/umlaut.png)](https://gemnasium.com/team-umlaut/umlaut)
|
5
|
+
[![Code Climate](https://codeclimate.com/github/team-umlaut/umlaut.png)](https://codeclimate.com/github/team-umlaut/umlaut)
|
6
|
+
[![Coverage Status](https://coveralls.io/repos/team-umlaut/umlaut/badge.png?branch=master)](https://coveralls.io/r/team-umlaut/umlaut)
|
7
|
+
<!--[![Security Status](http://rails-brakeman.com/team-umlaut/umlaut.png)](http://rails-brakeman.com/team-umlaut/umlaut)-->
|
2
8
|
|
3
9
|
Umlaut is software for libraries (the kind with books).
|
4
10
|
|
@@ -8,7 +14,17 @@ knowledge base. But it's actually quite a bit more than that.
|
|
8
14
|
It could also be described as: a just-in-time aggregator of "last mile"
|
9
15
|
specific-citation services, taking input as OpenURL, and providing both an
|
10
16
|
HTML UI and an api suite for embedding Umlaut services in other products.
|
11
|
-
|
17
|
+
|
18
|
+
Umlaut's role is to provide the user with services that apply to the item of interest.
|
19
|
+
And services provided by various different products: including as a major target, your
|
20
|
+
[OpenURL Knowledge Base](http://en.wikipedia.org/wiki/OpenURL_knowledge_base), but also
|
21
|
+
including other products. Services provided by the hosting institution, licensed by the
|
22
|
+
hosting institution, as well as free services the hosting institution wishes to
|
23
|
+
advertise/recommend to it's users.
|
24
|
+
|
25
|
+
Umlaut strives to supply links that take the user in as few clicks as possible to the service listed, without ever listing 'blind links' that you first have to click on to find out whether they are available. Umlaut pre-checks things when neccesary to only list services, with any needed contextual info, such that the user knows what they get when they click on it. Save the time of the user.
|
26
|
+
|
27
|
+
[What do you mean by all this?](https://github.com/team-umlaut/umlaut/wiki/What-is-Umlaut-anyway)
|
12
28
|
|
13
29
|
Umlaut is distributed as a ruby Rails engine gem. It's a very heavyweight engine,
|
14
30
|
the point of distro'ing as a gem is to make it easy to keep local
|
@@ -23,7 +39,7 @@ https://github.com/team-umlaut/umlaut/wiki/Installation.
|
|
23
39
|
|
24
40
|
The Rails/Umlaut super-concise expert summary is:
|
25
41
|
|
26
|
-
* Rails 3.1+
|
42
|
+
* Rails 3.1+ (but not yet tested with Rails 4), ruby 1.9.3.
|
27
43
|
|
28
44
|
* gem 'umlaut'
|
29
45
|
|
@@ -35,8 +51,36 @@ The Rails/Umlaut super-concise expert summary is:
|
|
35
51
|
|
36
52
|
* configuration in `./config/umlaut_services.yml` and `./app/controllers/umlaut_controller.rb`
|
37
53
|
|
38
|
-
* Umlaut uses multi-threaded concurrency in a way incompatible with development-mode class reloading. You need cache_classes=false even in dev, the Umlaut install generator changes this for you.
|
39
|
-
|
54
|
+
* Umlaut uses multi-threaded concurrency in a way incompatible with development-mode class reloading. You need cache_classes=false even in dev, the Umlaut install generator changes this for you.
|
55
|
+
|
56
|
+
## Add ons
|
57
|
+
Some Umlaut services adapters are sufficiently complicated or are on different release cycles
|
58
|
+
from the core code that they merit their own gems. Generally, you will need to include these gems
|
59
|
+
in your application's Gemfile in order to get the described functionality.
|
60
|
+
|
61
|
+
| Add on | Description |
|
62
|
+
|:---|:---|
|
63
|
+
| [`umlaut-primo`](https://github.com/team-umlaut/umlaut-primo) | Umlaut services to provide full text service responses, holdings, etc. from the Primo discovery solution. |
|
64
|
+
|
65
|
+
|
66
|
+
## Developing
|
67
|
+
|
68
|
+
Only spotty test coverage, sorry, but we're trying to improve. Don't trust
|
69
|
+
if all tests pass everythings good, but if tests fail, that's an unacceptable
|
70
|
+
commit. Try to add tests with new features, although we understand when
|
71
|
+
nobody can figure out a good way to test (esp our legacy architecture).
|
72
|
+
|
73
|
+
Run tests with `rake test`.
|
74
|
+
|
75
|
+
Tests are with plain old Test::Unit, please.
|
76
|
+
|
77
|
+
Tests use the vcr gem where appropriate. See `./test/support/test_with_cassette`.
|
78
|
+
|
79
|
+
gem skeleton was created with `rails plugin new`, which creates a dummy app
|
80
|
+
that tests are run in context of, at `./test/dummy`.
|
81
|
+
|
82
|
+
See also: https://github.com/team-umlaut/umlaut/wiki/Developing
|
83
|
+
|
40
84
|
## Source
|
41
85
|
|
42
86
|
https://github.com/team-umlaut/umlaut/
|
@@ -46,4 +90,3 @@ https://github.com/team-umlaut/umlaut/
|
|
46
90
|
You can join the umlaut listserv at:
|
47
91
|
http://rubyforge.org/mail/?group_id=4382
|
48
92
|
|
49
|
-
## Build Status [![Build Status](https://secure.travis-ci.org/team-umlaut/umlaut.png)](http://travis-ci.org/team-umlaut/umlaut)
|
Binary file
|
Binary file
|
File without changes
|
Binary file
|
File without changes
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -5,13 +5,14 @@
|
|
5
5
|
// to include all umlaut js.
|
6
6
|
|
7
7
|
|
8
|
-
// jquery
|
8
|
+
// jquery is required for umlaut, it's okay
|
9
9
|
// if the manifest chain ends up 'require'ing twice because
|
10
10
|
// it's mentioned in local manifest, sprockets is smart enough.
|
11
11
|
//= require jquery
|
12
|
-
//= require
|
12
|
+
//= require bootstrap-transition
|
13
|
+
//= require bootstrap-modal
|
14
|
+
//= require bootstrap-typeahead
|
15
|
+
//= require bootstrap-collapse
|
13
16
|
|
14
17
|
// Require all js files inside the 'umlaut' subdir next to this file.
|
15
18
|
//= require_tree './umlaut'
|
16
|
-
|
17
|
-
|
@@ -1,29 +1,47 @@
|
|
1
1
|
/* ajax_windows.js. Support for modal popup windows in Umlaut items. */
|
2
2
|
jQuery(document).ready(function($) {
|
3
|
-
var
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
3
|
+
var populate_modal = function(data, textStatus, jqXHR) {
|
4
|
+
// Wrap the data object in jquery object
|
5
|
+
var body = $(data);
|
6
|
+
// Remove the first heading from the returned data
|
7
|
+
var header = body.find("h1, h2, h3, h4, h5, h6").eq(0).remove();
|
8
|
+
// Remove the first submit button from the returned data
|
9
|
+
var footer = body.find("form").find("input[type=submit]").eq(0).remove();
|
10
|
+
cleanup_modal(header, body, footer)
|
11
|
+
}
|
12
|
+
var cleanup_modal = function() {
|
13
|
+
header = arguments[0]
|
14
|
+
body = arguments[1]
|
15
|
+
footer = arguments[2]
|
16
|
+
// Replace the header text if given
|
17
|
+
if (header) $("#modal").find(".modal-header").find(".content").text(header.text());
|
18
|
+
// Replace the body html if given
|
19
|
+
if (body) $("#modal").find(".modal-body").find(".content").html(body.html());
|
20
|
+
// Replace the current submit button if given
|
21
|
+
if (footer) $("#modal").find(".modal-footer").find(".content").html(footer);
|
22
|
+
// Toggle the ajax-loader
|
23
|
+
$("#modal").find(".modal-header").find(".ajax-loader").toggle();
|
24
|
+
$("#modal").find(".modal-body").find(".ajax-loader").toggle();
|
25
|
+
// Toggle the content
|
26
|
+
$("#modal").find(".modal-header").find(".content").toggle();
|
27
|
+
$("#modal").find(".modal-body").find(".content").toggle();
|
28
|
+
$("#modal").find(".modal-footer").find(".content").toggle();
|
29
|
+
}
|
30
|
+
var display_modal = function(event) {
|
31
|
+
event.preventDefault();
|
32
|
+
cleanup_modal();
|
33
|
+
$("#modal").modal("show");
|
34
|
+
$.get(this.href, "", populate_modal, "html");
|
16
35
|
return false;
|
17
|
-
}
|
18
|
-
ajax_form_catch = function(event) {
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
return $(shared_modal_d).dialog("open");
|
24
|
-
});
|
36
|
+
}
|
37
|
+
var ajax_form_catch = function(event) {
|
38
|
+
event.preventDefault();
|
39
|
+
cleanup_modal();
|
40
|
+
var form = $("#modal").find("form");
|
41
|
+
$.post(form.attr("action"), form.serialize(), populate_modal, "html");
|
25
42
|
return false;
|
26
43
|
};
|
27
|
-
$(document).on("click", "
|
28
|
-
|
44
|
+
$(document).on("click", "a.ajax_window", display_modal);
|
45
|
+
$(document).on("click", "#modal .modal-footer input[type=submit]", ajax_form_catch);
|
46
|
+
$(document).on("submit", "#modal form", ajax_form_catch);
|
29
47
|
});
|
@@ -1,33 +1,25 @@
|
|
1
1
|
/* expand_contract_toggle.js: Support for show more/hide more in lists of umlaut content.
|
2
|
-
|
3
|
-
The JS needs to swap out the image for expand/contract toggle. AND we need
|
4
|
-
the URL it swaps in to be an ABSOLUTE url when we're using partial html
|
5
|
-
widget.
|
6
|
-
|
7
|
-
So we swap in a non-fingerprinted URL, even if the original was asset
|
8
|
-
pipline fingerprinted. sorry, best way to make it work!
|
9
2
|
*/
|
10
3
|
jQuery(document).ready(function($) {
|
11
|
-
|
12
|
-
$(
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
4
|
+
$(".collapse_toggle").each(function(){
|
5
|
+
$(this).collapse('toggle');
|
6
|
+
});
|
7
|
+
$(document).on("click", ".collapse-toggle", function(event) {
|
8
|
+
event.preventDefault();
|
9
|
+
return false;
|
10
|
+
});
|
11
|
+
$(document).on("show", ".collapse", function(event) {
|
12
|
+
// Update the icon
|
13
|
+
$(this).parent().find('.collapse-toggle i').removeClass("umlaut_icons-list-closed").addClass("umlaut_icons-list-open");
|
14
|
+
// Update the action label
|
15
|
+
$(this).parent().find(".expand_contract_action_label").text("Hide ");
|
16
|
+
|
17
|
+
});
|
18
|
+
$(document).on("hide", ".collapse", function(event) {
|
19
|
+
// Update the icon
|
20
|
+
$(this).parent().find('.collapse-toggle i').removeClass("umlaut_icons-list-open").addClass("umlaut_icons-list-closed");
|
21
|
+
// Update the action label
|
22
|
+
$(this).parent().find(".expand_contract_action_label").text("Show ");
|
23
|
+
|
24
|
+
});
|
33
25
|
});
|
@@ -0,0 +1,26 @@
|
|
1
|
+
jQuery(document).ready(function($) {
|
2
|
+
|
3
|
+
|
4
|
+
$("*[data-umlaut-toggle-permalink]").click(function(event) {
|
5
|
+
event.preventDefault();
|
6
|
+
|
7
|
+
var originalLink = $(this)
|
8
|
+
var valueContainer = $("#umlaut-permalink-value");
|
9
|
+
|
10
|
+
if (! valueContainer.data("loaded")) {
|
11
|
+
valueContainer.html('<i class="spinner"></i>').show();
|
12
|
+
|
13
|
+
$.getJSON( originalLink.attr('href'), function(data) {
|
14
|
+
var href = data.permalink;
|
15
|
+
var a = $("<a/>");
|
16
|
+
a.attr("href", href);
|
17
|
+
a.text(href);
|
18
|
+
valueContainer.html(a).data("loaded", true).show();
|
19
|
+
});
|
20
|
+
}
|
21
|
+
else {
|
22
|
+
valueContainer.toggle();
|
23
|
+
}
|
24
|
+
});
|
25
|
+
|
26
|
+
});
|
@@ -1,46 +1,105 @@
|
|
1
1
|
/* search_autocomplete.js. Add autocomplete to Umlaut journal title search. */
|
2
2
|
jQuery(document).ready(function($) {
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
3
|
+
|
4
|
+
|
5
|
+
// We override typeahead's 'render' function to NOT have the first
|
6
|
+
// item selected. We simply copy and pasted it, and removed the line
|
7
|
+
// `items.first().addClass('active')`, then set the prototype to our
|
8
|
+
// own function. Yes, this changes typeahead globally, sorry we don't have
|
9
|
+
// a way to change it just for certain typeaheads.
|
10
|
+
//
|
11
|
+
// The default first-item-selected behavior has been hated by users
|
12
|
+
// in the journal search scenario, since when they hit return they
|
13
|
+
// get it even if they didn't want it.
|
14
|
+
var newRender = function(items) {
|
15
|
+
var that = this
|
16
|
+
|
17
|
+
items = $(items).map(function (i, item) {
|
18
|
+
i = $(that.options.item).attr('data-value', item)
|
19
|
+
i.find('a').html(that.highlighter(item))
|
20
|
+
return i[0]
|
21
|
+
})
|
22
|
+
|
23
|
+
this.$menu.html(items)
|
24
|
+
return this
|
25
|
+
};
|
26
|
+
$.fn.typeahead.Constructor.prototype.render = newRender;
|
27
|
+
// have to fix 'select' to accomodate possible no selection too
|
28
|
+
$.fn.typeahead.Constructor.prototype.select = function() {
|
29
|
+
var val = this.$menu.find('.active').attr('data-value');
|
30
|
+
if (val) {
|
31
|
+
this.$element
|
32
|
+
.val(this.updater(val))
|
33
|
+
.change();
|
34
|
+
}
|
35
|
+
return this.hide()
|
36
|
+
}
|
37
|
+
|
38
|
+
$(document).on("submit", "form.OpenURL", function() {
|
39
|
+
var form = $(this);
|
40
|
+
if ( form.find(".rft_title").val() != $(this).val()) {
|
41
|
+
form.find(".rft_object_id").val("");
|
42
|
+
form.find(".rft_title").val("");
|
43
|
+
}
|
44
|
+
});
|
45
|
+
|
46
|
+
// Search for the title with the current form. Only search
|
47
|
+
// if there are more than two chars though!
|
48
|
+
//
|
49
|
+
var search_title = function(query, process) {
|
50
|
+
if (query.length > 2) {
|
51
|
+
var form = this.$element.closest("form");
|
52
|
+
var url = form.attr("action").replace("journal_search", "auto_complete_for_journal_title");
|
53
|
+
// Get JSON from
|
54
|
+
$.getJSON(
|
55
|
+
form.attr("action").replace("journal_search", "auto_complete_for_journal_title"),
|
56
|
+
form.serialize(),
|
57
|
+
function(data) {
|
58
|
+
process(data)
|
59
|
+
}
|
60
|
+
)
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
|
65
|
+
var lookup_limit = 300; //ms
|
66
|
+
// Uses a timer to only do a lookup at most once every
|
67
|
+
// 300ms . Based on rejected pull request at:
|
68
|
+
// https://github.com/twitter/bootstrap/pull/6320
|
69
|
+
var throttled_search_title = function(query, process) {
|
70
|
+
if(this.lookupTimer) {
|
71
|
+
clearTimeout(this.lookupTimer);
|
72
|
+
}
|
73
|
+
|
74
|
+
this.lookupTimer = setTimeout($.proxy(search_title, this, query, process), lookup_limit);
|
75
|
+
return this;
|
76
|
+
}
|
77
|
+
|
78
|
+
$("input.title_search").typeahead({
|
79
|
+
items: 10,
|
80
|
+
minLength: 3,
|
81
|
+
source: throttled_search_title,
|
82
|
+
highlighter: function(item) {
|
83
|
+
// Bootstrap updates the item as it passes through the callback chain
|
84
|
+
// so this is a hack to ensure we get the proper values.
|
85
|
+
return "<span id=\"" + item.object_id + "\" class=\"title\">"+ item.title + "</span>";
|
86
|
+
},
|
87
|
+
sorter: function(items) { return items },
|
88
|
+
matcher: function(item) { return true; },
|
89
|
+
updater: function(item) {
|
90
|
+
// Get the selected item via our hack.
|
91
|
+
var selected_item = this.$menu.find('.active .title');
|
92
|
+
if (selected_item.length > 0) {
|
93
|
+
// We set the id attribute as the object id
|
94
|
+
var object_id = selected_item.attr("id");
|
95
|
+
// We set the inner text with the title
|
96
|
+
var title = selected_item.text();
|
97
|
+
var form = this.$element.closest("form");
|
98
|
+
form.find("input.rft_object_id").val(object_id);
|
99
|
+
form.find("input.rft_title").val(title);
|
100
|
+
form.find("select.title_search_type").val("exact");
|
101
|
+
return title;
|
102
|
+
}
|
103
|
+
}
|
104
|
+
});
|
105
|
+
});
|