blacklight 6.25.0 → 7.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (400) 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 +40 -0
  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/active_model_shim.rb +8 -11
  71. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  72. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  73. data/app/models/concerns/blacklight/document/email.rb +1 -1
  74. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  75. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  76. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  77. data/app/models/concerns/blacklight/document.rb +8 -42
  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 +5 -9
  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/base.html.erb +43 -0
  158. data/app/views/layouts/blacklight.html.erb +14 -41
  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 +56 -86
  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/abstract_repository.rb +9 -21
  180. data/lib/blacklight/configuration/context.rb +1 -1
  181. data/lib/blacklight/configuration/facet_field.rb +16 -9
  182. data/lib/blacklight/configuration/field.rb +32 -3
  183. data/lib/blacklight/configuration/fields.rb +41 -48
  184. data/lib/blacklight/configuration/search_field.rb +2 -2
  185. data/lib/blacklight/configuration/sort_field.rb +2 -2
  186. data/lib/blacklight/configuration/view_config.rb +4 -0
  187. data/lib/blacklight/configuration.rb +82 -89
  188. data/lib/blacklight/engine.rb +5 -11
  189. data/lib/blacklight/exceptions.rb +4 -7
  190. data/lib/blacklight/nested_open_struct_with_hash_access.rb +107 -0
  191. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  192. data/lib/blacklight/parameters.rb +1 -1
  193. data/lib/blacklight/routes/searchable.rb +1 -0
  194. data/lib/blacklight/search_builder.rb +26 -35
  195. data/lib/blacklight/search_state.rb +8 -8
  196. data/lib/blacklight/solr/repository.rb +3 -36
  197. data/lib/blacklight/solr/request.rb +1 -1
  198. data/lib/blacklight/solr/response/facets.rb +29 -31
  199. data/lib/blacklight/solr/response/group.rb +3 -3
  200. data/lib/blacklight/solr/response/group_response.rb +1 -1
  201. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  202. data/lib/blacklight/solr/response/response.rb +2 -2
  203. data/lib/blacklight/solr/response/spelling.rb +3 -3
  204. data/lib/blacklight/solr/response.rb +29 -30
  205. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  206. data/lib/blacklight/version.rb +1 -1
  207. data/lib/blacklight.rb +4 -5
  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 +15 -36
  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 -32
  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 +28 -47
  349. data/template.demo.rb +1 -11
  350. metadata +172 -196
  351. data/.docker/app/Dockerfile +0 -28
  352. data/.docker/app/entrypoint.sh +0 -6
  353. data/.dockerignore +0 -3
  354. data/.env +0 -5
  355. data/.github/workflows/ruby.yml +0 -61
  356. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  357. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  358. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -139
  359. data/app/assets/javascripts/blacklight/core.js +0 -30
  360. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  361. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  362. data/app/controllers/concerns/blacklight/search_helper.rb +0 -161
  363. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  364. data/app/controllers/saved_searches_controller.rb +0 -4
  365. data/app/controllers/suggest_controller.rb +0 -4
  366. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  367. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  368. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  369. data/app/helpers/blacklight_url_helper.rb +0 -4
  370. data/app/helpers/component_helper.rb +0 -4
  371. data/app/helpers/facets_helper.rb +0 -4
  372. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  373. data/app/helpers/layout_helper.rb +0 -4
  374. data/app/helpers/render_constraints_helper.rb +0 -4
  375. data/app/helpers/search_history_constraints_helper.rb +0 -4
  376. data/app/helpers/suggest_helper.rb +0 -4
  377. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  378. data/app/presenters/blacklight/document_presenter.rb +0 -153
  379. data/app/services/blacklight/search_params_yaml_coder.rb +0 -48
  380. data/app/views/_user_util_links.html.erb +0 -26
  381. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  382. data/app/views/catalog/_index_default.html.erb +0 -12
  383. data/app/views/catalog/_show_default.html.erb +0 -10
  384. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  385. data/app/views/saved_searches/index.html.erb +0 -32
  386. data/app/views/shared/_ajax_modal.html.erb +0 -6
  387. data/docker-compose.yml +0 -38
  388. data/lib/blacklight/utils.rb +0 -183
  389. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  390. data/solr/conf/schema.xml +0 -627
  391. data/solr/conf/solrconfig.xml +0 -411
  392. data/spec/controllers/blacklight/search_helper_spec.rb +0 -489
  393. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  394. data/spec/controllers/suggest_controller_spec.rb +0 -17
  395. data/spec/features/saved_searches_spec.rb +0 -47
  396. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  397. data/spec/lib/blacklight/utils_spec.rb +0 -167
  398. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  399. data/spec/presenters/document_presenter_spec.rb +0 -438
  400. data/spec/support/backport_test.rb +0 -14
@@ -1,27 +1,27 @@
1
1
  //= require blacklight/core
2
2
 
3
3
  /*
4
- The ajax_modal plugin can display some interactions inside a Bootstrap
4
+ The blacklight modal plugin can display some interactions inside a Bootstrap
5
5
  modal window, including some multi-page interactions.
6
6
 
7
7
  It supports unobtrusive Javascript, where a link or form that would have caused
8
8
  a new page load is changed to display it's results inside a modal dialog,
9
9
  by this plugin. The plugin assumes there is a Bootstrap modal div
10
- on the page with id #ajax-modal to use as the modal -- the standard Blacklight
10
+ on the page with id #blacklight-modal to use as the modal -- the standard Blacklight
11
11
  layout provides this.
12
12
 
13
13
  To make a link or form have their results display inside a modal, add
14
- `data-ajax-modal="trigger"` to the link or form. (Note, form itself not submit input)
14
+ `data-blacklight-modal="trigger"` to the link or form. (Note, form itself not submit input)
15
15
  With Rails link_to helper, you'd do that like:
16
16
 
17
- link_to something, link, :data => {:ajax_modal => "trigger"}
17
+ link_to something, link, data: { blacklight_modal: "trigger" }
18
18
 
19
19
  The results of the link href or form submit will be displayed inside
20
20
  a modal -- they should include the proper HTML markup for a bootstrap modal's
21
21
  contents. Also, you ordinarily won't want the Rails template with wrapping
22
22
  navigational elements to be used. The Rails controller could suppress
23
23
  the layout when a JS AJAX request is detected, OR the response
24
- can include a `<div data-ajax-modal="container">` -- only the contents
24
+ can include a `<div data-blacklight-modal="container">` -- only the contents
25
25
  of the container will be placed inside the modal, the rest of the
26
26
  page will be ignored.
27
27
 
@@ -33,12 +33,12 @@
33
33
 
34
34
  Link or forms inside the modal will ordinarily cause page loads
35
35
  when they are triggered. However, if you'd like their results
36
- to stay within the modal, just add `data-ajax-modal="preserve"`
36
+ to stay within the modal, just add `data-blacklight-modal="preserve"`
37
37
  to the link or form.
38
38
 
39
39
  Here's an example of what might be returned, demonstrating most of the devices available:
40
40
 
41
- <div data-ajax-modal="container">
41
+ <div data-blacklight-modal="container">
42
42
  <div class="modal-header">
43
43
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
44
44
  <h3 class="modal-title">Request Placed</h3>
@@ -46,47 +46,46 @@
46
46
 
47
47
  <div class="modal-body">
48
48
  <p>Some message</p>
49
- <%= link_to "This result will still be within modal", some_link, :data => {:ajax_modal => "preserve"} %>
49
+ <%= link_to "This result will still be within modal", some_link, data: { blacklight: "preserve" } %>
50
50
  </div>
51
51
 
52
52
 
53
53
  <div class="modal-footer">
54
- <%= link_to "Close the modal", request_done_path, :class => "submit button dialog-close", :data => {:dismiss => "modal"} %>
54
+ <%= link_to "Close the modal", request_done_path, class: "submit button dialog-close", data: { dismiss: "modal" } %>
55
55
  </div>
56
56
  </div>
57
57
 
58
58
 
59
59
  One additional feature. If the content returned from the AJAX modal load
60
- has an element with `data-ajax-modal=close`, that will trigger the modal
60
+ has an element with `data-blacklight-modal=close`, that will trigger the modal
61
61
  to be closed. And if this element includes a node with class "flash_messages",
62
62
  the flash-messages node will be added to the main page inside #main-flahses.
63
63
 
64
64
  == Events
65
65
 
66
- We'll send out an event 'loaded.blacklight.ajax-modal' with the #ajax-modal
66
+ We'll send out an event 'loaded.blacklight.blacklight-modal' with the #blacklight-modal
67
67
  dialog as the target, right after content is loaded into the modal but before
68
68
  it is shown (if not already a shown modal). In an event handler, you can
69
69
  inspect loaded content by looking inside $(this). If you call event.preventDefault(),
70
70
  we won't 'show' the dialog (although it may already have been shown, you may want to
71
71
  $(this).modal("hide") if you want to ensure hidden/closed.
72
72
 
73
- The data-ajax-modal=close behavior is implemented with this event, see for example.
73
+ The data-blacklight-modal=close behavior is implemented with this event, see for example.
74
74
  */
75
75
 
76
- // We keep all our data in Blacklight.ajaxModal object.
76
+ // We keep all our data in Blacklight.modal object.
77
77
  // Create lazily if someone else created first.
78
- if (Blacklight.ajaxModal === undefined) {
79
- Blacklight.ajaxModal = {};
78
+ if (Blacklight.modal === undefined) {
79
+ Blacklight.modal = {};
80
80
  }
81
81
 
82
-
83
82
  // a Bootstrap modal div that should be already on the page hidden
84
- Blacklight.ajaxModal.modalSelector = "#ajax-modal";
83
+ Blacklight.modal.modalSelector = '#blacklight-modal';
85
84
 
86
85
  // Trigger selectors identify forms or hyperlinks that should open
87
86
  // inside a modal dialog.
88
- Blacklight.ajaxModal.triggerLinkSelector = "a[data-ajax-modal~=trigger], a.lightboxLink,a.more_facets_link,.ajax_modal_launch";
89
- Blacklight.ajaxModal.triggerFormSelector = "form[data-ajax-modal~=trigger], form.ajax_form";
87
+ Blacklight.modal.triggerLinkSelector = 'a[data-blacklight-modal~=trigger]';
88
+ Blacklight.modal.triggerFormSelector = 'form[data-blacklight-modal~=trigger]';
90
89
 
91
90
  // preserve selectors identify forms or hyperlinks that, if activated already
92
91
  // inside a modal dialog, should have destinations remain inside the modal -- but
@@ -95,57 +94,58 @@ Blacklight.ajaxModal.triggerFormSelector = "form[data-ajax-modal~=trigger], for
95
94
  // No need to repeat selectors from trigger selectors, those will already
96
95
  // be preserved. MUST be manually prefixed with the modal selector,
97
96
  // so they only apply to things inside a modal.
98
- Blacklight.ajaxModal.preserveLinkSelector = Blacklight.ajaxModal.modalSelector + ' a[data-ajax-modal~=preserve]';
99
- Blacklight.ajaxModal.preserveFormSelector = Blacklight.ajaxModal.modalSelector + ' form[data-ajax-modal~=preserve]'
97
+ Blacklight.modal.preserveLinkSelector = Blacklight.modal.modalSelector + ' a[data-blacklight-modal~=preserve]';
100
98
 
101
- Blacklight.ajaxModal.containerSelector = "[data-ajax-modal~=container]";
99
+ Blacklight.modal.containerSelector = '[data-blacklight-modal~=container]';
102
100
 
103
- Blacklight.ajaxModal.modalCloseSelector = "[data-ajax-modal~=close], span.ajax-close-modal";
101
+ Blacklight.modal.modalCloseSelector = '[data-blacklight-modal~=close]';
104
102
 
105
103
  // Called on fatal failure of ajax load, function returns content
106
104
  // to show to user in modal. Right now called only for extreme
107
105
  // network errors.
108
- Blacklight.ajaxModal.onFailure = function(data) {
109
- var contents = "<div class='modal-header'>" +
110
- "<button type='button' class='close' data-dismiss='modal' aria-hidden='true'>×</button>" +
111
- "Network Error</div>";
112
- $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
113
- $(Blacklight.ajaxModal.modalSelector).modal('show');
106
+ Blacklight.modal.onFailure = function(data) {
107
+ var contents = '<div class="modal-header">' +
108
+ '<div class="modal-title">Network Error</div>' +
109
+ '<button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="Close">' +
110
+ ' <span aria-hidden="true">&times;</span>' +
111
+ '</button>';
112
+ $(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
113
+ $(Blacklight.modal.modalSelector).modal('show');
114
114
  }
115
115
 
116
- Blacklight.ajaxModal.receiveAjax = function (contents) {
116
+ Blacklight.modal.receiveAjax = function (contents) {
117
117
  // does it have a data- selector for container?
118
118
  // important we don't execute script tags, we shouldn't.
119
119
  // code modelled off of JQuery ajax.load. https://github.com/jquery/jquery/blob/master/src/ajax/load.js?source=c#L62
120
- var container = $("<div>").
121
- append( jQuery.parseHTML(contents) ).find( Blacklight.ajaxModal.containerSelector ).first();
122
- if (container.length !== 0) {
120
+ var container = $('<div>').
121
+ append( jQuery.parseHTML(contents) ).find( Blacklight.modal.containerSelector ).first();
122
+ if (container.size() !== 0) {
123
123
  contents = container.html();
124
124
  }
125
125
 
126
- $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
126
+ $(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
127
127
 
128
128
  // send custom event with the modal dialog div as the target
129
- var e = $.Event('loaded.blacklight.ajax-modal');
130
- $(Blacklight.ajaxModal.modalSelector).trigger(e);
129
+ var e = $.Event('loaded.blacklight.blacklight-modal')
130
+ $(Blacklight.modal.modalSelector).trigger(e);
131
131
  // if they did preventDefault, don't show the dialog
132
132
  if (e.isDefaultPrevented()) return;
133
133
 
134
- $(Blacklight.ajaxModal.modalSelector).modal('show');
134
+ $(Blacklight.modal.modalSelector).modal('show');
135
135
  };
136
136
 
137
137
 
138
- Blacklight.ajaxModal.modalAjaxLinkClick = function(e) {
138
+ Blacklight.modal.modalAjaxLinkClick = function(e) {
139
139
  e.preventDefault();
140
140
 
141
141
  $.ajax({
142
142
  url: $(this).attr('href')
143
143
  })
144
- .fail(Blacklight.ajaxModal.onFailure)
145
- .done(Blacklight.ajaxModal.receiveAjax)
144
+ .fail(Blacklight.modal.onFailure)
145
+ .done(Blacklight.modal.receiveAjax)
146
146
  };
147
147
 
148
- Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
148
+ Blacklight.modal.modalAjaxFormSubmit = function(e) {
149
149
  e.preventDefault();
150
150
 
151
151
  $.ajax({
@@ -153,54 +153,54 @@ Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
153
153
  data: $(this).serialize(),
154
154
  type: $(this).attr('method') // POST
155
155
  })
156
- .fail(Blacklight.ajaxModal.onFailure)
157
- .done(Blacklight.ajaxModal.receiveAjax)
156
+ .fail(Blacklight.modal.onFailure)
157
+ .done(Blacklight.modal.receiveAjax)
158
158
  }
159
159
 
160
160
 
161
161
 
162
- Blacklight.ajaxModal.setup_modal = function() {
162
+ Blacklight.modal.setupModal = function() {
163
163
  // Event indicating blacklight is setting up a modal link,
164
164
  // you can catch it and call e.preventDefault() to abort
165
165
  // setup.
166
- var e = $.Event('setup.blacklight.ajax-modal');
167
- $("body").trigger(e);
166
+ var e = $.Event('setup.blacklight.blacklight-modal');
167
+ $('body').trigger(e);
168
168
  if (e.isDefaultPrevented()) return;
169
169
 
170
170
  // Register both trigger and preserve selectors in ONE event handler, combining
171
171
  // into one selector with a comma, so if something matches BOTH selectors, it
172
172
  // still only gets the event handler called once.
173
- $("body").on("click", Blacklight.ajaxModal.triggerLinkSelector + ", " + Blacklight.ajaxModal.preserveLinkSelector,
174
- Blacklight.ajaxModal.modalAjaxLinkClick);
175
- $("body").on("submit", Blacklight.ajaxModal.triggerFormSelector + ", " + Blacklight.ajaxModal.preserveFormSelector,
176
- Blacklight.ajaxModal.modalAjaxFormSubmit);
173
+ $('body').on('click', Blacklight.modal.triggerLinkSelector + ', ' + Blacklight.modal.preserveLinkSelector,
174
+ Blacklight.modal.modalAjaxLinkClick);
175
+ $('body').on('submit', Blacklight.modal.triggerFormSelector + ', ' + Blacklight.modal.preserveFormSelector,
176
+ Blacklight.modal.modalAjaxFormSubmit);
177
177
 
178
- // Catch our own custom loaded event to implement data-ajax-modal=closed
179
- $("body").on("loaded.blacklight.ajax-modal", Blacklight.ajaxModal.check_close_ajax_modal);
178
+ // Catch our own custom loaded event to implement data-blacklight-modal=closed
179
+ $('body').on('loaded.blacklight.blacklight-modal', Blacklight.modal.checkCloseModal);
180
180
 
181
181
  // we support doing data-dismiss=modal on a <a> with a href for non-ajax
182
182
  // use, we need to suppress following the a's href that's there for
183
183
  // non-JS contexts.
184
- $("body ").on("click", Blacklight.ajaxModal.modalSelector + " a[data-dismiss~=modal]", function (e) {
184
+ $('body').on('click', Blacklight.modal.modalSelector + ' a[data-dismiss~=modal]', function (e) {
185
185
  e.preventDefault();
186
186
  });
187
187
  };
188
188
 
189
- // A function used as an event handler on loaded.blacklight.ajax-modal
190
- // to catch contained data-ajax-modal=closed directions
191
- Blacklight.ajaxModal.check_close_ajax_modal = function(event) {
192
- if ($(event.target).find(Blacklight.ajaxModal.modalCloseSelector).length) {
193
- modal_flashes = $(this).find('.flash_messages');
189
+ // A function used as an event handler on loaded.blacklight.blacklight-modal
190
+ // to catch contained data-blacklight-modal=closed directions
191
+ Blacklight.modal.checkCloseModal = function(event) {
192
+ if ($(event.target).find(Blacklight.modal.modalCloseSelector).length) {
193
+ var modalFlashes = $(this).find('.flash_messages');
194
194
 
195
- $(event.target).modal("hide");
195
+ $(event.target).modal('hide');
196
196
  event.preventDefault();
197
197
 
198
- main_flashes = $('#main-flashes');
199
- main_flashes.append(modal_flashes);
200
- modal_flashes.fadeIn(500);
198
+ var mainFlashes = $('#main-flashes');
199
+ mainFlashes.append(modalFlashes);
200
+ modalFlashes.fadeIn(500);
201
201
  }
202
202
  }
203
203
 
204
204
  Blacklight.onLoad(function() {
205
- Blacklight.ajaxModal.setup_modal();
205
+ Blacklight.modal.setupModal();
206
206
  });
@@ -1,12 +1,20 @@
1
1
  //= require blacklight/core
2
2
  (function($) {
3
- Blacklight.do_search_context_behavior = function() {
3
+ Blacklight.doSearchContextBehavior = function() {
4
+ if (typeof Blacklight.do_search_context_behavior == 'function') {
5
+ console.warn("do_search_context_behavior is deprecated. Use doSearchContextBehavior instead.");
6
+ return Blacklight.do_search_context_behavior();
7
+ }
4
8
  $('a[data-context-href]').on('click.search-context', Blacklight.handleSearchContextMethod);
5
9
  };
6
10
 
7
11
  // this is the $.rails.handleMethod with a couple adjustments, described inline:
8
12
  // first, we're attaching this directly to the event handler, so we can check for meta-keys
9
13
  Blacklight.handleSearchContextMethod = function(event) {
14
+ if (typeof Blacklight.handle_search_context_method == 'function') {
15
+ console.warn("handle_search_context_method is deprecated. Use handleSearchContextMethod instead.");
16
+ return Blacklight.handle_search_context_method(event);
17
+ }
10
18
  var link = $(this);
11
19
 
12
20
  // instead of using the normal href, we need to use the context href instead
@@ -37,6 +45,6 @@
37
45
  };
38
46
 
39
47
  Blacklight.onLoad(function() {
40
- Blacklight.do_search_context_behavior();
48
+ Blacklight.doSearchContextBehavior();
41
49
  });
42
50
  })(jQuery);
@@ -4,7 +4,7 @@ module Blacklight
4
4
  # displayable. You have to ask Solr for limit+1, to get enough
5
5
  # results to see if 'more' are available'. That is, the all_facet_values
6
6
  # arg in constructor should be the result of asking solr for limit+1
7
- # values.
7
+ # values.
8
8
  # This is a workaround for the fact that Solr itself can't compute
9
9
  # the total values for a given facet field,
10
10
  # so we cannot know how many "pages" there are.
@@ -24,9 +24,9 @@ module Blacklight
24
24
  # asking solr for n+1 facet values.
25
25
  # options:
26
26
  # :limit => number to display per page, or (default) ?. Nil means
27
- # display all with no previous or next.
27
+ # display all with no previous or next.
28
28
  # :offset => current item offset, default 0
29
- # :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
29
+ # :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
30
30
  def initialize(all_facet_values, arguments = {})
31
31
  # to_s.to_i will conveniently default to 0 if nil
32
32
  @offset = arguments[:offset].to_s.to_i
@@ -0,0 +1,53 @@
1
+ module Blacklight
2
+ class Icon
3
+ attr_reader :icon_name
4
+ ##
5
+ # @param [String, Symbol] icon_name
6
+ # @param [Hash] options
7
+ # @param [String] classes additional classes separated by a string
8
+ def initialize(icon_name, classes: '')
9
+ @icon_name = icon_name
10
+ @classes = classes
11
+ end
12
+
13
+ ##
14
+ # Returns the raw source, but you could extend this to add additional attributes
15
+ # @return [String]
16
+ def svg
17
+ file_source
18
+ end
19
+
20
+ ##
21
+ # @return [Hash]
22
+ def options
23
+ {
24
+ class: classes
25
+ }
26
+ end
27
+
28
+ ##
29
+ # @return [String]
30
+ def path
31
+ "blacklight/#{icon_name}.svg"
32
+ end
33
+
34
+ ##
35
+ # @return [String]
36
+ def file_source
37
+ raise Blacklight::Exceptions::IconNotFound, "Could not find #{path}" if file.blank?
38
+ file.source.force_encoding('UTF-8')
39
+ end
40
+
41
+ private
42
+
43
+ def file
44
+ # Rails.application.assets is `nil` in production mode (where compile assets is enabled).
45
+ # This workaround is based off of this comment: https://github.com/fphilipe/premailer-rails/issues/145#issuecomment-225992564
46
+ (Rails.application.assets || ::Sprockets::Railtie.build_environment(Rails.application)).find_asset(path)
47
+ end
48
+
49
+ def classes
50
+ " blacklight-icons #{@classes} ".strip
51
+ end
52
+ end
53
+ end
@@ -4,7 +4,7 @@ module Blacklight::Solr
4
4
  # displayable. You have to ask Solr for limit+1, to get enough
5
5
  # results to see if 'more' are available'. That is, the all_facet_values
6
6
  # arg in constructor should be the result of asking solr for limit+1
7
- # values.
7
+ # values.
8
8
  # This is a workaround for the fact that Solr itself can't compute
9
9
  # the total values for a given facet field,
10
10
  # so we cannot know how many "pages" there are.
@@ -14,9 +14,9 @@ module Blacklight::Solr
14
14
  # asking solr for n+1 facet values.
15
15
  # options:
16
16
  # :limit => number to display per page, or (default) nil. Nil means
17
- # display all with no previous or next.
17
+ # display all with no previous or next.
18
18
  # :offset => current item offset, default 0
19
- # :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
19
+ # :sort => 'count' or 'index', solr tokens for facet value sorting, default 'count'.
20
20
  def initialize(all_facet_values, arguments = {})
21
21
  super
22
22
 
@@ -1,12 +1,10 @@
1
1
  # frozen_string_literal: true
2
-
3
2
  module Blacklight
4
3
  class SuggestSearch
5
4
  attr_reader :request_params, :repository
6
-
5
+
7
6
  ##
8
7
  # @param [Hash] params
9
- # @param [Blacklight::AbstractRepository] repository
10
8
  def initialize(params, repository)
11
9
  @request_params = { q: params[:q] }
12
10
  @repository = repository
@@ -17,7 +15,20 @@ module Blacklight
17
15
  # Blacklight::Suggest::Response
18
16
  # @return [Blacklight::Suggest::Response]
19
17
  def suggestions
20
- repository.suggestions(request_params)
18
+ Blacklight::Suggest::Response.new suggest_results, request_params, suggest_handler_path
19
+ end
20
+
21
+ ##
22
+ # Query the suggest handler using RSolr::Client::send_and_receive
23
+ # @return [RSolr::HashWithResponse]
24
+ def suggest_results
25
+ repository.connection.send_and_receive(suggest_handler_path, params: request_params)
26
+ end
27
+
28
+ ##
29
+ # @return [String]
30
+ def suggest_handler_path
31
+ repository.blacklight_config.autocomplete_path
21
32
  end
22
33
  end
23
34
  end
@@ -1,27 +1,22 @@
1
1
  # frozen_string_literal: true
2
- class Bookmark < ActiveRecord::Base
3
-
2
+
3
+ class Bookmark < ApplicationRecord
4
4
  belongs_to :user, polymorphic: true
5
5
  belongs_to :document, polymorphic: true
6
6
 
7
7
  validates :user_id, presence: true
8
8
 
9
- if Blacklight::Utils.needs_attr_accessible?
10
- attr_accessible :id, :document_id, :document_type, :title
11
- end
12
-
13
9
  def document
14
10
  document_type.new document_type.unique_key => document_id
15
11
  end
16
-
12
+
17
13
  def document_type
18
14
  value = super if defined?(super)
19
15
  value &&= value.constantize
20
16
  value ||= default_document_type
21
17
  end
22
-
18
+
23
19
  def default_document_type
24
20
  SolrDocument
25
21
  end
26
-
27
22
  end
@@ -5,32 +5,32 @@ module Blacklight::Configurable
5
5
  included do
6
6
  helper_method :blacklight_config if respond_to? :helper_method
7
7
  end
8
-
8
+
9
9
  #instance methods for blacklight_config, so get a deep copy of the class-level config
10
10
  def blacklight_config
11
11
  @blacklight_config ||= self.class.blacklight_config.deep_copy
12
12
  end
13
13
  attr_writer :blacklight_config
14
14
 
15
- module ClassMethods
15
+ module ClassMethods
16
16
  def copy_blacklight_config_from(other_class)
17
- self.blacklight_config = other_class.blacklight_config.inheritable_copy
17
+ self.blacklight_config = other_class.blacklight_config.inheritable_copy(self)
18
18
  end
19
-
19
+
20
20
  # lazy load a deep_copy of superclass if present, else
21
- # a default_configuration, which will be legacy load or new empty config.
21
+ # a default_configuration, which will be legacy load or new empty config.
22
22
  # note the @blacklight_config variable is a ruby 'instance method on class
23
23
  # object' that won't be automatically available to subclasses, that's why
24
- # we lazy load to 'inherit' how we want.
24
+ # we lazy load to 'inherit' how we want.
25
25
  def blacklight_config
26
26
  @blacklight_config ||= if superclass.respond_to?(:blacklight_config)
27
- superclass.blacklight_config.deep_copy
28
- else
29
- default_configuration
30
- end
27
+ superclass.blacklight_config.build(self)
28
+ else
29
+ default_configuration
30
+ end
31
31
  end
32
32
  attr_writer :blacklight_config
33
-
33
+
34
34
  #simply a convenience method for blacklight_config.configure
35
35
  def configure_blacklight(*args, &block)
36
36
  blacklight_config.configure(*args, &block)
@@ -39,12 +39,12 @@ module Blacklight::Configurable
39
39
  ##
40
40
  # The default configuration object
41
41
  def default_configuration
42
- Blacklight::Configurable.default_configuration.inheritable_copy
42
+ Blacklight::Configurable.default_configuration.inheritable_copy(self)
43
43
  end
44
44
  end
45
45
 
46
46
  def self.default_configuration
47
- @default_configuration ||= Blacklight::Configuration.new
47
+ @default_configuration ||= Blacklight::Configuration.new
48
48
  end
49
49
 
50
50
  def self.default_configuration= config
@@ -29,27 +29,24 @@ module Blacklight::Document
29
29
  repository.find(id).documents.first
30
30
  end
31
31
  end
32
-
32
+
33
33
  ##
34
34
  # Unique ID for the document
35
35
  def id
36
36
  self[self.class.unique_key]
37
37
  end
38
38
 
39
- ##
40
- # accessors for reading attribute
41
- def [] *args
42
- _source.send :[], *args
39
+ def ==(other)
40
+ super ||
41
+ (other.instance_of?(self.class) &&
42
+ id &&
43
+ other.id == id)
43
44
  end
44
-
45
+
45
46
  def _read_attribute(attr)
46
47
  self[attr]
47
48
  end
48
49
 
49
- def as_json(options = nil)
50
- _source.as_json(options)
51
- end
52
-
53
50
  ##
54
51
  # ActiveRecord::Persistence method stubs to get non-AR objects to
55
52
  # play nice with e.g. Blacklight's bookmarks
@@ -60,7 +57,7 @@ module Blacklight::Document
60
57
  def destroyed?
61
58
  false
62
59
  end
63
-
60
+
64
61
  def new_record?
65
62
  false
66
63
  end
@@ -9,7 +9,7 @@ module Blacklight::Document::CacheKey
9
9
  def cache_key
10
10
  if new_record?
11
11
  "#{self.class.model_name.cache_key}/new"
12
- elsif self.key? cache_version_key
12
+ elsif key? cache_version_key
13
13
  cache_version_value = self[cache_version_key]
14
14
  "#{self.class.model_name.cache_key}/#{id}-#{Array(cache_version_value).join}"
15
15
  else
@@ -5,7 +5,7 @@ require 'builder'
5
5
  module Blacklight::Document::DublinCore
6
6
  def self.extended(document)
7
7
  # Register our exportable formats
8
- Blacklight::Document::DublinCore.register_export_formats( document )
8
+ Blacklight::Document::DublinCore.register_export_formats(document)
9
9
  end
10
10
 
11
11
  def self.register_export_formats(document)
@@ -26,7 +26,7 @@ module Blacklight::Document::DublinCore
26
26
  'xmlns:dc' => "http://purl.org/dc/elements/1.1/",
27
27
  'xmlns:xsi' => "http://www.w3.org/2001/XMLSchema-instance",
28
28
  'xsi:schemaLocation' => %(http://www.openarchives.org/OAI/2.0/oai_dc/ http://www.openarchives.org/OAI/2.0/oai_dc.xsd)) do
29
- self.to_semantic_values.select { |field, values| dublin_core_field_name? field }.each do |field,values|
29
+ to_semantic_values.select { |field, _values| dublin_core_field_name? field }.each do |field, values|
30
30
  Array.wrap(values).each do |v|
31
31
  xml.tag! "dc:#{field}", v
32
32
  end
@@ -3,7 +3,7 @@
3
3
  module Blacklight::Document::Email
4
4
  # Return a text string that will be the body of the email
5
5
  def to_email_text
6
- semantics = self.to_semantic_values
6
+ semantics = to_semantic_values
7
7
  body = []
8
8
  body << I18n.t('blacklight.email.text.title', value: semantics[:title].join(" ")) unless semantics[:title].blank?
9
9
  body << I18n.t('blacklight.email.text.author', value: semantics[:author].join(" ")) unless semantics[:author].blank?
@@ -24,8 +24,8 @@ module Blacklight::Document::Extensions
24
24
  # Needs to be called in initializer of class including this module, to
25
25
  # apply all registered extensions on a per-document basis
26
26
  def apply_extensions
27
- self.class.registered_extensions.each do | registration|
28
- self.extend( registration[:module_obj] ) if registration[:condition_proc].nil? || registration[:condition_proc].call( self )
27
+ self.class.registered_extensions.each do |registration|
28
+ extend(registration[:module_obj]) if registration[:condition_proc].nil? || registration[:condition_proc].call(self)
29
29
  end
30
30
  end
31
31
 
@@ -43,15 +43,15 @@ module Blacklight::Document::Extensions
43
43
  end
44
44
 
45
45
  # Register an extension module with the class. A block taking one
46
- # parameter can be supplied; the block will be passed an instance of
46
+ # parameter can be supplied; the block will be passed an instance of
47
47
  # a Document, and the extension will be applied only if the block
48
48
  # evaluates as true. If no condition is given, the extension will
49
49
  # be applied to every instance of the class.
50
50
  #
51
51
  # SolrDocument.use_extension( SomeExtensionModule ) { | document | should_apply_some_extension?(document) }
52
52
  # SolrDocument.use_extension( SomeExtensionModule) # will be applied to all docs
53
- def use_extension( module_obj, &condition )
54
- registered_extensions << {module_obj: module_obj, condition_proc: condition}
53
+ def use_extension(module_obj, &condition)
54
+ registered_extensions << { module_obj: module_obj, condition_proc: condition }
55
55
  end
56
56
  end
57
57
  end