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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Blacklight
2
4
  class FieldRetriever
3
5
  # @param [SolrDocument] document
@@ -9,7 +11,7 @@ module Blacklight
9
11
 
10
12
  attr_reader :document, :field_config
11
13
  delegate :field, to: :field_config
12
-
14
+
13
15
  # @return [Array]
14
16
  def fetch
15
17
  Array.wrap(
@@ -25,33 +27,33 @@ module Blacklight
25
27
 
26
28
  private
27
29
 
28
- def retrieve_simple
29
- # regular document field
30
- if field_config.default and field_config.default.is_a? Proc
31
- document.fetch(field_config.field, &field_config.default)
32
- else
33
- document.fetch(field_config.field, field_config.default)
34
- end
30
+ def retrieve_simple
31
+ # regular document field
32
+ if field_config.default && field_config.default.is_a?(Proc)
33
+ document.fetch(field_config.field, &field_config.default)
34
+ else
35
+ document.fetch(field_config.field, field_config.default)
35
36
  end
37
+ end
36
38
 
37
- def retieve_using_accessor
38
- # implicit method call
39
- if field_config.accessor == true
40
- document.send(field)
41
- # arity-1 method call (include the field name in the call)
42
- elsif !field_config.accessor.is_a?(Array) && document.method(field_config.accessor).arity.nonzero?
43
- document.send(field_config.accessor, field)
44
- # chained method calls
45
- else
46
- Array(field_config.accessor).inject(document) do |result, method|
47
- result.send(method)
48
- end
39
+ def retieve_using_accessor
40
+ # implicit method call
41
+ if field_config.accessor == true
42
+ document.send(field)
43
+ # arity-1 method call (include the field name in the call)
44
+ elsif !field_config.accessor.is_a?(Array) && document.method(field_config.accessor).arity.nonzero?
45
+ document.send(field_config.accessor, field)
46
+ # chained method calls
47
+ else
48
+ Array(field_config.accessor).inject(document) do |result, method|
49
+ result.send(method)
49
50
  end
50
51
  end
52
+ end
51
53
 
52
- def retrieve_highlight
53
- # retrieve the document value from the highlighting response
54
- document.highlight_field(field_config.field).map(&:html_safe) if document.has_highlight_field? field_config.field
55
- end
54
+ def retrieve_highlight
55
+ # retrieve the document value from the highlighting response
56
+ document.highlight_field(field_config.field).map(&:html_safe) if document.has_highlight_field? field_config.field
57
+ end
56
58
  end
57
59
  end
@@ -0,0 +1,152 @@
1
+ # frozen_string_literal: true
2
+ # SearchService returns search results from the repository
3
+ module Blacklight
4
+ class SearchService
5
+ def initialize(config:, user_params: {}, search_builder_class: config.search_builder_class)
6
+ @blacklight_config = config
7
+ @user_params = user_params
8
+ @search_builder_class = search_builder_class
9
+ end
10
+
11
+ # The blacklight_config is accessed by the search_builder
12
+ attr_reader :blacklight_config
13
+
14
+ def search_builder
15
+ search_builder_class.new(self)
16
+ end
17
+
18
+ # a solr query method
19
+ # @param [Hash] user_params ({}) the user provided parameters (e.g. query, facets, sort, etc)
20
+ # @yield [search_builder] optional block yields configured SearchBuilder, caller can modify or create new SearchBuilder to be used. Block should return SearchBuilder to be used.
21
+ # @return [Blacklight::Solr::Response] the solr response object
22
+ def search_results
23
+ builder = search_builder.with(user_params)
24
+ builder.page = user_params[:page] if user_params[:page]
25
+ builder.rows = (user_params[:per_page] || user_params[:rows]) if user_params[:per_page] || user_params[:rows]
26
+
27
+ builder = yield(builder) if block_given?
28
+ response = repository.search(builder)
29
+
30
+ if response.grouped? && grouped_key_for_results
31
+ [response.group(grouped_key_for_results), []]
32
+ elsif response.grouped? && response.grouped.length == 1
33
+ [response.grouped.first, []]
34
+ else
35
+ [response, response.documents]
36
+ end
37
+ end
38
+
39
+ # retrieve a document, given the doc id
40
+ # @param [Array{#to_s},#to_s] id
41
+ # @return [Blacklight::Solr::Response, Blacklight::SolrDocument] the solr response object and the first document
42
+ def fetch(id = nil, extra_controller_params = {})
43
+ if id.is_a? Array
44
+ fetch_many(id, extra_controller_params)
45
+ else
46
+ fetch_one(id, extra_controller_params)
47
+ end
48
+ end
49
+
50
+ ##
51
+ # Get the solr response when retrieving only a single facet field
52
+ # @return [Blacklight::Solr::Response] the solr response
53
+ def facet_field_response(facet_field, extra_controller_params = {})
54
+ query = search_builder.with(user_params).facet(facet_field)
55
+ repository.search(query.merge(extra_controller_params))
56
+ end
57
+
58
+ # Get the previous and next document from a search result
59
+ # @return [Blacklight::Solr::Response, Array<Blacklight::SolrDocument>] the solr response and a list of the first and last document
60
+ def previous_and_next_documents_for_search(index, request_params, extra_controller_params = {})
61
+ p = previous_and_next_document_params(index)
62
+ query = search_builder.with(request_params).start(p.delete(:start)).rows(p.delete(:rows)).merge(extra_controller_params).merge(p)
63
+ response = repository.search(query)
64
+ document_list = response.documents
65
+
66
+ # only get the previous doc if there is one
67
+ prev_doc = document_list.first if index > 0
68
+ next_doc = document_list.last if (index + 1) < response.total
69
+ [response, [prev_doc, next_doc]]
70
+ end
71
+
72
+ # a solr query method
73
+ # does a standard search but returns a simplified object.
74
+ # an array is returned, the first item is the query string,
75
+ # the second item is an other array. This second array contains
76
+ # all of the field values for each of the documents...
77
+ # where the field is the "field" argument passed in.
78
+ def opensearch_response(field = nil, extra_controller_params = {})
79
+ field ||= blacklight_config.view_config(:opensearch).title_field
80
+
81
+ query = search_builder.with(user_params).merge(solr_opensearch_params(field)).merge(extra_controller_params)
82
+ response = repository.search(query)
83
+
84
+ [user_params[:q], response.documents.flat_map { |doc| doc[field] }.uniq]
85
+ end
86
+
87
+ private
88
+
89
+ attr_reader :search_builder_class, :user_params
90
+ delegate :repository, to: :blacklight_config
91
+
92
+ ##
93
+ # The key to use to retrieve the grouped field to display
94
+ def grouped_key_for_results
95
+ blacklight_config.index.group
96
+ end
97
+
98
+ ##
99
+ # Opensearch autocomplete parameters for plucking a field's value from the results
100
+ def solr_opensearch_params(field)
101
+ solr_params = {}
102
+ solr_params[:rows] ||= 10
103
+ solr_params[:fl] = field || blacklight_config.view_config(:opensearch).title_field
104
+ solr_params
105
+ end
106
+
107
+ ##
108
+ # Pagination parameters for selecting the previous and next documents
109
+ # out of a result set.
110
+ def previous_and_next_document_params(index, window = 1)
111
+ solr_params = blacklight_config.document_pagination_params.dup
112
+
113
+ if solr_params.empty?
114
+ solr_params[:fl] = blacklight_config.document_model.unique_key
115
+ end
116
+
117
+ if index > 0
118
+ solr_params[:start] = index - window # get one before
119
+ solr_params[:rows] = 2 * window + 1 # and one after
120
+ else
121
+ solr_params[:start] = 0 # there is no previous doc
122
+ solr_params[:rows] = 2 * window # but there should be one after
123
+ end
124
+
125
+ solr_params[:facet] = false
126
+ solr_params
127
+ end
128
+
129
+ ##
130
+ # Retrieve a set of documents by id
131
+ # @param [Array] ids
132
+ # @param [HashWithIndifferentAccess] extra_controller_params
133
+ def fetch_many(ids, extra_controller_params)
134
+ extra_controller_params ||= {}
135
+
136
+ query = search_builder
137
+ .with(user_params)
138
+ .where(blacklight_config.document_model.unique_key => ids)
139
+ .merge(blacklight_config.fetch_many_document_params)
140
+ .merge(extra_controller_params)
141
+
142
+ solr_response = repository.search(query)
143
+
144
+ [solr_response, solr_response.documents]
145
+ end
146
+
147
+ def fetch_one(id, extra_controller_params)
148
+ solr_response = repository.find id, extra_controller_params
149
+ [solr_response, solr_response.documents.first]
150
+ end
151
+ end
152
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ # These are data types that blacklight can use to coerce values from the index
5
+ module Types
6
+ class Array
7
+ def self.coerce(input)
8
+ ::Array.wrap(input)
9
+ end
10
+ end
11
+
12
+ class String
13
+ def self.coerce(input)
14
+ ::Array.wrap(input).first
15
+ end
16
+ end
17
+
18
+ class Date
19
+ def self.coerce(input)
20
+ field = String.coerce(input)
21
+ return if field.blank?
22
+
23
+ begin
24
+ ::Date.parse(field)
25
+ rescue ArgumentError
26
+ Rails.logger.info "Unable to parse date: #{field.first.inspect}"
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -1,4 +1,4 @@
1
- <%= link_to bookmarks_path, id:'bookmarks_nav' do %>
1
+ <%= link_to bookmarks_path, id:'bookmarks_nav', class: 'nav-link' do %>
2
2
  <%= t('blacklight.header_links.bookmarks') %>
3
- (<span data-role='bookmark-counter'><%= current_or_guest_user.bookmarks.count %></span>)
3
+ <span class="badge badge-secondary" data-role='bookmark-counter'><%= current_or_guest_user.bookmarks.count %></span>
4
4
  <% end %>
@@ -1 +1 @@
1
- <%= link_to t('blacklight.header_links.search_history'), blacklight.search_history_path %>
1
+ <%= link_to t('blacklight.header_links.search_history'), blacklight.search_history_path, class: 'nav-link' %>
@@ -1,6 +1,6 @@
1
1
  <ul class="<%= controller_name %>Tools nav nav-pills">
2
- <%= render_show_doc_actions document_list, document: nil, document_list: @document_list, url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h) do |config, inner| %>
3
- <li>
2
+ <%= render_show_doc_actions document_list, document: nil, document_list: @response.documents, url_opts: Blacklight::Parameters.sanitize(params.to_unsafe_h) do |config, inner| %>
3
+ <li class="nav-item">
4
4
  <%= inner %>
5
5
  </li>
6
6
  <% end %>
@@ -1,21 +1,20 @@
1
1
  <% @page_title = t('blacklight.bookmarks.page_title', :application_name => application_name) %>
2
2
 
3
3
  <div id="content" class="col-md-12">
4
- <h2 class='page-heading'><%= t('blacklight.bookmarks.title') %></h2>
4
+ <h1 class='page-heading'><%= t('blacklight.bookmarks.title') %></h1>
5
5
 
6
- <%- if current_or_guest_user.blank? -%>
6
+ <%- if current_or_guest_user.blank? -%>
7
7
 
8
- <h3 class='section-heading'><%= t('blacklight.bookmarks.need_login') %></h3>
8
+ <h2 class='section-heading'><%= t('blacklight.bookmarks.need_login') %></h2>
9
9
 
10
- <%- elsif @document_list.blank? -%>
10
+ <%- elsif @response.documents.blank? -%>
11
11
 
12
- <h3 class='section-heading'><%= t('blacklight.bookmarks.no_bookmarks') %></h3>
13
- <% else %>
14
- <%= render 'sort_and_per_page' %>
15
- <%= render partial: 'tools', locals: { document_list: @document_list } %>
16
-
17
- <%= render_document_index %>
18
- <%= render 'results_pagination' %>
19
- <% end %>
12
+ <h2 class='section-heading'><%= t('blacklight.bookmarks.no_bookmarks') %></h2>
13
+ <% else %>
14
+ <%= render 'sort_and_per_page' %>
15
+ <%= render partial: 'tools', locals: { document_list: @response.documents } %>
16
+ <h2 class='section-heading sr-only'><%= t('blacklight.bookmarks.list_title') %></h2>
17
+ <%= render_document_index %>
18
+ <%= render 'results_pagination' %>
19
+ <% end %>
20
20
  </div>
21
-
@@ -5,17 +5,33 @@
5
5
  # the data-doc-id attribute is used by our JS that converts to a checkbox/label.
6
6
  -%>
7
7
  <% unless bookmarked? document %>
8
-
9
- <%= form_tag( bookmark_path( document ), :method => :put, :class => "bookmark_toggle", "data-doc-id" => document.id, :'data-present' => t('blacklight.search.bookmarks.present'), :'data-absent' => t('blacklight.search.bookmarks.absent'), :'data-inprogress' => t('blacklight.search.bookmarks.inprogress')) do %>
10
- <%= submit_tag(t('blacklight.bookmarks.add.button'), :id => "bookmark_toggle_#{document.id.to_s.parameterize}", :class => "bookmark_add btn btn-default") %>
11
- <% end %>
12
-
8
+ <%= form_tag(bookmark_path(document),
9
+ method: :put,
10
+ class: 'bookmark-toggle',
11
+ data: {
12
+ 'doc-id' => document.id,
13
+ present: t('blacklight.search.bookmarks.present'),
14
+ absent: t('blacklight.search.bookmarks.absent'),
15
+ inprogress: t('blacklight.search.bookmarks.inprogress')
16
+ }) do %>
17
+ <%= submit_tag(t('blacklight.bookmarks.add.button'),
18
+ id: "bookmark_toggle_#{document.id.to_s.parameterize}",
19
+ class: "bookmark-add btn btn-outline-secondary") %>
20
+ <% end %>
13
21
  <% else %>
14
-
15
- <%= form_tag( bookmark_path( document ), :method => :delete, :class => "bookmark_toggle", "data-doc-id" => document.id, :'data-present' => t('blacklight.search.bookmarks.present'), :'data-absent' => t('blacklight.search.bookmarks.absent'), :'data-inprogress' => t('blacklight.search.bookmarks.inprogress')) do %>
16
- <%= submit_tag(t('blacklight.bookmarks.remove.button'), :id => "bookmark_toggle_#{document.id.to_s.parameterize}", :class => "bookmark_remove btn btn-default") %>
17
- <% end %>
18
-
22
+ <%= form_tag(bookmark_path(document),
23
+ method: :delete,
24
+ class: "bookmark-toggle",
25
+ data: {
26
+ 'doc-id' => document.id,
27
+ present: t('blacklight.search.bookmarks.present'),
28
+ absent: t('blacklight.search.bookmarks.absent'),
29
+ inprogress: t('blacklight.search.bookmarks.inprogress')
30
+ }) do %>
31
+ <%= submit_tag(t('blacklight.bookmarks.remove.button'),
32
+ id: "bookmark_toggle_#{document.id.to_s.parameterize}",
33
+ class: "bookmark-remove btn btn-outline-secondary") %>
34
+ <% end %>
19
35
  <% end %>
20
36
  <% else %>
21
37
  &nbsp;
@@ -1,20 +1,20 @@
1
1
 
2
2
  <% @documents.each do |document| %>
3
3
 
4
- <h3 class="modal-title"><%= document_heading(document) %></h3>
4
+ <h1 class="modal-title"><%= document_heading(document) %></h1>
5
5
 
6
6
  <% if document.respond_to?(:export_as_mla_citation_txt) %>
7
- <h4><%= t('blacklight.citation.mla') %></h4>
7
+ <h2><%= t('blacklight.citation.mla') %></h2>
8
8
  <%= document.send(:export_as_mla_citation_txt).html_safe %><br/><br/>
9
9
  <% end %>
10
10
 
11
11
  <% if document.respond_to?(:export_as_apa_citation_txt) %>
12
- <h4><%= t('blacklight.citation.apa') %></h4>
12
+ <h2><%= t('blacklight.citation.apa') %></h2>
13
13
  <%= document.send(:export_as_apa_citation_txt).html_safe %><br/><br/>
14
14
  <% end %>
15
15
 
16
16
  <%- if document.respond_to?(:export_as_chicago_citation_txt) -%>
17
- <h4><%= t('blacklight.citation.chicago') %></h4>
17
+ <h2><%= t('blacklight.citation.chicago') %></h2>
18
18
  <%= document.send(:export_as_chicago_citation_txt).html_safe %>
19
19
  <%- end -%>
20
20
 
@@ -1,10 +1,9 @@
1
1
  <% if query_has_constraints? %>
2
+ <div id="appliedParams" class="clearfix constraints-container">
3
+ <h2 class="sr-only"><%= t('blacklight.search.search_constraints_header') %></h2>
2
4
 
3
- <div id="appliedParams" class="clearfix constraints-container">
4
- <div class="pull-right">
5
- <%=link_to t('blacklight.search.start_over'), start_over_path, :class => "catalog_startOverLink btn btn-sm btn-text", :id=>"startOverLink" %>
6
- </div>
7
- <span class="constraints-label"><%= t('blacklight.search.filters.title') %></span>
8
- <%= render_constraints(params) %>
9
- </div>
5
+ <%=link_to t('blacklight.search.start_over'), start_over_path, class: "catalog_startOverLink btn btn-primary" %>
6
+ <span class="constraints-label sr-only"><%= t('blacklight.search.filters.title') %></span>
7
+ <%= render_constraints(params) %>
8
+ </div>
10
9
  <% end %>
@@ -7,13 +7,13 @@
7
7
  options ||= {}
8
8
  %>
9
9
 
10
- <span class="btn-group appliedFilter constraint <%= options[:classes].join(" ") if options[:classes] %>">
11
- <span class="constraint-value btn btn-sm btn-default btn-disabled">
10
+ <span class="btn-group applied-filter constraint <%= options[:classes].join(" ") if options[:classes] %>">
11
+ <span class="constraint-value btn btn-outline-secondary btn-disabled">
12
12
  <% unless label.blank? %>
13
- <span class="filterName"><%= label %></span>
13
+ <span class="filter-name"><%= label %></span>
14
14
  <% end %>
15
15
  <% unless value.blank? %>
16
- <%= content_tag :span, value, class: 'filterValue', title: value %>
16
+ <%= content_tag :span, value, class: 'filter-value', title: value %>
17
17
  <% end %>
18
18
  </span>
19
19
  <% unless options[:remove].blank? %>
@@ -26,8 +26,8 @@
26
26
  end
27
27
  %>
28
28
 
29
- <%= link_to(content_tag(:span, '', class: 'glyphicon glyphicon-remove') + accessible_remove_label,
30
- options[:remove], class: 'btn btn-default btn-sm remove dropdown-toggle'
29
+ <%= link_to(content_tag(:span, '✖', class: 'remove-icon') + accessible_remove_label,
30
+ options[:remove], class: 'btn btn-outline-secondary remove'
31
31
  ) %>
32
32
  <%- end -%>
33
33
  </span>
@@ -1,5 +1,5 @@
1
1
  <% if should_show_spellcheck_suggestions? @response %>
2
2
  <div id="spell">
3
- <h4 class="suggest"><em><%= t('blacklight.did_you_mean', :options => safe_join(@response.spelling.words.map { |word| link_to_query(word) }, " #{t('blacklight.or')} ")).html_safe %></em></h4>
3
+ <h3 class="suggest"><em><%= t('blacklight.did_you_mean', :options => safe_join(@response.spelling.words.map { |word| link_to_query(word) }, " #{t('blacklight.or')} ")).html_safe %></em></h3>
4
4
  </div>
5
5
  <% end %>
@@ -1,45 +1,46 @@
1
+ # frozen_string_literal: true
2
+
1
3
  xml.entry do
2
4
  xml.title index_presenter(document).label(document_show_link_field(document))
3
-
5
+
4
6
  # updated is required, for now we'll just set it to now, sorry
5
7
  xml.updated Time.current.iso8601
6
-
8
+
7
9
  xml.link "rel" => "alternate", "type" => "text/html", "href" => polymorphic_url(url_for_document(document))
8
10
  # add other doc-specific formats, atom only lets us have one per
9
11
  # content type, so the first one in the list wins.
10
- xml << show_presenter(document).link_rel_alternates(unique: true)
11
-
12
+ xml << show_presenter(document).link_rel_alternates(unique: true)
13
+
12
14
  xml.id polymorphic_url(url_for_document(document))
13
-
14
-
15
+
15
16
  if document.to_semantic_values.key? :author
16
17
  xml.author { xml.name(document.to_semantic_values[:author].first) }
17
18
  end
18
-
19
+
19
20
  with_format("html") do
20
21
  xml.summary "type" => "html" do
21
22
  xml.text! render_document_partial(document,
22
23
  :index,
23
- :document_counter => document_counter)
24
+ document_counter: document_counter)
24
25
  end
25
26
  end
26
-
27
- #If they asked for a format, give it to them.
27
+
28
+ #If they asked for a format, give it to them.
28
29
  if (params["content_format"] &&
29
30
  document.export_formats[params["content_format"].to_sym])
30
-
31
+
31
32
  type = document.export_formats[params["content_format"].to_sym][:content_type]
32
-
33
- xml.content :type => type do |content_element|
33
+
34
+ xml.content type: type do |content_element|
34
35
  data = document.export_as(params["content_format"])
35
-
36
+
36
37
  # encode properly. See:
37
38
  # http://tools.ietf.org/html/rfc4287#section-4.1.3.3
38
39
  type = type.downcase
39
- if (type.downcase =~ /\+|\/xml$/)
40
- # xml, just put it right in
40
+ if (type.downcase =~ %r{\+|/xml$})
41
+ # xml, just put it right in
41
42
  content_element << data
42
- elsif (type.downcase =~ /text\//)
43
+ elsif (type.downcase =~ %r{text/})
43
44
  # text, escape
44
45
  content_element.text! data
45
46
  else
@@ -47,6 +48,6 @@ xml.entry do
47
48
  content_element << Base64.encode64(data)
48
49
  end
49
50
  end
50
-
51
+
51
52
  end
52
53
  end
@@ -1,4 +1,6 @@
1
1
  <% # container for a single doc -%>
2
- <div class="document <%= render_document_class document %> document-position-<%= document_counter%> " data-document-counter="<%= document_counter %>" itemscope itemtype="<%= document.itemtype %>">
3
- <%= render_document_partials document, blacklight_config.view_config(document_index_view_type).partials, :document_counter => document_counter %>
4
- </div>
2
+ <article class="document <%= render_document_class document %> document-position-<%= document_counter%> " data-document-counter="<%= document_counter %>" itemscope itemtype="<%= document.itemtype %>">
3
+ <%= render_document_partials document,
4
+ blacklight_config.view_config(document_index_view_type).partials,
5
+ document_counter: document_counter %>
6
+ </article>
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  xml.item do
2
4
  xml.title(index_presenter(document).label(document_show_link_field(document)) || (document.to_semantic_values[:title].first if document.to_semantic_values.key?(:title)))
3
5
  xml.link(polymorphic_url(url_for_document(document)))
@@ -1,4 +1,5 @@
1
1
  <%= link_to document_action_label(document_action_config.key, document_action_config),
2
2
  document_action_path(document_action_config, (local_assigns.has_key?(:url_opts) ? url_opts : {}).merge(({id: document} if document) || {})),
3
3
  id: document_action_config.fetch(:id, "#{document_action_config.key}Link"),
4
- data: {}.merge(({ajax_modal: "trigger"} if document_action_config.modal != false) || {}) %>
4
+ class: 'nav-link',
5
+ data: {}.merge(({ blacklight_modal: "trigger" } if document_action_config.modal != false) || {}) %>
@@ -1,8 +1,12 @@
1
- <%= form_tag url_for(:controller => controller_name, :action => "email"), :id => 'email_form', :class => "form-horizontal ajax_form", :method => :post do %>
1
+ <%= form_tag url_for(controller: controller_name, action: "email"),
2
+ data: { blacklight_modal: 'trigger' },
3
+ id: 'email_form',
4
+ class: "modal_form",
5
+ method: :post do %>
2
6
 
3
7
  <div class="modal-body">
4
- <%= render :partial=>'/flash_msg' %>
5
- <div class="form-group">
8
+ <%= render '/shared/flash_msg' %>
9
+ <div class="form-group row">
6
10
  <label class="control-label col-sm-2" for="to">
7
11
  <%= t('blacklight.email.form.to') %>
8
12
  </label>
@@ -11,7 +15,7 @@
11
15
  </div>
12
16
  </div>
13
17
 
14
- <div class="form-group">
18
+ <div class="form-group row">
15
19
  <label class="control-label col-sm-2" for="message">
16
20
  <%= t('blacklight.email.form.message') %>
17
21
  </label>
@@ -1,9 +1,10 @@
1
1
  <nav class="alpha-filter">
2
- <%= link_to t('blacklight.search.facets.clear'), @pagination.params_for_resort_url('index', search_state.to_h.except(@pagination.request_keys[:prefix])), data: { ajax_modal: "preserve" }, class: ['btn btn-default btn-xs', ('disabled' unless @pagination.prefix.present?)].join(' ') %>
3
-
4
- <ol class="pagination pagination-xs">
2
+ <ol class="pagination pagination-sm justify-content-center">
3
+ <li class="page-item <%= 'active' if @pagination.prefix.blank? %>">
4
+ <%= link_to t('blacklight.search.facets.all'), @pagination.params_for_resort_url('index', search_state.to_h.except(@pagination.request_keys[:prefix])), data: { blacklight_modal: "preserve" }, class: 'page-link' %>
5
+ </li>
5
6
  <% @facet.index_range.each do |letter| %>
6
- <li class="<%= 'active' if @pagination.prefix == letter %>"><%= link_to(letter, @pagination.params_for_resort_url('index', search_state.to_h.merge(@pagination.request_keys[:prefix] => letter)), data: { ajax_modal: "preserve" }) %></li>
7
+ <li class="page-item <%= 'active' if @pagination.prefix == letter %>"><%= link_to(letter, @pagination.params_for_resort_url('index', search_state.to_h.merge(@pagination.request_keys[:prefix] => letter)), class: 'page-link', data: { blacklight_modal: "preserve" }) %></li>
7
8
  <% end %>
8
9
  </ol>
9
10
  </nav>
@@ -1,12 +1,8 @@
1
- <div class="panel panel-default facet_limit blacklight-<%= facet_field.key.parameterize %> <%= 'facet_limit-active' if facet_field_in_params?(facet_field.key) %>">
2
- <div class="<%= "collapsed" if should_collapse_facet?(facet_field) %> collapse-toggle panel-heading" data-toggle="collapse" data-target="#<%= facet_field_id(facet_field) %>">
3
- <h3 class="panel-title facet-field-heading">
4
- <%= link_to facet_field_label(facet_field.key), "#", :"data-no-turbolink" => true %>
5
- </h3>
6
- </div>
7
- <div id="<%= facet_field_id(facet_field) %>" class="panel-collapse facet-content <%= should_collapse_facet?(facet_field) ? 'collapse' : 'in' %>">
8
- <div class="panel-body">
9
- <%= yield %>
10
- </div>
1
+ <div class="card facet-limit blacklight-<%= facet_field.key.parameterize %> <%= 'facet-limit-active' if facet_field_in_params?(facet_field.key) %>">
2
+ <h3 class="card-header <%= "collapsed" if should_collapse_facet?(facet_field) %> collapse-toggle facet-field-heading" aria-expanded="false" data-toggle="collapse" data-target="#<%= facet_field_id(facet_field) %>">
3
+ <%= link_to facet_field_label(facet_field.key), "##{ facet_field_id(facet_field)}", "data-turbolinks": false %>
4
+ </h3>
5
+ <div id="<%= facet_field_id(facet_field) %>" class="card-body panel-collapse facet-content <%= should_collapse_facet?(facet_field) ? 'collapse' : 'show' %>">
6
+ <%= yield %>
11
7
  </div>
12
8
  </div>
@@ -3,9 +3,10 @@
3
3
  <%= render_facet_limit_list paginator, facet_field.key %>
4
4
 
5
5
  <% unless paginator.last_page? || params[:action] == "facet" %>
6
- <li class="more_facets_link">
6
+ <li class="more_facets">
7
7
  <%= link_to t("more_#{field_name}_html", scope: 'blacklight.search.facets', default: :more_html, field_name: facet_field.label),
8
- search_facet_path(id: facet_field.key), class: "more_facets_link" %>
8
+ search_facet_path(id: facet_field.key),
9
+ data: { blacklight_modal: 'trigger' } %>
9
10
  </li>
10
11
  <% end %>
11
12
  </ul>