umlaut 3.0.0alpha1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. data/LICENSE +7 -0
  2. data/README.md +49 -0
  3. data/Rakefile +37 -0
  4. data/app/assets/images/error.gif +0 -0
  5. data/app/assets/images/export_bg_bot.gif +0 -0
  6. data/app/assets/images/export_bg_mid.gif +0 -0
  7. data/app/assets/images/export_bg_top.gif +0 -0
  8. data/app/assets/images/famfamfam/book_open.png +0 -0
  9. data/app/assets/images/famfamfam/cross.png +0 -0
  10. data/app/assets/images/famfamfam/page_sound.gif +0 -0
  11. data/app/assets/images/famfamfam/page_text.gif +0 -0
  12. data/app/assets/images/famfamfam/page_up.gif +0 -0
  13. data/app/assets/images/famfamfam/page_white.png +0 -0
  14. data/app/assets/images/famfamfam/readme.html +1495 -0
  15. data/app/assets/images/famfamfam/tiny_cross.png +0 -0
  16. data/app/assets/images/frame_remove.gif +0 -0
  17. data/app/assets/images/ico_go.gif +0 -0
  18. data/app/assets/images/jhu_findit.gif +0 -0
  19. data/app/assets/images/list_closed.png +0 -0
  20. data/app/assets/images/list_open.png +0 -0
  21. data/app/assets/images/more_info.gif +0 -0
  22. data/app/assets/images/rails.png +0 -0
  23. data/app/assets/images/request.gif +0 -0
  24. data/app/assets/images/spinner.gif +0 -0
  25. data/app/assets/javascripts/umlaut/ajax_windows.js +35 -0
  26. data/app/assets/javascripts/umlaut/ensure_window_size.js.erb +34 -0
  27. data/app/assets/javascripts/umlaut/expand_contract_toggle.js +25 -0
  28. data/app/assets/javascripts/umlaut/search_autocomplete.js +46 -0
  29. data/app/assets/javascripts/umlaut/simple_visible_toggle.js +8 -0
  30. data/app/assets/javascripts/umlaut/update_html.js +152 -0
  31. data/app/assets/javascripts/umlaut.js +17 -0
  32. data/app/assets/stylesheets/umlaut.css +857 -0
  33. data/app/controllers/application_controller.rb +14 -0
  34. data/app/controllers/export_email_controller.rb +123 -0
  35. data/app/controllers/js_helper_controller.rb +10 -0
  36. data/app/controllers/link_router_controller.rb +87 -0
  37. data/app/controllers/open_search_controller.rb +9 -0
  38. data/app/controllers/resolve_controller.rb +288 -0
  39. data/app/controllers/resource_controller.rb +83 -0
  40. data/app/controllers/search_controller.rb +328 -0
  41. data/app/controllers/search_methods/sfx3.rb +148 -0
  42. data/app/controllers/search_methods/sfx4.rb +257 -0
  43. data/app/controllers/search_methods/sfx_api.rb +47 -0
  44. data/app/controllers/store_controller.rb +64 -0
  45. data/app/controllers/umlaut/controller_behavior.rb +20 -0
  46. data/app/controllers/umlaut/controller_logic.rb +96 -0
  47. data/app/controllers/umlaut/error_handling.rb +48 -0
  48. data/app/controllers/umlaut_controller.rb +112 -0
  49. data/app/helpers/application_helper.rb +4 -0
  50. data/app/helpers/emailer_helper.rb +43 -0
  51. data/app/helpers/export_email_helper.rb +34 -0
  52. data/app/helpers/open_search_helper.rb +7 -0
  53. data/app/helpers/resolve_helper.rb +225 -0
  54. data/app/helpers/search_helper.rb +50 -0
  55. data/app/helpers/umlaut/footer_helper.rb +64 -0
  56. data/app/helpers/umlaut/helper.rb +62 -0
  57. data/app/helpers/umlaut/html_head_helper.rb +37 -0
  58. data/app/helpers/umlaut/url_generation.rb +77 -0
  59. data/app/mailers/emailer.rb +48 -0
  60. data/app/models/clickthrough.rb +2 -0
  61. data/app/models/collection.rb +259 -0
  62. data/app/models/crossref_lookup.rb +2 -0
  63. data/app/models/dispatched_service.rb +58 -0
  64. data/app/models/permalink.rb +29 -0
  65. data/app/models/referent.rb +473 -0
  66. data/app/models/referent_value.rb +14 -0
  67. data/app/models/request.rb +449 -0
  68. data/app/models/service_response.rb +179 -0
  69. data/app/models/service_store.rb +59 -0
  70. data/app/models/service_type_value.rb +58 -0
  71. data/app/models/service_wave.rb +150 -0
  72. data/app/models/sfx_db/az_additional_title.rb +11 -0
  73. data/app/models/sfx_db/az_letter_group.rb +11 -0
  74. data/app/models/sfx_db/az_title.rb +38 -0
  75. data/app/models/sfx_db/az_title_v2.rb +34 -0
  76. data/app/models/sfx_db/isbn.rb +12 -0
  77. data/app/models/sfx_db/issn.rb +12 -0
  78. data/app/models/sfx_db/object.rb +35 -0
  79. data/app/models/sfx_db/object_portfolio.rb +6 -0
  80. data/app/models/sfx_db/publisher.rb +10 -0
  81. data/app/models/sfx_db/sfx_db_base.rb +54 -0
  82. data/app/models/sfx_db/target.rb +9 -0
  83. data/app/models/sfx_db/target_service.rb +10 -0
  84. data/app/models/sfx_db/title.rb +10 -0
  85. data/app/models/sfx_db.rb +10 -0
  86. data/app/models/sfx_url.rb +35 -0
  87. data/app/views/emailer/citation.text.erb +28 -0
  88. data/app/views/emailer/short_citation.text.erb +8 -0
  89. data/app/views/export_email/_email.html.erb +25 -0
  90. data/app/views/export_email/_send_email.html.erb +3 -0
  91. data/app/views/export_email/_send_txt.html.erb +3 -0
  92. data/app/views/export_email/_txt.html.erb +62 -0
  93. data/app/views/export_email/email.html.erb +3 -0
  94. data/app/views/export_email/send_email.html.erb +1 -0
  95. data/app/views/export_email/send_txt.html.erb +1 -0
  96. data/app/views/export_email/txt.html.erb +3 -0
  97. data/app/views/js_helper/loader.erb.js +13 -0
  98. data/app/views/layouts/umlaut.html.erb +52 -0
  99. data/app/views/open_search/index.html.erb +9 -0
  100. data/app/views/resolve/_api_in_progress.xml.erb +21 -0
  101. data/app/views/resolve/_background_progress.html.erb +51 -0
  102. data/app/views/resolve/_background_updater.html.erb +38 -0
  103. data/app/views/resolve/_citation.html.erb +87 -0
  104. data/app/views/resolve/_coins.html.erb +1 -0
  105. data/app/views/resolve/_compact_citation.html.erb +33 -0
  106. data/app/views/resolve/_cover_image.html.erb +35 -0
  107. data/app/views/resolve/_fulltext.html.erb +55 -0
  108. data/app/views/resolve/_help.html.erb +17 -0
  109. data/app/views/resolve/_holding.html.erb +91 -0
  110. data/app/views/resolve/_related_items.html.erb +35 -0
  111. data/app/views/resolve/_search_inside.html.erb +62 -0
  112. data/app/views/resolve/_section_display.html.erb +49 -0
  113. data/app/views/resolve/_service_errors.html.erb +29 -0
  114. data/app/views/resolve/_standard_response_item.html.erb +89 -0
  115. data/app/views/resolve/api.xml.builder +72 -0
  116. data/app/views/resolve/background_status.html.erb +26 -0
  117. data/app/views/resolve/index.html.erb +73 -0
  118. data/app/views/resolve/partial_html_sections.xml.erb +30 -0
  119. data/app/views/search/_a_to_z.html.erb +6 -0
  120. data/app/views/search/_citation.html.erb +94 -0
  121. data/app/views/search/_pager.html.erb +60 -0
  122. data/app/views/search/books.html.erb +103 -0
  123. data/app/views/search/journal_search.html.erb +90 -0
  124. data/app/views/search/journals.html.erb +167 -0
  125. data/app/views/search/opensearch_description.rxml +10 -0
  126. data/app/views/testing/index.html.erb +1 -0
  127. data/app/views/umlaut/README +5 -0
  128. data/app/views/umlaut/error.html.erb +45 -0
  129. data/db/migrate/01_umlaut_init.rb +113 -0
  130. data/db/orig_fixed_data/service_type_values.yml +120 -0
  131. data/db/seeds.rb +7 -0
  132. data/lib/CronTab.rb +192 -0
  133. data/lib/aws_product_sign.rb +146 -0
  134. data/lib/exlibris/aleph/patron.rb +64 -0
  135. data/lib/exlibris/aleph/record.rb +54 -0
  136. data/lib/exlibris/aleph/rest_api.rb +29 -0
  137. data/lib/exlibris/primo/holding.rb +192 -0
  138. data/lib/exlibris/primo/rsrc.rb +17 -0
  139. data/lib/exlibris/primo/searcher.rb +276 -0
  140. data/lib/exlibris/primo/source/aleph.rb +46 -0
  141. data/lib/exlibris/primo/source/distribution/nyu_aleph.rb +323 -0
  142. data/lib/exlibris/primo/toc.rb +17 -0
  143. data/lib/exlibris/primo_ws.rb +140 -0
  144. data/lib/generators/templates/umlaut_services.yml +237 -0
  145. data/lib/generators/umlaut/asset_hooks_generator.rb +44 -0
  146. data/lib/generators/umlaut/install_generator.rb +110 -0
  147. data/lib/hip3/bib.rb +291 -0
  148. data/lib/hip3/bib_searcher.rb +302 -0
  149. data/lib/hip3/custom_field_lookup.rb +44 -0
  150. data/lib/hip3/holding.rb +50 -0
  151. data/lib/hip3/item.rb +65 -0
  152. data/lib/hip3/receipt.rb +7 -0
  153. data/lib/hip3/serial_copy.rb +82 -0
  154. data/lib/holding.rb +32 -0
  155. data/lib/marc_helper.rb +254 -0
  156. data/lib/metadata_helper.rb +312 -0
  157. data/lib/opensearch_feed.rb +398 -0
  158. data/lib/opensearch_query.rb +98 -0
  159. data/lib/referent_filter.rb +16 -0
  160. data/lib/referent_filters/dissertation_catch.rb +45 -0
  161. data/lib/section_renderer.rb +503 -0
  162. data/lib/service.rb +336 -0
  163. data/lib/service_adaptors/ajax_export.rb +37 -0
  164. data/lib/service_adaptors/amazon.rb +412 -0
  165. data/lib/service_adaptors/blacklight.rb +327 -0
  166. data/lib/service_adaptors/book_finder.rb +40 -0
  167. data/lib/service_adaptors/bx.rb +51 -0
  168. data/lib/service_adaptors/cover_thing.rb +73 -0
  169. data/lib/service_adaptors/elsevier_cover.rb +57 -0
  170. data/lib/service_adaptors/email_export.rb +10 -0
  171. data/lib/service_adaptors/ezproxy.rb +171 -0
  172. data/lib/service_adaptors/google_book_search.rb +442 -0
  173. data/lib/service_adaptors/gpo.rb +124 -0
  174. data/lib/service_adaptors/hathi_trust.rb +308 -0
  175. data/lib/service_adaptors/hip3_service.rb +150 -0
  176. data/lib/service_adaptors/hip_holding_search.rb +237 -0
  177. data/lib/service_adaptors/internet_archive.rb +488 -0
  178. data/lib/service_adaptors/isbn_db.rb +86 -0
  179. data/lib/service_adaptors/isi.rb +258 -0
  180. data/lib/service_adaptors/jcr.rb +146 -0
  181. data/lib/service_adaptors/opac.rb +351 -0
  182. data/lib/service_adaptors/open_library.rb +316 -0
  183. data/lib/service_adaptors/open_library_cover.rb +73 -0
  184. data/lib/service_adaptors/primo_service.rb +392 -0
  185. data/lib/service_adaptors/primo_source.rb +78 -0
  186. data/lib/service_adaptors/pubmed.rb +133 -0
  187. data/lib/service_adaptors/request_to_fixture.rb +68 -0
  188. data/lib/service_adaptors/scopus.rb +295 -0
  189. data/lib/service_adaptors/sfx-new.rb +557 -0
  190. data/lib/service_adaptors/sfx.rb +566 -0
  191. data/lib/service_adaptors/sfx_backchannel_record.rb +69 -0
  192. data/lib/service_adaptors/txt_holding_export.rb +32 -0
  193. data/lib/service_adaptors/ulrichs_cover.rb +57 -0
  194. data/lib/service_adaptors/ulrichs_link.rb +47 -0
  195. data/lib/service_adaptors/worldcat.rb +116 -0
  196. data/lib/service_adaptors/worldcat_identities.rb +591 -0
  197. data/lib/tasks/umlaut.rake +134 -0
  198. data/lib/umlaut/default_configuration.rb +5 -0
  199. data/lib/umlaut/routes.rb +136 -0
  200. data/lib/umlaut/version.rb +3 -0
  201. data/lib/umlaut.rb +37 -0
  202. data/lib/umlaut_configurable.rb +343 -0
  203. data/lib/umlaut_http.rb +100 -0
  204. data/lib/xml_schema_helper.rb +109 -0
  205. data/test/dummy/Rakefile +7 -0
  206. data/test/dummy/app/assets/javascripts/application.js +13 -0
  207. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  208. data/test/dummy/app/controllers/application_controller.rb +3 -0
  209. data/test/dummy/app/controllers/umlaut_controller.rb +112 -0
  210. data/test/dummy/app/helpers/application_helper.rb +2 -0
  211. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  212. data/test/dummy/config/application.rb +45 -0
  213. data/test/dummy/config/boot.rb +10 -0
  214. data/test/dummy/config/database-jhu.yml +44 -0
  215. data/test/dummy/config/database.yml +25 -0
  216. data/test/dummy/config/environment.rb +5 -0
  217. data/test/dummy/config/environments/development.rb +34 -0
  218. data/test/dummy/config/environments/production.rb +60 -0
  219. data/test/dummy/config/environments/test.rb +39 -0
  220. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  221. data/test/dummy/config/initializers/inflections.rb +10 -0
  222. data/test/dummy/config/initializers/mime_types.rb +5 -0
  223. data/test/dummy/config/initializers/secret_token.rb +7 -0
  224. data/test/dummy/config/initializers/session_store.rb +8 -0
  225. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  226. data/test/dummy/config/locales/en.yml +5 -0
  227. data/test/dummy/config/routes.rb +61 -0
  228. data/test/dummy/config/umlaut_services.yml +237 -0
  229. data/test/dummy/config.ru +4 -0
  230. data/test/dummy/db/migrate/20111228211210_umlaut_init.rb +113 -0
  231. data/test/dummy/db/schema.rb +124 -0
  232. data/test/dummy/log/development.log +12981 -0
  233. data/test/dummy/log/production.log +0 -0
  234. data/test/dummy/public/404.html +26 -0
  235. data/test/dummy/public/422.html +26 -0
  236. data/test/dummy/public/500.html +26 -0
  237. data/test/dummy/public/favicon.ico +0 -0
  238. data/test/dummy/script/rails +6 -0
  239. data/test/dummy/tmp/cache/assets/C5F/340/sprockets%2F99692920160b7a279b86a80415b79db7 +0 -0
  240. data/test/dummy/tmp/cache/assets/C70/4D0/sprockets%2F034ad2036e623081bd352800786dfe80 +0 -0
  241. data/test/dummy/tmp/cache/assets/C73/920/sprockets%2Fd371318f22900492fd180f17c5e2a504 +9268 -0
  242. data/test/dummy/tmp/cache/assets/C80/980/sprockets%2Fc94807409c1523d43e18d25f35d93c41 +0 -0
  243. data/test/dummy/tmp/cache/assets/C8F/780/sprockets%2Fe47e28558116fb5f8038754e60d1961d +11769 -0
  244. data/test/dummy/tmp/cache/assets/CAA/EB0/sprockets%2F1d179210e8b76f1ea63c802688a015e4 +9271 -0
  245. data/test/dummy/tmp/cache/assets/CBB/9C0/sprockets%2F706f28923fb754cad04b9107c89986a1 +0 -0
  246. data/test/dummy/tmp/cache/assets/CBF/B60/sprockets%2F08ca89671549936265dcb673bf02e36f +0 -0
  247. data/test/dummy/tmp/cache/assets/CC9/9F0/sprockets%2F306166316e2cafd13c15e62b51a2339d +0 -0
  248. data/test/dummy/tmp/cache/assets/CF6/F20/sprockets%2F5b2ffa1103079dfd555197838f87a99f +0 -0
  249. data/test/dummy/tmp/cache/assets/CF7/2B0/sprockets%2F25a7c73655bd3598173b39d9f98bcd46 +862 -0
  250. data/test/dummy/tmp/cache/assets/CFE/080/sprockets%2F37fe9f4255baddbd549a659914929398 +0 -0
  251. data/test/dummy/tmp/cache/assets/D22/060/sprockets%2F9aec77b768e91a802d284271c58e2f7e +21357 -0
  252. data/test/dummy/tmp/cache/assets/D32/A10/sprockets%2F13fe41fee1fe35b49d145bcc06610705 +0 -0
  253. data/test/dummy/tmp/cache/assets/D33/6D0/sprockets%2F500129c57f1146e556ec3aacd6cd38c1 +0 -0
  254. data/test/dummy/tmp/cache/assets/D33/FD0/sprockets%2F2ba0b4e6334a77b923e5f770381bb2bf +0 -0
  255. data/test/dummy/tmp/cache/assets/D42/C20/sprockets%2Fbcf14e437b1582bf93b77670acf8e090 +21353 -0
  256. data/test/dummy/tmp/cache/assets/D50/A30/sprockets%2F7d8b294ac433db5d056538f8cf7c66b9 +0 -0
  257. data/test/dummy/tmp/cache/assets/D54/ED0/sprockets%2F71c9fa01091d432b131da3bb73faf3d4 +872 -0
  258. data/test/dummy/tmp/cache/assets/D65/590/sprockets%2Fc1bb92fc3406a126b7dd302edc96d629 +0 -0
  259. data/test/dummy/tmp/cache/assets/D71/6B0/sprockets%2Fde558b71b494cf09b1bf055c8dff0353 +0 -0
  260. data/test/dummy/tmp/cache/assets/D72/610/sprockets%2Fa8c708eeb30ef93de34d755d4f45d023 +859 -0
  261. data/test/dummy/tmp/cache/assets/D76/AD0/sprockets%2Fe2158cde93188cf5ab6457bc6d6602ec +0 -0
  262. data/test/dummy/tmp/cache/assets/D7A/E40/sprockets%2F9622ffcc499a57627cd1bb18fe31b8e4 +11772 -0
  263. data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +0 -0
  264. data/test/dummy/tmp/cache/assets/D9B/770/sprockets%2F8aacf02eb7dbb0949704b28f27b87e0b +0 -0
  265. data/test/dummy/tmp/cache/assets/DA6/A80/sprockets%2F92e26d8e58d5bcc8b8f6c25d1b05b9c1 +0 -0
  266. data/test/dummy/tmp/cache/assets/DE8/790/sprockets%2Fd1333bde2b9aafcc712d11dd09ab35d8 +0 -0
  267. data/test/dummy/tmp/cache/assets/DF7/F30/sprockets%2F7bc16c4109b17fabe29f8ddbbf732d1c +374 -0
  268. data/test/dummy/tmp/cache/assets/E03/570/sprockets%2F493bdc0ac14cd4f57fdfe4253f992bde +0 -0
  269. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  270. data/test/dummy/tmp/cache/assets/E0B/4B0/sprockets%2F7988df51a61c81ce6ede4a2d4c8cce4f +377 -0
  271. data/test/dummy/tmp/cache/assets/E5F/960/sprockets%2Fdc007b6cad5c7ef08e33ec28cfff0ef6 +0 -0
  272. data/test/fixtures/dispatched_services.yml +5 -0
  273. data/test/fixtures/permalinks.yml +5 -0
  274. data/test/fixtures/referent_values.yml +1734 -0
  275. data/test/fixtures/referents.yml +156 -0
  276. data/test/fixtures/requests.yml +284 -0
  277. data/test/fixtures/service_responses.yml +5 -0
  278. data/test/fixtures/sfx_urls.yml +4 -0
  279. data/test/performance/browsing_test.rb +9 -0
  280. data/test/test_helper.rb +10 -0
  281. data/test/umlaut_test.rb +7 -0
  282. data/test/unit/aleph_patron_test.rb +39 -0
  283. data/test/unit/aleph_record_benchmarks.rb +28 -0
  284. data/test/unit/aleph_record_test.rb +30 -0
  285. data/test/unit/aws_product_sign_test.rb +93 -0
  286. data/test/unit/collection_test.rb +76 -0
  287. data/test/unit/google_book_search_test.rb +101 -0
  288. data/test/unit/primo_searcher_test.rb +403 -0
  289. data/test/unit/primo_service_test.rb +939 -0
  290. data/test/unit/primo_ws_test.rb +131 -0
  291. data/test/unit/service_response_test.rb +9 -0
  292. data/test/unit/service_test.rb +33 -0
  293. metadata +580 -0
@@ -0,0 +1,91 @@
1
+ <%
2
+ =begin
3
+ jrochkind's alternative partial for displaying holdings. Displays more
4
+ information to deal with the more information we need to display from
5
+ our Horizon. In tabular format. Customized for JH's needs, but should
6
+ be usable by anyone.
7
+ =end
8
+ %>
9
+
10
+
11
+ <div class="section_content_indent">
12
+ <% holdings = get_service_type('holding') %>
13
+ <% unless holdings.empty? %>
14
+ <table style="width: 100%">
15
+ <%
16
+ holdings.each do |p|
17
+ target = p.view_data
18
+ %>
19
+ <tr><td class="holding_heading_row"><h4><%= target[:collection_str] %></h4></td>
20
+ <td class="holding_heading_row"><span style="white-space: nowrap;"><%= target[:call_number]%></span></td>
21
+
22
+ <% status_class = (target[:status] == "Not Charged" or target[:status] == "Available") ? 'available' : '' %>
23
+
24
+ <td class="holding_heading_row"><span class="<%= status_class %>"><%= target[:status] %></span></td>
25
+
26
+ <td class="holding_heading_row"><%= link_to(image_tag("more_info.gif", "border" => 0, "alt" => 'more info'), {:controller=>"link_router", :id=>p.id}, "target" => "_blank") %>
27
+
28
+ <% if target[:request_url] %>
29
+ <br />
30
+ <%= link_to( image_tag("request.gif", "border" => "0", "alt" => "request"), target[:request_url], "target" => "_blank" ) %>
31
+ <% end %>
32
+
33
+ </td>
34
+ </tr>
35
+
36
+ <% if (!target[:match_reliability].blank?) && target[:match_reliability] != ServiceResponse::MatchExact %>
37
+ <tr>
38
+ <td colspan="4">
39
+ <div class="section_content_indent edition_warning">
40
+ <% unless target[:edition_str].blank? %>
41
+ <em class="note label">Edition information</em> <%= target[:edition_str] %>
42
+ <% else %>
43
+ <em class="note label">May be alternate edition.</em>
44
+ <% end %>
45
+ <div>
46
+ </td>
47
+ </tr>
48
+ <% end %>
49
+
50
+ <% unless target[:notes].blank? %>
51
+ <tr>
52
+ <td colspan="4"><div class="section_content_indent"><%= target[:notes] %></div> </td>
53
+ </tr>
54
+ <% end %>
55
+
56
+ <% unless target[:coverage_str_array].blank? %>
57
+ <tr>
58
+ <td colspan="4">
59
+
60
+ <%=
61
+ list_with_limit("copies_#{p.id}", target[:coverage_str_array]) do |item, index|
62
+ %>
63
+ <li><%= item %></li>
64
+ <% end %>
65
+
66
+ </td>
67
+ </tr>
68
+ <% end %>
69
+ <%
70
+ end %>
71
+ </table>
72
+ <% end %>
73
+
74
+
75
+ <%
76
+ if holdings.empty?
77
+ searches = get_service_type('holding_search')
78
+ searches.each do | result_st |
79
+ response = result_st.view_data %>
80
+ <p><%= link_to response[:display_text], {:controller=>'link_router', :id=>result_st.id}, 'target'=>"_blank" %> </p>
81
+ <%
82
+ end
83
+ end
84
+ if (holdings.blank? && searches.blank? && ! service_types_in_progress?(['holding', 'holding_search']))
85
+ %>
86
+ <p class="notAvailable">Not Available </p>
87
+ <%
88
+ end %>
89
+
90
+
91
+ </div>
@@ -0,0 +1,35 @@
1
+ <%
2
+ cited_by = get_service_type('cited_by')
3
+ similar = get_service_type('similar')
4
+ %>
5
+
6
+
7
+ <%= list_with_limit('umlaut_cited_by',
8
+ cited_by,
9
+ :ul_class => "related_items response_list") do |item, index | %>
10
+ <%= render(:partial => "standard_response_item", :object=> item, :locals => { :show_source => true, :li_class => "related_item"}) %>
11
+ <% end %>
12
+
13
+ <%
14
+ if (cited_by.length > 0) && (similar.length > 0) %>
15
+ <!-- a little seperation for readability -->
16
+ <br class="seperator"/>
17
+ <% end %>
18
+
19
+ <%= list_with_limit('umlaut_similar_items',
20
+ similar,
21
+ :ul_class =>"related_items response_list") do |item, index | %>
22
+ <%= render(:partial => "standard_response_item", :object=> item, :locals => { :show_source => true}) %>
23
+ <% end %>
24
+
25
+
26
+
27
+ <% if (!service_types_in_progress?([ServiceTypeValue['cited_by'], ServiceTypeValue['similar']])) && similar.empty? && cited_by.empty? %>
28
+ <ul class="related_items response_list">
29
+ <li><i>No related items found.</i></li>
30
+ </ul>
31
+ <% end %>
32
+
33
+
34
+
35
+
@@ -0,0 +1,62 @@
1
+ <%
2
+ search_providers = search_inside
3
+ %>
4
+
5
+
6
+ <%
7
+ # We don't show this block until ALL possible search inside tools
8
+ # have been found. Too hard to deal with AJAX update of a DIV
9
+ # that has a text input box in it otherwise.
10
+ if ( search_providers.length > 0 &&
11
+ ! service_type_in_progress?('search_inside') ) %>
12
+ <div class="umlaut_section search_inside">
13
+ <div class="section_heading">
14
+ <h3>Search inside this
15
+ <%=
16
+ thing = @user_request.referent.type_of_thing
17
+ thing = 'journal' if thing == 'article'
18
+ thing
19
+ %></h3>
20
+ </div>
21
+ <% # We don't show the search box unless we have a search provider AND
22
+ # we're completely done loading search providers. Too hard
23
+ # to deal with AJAX updating of search providers without
24
+ # interrupting user.
25
+ %>
26
+ <div class="umlaut_section_content">
27
+
28
+ <form target="_blank" action="<%= url_for(:controller=>'link_router', :action=>'index') %>">
29
+
30
+ <span class="source">
31
+ via
32
+ <% if search_providers.length > 1 %>
33
+ <select name="id">
34
+ <% search_providers.each do |st| %>
35
+ <option value="<%= st.id %>"><%= st.view_data[:display_text] %></option>
36
+ <% end %>
37
+ </select>
38
+ <% else %>
39
+ <input type="hidden" name="id" value="<%= search_providers[0].id %>">
40
+ <%= search_providers[0].view_data[:display_text] %>:
41
+ <% end %>
42
+ </span>
43
+
44
+ <input name="query" type="text" /> <input value="search" type="submit">
45
+ </form>
46
+
47
+ </div>
48
+ </div>
49
+ <%end%>
50
+ <!-- don't show the spinner unless it's identified as a book, otherwise
51
+ too likely to be a false promise -->
52
+ <%
53
+ if ( @user_request.referent.format == 'book' && service_type_in_progress?('search_inside')) %>
54
+
55
+ <%= render(:partial => "background_progress",
56
+ :locals => {
57
+ :svc_type => "search_inside",
58
+ :progress_message => "Looking for tools to search inside this #{@user_request.referent.type_of_thing}" }) %>
59
+
60
+ <% end %>
61
+
62
+
@@ -0,0 +1,49 @@
1
+ <% # You generally shoudln't call this partial directly, it's called through
2
+ # the render_section helper method in resolve_helper.rb
3
+ %>
4
+
5
+ <% if presenter.visible? %>
6
+
7
+ <% unless presenter.show_partial_only? %>
8
+ <div class="umlaut_section <%= presenter.div_id %>">
9
+ <% end %>
10
+
11
+
12
+ <% if presenter.show_heading? %>
13
+ <%= presenter.render_heading %>
14
+ <% end %>
15
+
16
+ <% unless presenter.show_partial_only? %>
17
+ <div class="umlaut_section_content">
18
+ <% end %>
19
+
20
+ <% if presenter.custom_partial? %>
21
+ <%= render( presenter.content_render_hash ) %>
22
+ <% elsif presenter.list_visible_limit %>
23
+
24
+ <%= list_with_limit("#{presenter.div_id}_list_with_limit", presenter.responses_list, :limit => presenter.list_visible_limit, :ul_class => "response_list #{presenter.div_id}") do |item, index| %>
25
+ <%= render( presenter.item_render_hash(item) ) %>
26
+ <% end %>
27
+ <% elsif presenter.responses_list.length == 0 && ! presenter.services_in_progress?%>
28
+ <ul class="response_list">
29
+ <li>
30
+ None available.
31
+ </li>
32
+ </ul>
33
+ <% else %>
34
+ <ul class="response_list <%= presenter.div_id %>">
35
+ <%= render( presenter.content_render_hash ) %>
36
+ </ul>
37
+ <% end %>
38
+
39
+ <% if presenter.show_spinner? %>
40
+ <%= render(presenter.spinner_render_hash) %>
41
+ <% end %>
42
+
43
+ <% unless presenter.show_partial_only? %>
44
+ </div>
45
+ </div>
46
+ <% end %>
47
+
48
+
49
+ <% end %>
@@ -0,0 +1,29 @@
1
+
2
+ <%
3
+ failed_dispatches = failed_service_dispatches()
4
+ unless ( failed_dispatches.nil? || failed_dispatches.empty? ) %>
5
+ <div id="service_errors_content" class="small_right_box">
6
+
7
+
8
+ <span class="error_icon">(!)</span><span class="smallText">Some content may not be included due to errors:</span>
9
+ <ul>
10
+ <% failed_dispatches.each do | dispatch | %>
11
+ <li class="smallText">
12
+ Some <i><%= dispatch.service.service_types_generated.collect { |type|
13
+ type.display_name_pluralize.downcase}.join(",") %></i>
14
+ from <a class="simple_visible_toggle"><strong><%= dispatch.service.display_name %> </strong> </a>
15
+ <% exception_info = dispatch.exception_info %>
16
+ <div style="display: none;">
17
+ technical error information
18
+ <ul>
19
+ <li> <%= exception_info[:class_name] if exception_info %> </li>
20
+ <li> <%= exception_info[:message] if exception_info %> </li>
21
+ <li> dispatched service id: <%= dispatch.id %> </li>
22
+ </ul>
23
+ </div>
24
+ </li>
25
+ <% end %>
26
+ </ul>
27
+ <span class="clear"></span>
28
+ </div>
29
+ <% end %>
@@ -0,0 +1,89 @@
1
+ <%
2
+ # Displays a typical Umlaut response element in typical markup.
3
+ # Pass in a ServiceType object for the response using Rails partial
4
+ # :object or :collection convention
5
+
6
+ #optional argument, :locals =>
7
+ # :show_source => default false, if true display the source of the link
8
+ show_source ||= false
9
+
10
+ service_response = standard_response_item # passed in via :object or :collection
11
+ # passed in in :object or :collection
12
+ view_data = service_response.view_data
13
+ %>
14
+
15
+ <li class="response_item">
16
+
17
+ <!-- fancy schmancy ajax? But not if we're generating embed partials,
18
+ won't work. -->
19
+ <% if view_data[:link_supports_ajax_call]
20
+ # Generate a hyperlink that will call our standard service action
21
+ # due to special class for unobtrusive JS.
22
+ %>
23
+ <%= link_to(view_data[:display_text],
24
+ {:controller=>'link_router',
25
+ :id=>service_response.id},
26
+ {:id => "svctype_link_#{service_response.id}",
27
+ :target => "_blank",
28
+ :class => "ajax_window"}) %>
29
+ <% elsif (view_data[:content] )
30
+ #collapsible content on page
31
+ %>
32
+ <%= expand_contract_section(view_data[:display_text], "svc_id_#{service_response.id}") do %>
33
+ <div class="section_content_indent">
34
+ <%= view_data[:content] %>
35
+ </div>
36
+ <% end %>
37
+
38
+
39
+ <% else
40
+ # Ordinary href link.
41
+ %>
42
+ <%= link_to view_data[:display_text], {:controller=>'link_router', :id=>service_response.id}, 'target'=>"_blank", 'id' => "svctype_link_#{service_response.id}" %>
43
+ <% end %>
44
+
45
+ <% if show_source %>
46
+ <div class="link_source">from <%= view_data[:source] || service_response.service.display_name %></div>
47
+ <% end %>
48
+
49
+ <% unless view_data[:coverage].blank? %>
50
+ <div class="response_coverage_statement">
51
+ <%= view_data[:coverage] %>
52
+ </div>
53
+ <% end
54
+ %>
55
+ <% unless view_data[:notes].blank? %>
56
+ <%-
57
+ # legacy, the 'notes' field can take raw html, we need to leave it that way for
58
+ #now, but it's not great.
59
+ -%>
60
+ <div class="response_notes"><%= view_data[:notes].html_safe %></div>
61
+ <% end %>
62
+ <% unless view_data[:authentication].blank? %>
63
+ <div class="response_authentication_instructions"><strong>Authentication:</strong> <%= view_data[:authentication] %></div>
64
+ <% end %>
65
+
66
+
67
+ <% if (!view_data[:match_reliability].blank?) && view_data[:match_reliability] != ServiceResponse::MatchExact %>
68
+ <div class="edition_warning">
69
+ <% unless view_data[:edition_str].blank? %>
70
+ <em class="note label">Edition information</em> <%= view_data[:edition_str] %>
71
+ <% else %>
72
+ <em class="note label">May be alternate edition.</em>
73
+ <% end %>
74
+
75
+ </div>
76
+ <% end %>
77
+
78
+ <!-- debug info, hidden with CSS, can be made visible with javascript. -->
79
+ <div class="debug_info" style="display:none">
80
+ <b>Debug info:</b> <%= service_response.service.service_id %>
81
+
82
+ <% unless view_data[:debug_info].blank? %>
83
+ ; <%= view_data[:debug_info] %>
84
+ <% end %>
85
+
86
+ </div>
87
+
88
+
89
+ </li>
@@ -0,0 +1,72 @@
1
+ xml.instruct!
2
+ xml.umlaut do
3
+
4
+ xml.request_id( @user_request.id )
5
+
6
+ xml.context_object_xml do
7
+ xml << @user_request.referent.to_context_object.xml
8
+ end
9
+
10
+ xml << render(:partial=> "api_in_progress", :layout => false)
11
+
12
+ xml.service_statuses do
13
+ @user_request.dispatched_services.each do | dispatched |
14
+ xml.service(:id => dispatched.service_id ) do
15
+ xml.class_name( dispatched.service.class )
16
+ xml.display_name( dispatched.service.display_name )
17
+ xml.created_at( dispatched.created_at )
18
+ xml.status( dispatched.status )
19
+ xml.exception_info do
20
+ if dispatched.exception_info
21
+ xml.class_name( dispatched.exception_info[:"class_name"] )
22
+ xml.message( dispatched.exception_info[:message] )
23
+ end
24
+ end
25
+ xml.service_types_generated do
26
+ dispatched.service.service_types_generated.each do |type|
27
+ xml.name(type.name )
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+
34
+ xml.responses do
35
+ @user_request.service_responses.collect {|response| response.service_type_value}.uniq.each do | type |
36
+ xml.type_group(:name => type.name ) do
37
+ xml.display_name( type.display_name )
38
+ xml.display_name_plural(type.display_name_pluralize)
39
+ xml.complete(! @user_request.service_type_in_progress?(type) )
40
+
41
+ @user_request.get_service_type( type ).each do |response|
42
+ xml.response( :id => response.id ) do
43
+
44
+ xml.service( response.service.service_id )
45
+ xml.comment!("Attributes really vary depending on particular service, this makes it kind of tricky to deal with in an API. See documentation in ServiceResponse for conventions. Reccommend that you use umlaut_passthrough_url for url. Final destination url isis calculated on-demand by umlaut.")
46
+ ["display_text", "url", "notes"].each do |att|
47
+ xml.tag!(att, response.attributes[att])
48
+ end
49
+ response.service_data.keys.each do |key|
50
+
51
+ xml.tag!(key) do
52
+ value = nil
53
+ # try calling to_xml, for instance for hashes
54
+ begin
55
+ value = response.service_data[key].to_xml(:root => "records", :skip_instruct => true)
56
+ xml<< value
57
+ rescue
58
+ # oh well, no to_xml in there
59
+ value = response.service_data[key]
60
+ xml.text!(value.to_s) unless value.blank?
61
+ end
62
+
63
+ end
64
+ end
65
+
66
+ xml.umlaut_passthrough_url(url_for(:controller=>'link_router', :action => "index", :id=>response.id, :only_path => false))
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,26 @@
1
+ <div class="content">
2
+ <h1>Loading complete information</h1>
3
+ <p>Please wait, the following information is still loading. You will be automatically returned to the <%= app_name %> screen when finished.
4
+ <div class="small_right_box">
5
+ <table>
6
+ <tr><th>Source</th><th>Content type</th></tr>
7
+ <% @user_request.services_in_progress.each do |service| %>
8
+ <tr><td style="padding-right: 10px; vertical-align: top;"><strong><%= service.display_name %></strong></td>
9
+ <td> <%= service.service_types_generated.collect {|st| html_escape(st.display_name_pluralize) }.join('<br/>').html_safe %> </td>
10
+ </tr>
11
+ <% end %>
12
+ </table>
13
+ </div>
14
+
15
+ <%=
16
+ link_to( "View Current Results", url_for_with_co(
17
+ {:action => 'index',
18
+ :'umlaut.skip_resolve_menu' => 'false',
19
+ 'umlaut.request_id' => @user_request.id},
20
+ @user_request.to_context_object)
21
+ )
22
+ %>
23
+ </div>
24
+
25
+
26
+