blacklight 6.14.0 → 7.0.0

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 (422) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +40 -16
  5. data/.rubocop_todo.yml +479 -375
  6. data/.solr_wrapper.yml +9 -2
  7. data/.travis.yml +27 -20
  8. data/Gemfile +3 -1
  9. data/README.md +22 -5
  10. data/Rakefile +3 -2
  11. data/VERSION +1 -1
  12. data/Vagrantfile +2 -0
  13. data/app/assets/images/blacklight/list.svg +1 -0
  14. data/app/assets/images/blacklight/search.svg +1 -0
  15. data/app/assets/javascripts/blacklight/blacklight.js +497 -57
  16. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +18 -15
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  20. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  21. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  22. data/app/assets/stylesheets/blacklight/_facets.scss +64 -93
  23. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  24. data/app/assets/stylesheets/blacklight/_icons.scss +35 -0
  25. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  26. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  27. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  28. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  29. data/app/assets/stylesheets/blacklight/_search_form.scss +7 -0
  30. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  31. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  32. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  33. data/app/assets/stylesheets/blacklight/blacklight.scss +1 -1
  34. data/app/builders/blacklight/action_builder.rb +57 -0
  35. data/app/controllers/bookmarks_controller.rb +2 -2
  36. data/app/controllers/catalog_controller.rb +2 -2
  37. data/app/controllers/concerns/blacklight/base.rb +0 -33
  38. data/app/controllers/concerns/blacklight/bookmarks.rb +36 -33
  39. data/app/controllers/concerns/blacklight/catalog.rb +266 -210
  40. data/app/controllers/concerns/blacklight/controller.rb +111 -126
  41. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  42. data/app/controllers/concerns/blacklight/facet.rb +3 -0
  43. data/app/controllers/concerns/blacklight/search_context.rb +16 -14
  44. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  45. data/app/controllers/concerns/blacklight/search_history.rb +1 -6
  46. data/app/controllers/concerns/blacklight/token_based_user.rb +24 -9
  47. data/app/helpers/blacklight/blacklight_helper_behavior.rb +39 -119
  48. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  49. data/app/helpers/blacklight/component_helper_behavior.rb +21 -19
  50. data/app/helpers/blacklight/configuration_helper_behavior.rb +30 -57
  51. data/app/helpers/blacklight/facets_helper_behavior.rb +55 -51
  52. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  53. data/app/helpers/blacklight/icon_helper_behavior.rb +18 -0
  54. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -3
  55. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -6
  56. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  57. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +19 -11
  58. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  59. data/app/helpers/blacklight/url_helper_behavior.rb +50 -41
  60. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  61. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  62. data/app/javascript/blacklight/checkbox_submit.js +134 -0
  63. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  64. data/app/{assets/javascripts → javascript}/blacklight/core.js +10 -8
  65. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  66. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +62 -64
  67. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -3
  68. data/app/models/blacklight/facet_paginator.rb +3 -3
  69. data/app/models/blacklight/icon.rb +56 -0
  70. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  71. data/app/models/blacklight/suggest_search.rb +4 -15
  72. data/app/models/bookmark.rb +5 -10
  73. data/app/models/concerns/blacklight/configurable.rb +13 -13
  74. data/app/models/concerns/blacklight/document/active_model_shim.rb +13 -11
  75. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  76. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  77. data/app/models/concerns/blacklight/document/email.rb +1 -1
  78. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  79. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  80. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  81. data/app/models/concerns/blacklight/document.rb +26 -40
  82. data/app/models/concerns/blacklight/solr/document.rb +8 -8
  83. data/app/models/concerns/blacklight/suggest/response.rb +5 -3
  84. data/app/models/concerns/blacklight/user.rb +7 -6
  85. data/app/models/record_mailer.rb +5 -6
  86. data/app/models/search.rb +5 -7
  87. data/app/presenters/blacklight/document_presenter.rb +25 -140
  88. data/app/presenters/blacklight/field_presenter.rb +7 -5
  89. data/app/presenters/blacklight/index_presenter.rb +41 -58
  90. data/app/presenters/blacklight/json_presenter.rb +10 -14
  91. data/app/presenters/blacklight/link_alternate_presenter.rb +3 -1
  92. data/app/presenters/blacklight/rendering/abstract_step.rb +7 -5
  93. data/app/presenters/blacklight/rendering/helper_method.rb +10 -8
  94. data/app/presenters/blacklight/rendering/join.rb +5 -3
  95. data/app/presenters/blacklight/rendering/link_to_facet.rb +23 -19
  96. data/app/presenters/blacklight/rendering/microdata.rb +6 -3
  97. data/app/presenters/blacklight/rendering/pipeline.rb +7 -5
  98. data/app/presenters/blacklight/rendering/terminator.rb +2 -0
  99. data/app/presenters/blacklight/search_bar_presenter.rb +39 -0
  100. data/app/presenters/blacklight/show_presenter.rb +26 -63
  101. data/app/presenters/blacklight/thumbnail_presenter.rb +74 -0
  102. data/app/services/blacklight/document_factory.rb +13 -0
  103. data/app/services/blacklight/field_retriever.rb +26 -24
  104. data/app/services/blacklight/search_service.rb +152 -0
  105. data/app/values/blacklight/types.rb +31 -0
  106. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  107. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  108. data/app/views/bookmarks/_tools.html.erb +2 -2
  109. data/app/views/bookmarks/index.html.erb +12 -13
  110. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  111. data/app/views/catalog/_citation.html.erb +4 -4
  112. data/app/views/catalog/_constraints.html.erb +6 -7
  113. data/app/views/catalog/_constraints_element.html.erb +6 -6
  114. data/app/views/catalog/_did_you_mean.html.erb +1 -1
  115. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +19 -18
  116. data/app/views/catalog/_document.html.erb +5 -3
  117. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +2 -0
  118. data/app/views/catalog/_document_action.html.erb +2 -1
  119. data/app/views/catalog/_email_form.html.erb +8 -4
  120. data/app/views/catalog/_facet_index_navigation.html.erb +5 -4
  121. data/app/views/catalog/_facet_layout.html.erb +6 -10
  122. data/app/views/catalog/_facet_limit.html.erb +3 -2
  123. data/app/views/catalog/_facet_pagination.html.erb +8 -8
  124. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  125. data/app/views/catalog/_facets.html.erb +9 -12
  126. data/app/views/catalog/_field.json.jbuilder +10 -0
  127. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +1 -1
  128. data/app/views/catalog/_home_text.html.erb +32 -36
  129. data/app/views/catalog/_index.html.erb +10 -0
  130. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +3 -3
  131. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  132. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  133. data/app/views/catalog/_results_pagination.html.erb +2 -2
  134. data/app/views/catalog/_search_form.html.erb +12 -8
  135. data/app/views/catalog/_search_header.html.erb +0 -3
  136. data/app/views/catalog/_search_results.html.erb +6 -2
  137. data/app/views/catalog/_show.html.erb +8 -0
  138. data/app/views/catalog/_show_main_content.html.erb +4 -4
  139. data/app/views/catalog/_show_more_like_this.html.erb +1 -1
  140. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  141. data/app/views/catalog/_show_tools.html.erb +10 -12
  142. data/app/views/catalog/_sms_form.html.erb +8 -4
  143. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  144. data/app/views/catalog/_sort_widget.html.erb +7 -7
  145. data/app/views/catalog/_thumbnail.html.erb +5 -0
  146. data/app/views/catalog/_view_type_group.html.erb +2 -2
  147. data/app/views/catalog/_zero_results.html.erb +1 -1
  148. data/app/views/catalog/citation.js.erb +4 -2
  149. data/app/views/catalog/email.html.erb +5 -3
  150. data/app/views/catalog/email_success.html.erb +12 -8
  151. data/app/views/catalog/facet.html.erb +10 -8
  152. data/app/views/catalog/facet.json.jbuilder +2 -0
  153. data/app/views/catalog/index.atom.builder +13 -16
  154. data/app/views/catalog/index.html.erb +9 -11
  155. data/app/views/catalog/index.json.jbuilder +84 -3
  156. data/app/views/catalog/index.rss.builder +7 -5
  157. data/app/views/catalog/opensearch.xml.builder +12 -10
  158. data/app/views/catalog/show.html.erb +11 -6
  159. data/app/views/catalog/show.json.jbuilder +21 -0
  160. data/app/views/catalog/sms.html.erb +3 -1
  161. data/app/views/catalog/sms_success.html.erb +12 -8
  162. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  163. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  164. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  165. data/app/views/kaminari/blacklight/_next_page.html.erb +5 -5
  166. data/app/views/kaminari/blacklight/_page.html.erb +5 -3
  167. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  168. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  169. data/app/views/layouts/blacklight/base.html.erb +35 -0
  170. data/app/views/layouts/blacklight.html.erb +14 -41
  171. data/app/views/layouts/catalog_result.html.erb +11 -0
  172. data/app/views/search_history/index.html.erb +16 -21
  173. data/app/views/shared/_header_navbar.html.erb +8 -13
  174. data/app/views/shared/_modal.html.erb +6 -0
  175. data/app/views/shared/_user_util_links.html.erb +22 -0
  176. data/blacklight.gemspec +10 -11
  177. data/config/i18n-tasks.yml +17 -0
  178. data/config/locales/blacklight.de.yml +71 -82
  179. data/config/locales/blacklight.en.yml +15 -27
  180. data/config/locales/blacklight.es.yml +14 -26
  181. data/config/locales/blacklight.fr.yml +16 -33
  182. data/config/locales/blacklight.hu.yml +212 -0
  183. data/config/locales/blacklight.it.yml +15 -26
  184. data/config/locales/blacklight.nl.yml +212 -0
  185. data/config/locales/blacklight.pt-BR.yml +24 -29
  186. data/config/locales/blacklight.sq.yml +4 -28
  187. data/config/locales/blacklight.zh.yml +3 -25
  188. data/config/routes.rb +2 -10
  189. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  190. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  191. data/lib/blacklight/abstract_repository.rb +22 -10
  192. data/lib/blacklight/configuration/context.rb +12 -1
  193. data/lib/blacklight/configuration/facet_field.rb +16 -9
  194. data/lib/blacklight/configuration/field.rb +32 -3
  195. data/lib/blacklight/configuration/fields.rb +61 -58
  196. data/lib/blacklight/configuration/null_field.rb +2 -0
  197. data/lib/blacklight/configuration/search_field.rb +2 -2
  198. data/lib/blacklight/configuration/sort_field.rb +2 -2
  199. data/lib/blacklight/configuration/view_config.rb +4 -0
  200. data/lib/blacklight/configuration.rb +101 -88
  201. data/lib/blacklight/engine.rb +11 -7
  202. data/lib/blacklight/exceptions.rb +4 -7
  203. data/lib/blacklight/{utils.rb → nested_open_struct_with_hash_access.rb} +9 -81
  204. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  205. data/lib/blacklight/parameters.rb +1 -1
  206. data/lib/blacklight/routes/exportable.rb +1 -3
  207. data/lib/blacklight/routes/searchable.rb +3 -3
  208. data/lib/blacklight/runtime_registry.rb +2 -0
  209. data/lib/blacklight/search_builder.rb +28 -35
  210. data/lib/blacklight/search_state.rb +10 -8
  211. data/lib/blacklight/solr/repository.rb +40 -6
  212. data/lib/blacklight/solr/request.rb +1 -1
  213. data/lib/blacklight/solr/response/facets.rb +29 -31
  214. data/lib/blacklight/solr/response/group.rb +3 -3
  215. data/lib/blacklight/solr/response/group_response.rb +1 -1
  216. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  217. data/lib/blacklight/solr/response/response.rb +2 -2
  218. data/lib/blacklight/solr/response/spelling.rb +4 -3
  219. data/lib/blacklight/solr/response.rb +29 -30
  220. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  221. data/lib/blacklight/version.rb +1 -1
  222. data/lib/blacklight.rb +10 -8
  223. data/lib/generators/blacklight/assets_generator.rb +18 -12
  224. data/lib/generators/blacklight/controller_generator.rb +4 -5
  225. data/lib/generators/blacklight/document_generator.rb +1 -1
  226. data/lib/generators/blacklight/install_generator.rb +18 -28
  227. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  228. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +12 -6
  229. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  230. data/lib/generators/blacklight/templates/alternate_controller.rb +4 -4
  231. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  232. data/lib/generators/blacklight/templates/catalog_controller.rb +59 -49
  233. data/lib/generators/blacklight/templates/config/blacklight.yml +1 -13
  234. data/lib/generators/blacklight/templates/solr/conf/schema.xml +388 -0
  235. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  236. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  237. data/lib/generators/blacklight/user_generator.rb +5 -6
  238. data/lib/railties/blacklight.rake +17 -21
  239. data/package-lock.json +2195 -0
  240. data/package.json +29 -0
  241. data/spec/controllers/alternate_controller_spec.rb +5 -4
  242. data/spec/controllers/application_controller_spec.rb +1 -5
  243. data/spec/controllers/blacklight/base_spec.rb +6 -3
  244. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  245. data/spec/controllers/blacklight/facet_spec.rb +1 -2
  246. data/spec/controllers/blacklight/search_fields_spec.rb +25 -34
  247. data/spec/controllers/bookmarks_controller_spec.rb +46 -11
  248. data/spec/controllers/catalog_controller_spec.rb +334 -161
  249. data/spec/controllers/search_history_controller_spec.rb +6 -6
  250. data/spec/features/alternate_controller_spec.rb +4 -4
  251. data/spec/features/autocomplete_spec.rb +4 -2
  252. data/spec/features/bookmarks_spec.rb +10 -10
  253. data/spec/features/did_you_mean_spec.rb +7 -12
  254. data/spec/features/facets_spec.rb +29 -17
  255. data/spec/features/record_view_spec.rb +12 -18
  256. data/spec/features/search_context_spec.rb +6 -7
  257. data/spec/features/search_crawler_spec.rb +3 -5
  258. data/spec/features/search_filters_spec.rb +80 -80
  259. data/spec/features/search_formats_spec.rb +1 -1
  260. data/spec/features/search_history_spec.rb +6 -29
  261. data/spec/features/search_pagination_spec.rb +4 -2
  262. data/spec/features/search_results_spec.rb +14 -12
  263. data/spec/features/search_sort_spec.rb +2 -2
  264. data/spec/features/search_spec.rb +8 -9
  265. data/spec/features/sitelinks_search_box.rb +4 -4
  266. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  267. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +97 -92
  268. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +72 -67
  269. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +2 -2
  270. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +10 -0
  271. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -5
  272. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +10 -6
  273. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +92 -0
  274. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +29 -30
  275. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +9 -2
  276. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +56 -54
  277. data/spec/helpers/blacklight_helper_spec.rb +65 -150
  278. data/spec/helpers/catalog_helper_spec.rb +80 -96
  279. data/spec/i18n_spec.rb +18 -0
  280. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +21 -13
  281. data/spec/lib/blacklight/configuration/facet_field_spec.rb +13 -0
  282. data/spec/lib/blacklight/configuration/field_spec.rb +15 -0
  283. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  284. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +148 -0
  285. data/spec/lib/blacklight/parameters_spec.rb +4 -2
  286. data/spec/lib/blacklight/search_state_spec.rb +53 -36
  287. data/spec/lib/blacklight_spec.rb +14 -15
  288. data/spec/lib/tasks/blacklight_task_spec.rb +4 -6
  289. data/spec/models/blacklight/configurable_spec.rb +24 -27
  290. data/spec/models/blacklight/configuration/context_spec.rb +9 -10
  291. data/spec/models/blacklight/configuration_spec.rb +248 -223
  292. data/spec/models/blacklight/document/active_model_shim_spec.rb +15 -6
  293. data/spec/models/blacklight/document/cache_key_spec.rb +9 -2
  294. data/spec/models/blacklight/document/dublin_core_spec.rb +17 -20
  295. data/spec/models/blacklight/document/email_spec.rb +10 -10
  296. data/spec/models/blacklight/document/sms_spec.rb +10 -10
  297. data/spec/models/blacklight/document_spec.rb +10 -22
  298. data/spec/models/blacklight/facet_paginator_spec.rb +40 -30
  299. data/spec/models/blacklight/icon_spec.rb +44 -0
  300. data/spec/models/blacklight/search_builder_spec.rb +41 -26
  301. data/spec/models/blacklight/solr/document_spec.rb +224 -216
  302. data/spec/models/blacklight/solr/facet_paginator_spec.rb +6 -4
  303. data/spec/models/blacklight/solr/repository_spec.rb +61 -46
  304. data/spec/models/blacklight/solr/request_spec.rb +17 -18
  305. data/spec/models/blacklight/solr/response/facets_spec.rb +58 -58
  306. data/spec/models/blacklight/solr/response/group_response_spec.rb +16 -22
  307. data/spec/models/blacklight/solr/response/group_spec.rb +18 -25
  308. data/spec/models/blacklight/solr/response_spec.rb +56 -55
  309. data/spec/models/blacklight/solr/search_builder_spec.rb +150 -164
  310. data/spec/models/blacklight/suggest/response_spec.rb +6 -4
  311. data/spec/models/blacklight/suggest_search_spec.rb +9 -16
  312. data/spec/models/blacklight/user_spec.rb +9 -11
  313. data/spec/models/bookmark_spec.rb +7 -6
  314. data/spec/models/record_mailer_spec.rb +23 -21
  315. data/spec/models/search_spec.rb +19 -18
  316. data/spec/models/solr_document_spec.rb +33 -5
  317. data/spec/presenters/blacklight/document_presenter_spec.rb +86 -0
  318. data/spec/presenters/blacklight/index_presenter_spec.rb +186 -0
  319. data/spec/presenters/blacklight/json_presenter_spec.rb +59 -0
  320. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -0
  321. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +79 -0
  322. data/spec/presenters/blacklight/show_presenter_spec.rb +333 -0
  323. data/spec/presenters/pipeline_spec.rb +18 -11
  324. data/spec/presenters/thumbnail_presenter_spec.rb +174 -0
  325. data/spec/routing/catalog_routing_spec.rb +13 -15
  326. data/spec/services/blacklight/search_service_spec.rb +488 -0
  327. data/spec/spec_helper.rb +20 -19
  328. data/spec/support/features/session_helpers.rb +4 -4
  329. data/spec/support/features.rb +1 -1
  330. data/spec/test_app_templates/Gemfile.extra +2 -4
  331. data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -13
  332. data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -6
  333. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +17 -13
  334. data/spec/views/catalog/_document.html.erb_spec.rb +11 -11
  335. data/spec/views/catalog/_document_list.html.erb_spec.rb +2 -1
  336. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +5 -5
  337. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  338. data/spec/views/catalog/_facets.html.erb_spec.rb +10 -12
  339. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +14 -15
  340. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +6 -9
  341. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +7 -30
  342. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  343. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +13 -14
  344. data/spec/views/catalog/_show_sidebar.erb_spec.rb +6 -9
  345. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -5
  346. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -2
  347. data/spec/views/catalog/_sort_widget.html.erb_spec.rb +3 -1
  348. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +7 -9
  349. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +12 -10
  350. data/spec/views/catalog/email_success.html.erb_spec.rb +8 -0
  351. data/spec/views/catalog/facet.html.erb_spec.rb +4 -3
  352. data/spec/views/catalog/facet.json.jbuilder_spec.rb +3 -2
  353. data/spec/views/catalog/index.atom.builder_spec.rb +11 -6
  354. data/spec/views/catalog/index.html.erb_spec.rb +6 -8
  355. data/spec/views/catalog/index.json.jbuilder_spec.rb +119 -26
  356. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  357. data/spec/views/catalog/show.html.erb_spec.rb +8 -8
  358. data/spec/views/catalog/show.json.jbuilder_spec.rb +40 -0
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +8 -0
  360. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -7
  361. data/tasks/blacklight.rake +10 -8
  362. data/template.demo.rb +3 -11
  363. metadata +188 -189
  364. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  365. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  366. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -135
  367. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  368. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  369. data/app/controllers/concerns/blacklight/search_helper.rb +0 -155
  370. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  371. data/app/controllers/saved_searches_controller.rb +0 -4
  372. data/app/controllers/suggest_controller.rb +0 -4
  373. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  374. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  375. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  376. data/app/helpers/blacklight_url_helper.rb +0 -4
  377. data/app/helpers/component_helper.rb +0 -4
  378. data/app/helpers/facets_helper.rb +0 -4
  379. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  380. data/app/helpers/layout_helper.rb +0 -4
  381. data/app/helpers/render_constraints_helper.rb +0 -4
  382. data/app/helpers/search_history_constraints_helper.rb +0 -4
  383. data/app/helpers/suggest_helper.rb +0 -4
  384. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  385. data/app/views/_user_util_links.html.erb +0 -26
  386. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  387. data/app/views/catalog/_index_default.html.erb +0 -12
  388. data/app/views/catalog/_show_default.html.erb +0 -10
  389. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  390. data/app/views/saved_searches/index.html.erb +0 -32
  391. data/app/views/shared/_ajax_modal.html.erb +0 -6
  392. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  393. data/lib/generators/blacklight/templates/config/jetty.yml +0 -13
  394. data/solr/conf/schema.xml +0 -629
  395. data/solr/conf/solrconfig.xml +0 -411
  396. data/spec/controllers/blacklight/search_helper_spec.rb +0 -470
  397. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  398. data/spec/controllers/suggest_controller_spec.rb +0 -17
  399. data/spec/features/saved_searches_spec.rb +0 -47
  400. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  401. data/spec/lib/blacklight/utils_spec.rb +0 -167
  402. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  403. data/spec/presenters/document_presenter_spec.rb +0 -438
  404. data/spec/presenters/index_presenter_spec.rb +0 -173
  405. data/spec/presenters/show_presenter_spec.rb +0 -313
  406. data/spec/support/backport_test.rb +0 -14
  407. /data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  408. /data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  409. /data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  410. /data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  411. /data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  412. /data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  413. /data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  414. /data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  415. /data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  416. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  417. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  418. /data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  419. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  420. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  421. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  422. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
  module Blacklight
3
- class IndexPresenter
4
- extend Deprecation
5
- self.deprecation_horizon = 'Blacklight version 7.0.0'
3
+ class IndexPresenter < DocumentPresenter
4
+ class_attribute :thumbnail_presenter
5
+ self.thumbnail_presenter = ThumbnailPresenter
6
6
 
7
- attr_reader :document, :configuration, :view_context
7
+ attr_reader :view_config
8
8
 
9
9
  # @param [SolrDocument] document
10
10
  # @param [ActionView::Base] view_context scope for linking and generating urls
@@ -13,6 +13,7 @@ module Blacklight
13
13
  @document = document
14
14
  @view_context = view_context
15
15
  @configuration = configuration
16
+ @view_config = configuration.view_config(view_context.document_index_view_type)
16
17
  end
17
18
 
18
19
  ##
@@ -24,81 +25,63 @@ module Blacklight
24
25
  def label(field_or_string_or_proc, opts = {})
25
26
  config = Configuration::NullField.new
26
27
  value = case field_or_string_or_proc
27
- when Symbol
28
- config = field_config(field_or_string_or_proc)
29
- document[field_or_string_or_proc]
30
- when Proc
31
- field_or_string_or_proc.call(document, opts)
32
- when String
33
- field_or_string_or_proc
34
- end
28
+ when Symbol
29
+ config = field_config(field_or_string_or_proc)
30
+ document[field_or_string_or_proc]
31
+ when Proc
32
+ Deprecation.warn(self, "calling IndexPresenter.label with a Proc is deprecated. " \
33
+ "First argument must be a symbol. This will be removed in Blacklight 8")
34
+ field_or_string_or_proc.call(document, opts)
35
+ when String
36
+ Deprecation.warn(self, "calling IndexPresenter.label with a String is deprecated. " \
37
+ "First argument must be a symbol. This will be removed in Blacklight 8")
38
+ field_or_string_or_proc
39
+ end
35
40
 
36
41
  value ||= document.id
37
42
  field_values(config, value: value)
38
43
  end
39
44
 
40
- # @deprecated
41
- def render_document_index_label(*args)
42
- label(*args)
43
- end
44
- deprecation_deprecate render_document_index_label: 'Use #label instead'
45
-
46
45
  ##
47
46
  # Render the index field label for a document
48
47
  #
49
48
  # Allow an extention point where information in the document
50
49
  # may drive the value of the field
51
- # @param [String] field
50
+ # @param [Configuration::Field] field
52
51
  # @param [Hash] options
53
52
  # @option options [String] :value
54
53
  def field_value field, options = {}
55
- field_config = field_config(field)
56
- field_values(field_config, options)
54
+ field_values(field, options)
57
55
  end
58
56
 
59
- # @deprecated
60
- def render_index_field_value(*args)
61
- field_value(*args)
57
+ def thumbnail
58
+ @thumbnail ||= thumbnail_presenter.new(document, view_context, view_config)
62
59
  end
63
- deprecation_deprecate render_index_field_value: 'replaced by #field_value'
64
60
 
65
- # @deprecated
66
- def get_field_values(field_config, options={})
67
- field_values(field_config, options)
68
- end
69
- deprecation_deprecate get_field_values: "replaced by #field_value"
61
+ private
70
62
 
71
- # @deprecated
72
- def render_field_values(values, field_config = Configuration::NullField.new)
73
- field_values(field_config, value: Array(values))
63
+ # @return [Hash<String,Configuration::Field>] all the fields for this index view
64
+ def fields
65
+ configuration.index_fields_for(document)
74
66
  end
75
- deprecation_deprecate render_field_values: "replaced by #field_value"
76
67
 
77
- # @deprecated
78
- def render_values(values, field_config = Configuration::NullField.new)
79
- field_values(field_config, value: Array(values))
68
+ ##
69
+ # Get the value for a document's field, and prepare to render it.
70
+ # - highlight_field
71
+ # - accessor
72
+ # - solr field
73
+ #
74
+ # Rendering:
75
+ # - helper_method
76
+ # - link_to_facet
77
+ # @param [Blacklight::Configuration::Field] field_config solr field configuration
78
+ # @param [Hash] options additional options to pass to the rendering helpers
79
+ def field_values(field_config, options = {})
80
+ FieldPresenter.new(view_context, document, field_config, options).render
80
81
  end
81
- deprecation_deprecate render_values: "replaced by #field_value"
82
-
83
- private
84
82
 
85
- ##
86
- # Get the value for a document's field, and prepare to render it.
87
- # - highlight_field
88
- # - accessor
89
- # - solr field
90
- #
91
- # Rendering:
92
- # - helper_method
93
- # - link_to_search
94
- # @param [Blacklight::Configuration::Field] field_config solr field configuration
95
- # @param [Hash] options additional options to pass to the rendering helpers
96
- def field_values(field_config, options={})
97
- FieldPresenter.new(view_context, document, field_config, options).render
98
- end
99
-
100
- def field_config(field)
101
- configuration.index_fields.fetch(field) { Configuration::NullField.new(field) }
102
- end
83
+ def field_config(field)
84
+ configuration.index_fields.fetch(field) { Configuration::NullField.new(field) }
85
+ end
103
86
  end
104
87
  end
@@ -4,25 +4,21 @@ module Blacklight
4
4
  include Blacklight::Facet
5
5
 
6
6
  # @param [Solr::Response] response raw solr response.
7
- # @param [Array<SolrDocument>] documents a list of documents
8
- # @param [Array] facets list of facets
9
- def initialize(response, documents, facets, blacklight_config)
7
+ # @param [Configuration] blacklight_config the configuration
8
+ def initialize(response, blacklight_config)
10
9
  @response = response
11
- @documents = documents
12
- @facets = facets
13
10
  @blacklight_config = blacklight_config
14
11
  end
15
12
 
16
- attr_reader :documents, :blacklight_config
13
+ attr_reader :blacklight_config
17
14
 
18
- def search_facets_as_json
19
- @facets.as_json.each do |f|
20
- f.delete "options"
21
- f["label"] = facet_configuration_for_field(f["name"]).label
22
- f["items"] = f["items"].as_json.each do |i|
23
- i['label'] ||= i['value']
24
- end
25
- end
15
+ def documents
16
+ @response.documents
17
+ end
18
+
19
+ # @return [Array<Blacklight::Solr::Response::Facets::FacetField>]
20
+ def search_facets
21
+ facets_from_request.select { |display_facet| display_facet.items.present? }
26
22
  end
27
23
 
28
24
  # extract the pagination info from the response object
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  # Create <link rel="alternate"> links from a documents dynamically
3
5
  class LinkAlternatePresenter
@@ -12,7 +14,7 @@ module Blacklight
12
14
 
13
15
  attr_reader :view_context, :document, :options
14
16
 
15
- # Renders links to alternate representations
17
+ # Renders links to alternate representations
16
18
  # provided by export formats. Returns empty string if no links available.
17
19
  def render
18
20
  seen = Set.new
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  module Rendering
3
5
  class AbstractStep
@@ -12,12 +14,12 @@ module Blacklight
12
14
 
13
15
  attr_reader :values, :config, :document, :context, :options, :stack
14
16
 
15
- protected
17
+ private
16
18
 
17
- def next_step(output_values)
18
- first, *rest = *stack
19
- first.new(output_values, config, document, context, options, rest).render
20
- end
19
+ def next_step(output_values)
20
+ first, *rest = *stack
21
+ first.new(output_values, config, document, context, options, rest).render
22
+ end
21
23
  end
22
24
  end
23
25
  end
@@ -1,23 +1,25 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  module Rendering
3
5
  class HelperMethod < AbstractStep
4
6
  def render
5
7
  if config.helper_method
6
8
  render_helper # short circut the rest of the steps
7
- else
9
+ else
8
10
  next_step(values)
9
11
  end
10
12
  end
11
13
 
12
14
  private
13
15
 
14
- def render_helper
15
- context.send(config.helper_method,
16
- options.merge(document: document,
17
- field: config.field,
18
- config: config,
19
- value: values))
20
- end
16
+ def render_helper
17
+ context.send(config.helper_method,
18
+ options.merge(document: document,
19
+ field: config.field,
20
+ config: config,
21
+ value: values))
22
+ end
21
23
  end
22
24
  end
23
25
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  module Rendering
3
5
  class Join < AbstractStep
@@ -8,9 +10,9 @@ module Blacklight
8
10
 
9
11
  private
10
12
 
11
- def html_escape(*args)
12
- ERB::Util.html_escape(*args)
13
- end
13
+ def html_escape(*args)
14
+ ERB::Util.html_escape(*args)
15
+ end
14
16
  end
15
17
  end
16
18
  end
@@ -1,35 +1,39 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  module Rendering
3
5
  class LinkToFacet < AbstractStep
6
+ extend Deprecation
4
7
  def render
5
- # TODO: We should rename the config variable, because it creates a link to a facet.
6
- return next_step(values) unless config.link_to_search
8
+ return next_step(values) unless config.link_to_facet
9
+
7
10
  next_step(render_link)
8
11
  end
9
12
 
10
13
  private
11
14
 
12
- # This allows the link to wrap an itemprop
13
- def render_link
14
- values.map { |v| link(link_field, v) }
15
- end
15
+ # This allows the link to wrap an itemprop
16
+ def render_link
17
+ values.map { |v| link(link_field, v) }
18
+ end
19
+
20
+ def link_field
21
+ return config.key if config.link_to_facet == true
16
22
 
17
- def link_field
18
- return config.key if config.link_to_search == true
19
- config.link_to_search
20
- end
23
+ config.link_to_facet
24
+ end
21
25
 
22
- def link(field, v)
23
- context.link_to v, search_path(field, v)
24
- end
26
+ def link(field, v)
27
+ context.link_to v, search_path(field, v)
28
+ end
25
29
 
26
- def search_path(field, v)
27
- context.search_action_path(facet_params(field, v))
28
- end
30
+ def search_path(field, v)
31
+ context.search_action_path(facet_params(field, v))
32
+ end
29
33
 
30
- def facet_params(field, v)
31
- context.search_state.reset.add_facet_params(field, v)
32
- end
34
+ def facet_params(field, v)
35
+ context.search_state.reset.add_facet_params(field, v)
36
+ end
33
37
  end
34
38
  end
35
39
  end
@@ -1,17 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  module Rendering
3
5
  class Microdata < AbstractStep
4
6
  include ActionView::Helpers::TagHelper
5
7
  def render
6
8
  return next_step(values) unless config.itemprop
9
+
7
10
  next_step(values.map { |x| itemprop(x, config.itemprop) })
8
11
  end
9
12
 
10
13
  private
11
14
 
12
- def itemprop(val, itemprop)
13
- content_tag :span, val, itemprop: itemprop
14
- end
15
+ def itemprop(val, itemprop)
16
+ content_tag :span, val, itemprop: itemprop
17
+ end
15
18
  end
16
19
  end
17
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  module Rendering
3
5
  # The field rendering pipeline
@@ -26,12 +28,12 @@ module Blacklight
26
28
  first.new(values, config, document, context, options, rest).render
27
29
  end
28
30
 
29
- protected
31
+ private
30
32
 
31
- # Ordered list of operations, Terminator must be at the end.
32
- def stack
33
- operations + [Terminator]
34
- end
33
+ # Ordered list of operations, Terminator must be at the end.
34
+ def stack
35
+ operations + [Terminator]
36
+ end
35
37
  end
36
38
  end
37
39
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  module Rendering
3
5
  class Terminator < AbstractStep
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class SearchBarPresenter
5
+ attr_reader :configuration, :view_context, :controller
6
+
7
+ # Set the partial this presenter draws
8
+ class_attribute :partial
9
+ self.partial = 'catalog/search_form'
10
+
11
+ def initialize(controller, configuration = view_context.blacklight_config)
12
+ @controller = controller
13
+ @view_context = controller.view_context
14
+ @configuration = configuration
15
+ end
16
+
17
+ def render
18
+ view_context.render partial, presenter: self
19
+ end
20
+
21
+ ##
22
+ # @return [Boolean] should autocomplete be enabled in the UI
23
+ def autocomplete_enabled?
24
+ configuration.autocomplete_enabled.present? &&
25
+ configuration.autocomplete_path.present?
26
+ end
27
+
28
+ ##
29
+ # If no search parameters have been given, we should
30
+ # auto-focus the user's cursor into the searchbox
31
+ #
32
+ # @return [Boolean]
33
+ def autofocus?
34
+ controller.is_a?(Blacklight::Catalog) &&
35
+ controller.action_name == "index" &&
36
+ !controller.has_search_parameters?
37
+ end
38
+ end
39
+ end
@@ -1,11 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  module Blacklight
3
- class ShowPresenter
4
- extend Deprecation
5
- self.deprecation_horizon = 'Blacklight version 7.0.0'
6
-
7
- attr_reader :document, :configuration, :view_context
8
-
3
+ class ShowPresenter < DocumentPresenter
9
4
  # @param [SolrDocument] document
10
5
  # @param [ActionView::Base] view_context scope for linking and generating urls
11
6
  # @param [Blacklight::Configuration] configuration
@@ -23,7 +18,6 @@ module Blacklight
23
18
  # @option options [Boolean] :unique ensures only one link is output for every
24
19
  # content type, e.g. as required by atom
25
20
  # @option options [Array<String>] :exclude array of format shortnames to not include in the output
26
- # @deprecated moved to ShowPresenter#link_rel_alternates
27
21
  def link_rel_alternates(options = {})
28
22
  LinkAlternatePresenter.new(view_context, document, options).render
29
23
  end
@@ -45,12 +39,6 @@ module Blacklight
45
39
  end
46
40
  end
47
41
 
48
- # @deprecated
49
- def document_show_html_title
50
- html_title
51
- end
52
- deprecation_deprecate document_show_html_title: "use #html_title"
53
-
54
42
  ##
55
43
  # Get the value of the document's "title" field, or a placeholder
56
44
  # value (if empty)
@@ -63,71 +51,46 @@ module Blacklight
63
51
  field_values(field_config(f), value: document[f])
64
52
  end
65
53
 
66
- # @deprecated
67
- def document_heading
68
- heading
69
- end
70
- deprecation_deprecate document_heading: "replaced by #heading"
71
-
72
54
  ##
73
55
  # Render the show field value for a document
74
56
  #
75
57
  # Allow an extention point where information in the document
76
58
  # may drive the value of the field
77
- # @param [String] field
59
+ # @param [Configuration::Field] field
78
60
  # @param [Hash] options
79
61
  # @option options [String] :value
80
- def field_value field, options={}
81
- field_values(field_config(field), options)
62
+ def field_value field, options = {}
63
+ field_values(field, options)
82
64
  end
83
65
 
84
- # @deprecated
85
- def render_document_show_field_value(*args)
86
- field_value(*args)
87
- end
88
- deprecation_deprecate render_document_show_field_value: 'replaced by #field_value'
66
+ private
89
67
 
90
- # @deprecated
91
- def get_field_values(field_config, options={})
92
- field_values(field_config, options)
68
+ # @return [Hash<String,Configuration::Field>]
69
+ def fields
70
+ configuration.show_fields_for(document)
93
71
  end
94
- deprecation_deprecate get_field_values: "replaced by #field_value"
95
72
 
96
- # @deprecated
97
- def render_field_values(values, field_config = Configuration::NullField.new)
98
- field_values(field_config, value: Array(values))
73
+ ##
74
+ # Get the value for a document's field, and prepare to render it.
75
+ # - highlight_field
76
+ # - accessor
77
+ # - solr field
78
+ #
79
+ # Rendering:
80
+ # - helper_method
81
+ # - link_to_facet
82
+ # @param [Blacklight::Configuration::Field] field_config solr field configuration
83
+ # @param [Hash] options additional options to pass to the rendering helpers
84
+ def field_values(field_config, options = {})
85
+ FieldPresenter.new(view_context, document, field_config, options).render
99
86
  end
100
- deprecation_deprecate render_field_values: "replaced by #field_value"
101
87
 
102
- # @deprecated
103
- def render_values(values, field_config = Configuration::NullField.new)
104
- field_values(field_config, value: Array(values))
88
+ def view_config
89
+ configuration.view_config(:show)
105
90
  end
106
- deprecation_deprecate render_values: "replaced by #field_value"
107
-
108
- private
109
-
110
- ##
111
- # Get the value for a document's field, and prepare to render it.
112
- # - highlight_field
113
- # - accessor
114
- # - solr field
115
- #
116
- # Rendering:
117
- # - helper_method
118
- # - link_to_search
119
- # @param [Blacklight::Configuration::Field] field_config solr field configuration
120
- # @param [Hash] options additional options to pass to the rendering helpers
121
- def field_values(field_config, options={})
122
- FieldPresenter.new(view_context, document, field_config, options).render
123
- end
124
91
 
125
- def view_config
126
- configuration.view_config(:show)
127
- end
128
-
129
- def field_config(field)
130
- configuration.show_fields.fetch(field) { Configuration::NullField.new(field) }
131
- end
92
+ def field_config(field)
93
+ configuration.show_fields.fetch(field) { Configuration::NullField.new(field) }
94
+ end
132
95
  end
133
96
  end
@@ -0,0 +1,74 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class ThumbnailPresenter
5
+ attr_reader :document, :view_context, :view_config
6
+
7
+ # @param [SolrDocument] document
8
+ # @param [ActionView::Base] view_context scope for linking and generating urls
9
+ # as well as for invoking "thumbnail_method"
10
+ # @param [Blacklight::Configuration::ViewConfig] view_config
11
+ def initialize(document, view_context, view_config)
12
+ @document = document
13
+ @view_context = view_context
14
+ @view_config = view_config
15
+ end
16
+
17
+ ##
18
+ # Does the document have a thumbnail to render?
19
+ #
20
+ # @return [Boolean]
21
+ def exists?
22
+ thumbnail_method.present? ||
23
+ (thumbnail_field && thumbnail_value_from_document(document).present?) ||
24
+ default_thumbnail.present?
25
+ end
26
+
27
+ ##
28
+ # Render the thumbnail, if available, for a document and
29
+ # link it to the document record.
30
+ #
31
+ # @param [Hash] image_options to pass to the image tag
32
+ # @param [Hash] url_options to pass to #link_to_document
33
+ # @return [String]
34
+ def thumbnail_tag image_options = {}, url_options = {}
35
+ value = thumbnail_value(image_options)
36
+ return value if value.nil? || url_options[:suppress_link]
37
+
38
+ view_context.link_to_document document, value, url_options
39
+ end
40
+
41
+ private
42
+
43
+ delegate :thumbnail_field, :thumbnail_method, :default_thumbnail, to: :view_config
44
+
45
+ # @param [Hash] image_options to pass to the image tag
46
+ def thumbnail_value(image_options)
47
+ value = if thumbnail_method
48
+ view_context.send(thumbnail_method, document, image_options)
49
+ elsif thumbnail_field
50
+ image_url = thumbnail_value_from_document(document)
51
+ view_context.image_tag image_url, image_options if image_url.present?
52
+ end
53
+
54
+ value || default_thumbnail_value(image_options)
55
+ end
56
+
57
+ def default_thumbnail_value(image_options)
58
+ return unless default_thumbnail
59
+
60
+ case default_thumbnail
61
+ when Symbol
62
+ view_context.send(default_thumbnail, document, image_options)
63
+ when Proc
64
+ default_thumbnail.call(document, image_options)
65
+ else
66
+ view_context.image_tag default_thumbnail, image_options
67
+ end
68
+ end
69
+
70
+ def thumbnail_value_from_document(document)
71
+ Array(thumbnail_field).lazy.map { |field| document.first(field) }.reject(&:blank?).first
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class DocumentFactory
5
+ def self.build(data, response, options)
6
+ document_model(data, options).new(data, response)
7
+ end
8
+
9
+ def self.document_model(_data, options)
10
+ options[:solr_document_model] || options[:document_model] || SolrDocument
11
+ end
12
+ end
13
+ end