blacklight 6.24.0 → 7.0.0.rc1

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 (393) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +15 -3
  5. data/.rubocop_todo.yml +242 -379
  6. data/.solr_wrapper.yml +1 -1
  7. data/.travis.yml +20 -24
  8. data/Gemfile +1 -4
  9. data/README.md +21 -4
  10. data/Rakefile +1 -2
  11. data/VERSION +1 -1
  12. data/app/assets/images/blacklight/list.svg +1 -0
  13. data/app/assets/images/blacklight/search.svg +1 -0
  14. data/app/assets/javascripts/blacklight/blacklight.js +496 -56
  15. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  16. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +3 -1
  17. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  18. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  19. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  20. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  21. data/app/assets/stylesheets/blacklight/_facets.scss +74 -92
  22. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  23. data/app/assets/stylesheets/blacklight/_icons.scss +29 -0
  24. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  25. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  26. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  27. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  28. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  29. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  30. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  31. data/app/builders/blacklight/action_builder.rb +56 -0
  32. data/app/controllers/bookmarks_controller.rb +2 -2
  33. data/app/controllers/catalog_controller.rb +2 -2
  34. data/app/controllers/concerns/blacklight/base.rb +0 -33
  35. data/app/controllers/concerns/blacklight/bookmarks.rb +20 -37
  36. data/app/controllers/concerns/blacklight/catalog.rb +254 -213
  37. data/app/controllers/concerns/blacklight/controller.rb +117 -133
  38. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  39. data/app/controllers/concerns/blacklight/search_context.rb +10 -14
  40. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  41. data/app/controllers/concerns/blacklight/token_based_user.rb +6 -10
  42. data/app/helpers/blacklight/blacklight_helper_behavior.rb +32 -118
  43. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  44. data/app/helpers/blacklight/component_helper_behavior.rb +19 -19
  45. data/app/helpers/blacklight/configuration_helper_behavior.rb +25 -54
  46. data/app/helpers/blacklight/facets_helper_behavior.rb +40 -39
  47. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  48. data/app/helpers/blacklight/icon_helper_behavior.rb +16 -0
  49. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -10
  50. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +6 -6
  51. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  52. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +18 -11
  53. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  54. data/app/helpers/blacklight/url_helper_behavior.rb +21 -27
  55. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  56. data/app/javascript/blacklight/autofocus.js +20 -0
  57. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  58. data/app/javascript/blacklight/checkbox_submit.js +133 -0
  59. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  60. data/app/javascript/blacklight/core.js +39 -0
  61. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  62. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +63 -63
  63. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -2
  64. data/app/models/blacklight/facet_paginator.rb +3 -3
  65. data/app/models/blacklight/icon.rb +53 -0
  66. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  67. data/app/models/blacklight/suggest_search.rb +15 -4
  68. data/app/models/bookmark.rb +4 -9
  69. data/app/models/concerns/blacklight/configurable.rb +13 -13
  70. data/app/models/concerns/blacklight/document.rb +8 -42
  71. data/app/models/concerns/blacklight/document/active_model_shim.rb +8 -11
  72. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  73. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  74. data/app/models/concerns/blacklight/document/email.rb +1 -1
  75. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  76. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  77. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  78. data/app/models/concerns/blacklight/solr/document.rb +7 -8
  79. data/app/models/concerns/blacklight/suggest/response.rb +3 -5
  80. data/app/models/concerns/blacklight/user.rb +6 -6
  81. data/app/models/record_mailer.rb +5 -6
  82. data/app/models/search.rb +4 -7
  83. data/app/presenters/blacklight/field_presenter.rb +5 -5
  84. data/app/presenters/blacklight/index_presenter.rb +34 -71
  85. data/app/presenters/blacklight/json_presenter.rb +7 -4
  86. data/app/presenters/blacklight/link_alternate_presenter.rb +1 -1
  87. data/app/presenters/blacklight/rendering/abstract_step.rb +5 -5
  88. data/app/presenters/blacklight/rendering/helper_method.rb +8 -8
  89. data/app/presenters/blacklight/rendering/join.rb +3 -3
  90. data/app/presenters/blacklight/rendering/link_to_facet.rb +19 -19
  91. data/app/presenters/blacklight/rendering/microdata.rb +3 -3
  92. data/app/presenters/blacklight/rendering/pipeline.rb +5 -5
  93. data/app/presenters/blacklight/search_bar_presenter.rb +37 -0
  94. data/app/presenters/blacklight/show_presenter.rb +20 -69
  95. data/app/presenters/blacklight/thumbnail_presenter.rb +72 -0
  96. data/app/services/blacklight/document_factory.rb +11 -0
  97. data/app/services/blacklight/field_retriever.rb +24 -24
  98. data/app/services/blacklight/search_service.rb +154 -0
  99. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  100. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  101. data/app/views/bookmarks/_tools.html.erb +2 -2
  102. data/app/views/bookmarks/index.html.erb +2 -2
  103. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  104. data/app/views/catalog/_citation.html.erb +18 -23
  105. data/app/views/catalog/_constraints.html.erb +5 -8
  106. data/app/views/catalog/_constraints_element.html.erb +6 -6
  107. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +2 -2
  108. data/app/views/catalog/_document.html.erb +5 -3
  109. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +0 -0
  110. data/app/views/catalog/_document_action.html.erb +2 -1
  111. data/app/views/catalog/_email_form.html.erb +8 -4
  112. data/app/views/catalog/_facet_index_navigation.html.erb +3 -3
  113. data/app/views/catalog/_facet_layout.html.erb +5 -7
  114. data/app/views/catalog/_facet_limit.html.erb +3 -2
  115. data/app/views/catalog/_facet_pagination.html.erb +10 -10
  116. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  117. data/app/views/catalog/_facets.html.erb +8 -12
  118. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +0 -0
  119. data/app/views/catalog/_home_text.html.erb +32 -36
  120. data/app/views/catalog/_index.html.erb +12 -0
  121. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +2 -2
  122. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  123. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  124. data/app/views/catalog/_search_form.html.erb +12 -8
  125. data/app/views/catalog/_search_header.html.erb +0 -3
  126. data/app/views/catalog/_search_results.html.erb +4 -0
  127. data/app/views/catalog/_show.html.erb +10 -0
  128. data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  129. data/app/views/catalog/_show_main_content.html.erb +4 -4
  130. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  131. data/app/views/catalog/_show_tools.html.erb +9 -11
  132. data/app/views/catalog/_sms_form.html.erb +8 -4
  133. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  134. data/app/views/catalog/_sort_widget.html.erb +7 -7
  135. data/app/views/catalog/_thumbnail.html.erb +5 -0
  136. data/app/views/catalog/_view_type_group.html.erb +2 -2
  137. data/app/views/catalog/citation.html.erb +1 -1
  138. data/app/views/catalog/citation.js.erb +9 -1
  139. data/app/views/catalog/email.html.erb +5 -5
  140. data/app/views/catalog/email_success.html.erb +11 -9
  141. data/app/views/catalog/facet.html.erb +5 -6
  142. data/app/views/catalog/index.atom.builder +10 -15
  143. data/app/views/catalog/index.html.erb +9 -11
  144. data/app/views/catalog/index.json.jbuilder +65 -3
  145. data/app/views/catalog/index.rss.builder +5 -5
  146. data/app/views/catalog/opensearch.xml.builder +10 -10
  147. data/app/views/catalog/show.html.erb +11 -6
  148. data/app/views/catalog/sms.html.erb +2 -3
  149. data/app/views/catalog/sms_success.html.erb +11 -10
  150. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  151. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  152. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  153. data/app/views/kaminari/blacklight/_next_page.html.erb +4 -4
  154. data/app/views/kaminari/blacklight/_page.html.erb +3 -3
  155. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  156. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  157. data/app/views/layouts/blacklight.html.erb +14 -41
  158. data/app/views/layouts/blacklight/base.html.erb +43 -0
  159. data/app/views/layouts/catalog_result.html.erb +11 -0
  160. data/app/views/search_history/index.html.erb +16 -21
  161. data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  162. data/app/views/shared/_header_navbar.html.erb +8 -13
  163. data/app/views/shared/_modal.html.erb +6 -0
  164. data/app/views/shared/_user_util_links.html.erb +22 -0
  165. data/blacklight.gemspec +10 -11
  166. data/config/locales/blacklight.de.yml +0 -30
  167. data/config/locales/blacklight.en.yml +1 -27
  168. data/config/locales/blacklight.es.yml +0 -30
  169. data/config/locales/blacklight.fr.yml +0 -30
  170. data/config/locales/blacklight.hu.yml +210 -0
  171. data/config/locales/blacklight.it.yml +0 -30
  172. data/config/locales/blacklight.nl.yml +210 -0
  173. data/config/locales/blacklight.pt-BR.yml +6 -32
  174. data/config/locales/blacklight.sq.yml +1 -28
  175. data/config/locales/blacklight.zh.yml +0 -25
  176. data/config/routes.rb +3 -10
  177. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  178. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  179. data/lib/blacklight.rb +4 -5
  180. data/lib/blacklight/abstract_repository.rb +9 -21
  181. data/lib/blacklight/configuration.rb +82 -89
  182. data/lib/blacklight/configuration/context.rb +1 -1
  183. data/lib/blacklight/configuration/facet_field.rb +16 -9
  184. data/lib/blacklight/configuration/field.rb +32 -3
  185. data/lib/blacklight/configuration/fields.rb +41 -48
  186. data/lib/blacklight/configuration/search_field.rb +2 -2
  187. data/lib/blacklight/configuration/sort_field.rb +2 -2
  188. data/lib/blacklight/configuration/view_config.rb +4 -0
  189. data/lib/blacklight/engine.rb +6 -10
  190. data/lib/blacklight/exceptions.rb +4 -7
  191. data/lib/blacklight/nested_open_struct_with_hash_access.rb +107 -0
  192. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  193. data/lib/blacklight/parameters.rb +1 -1
  194. data/lib/blacklight/routes/searchable.rb +1 -0
  195. data/lib/blacklight/search_builder.rb +26 -35
  196. data/lib/blacklight/search_state.rb +8 -8
  197. data/lib/blacklight/solr/repository.rb +3 -36
  198. data/lib/blacklight/solr/request.rb +1 -1
  199. data/lib/blacklight/solr/response.rb +29 -30
  200. data/lib/blacklight/solr/response/facets.rb +29 -31
  201. data/lib/blacklight/solr/response/group.rb +3 -3
  202. data/lib/blacklight/solr/response/group_response.rb +1 -1
  203. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  204. data/lib/blacklight/solr/response/response.rb +2 -2
  205. data/lib/blacklight/solr/response/spelling.rb +3 -3
  206. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  207. data/lib/blacklight/version.rb +1 -1
  208. data/lib/generators/blacklight/assets_generator.rb +8 -8
  209. data/lib/generators/blacklight/controller_generator.rb +4 -5
  210. data/lib/generators/blacklight/document_generator.rb +1 -1
  211. data/lib/generators/blacklight/install_generator.rb +18 -21
  212. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  213. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +4 -6
  214. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  215. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  216. data/lib/generators/blacklight/templates/catalog_controller.rb +52 -51
  217. data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  218. data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  219. data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  220. data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  221. data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  222. data/lib/generators/blacklight/templates/solr/conf/schema.xml +390 -0
  223. data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  224. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  225. data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  226. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  227. data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  228. data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  229. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  230. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  231. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  232. data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
  233. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  234. data/lib/generators/blacklight/user_generator.rb +3 -6
  235. data/lib/railties/blacklight.rake +19 -14
  236. data/package-lock.json +2057 -0
  237. data/package.json +28 -0
  238. data/spec/controllers/alternate_controller_spec.rb +1 -1
  239. data/spec/controllers/application_controller_spec.rb +1 -1
  240. data/spec/controllers/blacklight/base_spec.rb +1 -1
  241. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  242. data/spec/controllers/blacklight/facet_spec.rb +1 -1
  243. data/spec/controllers/blacklight/search_fields_spec.rb +1 -13
  244. data/spec/controllers/bookmarks_controller_spec.rb +1 -36
  245. data/spec/controllers/catalog_controller_spec.rb +153 -53
  246. data/spec/controllers/search_history_controller_spec.rb +2 -2
  247. data/spec/features/alternate_controller_spec.rb +1 -1
  248. data/spec/features/autocomplete_spec.rb +2 -2
  249. data/spec/features/bookmarks_spec.rb +10 -10
  250. data/spec/features/did_you_mean_spec.rb +3 -9
  251. data/spec/features/facets_spec.rb +11 -11
  252. data/spec/features/record_view_spec.rb +1 -6
  253. data/spec/features/search_context_spec.rb +2 -2
  254. data/spec/features/search_filters_spec.rb +41 -41
  255. data/spec/features/search_formats_spec.rb +1 -1
  256. data/spec/features/search_history_spec.rb +1 -26
  257. data/spec/features/search_pagination_spec.rb +1 -1
  258. data/spec/features/search_results_spec.rb +3 -4
  259. data/spec/features/search_sort_spec.rb +2 -2
  260. data/spec/features/search_spec.rb +5 -10
  261. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  262. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +70 -65
  263. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +7 -8
  264. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +1 -1
  265. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +8 -0
  266. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -15
  267. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +2 -3
  268. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +80 -0
  269. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +9 -9
  270. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +4 -2
  271. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +11 -15
  272. data/spec/helpers/blacklight_helper_spec.rb +36 -141
  273. data/spec/helpers/catalog_helper_spec.rb +37 -56
  274. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +3 -3
  275. data/spec/lib/blacklight/configuration/facet_field_spec.rb +11 -0
  276. data/spec/lib/blacklight/configuration/field_spec.rb +12 -0
  277. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  278. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +153 -0
  279. data/spec/lib/blacklight/parameters_spec.rb +1 -1
  280. data/spec/lib/blacklight/search_state_spec.rb +2 -2
  281. data/spec/lib/blacklight_spec.rb +1 -1
  282. data/spec/lib/tasks/blacklight_task_spec.rb +1 -1
  283. data/spec/models/blacklight/configurable_spec.rb +15 -16
  284. data/spec/models/blacklight/configuration/context_spec.rb +1 -1
  285. data/spec/models/blacklight/configuration_spec.rb +146 -135
  286. data/spec/models/blacklight/document/active_model_shim_spec.rb +11 -1
  287. data/spec/models/blacklight/document/cache_key_spec.rb +1 -1
  288. data/spec/models/blacklight/document/dublin_core_spec.rb +5 -5
  289. data/spec/models/blacklight/document/email_spec.rb +3 -3
  290. data/spec/models/blacklight/document/sms_spec.rb +3 -3
  291. data/spec/models/blacklight/document_spec.rb +3 -16
  292. data/spec/models/blacklight/facet_paginator_spec.rb +1 -1
  293. data/spec/models/blacklight/icon_spec.rb +34 -0
  294. data/spec/models/blacklight/search_builder_spec.rb +33 -27
  295. data/spec/models/blacklight/solr/document_spec.rb +18 -7
  296. data/spec/models/blacklight/solr/facet_paginator_spec.rb +1 -1
  297. data/spec/models/blacklight/solr/repository_spec.rb +32 -27
  298. data/spec/models/blacklight/solr/request_spec.rb +1 -1
  299. data/spec/models/blacklight/solr/response/facets_spec.rb +1 -1
  300. data/spec/models/blacklight/solr/response/group_response_spec.rb +1 -1
  301. data/spec/models/blacklight/solr/response/group_spec.rb +1 -1
  302. data/spec/models/blacklight/solr/response_spec.rb +9 -6
  303. data/spec/models/blacklight/solr/search_builder_spec.rb +35 -48
  304. data/spec/models/blacklight/suggest/response_spec.rb +4 -5
  305. data/spec/models/blacklight/suggest_search_spec.rb +14 -7
  306. data/spec/models/blacklight/user_spec.rb +1 -1
  307. data/spec/models/bookmark_spec.rb +1 -1
  308. data/spec/models/record_mailer_spec.rb +2 -2
  309. data/spec/models/search_spec.rb +1 -1
  310. data/spec/models/solr_document_spec.rb +3 -3
  311. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +72 -0
  312. data/spec/presenters/index_presenter_spec.rb +70 -143
  313. data/spec/presenters/pipeline_spec.rb +4 -4
  314. data/spec/presenters/show_presenter_spec.rb +83 -145
  315. data/spec/presenters/thumbnail_presenter_spec.rb +171 -0
  316. data/spec/routing/catalog_routing_spec.rb +1 -17
  317. data/spec/services/blacklight/search_service_spec.rb +446 -0
  318. data/spec/spec_helper.rb +22 -9
  319. data/spec/test_app_templates/Gemfile.extra +2 -5
  320. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  321. data/spec/views/catalog/_constraints.html.erb_spec.rb +1 -3
  322. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +8 -8
  323. data/spec/views/catalog/_document.html.erb_spec.rb +7 -7
  324. data/spec/views/catalog/_document_list.html.erb_spec.rb +1 -1
  325. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +1 -1
  326. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  327. data/spec/views/catalog/_facets.html.erb_spec.rb +2 -2
  328. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +1 -1
  329. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +4 -4
  330. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +4 -27
  331. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  332. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +1 -1
  333. data/spec/views/catalog/_show_sidebar.erb_spec.rb +3 -3
  334. data/spec/views/catalog/_show_tools.html.erb_spec.rb +3 -3
  335. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -1
  336. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +3 -3
  337. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +5 -1
  338. data/spec/views/catalog/email_success.html.erb_spec.rb +9 -0
  339. data/spec/views/catalog/facet.html.erb_spec.rb +1 -1
  340. data/spec/views/catalog/facet.json.jbuilder_spec.rb +1 -1
  341. data/spec/views/catalog/index.atom.builder_spec.rb +2 -2
  342. data/spec/views/catalog/index.html.erb_spec.rb +4 -7
  343. data/spec/views/catalog/index.json.jbuilder_spec.rb +66 -21
  344. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  345. data/spec/views/catalog/show.html.erb_spec.rb +2 -2
  346. data/spec/views/catalog/sms_success.html.erb_spec.rb +9 -0
  347. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -4
  348. data/tasks/blacklight.rake +10 -8
  349. data/template.demo.rb +1 -11
  350. metadata +171 -189
  351. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  352. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  353. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -139
  354. data/app/assets/javascripts/blacklight/core.js +0 -30
  355. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  356. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  357. data/app/controllers/concerns/blacklight/search_helper.rb +0 -161
  358. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  359. data/app/controllers/saved_searches_controller.rb +0 -4
  360. data/app/controllers/suggest_controller.rb +0 -4
  361. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  362. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  363. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  364. data/app/helpers/blacklight_url_helper.rb +0 -4
  365. data/app/helpers/component_helper.rb +0 -4
  366. data/app/helpers/facets_helper.rb +0 -4
  367. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  368. data/app/helpers/layout_helper.rb +0 -4
  369. data/app/helpers/render_constraints_helper.rb +0 -4
  370. data/app/helpers/search_history_constraints_helper.rb +0 -4
  371. data/app/helpers/suggest_helper.rb +0 -4
  372. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  373. data/app/presenters/blacklight/document_presenter.rb +0 -153
  374. data/app/views/_user_util_links.html.erb +0 -26
  375. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  376. data/app/views/catalog/_index_default.html.erb +0 -12
  377. data/app/views/catalog/_show_default.html.erb +0 -10
  378. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  379. data/app/views/saved_searches/index.html.erb +0 -32
  380. data/app/views/shared/_ajax_modal.html.erb +0 -6
  381. data/lib/blacklight/utils.rb +0 -183
  382. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  383. data/solr/conf/schema.xml +0 -627
  384. data/solr/conf/solrconfig.xml +0 -411
  385. data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
  386. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  387. data/spec/controllers/suggest_controller_spec.rb +0 -17
  388. data/spec/features/saved_searches_spec.rb +0 -47
  389. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  390. data/spec/lib/blacklight/utils_spec.rb +0 -167
  391. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  392. data/spec/presenters/document_presenter_spec.rb +0 -438
  393. data/spec/support/backport_test.rb +0 -14
@@ -3,41 +3,43 @@
3
3
  # as this module is mixed-in to the application controller in the hosting app on installation.
4
4
  module Blacklight::Controller
5
5
  extend ActiveSupport::Concern
6
- extend Deprecation
7
- self.deprecation_horizon = 'blacklight 7.x'
8
6
 
9
7
  included do
10
8
  include Blacklight::SearchFields
11
- helper Blacklight::SearchFields if respond_to? :helper
9
+ helper Blacklight::SearchFields
12
10
 
13
11
  include ActiveSupport::Callbacks
14
12
 
15
13
  # now in application.rb file under config.filter_parameters
16
14
  # filter_parameter_logging :password, :password_confirmation
15
+ helper_method :current_user_session, :current_user, :current_or_guest_user
17
16
  after_action :discard_flash_if_xhr
18
17
 
19
18
  # handle basic authorization exception with #access_denied
20
- rescue_from Blacklight::Exceptions::AccessDenied, :with => :access_denied
19
+ rescue_from Blacklight::Exceptions::AccessDenied, with: :access_denied
21
20
 
22
- if respond_to? :helper_method
23
- helper_method :current_user_session, :current_user, :current_or_guest_user
21
+ # extra head content
22
+ helper_method :has_user_authentication_provider?
23
+ helper_method :blacklight_config, :blacklight_configuration_context
24
+ helper_method :search_action_url, :search_action_path, :search_facet_path
25
+ helper_method :search_state
24
26
 
25
- # extra head content
26
- helper_method :has_user_authentication_provider?
27
- helper_method :blacklight_config, :blacklight_configuration_context
28
- helper_method :search_action_url, :search_action_path, :search_facet_path
29
- helper_method :search_state
30
- end
31
-
32
- # Specify which class to use for the search state. You can subclass SearchState if you
27
+ # Which class to use for the search state. You can subclass SearchState if you
33
28
  # want to override any of the methods (e.g. SearchState#url_for_document)
34
29
  class_attribute :search_state_class
35
30
  self.search_state_class = Blacklight::SearchState
36
31
 
32
+ # Which class to use for the search service. You can subclass SearchService if you
33
+ # want to override any of the methods (e.g. SearchService#fetch)
34
+ class_attribute :search_service_class
35
+ self.search_service_class = Blacklight::SearchService
36
+
37
37
  # This callback runs when a user first logs in
38
38
 
39
39
  define_callbacks :logging_in_user
40
40
  set_callback :logging_in_user, :before, :transfer_guest_user_actions_to_current_user
41
+
42
+ layout :determine_layout
41
43
  end
42
44
 
43
45
  def default_catalog_controller
@@ -46,144 +48,126 @@ module Blacklight::Controller
46
48
 
47
49
  delegate :blacklight_config, to: :default_catalog_controller
48
50
 
49
- protected
51
+ private
50
52
 
51
- ##
52
- # Context in which to evaluate blacklight configuration conditionals
53
- def blacklight_configuration_context
54
- @blacklight_configuration_context ||= Blacklight::Configuration::Context.new(self)
55
- end
53
+ ##
54
+ # Context in which to evaluate blacklight configuration conditionals
55
+ def blacklight_configuration_context
56
+ @blacklight_configuration_context ||= Blacklight::Configuration::Context.new(self)
57
+ end
56
58
 
57
- ##
58
- # Determine whether to render the bookmarks control
59
- # (Needs to be available globally, as it is used in the navbar)
60
- def render_bookmarks_control?
61
- has_user_authentication_provider? and current_or_guest_user.present?
62
- end
59
+ ##
60
+ # Determine whether to render the bookmarks control
61
+ # (Needs to be available globally, as it is used in the navbar)
62
+ def render_bookmarks_control?
63
+ has_user_authentication_provider? && current_or_guest_user.present?
64
+ end
63
65
 
64
- ##
65
- # Determine whether to render the saved searches link
66
- # (Needs to be available globally, as it is used in the navbar)
67
- def render_saved_searches?
68
- has_user_authentication_provider? and current_user
69
- end
66
+ # @return [Blacklight::SearchState] a memoized instance of the parameter state.
67
+ def search_state
68
+ @search_state ||= search_state_class.new(params, blacklight_config, self)
69
+ end
70
70
 
71
- # @return [Blacklight::SearchState] a memoized instance of the parameter state.
72
- def search_state
73
- @search_state ||= begin
74
- if search_state_class.instance_method(:initialize).arity == -3
75
- search_state_class.new(params, blacklight_config, self)
76
- else
77
- Deprecation.warn(search_state_class, "The constructor for #{search_state_class} now requires a third argument. " \
78
- "Invoking it will 2 arguments is deprecated and will be removed in Blacklight 7.")
79
- search_state_class.new(params, blacklight_config)
80
- end
81
- end
82
- end
71
+ # Default route to the search action (used e.g. in global partials). Override this method
72
+ # in a controller or in your ApplicationController to introduce custom logic for choosing
73
+ # which action the search form should use
74
+ def search_action_url options = {}
75
+ # Rails 4.2 deprecated url helpers accepting string keys for 'controller' or 'action'
76
+ search_catalog_url(options.except(:controller, :action))
77
+ end
83
78
 
84
- # Default route to the search action (used e.g. in global partials). Override this method
85
- # in a controller or in your ApplicationController to introduce custom logic for choosing
86
- # which action the search form should use
87
- def search_action_url options = {}
88
- # Rails 4.2 deprecated url helpers accepting string keys for 'controller' or 'action'
89
- search_catalog_url(options.except(:controller, :action))
79
+ def search_action_path *args
80
+ if args.first.is_a? Hash
81
+ args.first[:only_path] = true if args.first[:only_path].nil?
90
82
  end
91
83
 
92
- def search_action_path *args
93
- if args.first.is_a? Hash
94
- args.first[:only_path] = true
95
- end
84
+ search_action_url(*args)
85
+ end
96
86
 
97
- search_action_url(*args)
98
- end
87
+ def search_facet_path(options = {})
88
+ opts = search_state
89
+ .to_h
90
+ .merge(action: "facet", only_path: true)
91
+ .merge(options)
92
+ .except(:page)
93
+ url_for opts
94
+ end
99
95
 
100
- def search_facet_url options = {}
101
- opts = search_state.to_h.merge(action: "facet").merge(options).except(:page)
102
- url_for opts
103
- end
104
- deprecation_deprecate search_facet_url: 'Use search_facet_path instead.'
96
+ # Returns a list of Searches from the ids in the user's history.
97
+ def searches_from_history
98
+ session[:history].blank? ? Search.none : Search.where(id: session[:history]).order("updated_at desc")
99
+ end
105
100
 
106
- def search_facet_path(options = {})
107
- Deprecation.silence(Blacklight::Controller) do
108
- search_facet_url(options.merge(only_path: true))
109
- end
110
- end
101
+ # Should be provided by authentication provider
102
+ # def current_user
103
+ # end
104
+ # def current_or_guest_user
105
+ # end
111
106
 
112
- # Returns a list of Searches from the ids in the user's history.
113
- def searches_from_history
114
- session[:history].blank? ? Search.none : Search.where(:id => session[:history]).order("updated_at desc")
107
+ # Here's a stub implementation we'll add if it isn't provided for us
108
+ def current_or_guest_user
109
+ if defined? super
110
+ super
111
+ elsif has_user_authentication_provider?
112
+ current_user
115
113
  end
114
+ end
115
+ alias blacklight_current_or_guest_user current_or_guest_user
116
116
 
117
- # Should be provided by authentication provider
118
- # def current_user
119
- # end
120
- # def current_or_guest_user
121
- # end
122
-
123
- # Here's a stub implementation we'll add if it isn't provided for us
124
- def current_or_guest_user
125
- if defined? super
126
- super
127
- elsif has_user_authentication_provider?
128
- current_user
129
- end
130
- end
131
- alias blacklight_current_or_guest_user current_or_guest_user
117
+ ##
118
+ # We discard flash messages generated by the xhr requests to avoid
119
+ # confusing UX.
120
+ def discard_flash_if_xhr
121
+ flash.discard if request.xhr?
122
+ end
132
123
 
133
- ##
134
- # We discard flash messages generated by the xhr requests to avoid
135
- # confusing UX.
136
- def discard_flash_if_xhr
137
- flash.discard if request.xhr?
138
- end
139
- deprecation_deprecate discard_flash_if_xhr: "Discarding flash messages on XHR requests is deprecated.
140
- If you wish to continue this behavior, add this method to your ApplicationController with an
141
- after_action :discard_flash_if_xhr filter. To disable this behavior now and remove this warning, add
142
- a skip_after_action :discard_flash_if_xhr to your ApplicationController."
143
-
144
- ##
145
- #
146
- #
147
- def has_user_authentication_provider?
148
- respond_to? :current_user
149
- end
124
+ ##
125
+ #
126
+ #
127
+ def has_user_authentication_provider?
128
+ respond_to? :current_user
129
+ end
130
+
131
+ def require_user_authentication_provider
132
+ raise ActionController::RoutingError, 'Not Found' unless has_user_authentication_provider?
133
+ end
134
+
135
+ ##
136
+ # When a user logs in, transfer any saved searches or bookmarks to the current_user
137
+ def transfer_guest_user_actions_to_current_user
138
+ return unless respond_to?(:current_user) && respond_to?(:guest_user) && current_user && guest_user
139
+ current_user_searches = current_user.searches.pluck(:query_params)
140
+ current_user_bookmarks = current_user.bookmarks.pluck(:document_id)
150
141
 
151
- def require_user_authentication_provider
152
- raise ActionController::RoutingError, 'Not Found' unless has_user_authentication_provider?
142
+ guest_user.searches.reject { |s| current_user_searches.include?(s.query_params) }.each do |s|
143
+ current_user.searches << s
144
+ s.save!
153
145
  end
154
146
 
155
- ##
156
- # When a user logs in, transfer any saved searches or bookmarks to the current_user
157
- def transfer_guest_user_actions_to_current_user
158
- return unless respond_to? :current_user and respond_to? :guest_user and current_user and guest_user
159
- current_user_searches = current_user.searches.pluck(:query_params)
160
- current_user_bookmarks = current_user.bookmarks.pluck(:document_id)
161
-
162
- guest_user.searches.reject { |s| current_user_searches.include?(s.query_params)}.each do |s|
163
- current_user.searches << s
164
- s.save!
165
- end
166
-
167
- guest_user.bookmarks.reject { |b| current_user_bookmarks.include?(b.document_id)}.each do |b|
168
- current_user.bookmarks << b
169
- b.save!
170
- end
171
-
172
- # let guest_user know we've moved some bookmarks from under it
173
- guest_user.reload if guest_user.persisted?
147
+ guest_user.bookmarks.reject { |b| current_user_bookmarks.include?(b.document_id) }.each do |b|
148
+ current_user.bookmarks << b
149
+ b.save!
174
150
  end
175
151
 
176
- ##
177
- # To handle failed authorization attempts, redirect the user to the
178
- # login form and persist the current request uri as a parameter
179
- def access_denied
180
- # send the user home if the access was previously denied by the same
181
- # request to avoid sending the user back to the login page
182
- # (e.g. protected page -> logout -> returned to protected page -> home)
183
- redirect_to root_url and flash.discard and return if request.referer and request.referer.ends_with? request.fullpath
152
+ # let guest_user know we've moved some bookmarks from under it
153
+ guest_user.reload if guest_user.persisted?
154
+ end
184
155
 
185
- redirect_to root_url and return unless has_user_authentication_provider?
156
+ ##
157
+ # To handle failed authorization attempts, redirect the user to the
158
+ # login form and persist the current request uri as a parameter
159
+ def access_denied
160
+ # send the user home if the access was previously denied by the same
161
+ # request to avoid sending the user back to the login page
162
+ # (e.g. protected page -> logout -> returned to protected page -> home)
163
+ redirect_to(root_url) && flash.discard && return if request.referer && request.referer.ends_with?(request.fullpath)
186
164
 
187
- redirect_to new_user_session_url(:referer => request.fullpath)
188
- end
165
+ redirect_to(root_url) && return unless has_user_authentication_provider?
166
+
167
+ redirect_to new_user_session_url(referer: request.fullpath)
168
+ end
169
+
170
+ def determine_layout
171
+ 'blacklight'
172
+ end
189
173
  end
@@ -4,6 +4,9 @@ module Blacklight
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
+ Deprecation.warn(self, "Blacklight::DefaultComponentConfiguration is deprecated and will be removed in the next release." \
8
+ "this means you must call add_results_document_tool, add_results_collection_tool, " \
9
+ "add_show_tools_partial and add_nav_action manually in your config")
7
10
  add_results_document_tool(:bookmark, partial: 'bookmark_control', if: :render_bookmarks_control?)
8
11
 
9
12
  add_results_collection_tool(:sort_widget)
@@ -16,14 +19,9 @@ module Blacklight
16
19
  add_show_tools_partial(:citation)
17
20
 
18
21
  add_nav_action(:bookmark, partial: 'blacklight/nav/bookmark', if: :render_bookmarks_control?)
19
- add_nav_action(:saved_searches, partial: 'blacklight/nav/saved_searches', if: :render_saved_searches?)
20
22
  add_nav_action(:search_history, partial: 'blacklight/nav/search_history')
21
23
  end
22
24
 
23
- def render_sms_action?(_config, _options)
24
- sms_mappings.present?
25
- end
26
-
27
25
  module ClassMethods
28
26
  # YARD will include inline disabling as docs, cannot do multiline inside @!macro. AND this must be separate from doc block.
29
27
  # rubocop:disable Metrics/LineLength
@@ -41,55 +39,26 @@ module Blacklight
41
39
  # @option opts [Symbol] :callback method for further processing of documents, receives Array of documents
42
40
  def add_show_tools_partial(name, opts = {})
43
41
  blacklight_config.add_show_tools_partial(name, opts)
44
-
45
- return if method_defined?(name) || opts[:define_method] == false
46
-
47
- # Define a simple action handler for the tool
48
- define_method name do
49
- @response, @documents = action_documents
50
-
51
- if request.post? && opts[:callback] &&
52
- (opts[:validator].blank? || self.send(opts[:validator]))
53
-
54
- self.send(opts[:callback], @documents)
55
-
56
- flash[:success] ||= I18n.t("blacklight.#{name}.success", default: nil)
57
-
58
- respond_to do |format|
59
- format.html do
60
- return render "#{name}_success", layout: false if request.xhr?
61
- redirect_to action_success_redirect_path
62
- end
63
- end
64
- else
65
- respond_to do |format|
66
- format.html do
67
- return render layout: false if request.xhr?
68
- # Otherwise draw the full page
69
- end
70
- end
71
- end
72
- end
42
+ ActionBuilder.new(self, name, opts).build
73
43
  end
74
44
  # rubocop:enable Metrics/LineLength
75
45
 
46
+ deprecation_deprecate add_show_tools_partial: 'use blacklight_config.add_show_tools_partial instead'
47
+
76
48
  # Add a tool to be displayed for each document in the search results.
77
49
  # @!macro partial_if_unless
78
- def add_results_document_tool(name, opts = {})
79
- blacklight_config.add_results_document_tool(name, opts)
80
- end
50
+ delegate :add_results_document_tool, to: :blacklight_config
51
+ deprecation_deprecate add_results_document_tool: 'use blacklight_config.add_results_document_tool instead'
81
52
 
82
53
  # Add a tool to be displayed for the list of search results themselves.
83
54
  # @!macro partial_if_unless
84
- def add_results_collection_tool(name, opts = {})
85
- blacklight_config.add_results_collection_tool(name, opts)
86
- end
55
+ delegate :add_results_collection_tool, to: :blacklight_config
56
+ deprecation_deprecate add_results_collection_tool: 'use blacklight_config.add_results_collection_tool instead'
87
57
 
88
58
  # Add a partial to the header navbar.
89
59
  # @!macro partial_if_unless
90
- def add_nav_action(name, opts = {})
91
- blacklight_config.add_nav_action(name, opts)
92
- end
60
+ delegate :add_nav_action, to: :blacklight_config
61
+ deprecation_deprecate add_nav_action: 'use blacklight_config.add_nav_action instead'
93
62
  end
94
63
  end
95
64
  end
@@ -2,22 +2,20 @@
2
2
  module Blacklight::SearchContext
3
3
  extend ActiveSupport::Concern
4
4
 
5
- # The following code is executed when someone includes Blacklight::Catalog::SearchSession in their
5
+ # The following code is executed when someone includes blacklight::catalog::search_session in their
6
6
  # own controller.
7
7
  included do
8
- if respond_to? :helper_method
9
- helper_method :current_search_session, :search_session
10
- end
8
+ helper_method :current_search_session, :search_session
11
9
  end
12
10
 
13
11
  module ClassMethods
14
12
  # Save the submitted search parameters in the search session
15
- def record_search_parameters opts = { only: :index}
13
+ def record_search_parameters opts = { only: :index }
16
14
  before_action :set_current_search_session, opts
17
15
  end
18
16
  end
19
17
 
20
- protected
18
+ private
21
19
 
22
20
  # sets up the session[:search] hash if it doesn't already exist
23
21
  def search_session
@@ -78,9 +76,9 @@ module Blacklight::SearchContext
78
76
  end
79
77
 
80
78
  def find_or_initialize_search_session_from_params params
81
- params_copy = params.reject { |k,v| blacklisted_search_session_params.include?(k.to_sym) or v.blank? }
79
+ params_copy = params.reject { |k, v| blacklisted_search_session_params.include?(k.to_sym) || v.blank? }
82
80
 
83
- return if params_copy.reject { |k,v| [:action, :controller].include? k.to_sym }.blank?
81
+ return if params_copy.reject { |k, _v| [:action, :controller].include? k.to_sym }.blank?
84
82
 
85
83
  saved_search = searches_from_history.find { |x| x.query_params == params_copy }
86
84
 
@@ -96,7 +94,7 @@ module Blacklight::SearchContext
96
94
  session[:history].unshift(search.id)
97
95
 
98
96
  if session[:history].length > blacklight_config.search_history_window
99
- session[:history] = session[:history].slice(0, blacklight_config.search_history_window )
97
+ session[:history] = session[:history].slice(0, blacklight_config.search_history_window)
100
98
  end
101
99
  end
102
100
 
@@ -108,14 +106,12 @@ module Blacklight::SearchContext
108
106
  # calls setup_previous_document then setup_next_document.
109
107
  # used in the show action for single view pagination.
110
108
  def setup_next_and_previous_documents
111
- if search_session['counter'] and current_search_session
109
+ if search_session['counter'] && current_search_session
112
110
  index = search_session['counter'].to_i - 1
113
- response, documents = get_previous_and_next_documents_for_search index, search_state.reset(current_search_session.query_params).to_hash
111
+ response, documents = search_service.previous_and_next_documents_for_search index, search_state.reset(current_search_session.query_params).to_hash
114
112
 
115
113
  search_session['total'] = response.total
116
- @search_context_response = response
117
- @previous_document = documents.first
118
- @next_document = documents.last
114
+ { prev: documents.first, next: documents.last }
119
115
  end
120
116
  rescue Blacklight::Exceptions::InvalidRequest => e
121
117
  logger.warn "Unable to setup next and previous documents: #{e}"