blacklight 6.14.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +40 -16
  5. data/.rubocop_todo.yml +479 -375
  6. data/.solr_wrapper.yml +9 -2
  7. data/.travis.yml +27 -20
  8. data/Gemfile +3 -1
  9. data/README.md +22 -5
  10. data/Rakefile +3 -2
  11. data/VERSION +1 -1
  12. data/Vagrantfile +2 -0
  13. data/app/assets/images/blacklight/list.svg +1 -0
  14. data/app/assets/images/blacklight/search.svg +1 -0
  15. data/app/assets/javascripts/blacklight/blacklight.js +497 -57
  16. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +18 -15
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  20. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  21. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  22. data/app/assets/stylesheets/blacklight/_facets.scss +64 -93
  23. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  24. data/app/assets/stylesheets/blacklight/_icons.scss +35 -0
  25. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  26. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  27. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  28. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  29. data/app/assets/stylesheets/blacklight/_search_form.scss +7 -0
  30. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  31. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  32. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  33. data/app/assets/stylesheets/blacklight/blacklight.scss +1 -1
  34. data/app/builders/blacklight/action_builder.rb +57 -0
  35. data/app/controllers/bookmarks_controller.rb +2 -2
  36. data/app/controllers/catalog_controller.rb +2 -2
  37. data/app/controllers/concerns/blacklight/base.rb +0 -33
  38. data/app/controllers/concerns/blacklight/bookmarks.rb +36 -33
  39. data/app/controllers/concerns/blacklight/catalog.rb +266 -210
  40. data/app/controllers/concerns/blacklight/controller.rb +111 -126
  41. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  42. data/app/controllers/concerns/blacklight/facet.rb +3 -0
  43. data/app/controllers/concerns/blacklight/search_context.rb +16 -14
  44. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  45. data/app/controllers/concerns/blacklight/search_history.rb +1 -6
  46. data/app/controllers/concerns/blacklight/token_based_user.rb +24 -9
  47. data/app/helpers/blacklight/blacklight_helper_behavior.rb +39 -119
  48. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  49. data/app/helpers/blacklight/component_helper_behavior.rb +21 -19
  50. data/app/helpers/blacklight/configuration_helper_behavior.rb +30 -57
  51. data/app/helpers/blacklight/facets_helper_behavior.rb +55 -51
  52. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  53. data/app/helpers/blacklight/icon_helper_behavior.rb +18 -0
  54. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -3
  55. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -6
  56. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  57. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +19 -11
  58. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  59. data/app/helpers/blacklight/url_helper_behavior.rb +50 -41
  60. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  61. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  62. data/app/javascript/blacklight/checkbox_submit.js +134 -0
  63. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  64. data/app/{assets/javascripts → javascript}/blacklight/core.js +10 -8
  65. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  66. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +62 -64
  67. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -3
  68. data/app/models/blacklight/facet_paginator.rb +3 -3
  69. data/app/models/blacklight/icon.rb +56 -0
  70. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  71. data/app/models/blacklight/suggest_search.rb +4 -15
  72. data/app/models/bookmark.rb +5 -10
  73. data/app/models/concerns/blacklight/configurable.rb +13 -13
  74. data/app/models/concerns/blacklight/document/active_model_shim.rb +13 -11
  75. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  76. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  77. data/app/models/concerns/blacklight/document/email.rb +1 -1
  78. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  79. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  80. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  81. data/app/models/concerns/blacklight/document.rb +26 -40
  82. data/app/models/concerns/blacklight/solr/document.rb +8 -8
  83. data/app/models/concerns/blacklight/suggest/response.rb +5 -3
  84. data/app/models/concerns/blacklight/user.rb +7 -6
  85. data/app/models/record_mailer.rb +5 -6
  86. data/app/models/search.rb +5 -7
  87. data/app/presenters/blacklight/document_presenter.rb +25 -140
  88. data/app/presenters/blacklight/field_presenter.rb +7 -5
  89. data/app/presenters/blacklight/index_presenter.rb +41 -58
  90. data/app/presenters/blacklight/json_presenter.rb +10 -14
  91. data/app/presenters/blacklight/link_alternate_presenter.rb +3 -1
  92. data/app/presenters/blacklight/rendering/abstract_step.rb +7 -5
  93. data/app/presenters/blacklight/rendering/helper_method.rb +10 -8
  94. data/app/presenters/blacklight/rendering/join.rb +5 -3
  95. data/app/presenters/blacklight/rendering/link_to_facet.rb +23 -19
  96. data/app/presenters/blacklight/rendering/microdata.rb +6 -3
  97. data/app/presenters/blacklight/rendering/pipeline.rb +7 -5
  98. data/app/presenters/blacklight/rendering/terminator.rb +2 -0
  99. data/app/presenters/blacklight/search_bar_presenter.rb +39 -0
  100. data/app/presenters/blacklight/show_presenter.rb +26 -63
  101. data/app/presenters/blacklight/thumbnail_presenter.rb +74 -0
  102. data/app/services/blacklight/document_factory.rb +13 -0
  103. data/app/services/blacklight/field_retriever.rb +26 -24
  104. data/app/services/blacklight/search_service.rb +152 -0
  105. data/app/values/blacklight/types.rb +31 -0
  106. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  107. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  108. data/app/views/bookmarks/_tools.html.erb +2 -2
  109. data/app/views/bookmarks/index.html.erb +12 -13
  110. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  111. data/app/views/catalog/_citation.html.erb +4 -4
  112. data/app/views/catalog/_constraints.html.erb +6 -7
  113. data/app/views/catalog/_constraints_element.html.erb +6 -6
  114. data/app/views/catalog/_did_you_mean.html.erb +1 -1
  115. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +19 -18
  116. data/app/views/catalog/_document.html.erb +5 -3
  117. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +2 -0
  118. data/app/views/catalog/_document_action.html.erb +2 -1
  119. data/app/views/catalog/_email_form.html.erb +8 -4
  120. data/app/views/catalog/_facet_index_navigation.html.erb +5 -4
  121. data/app/views/catalog/_facet_layout.html.erb +6 -10
  122. data/app/views/catalog/_facet_limit.html.erb +3 -2
  123. data/app/views/catalog/_facet_pagination.html.erb +8 -8
  124. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  125. data/app/views/catalog/_facets.html.erb +9 -12
  126. data/app/views/catalog/_field.json.jbuilder +10 -0
  127. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +1 -1
  128. data/app/views/catalog/_home_text.html.erb +32 -36
  129. data/app/views/catalog/_index.html.erb +10 -0
  130. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +3 -3
  131. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  132. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  133. data/app/views/catalog/_results_pagination.html.erb +2 -2
  134. data/app/views/catalog/_search_form.html.erb +12 -8
  135. data/app/views/catalog/_search_header.html.erb +0 -3
  136. data/app/views/catalog/_search_results.html.erb +6 -2
  137. data/app/views/catalog/_show.html.erb +8 -0
  138. data/app/views/catalog/_show_main_content.html.erb +4 -4
  139. data/app/views/catalog/_show_more_like_this.html.erb +1 -1
  140. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  141. data/app/views/catalog/_show_tools.html.erb +10 -12
  142. data/app/views/catalog/_sms_form.html.erb +8 -4
  143. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  144. data/app/views/catalog/_sort_widget.html.erb +7 -7
  145. data/app/views/catalog/_thumbnail.html.erb +5 -0
  146. data/app/views/catalog/_view_type_group.html.erb +2 -2
  147. data/app/views/catalog/_zero_results.html.erb +1 -1
  148. data/app/views/catalog/citation.js.erb +4 -2
  149. data/app/views/catalog/email.html.erb +5 -3
  150. data/app/views/catalog/email_success.html.erb +12 -8
  151. data/app/views/catalog/facet.html.erb +10 -8
  152. data/app/views/catalog/facet.json.jbuilder +2 -0
  153. data/app/views/catalog/index.atom.builder +13 -16
  154. data/app/views/catalog/index.html.erb +9 -11
  155. data/app/views/catalog/index.json.jbuilder +84 -3
  156. data/app/views/catalog/index.rss.builder +7 -5
  157. data/app/views/catalog/opensearch.xml.builder +12 -10
  158. data/app/views/catalog/show.html.erb +11 -6
  159. data/app/views/catalog/show.json.jbuilder +21 -0
  160. data/app/views/catalog/sms.html.erb +3 -1
  161. data/app/views/catalog/sms_success.html.erb +12 -8
  162. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  163. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  164. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  165. data/app/views/kaminari/blacklight/_next_page.html.erb +5 -5
  166. data/app/views/kaminari/blacklight/_page.html.erb +5 -3
  167. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  168. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  169. data/app/views/layouts/blacklight/base.html.erb +35 -0
  170. data/app/views/layouts/blacklight.html.erb +14 -41
  171. data/app/views/layouts/catalog_result.html.erb +11 -0
  172. data/app/views/search_history/index.html.erb +16 -21
  173. data/app/views/shared/_header_navbar.html.erb +8 -13
  174. data/app/views/shared/_modal.html.erb +6 -0
  175. data/app/views/shared/_user_util_links.html.erb +22 -0
  176. data/blacklight.gemspec +10 -11
  177. data/config/i18n-tasks.yml +17 -0
  178. data/config/locales/blacklight.de.yml +71 -82
  179. data/config/locales/blacklight.en.yml +15 -27
  180. data/config/locales/blacklight.es.yml +14 -26
  181. data/config/locales/blacklight.fr.yml +16 -33
  182. data/config/locales/blacklight.hu.yml +212 -0
  183. data/config/locales/blacklight.it.yml +15 -26
  184. data/config/locales/blacklight.nl.yml +212 -0
  185. data/config/locales/blacklight.pt-BR.yml +24 -29
  186. data/config/locales/blacklight.sq.yml +4 -28
  187. data/config/locales/blacklight.zh.yml +3 -25
  188. data/config/routes.rb +2 -10
  189. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  190. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  191. data/lib/blacklight/abstract_repository.rb +22 -10
  192. data/lib/blacklight/configuration/context.rb +12 -1
  193. data/lib/blacklight/configuration/facet_field.rb +16 -9
  194. data/lib/blacklight/configuration/field.rb +32 -3
  195. data/lib/blacklight/configuration/fields.rb +61 -58
  196. data/lib/blacklight/configuration/null_field.rb +2 -0
  197. data/lib/blacklight/configuration/search_field.rb +2 -2
  198. data/lib/blacklight/configuration/sort_field.rb +2 -2
  199. data/lib/blacklight/configuration/view_config.rb +4 -0
  200. data/lib/blacklight/configuration.rb +101 -88
  201. data/lib/blacklight/engine.rb +11 -7
  202. data/lib/blacklight/exceptions.rb +4 -7
  203. data/lib/blacklight/{utils.rb → nested_open_struct_with_hash_access.rb} +9 -81
  204. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  205. data/lib/blacklight/parameters.rb +1 -1
  206. data/lib/blacklight/routes/exportable.rb +1 -3
  207. data/lib/blacklight/routes/searchable.rb +3 -3
  208. data/lib/blacklight/runtime_registry.rb +2 -0
  209. data/lib/blacklight/search_builder.rb +28 -35
  210. data/lib/blacklight/search_state.rb +10 -8
  211. data/lib/blacklight/solr/repository.rb +40 -6
  212. data/lib/blacklight/solr/request.rb +1 -1
  213. data/lib/blacklight/solr/response/facets.rb +29 -31
  214. data/lib/blacklight/solr/response/group.rb +3 -3
  215. data/lib/blacklight/solr/response/group_response.rb +1 -1
  216. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  217. data/lib/blacklight/solr/response/response.rb +2 -2
  218. data/lib/blacklight/solr/response/spelling.rb +4 -3
  219. data/lib/blacklight/solr/response.rb +29 -30
  220. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  221. data/lib/blacklight/version.rb +1 -1
  222. data/lib/blacklight.rb +10 -8
  223. data/lib/generators/blacklight/assets_generator.rb +18 -12
  224. data/lib/generators/blacklight/controller_generator.rb +4 -5
  225. data/lib/generators/blacklight/document_generator.rb +1 -1
  226. data/lib/generators/blacklight/install_generator.rb +18 -28
  227. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  228. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +12 -6
  229. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  230. data/lib/generators/blacklight/templates/alternate_controller.rb +4 -4
  231. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  232. data/lib/generators/blacklight/templates/catalog_controller.rb +59 -49
  233. data/lib/generators/blacklight/templates/config/blacklight.yml +1 -13
  234. data/lib/generators/blacklight/templates/solr/conf/schema.xml +388 -0
  235. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  236. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  237. data/lib/generators/blacklight/user_generator.rb +5 -6
  238. data/lib/railties/blacklight.rake +17 -21
  239. data/package-lock.json +2195 -0
  240. data/package.json +29 -0
  241. data/spec/controllers/alternate_controller_spec.rb +5 -4
  242. data/spec/controllers/application_controller_spec.rb +1 -5
  243. data/spec/controllers/blacklight/base_spec.rb +6 -3
  244. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  245. data/spec/controllers/blacklight/facet_spec.rb +1 -2
  246. data/spec/controllers/blacklight/search_fields_spec.rb +25 -34
  247. data/spec/controllers/bookmarks_controller_spec.rb +46 -11
  248. data/spec/controllers/catalog_controller_spec.rb +334 -161
  249. data/spec/controllers/search_history_controller_spec.rb +6 -6
  250. data/spec/features/alternate_controller_spec.rb +4 -4
  251. data/spec/features/autocomplete_spec.rb +4 -2
  252. data/spec/features/bookmarks_spec.rb +10 -10
  253. data/spec/features/did_you_mean_spec.rb +7 -12
  254. data/spec/features/facets_spec.rb +29 -17
  255. data/spec/features/record_view_spec.rb +12 -18
  256. data/spec/features/search_context_spec.rb +6 -7
  257. data/spec/features/search_crawler_spec.rb +3 -5
  258. data/spec/features/search_filters_spec.rb +80 -80
  259. data/spec/features/search_formats_spec.rb +1 -1
  260. data/spec/features/search_history_spec.rb +6 -29
  261. data/spec/features/search_pagination_spec.rb +4 -2
  262. data/spec/features/search_results_spec.rb +14 -12
  263. data/spec/features/search_sort_spec.rb +2 -2
  264. data/spec/features/search_spec.rb +8 -9
  265. data/spec/features/sitelinks_search_box.rb +4 -4
  266. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  267. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +97 -92
  268. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +72 -67
  269. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +2 -2
  270. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +10 -0
  271. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -5
  272. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +10 -6
  273. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +92 -0
  274. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +29 -30
  275. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +9 -2
  276. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +56 -54
  277. data/spec/helpers/blacklight_helper_spec.rb +65 -150
  278. data/spec/helpers/catalog_helper_spec.rb +80 -96
  279. data/spec/i18n_spec.rb +18 -0
  280. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +21 -13
  281. data/spec/lib/blacklight/configuration/facet_field_spec.rb +13 -0
  282. data/spec/lib/blacklight/configuration/field_spec.rb +15 -0
  283. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  284. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +148 -0
  285. data/spec/lib/blacklight/parameters_spec.rb +4 -2
  286. data/spec/lib/blacklight/search_state_spec.rb +53 -36
  287. data/spec/lib/blacklight_spec.rb +14 -15
  288. data/spec/lib/tasks/blacklight_task_spec.rb +4 -6
  289. data/spec/models/blacklight/configurable_spec.rb +24 -27
  290. data/spec/models/blacklight/configuration/context_spec.rb +9 -10
  291. data/spec/models/blacklight/configuration_spec.rb +248 -223
  292. data/spec/models/blacklight/document/active_model_shim_spec.rb +15 -6
  293. data/spec/models/blacklight/document/cache_key_spec.rb +9 -2
  294. data/spec/models/blacklight/document/dublin_core_spec.rb +17 -20
  295. data/spec/models/blacklight/document/email_spec.rb +10 -10
  296. data/spec/models/blacklight/document/sms_spec.rb +10 -10
  297. data/spec/models/blacklight/document_spec.rb +10 -22
  298. data/spec/models/blacklight/facet_paginator_spec.rb +40 -30
  299. data/spec/models/blacklight/icon_spec.rb +44 -0
  300. data/spec/models/blacklight/search_builder_spec.rb +41 -26
  301. data/spec/models/blacklight/solr/document_spec.rb +224 -216
  302. data/spec/models/blacklight/solr/facet_paginator_spec.rb +6 -4
  303. data/spec/models/blacklight/solr/repository_spec.rb +61 -46
  304. data/spec/models/blacklight/solr/request_spec.rb +17 -18
  305. data/spec/models/blacklight/solr/response/facets_spec.rb +58 -58
  306. data/spec/models/blacklight/solr/response/group_response_spec.rb +16 -22
  307. data/spec/models/blacklight/solr/response/group_spec.rb +18 -25
  308. data/spec/models/blacklight/solr/response_spec.rb +56 -55
  309. data/spec/models/blacklight/solr/search_builder_spec.rb +150 -164
  310. data/spec/models/blacklight/suggest/response_spec.rb +6 -4
  311. data/spec/models/blacklight/suggest_search_spec.rb +9 -16
  312. data/spec/models/blacklight/user_spec.rb +9 -11
  313. data/spec/models/bookmark_spec.rb +7 -6
  314. data/spec/models/record_mailer_spec.rb +23 -21
  315. data/spec/models/search_spec.rb +19 -18
  316. data/spec/models/solr_document_spec.rb +33 -5
  317. data/spec/presenters/blacklight/document_presenter_spec.rb +86 -0
  318. data/spec/presenters/blacklight/index_presenter_spec.rb +186 -0
  319. data/spec/presenters/blacklight/json_presenter_spec.rb +59 -0
  320. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -0
  321. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +79 -0
  322. data/spec/presenters/blacklight/show_presenter_spec.rb +333 -0
  323. data/spec/presenters/pipeline_spec.rb +18 -11
  324. data/spec/presenters/thumbnail_presenter_spec.rb +174 -0
  325. data/spec/routing/catalog_routing_spec.rb +13 -15
  326. data/spec/services/blacklight/search_service_spec.rb +488 -0
  327. data/spec/spec_helper.rb +20 -19
  328. data/spec/support/features/session_helpers.rb +4 -4
  329. data/spec/support/features.rb +1 -1
  330. data/spec/test_app_templates/Gemfile.extra +2 -4
  331. data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -13
  332. data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -6
  333. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +17 -13
  334. data/spec/views/catalog/_document.html.erb_spec.rb +11 -11
  335. data/spec/views/catalog/_document_list.html.erb_spec.rb +2 -1
  336. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +5 -5
  337. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  338. data/spec/views/catalog/_facets.html.erb_spec.rb +10 -12
  339. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +14 -15
  340. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +6 -9
  341. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +7 -30
  342. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  343. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +13 -14
  344. data/spec/views/catalog/_show_sidebar.erb_spec.rb +6 -9
  345. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -5
  346. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -2
  347. data/spec/views/catalog/_sort_widget.html.erb_spec.rb +3 -1
  348. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +7 -9
  349. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +12 -10
  350. data/spec/views/catalog/email_success.html.erb_spec.rb +8 -0
  351. data/spec/views/catalog/facet.html.erb_spec.rb +4 -3
  352. data/spec/views/catalog/facet.json.jbuilder_spec.rb +3 -2
  353. data/spec/views/catalog/index.atom.builder_spec.rb +11 -6
  354. data/spec/views/catalog/index.html.erb_spec.rb +6 -8
  355. data/spec/views/catalog/index.json.jbuilder_spec.rb +119 -26
  356. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  357. data/spec/views/catalog/show.html.erb_spec.rb +8 -8
  358. data/spec/views/catalog/show.json.jbuilder_spec.rb +40 -0
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +8 -0
  360. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -7
  361. data/tasks/blacklight.rake +10 -8
  362. data/template.demo.rb +3 -11
  363. metadata +188 -189
  364. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  365. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  366. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -135
  367. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  368. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  369. data/app/controllers/concerns/blacklight/search_helper.rb +0 -155
  370. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  371. data/app/controllers/saved_searches_controller.rb +0 -4
  372. data/app/controllers/suggest_controller.rb +0 -4
  373. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  374. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  375. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  376. data/app/helpers/blacklight_url_helper.rb +0 -4
  377. data/app/helpers/component_helper.rb +0 -4
  378. data/app/helpers/facets_helper.rb +0 -4
  379. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  380. data/app/helpers/layout_helper.rb +0 -4
  381. data/app/helpers/render_constraints_helper.rb +0 -4
  382. data/app/helpers/search_history_constraints_helper.rb +0 -4
  383. data/app/helpers/suggest_helper.rb +0 -4
  384. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  385. data/app/views/_user_util_links.html.erb +0 -26
  386. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  387. data/app/views/catalog/_index_default.html.erb +0 -12
  388. data/app/views/catalog/_show_default.html.erb +0 -10
  389. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  390. data/app/views/saved_searches/index.html.erb +0 -32
  391. data/app/views/shared/_ajax_modal.html.erb +0 -6
  392. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  393. data/lib/generators/blacklight/templates/config/jetty.yml +0 -13
  394. data/solr/conf/schema.xml +0 -629
  395. data/solr/conf/solrconfig.xml +0 -411
  396. data/spec/controllers/blacklight/search_helper_spec.rb +0 -470
  397. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  398. data/spec/controllers/suggest_controller_spec.rb +0 -17
  399. data/spec/features/saved_searches_spec.rb +0 -47
  400. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  401. data/spec/lib/blacklight/utils_spec.rb +0 -167
  402. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  403. data/spec/presenters/document_presenter_spec.rb +0 -438
  404. data/spec/presenters/index_presenter_spec.rb +0 -173
  405. data/spec/presenters/show_presenter_spec.rb +0 -313
  406. data/spec/support/backport_test.rb +0 -14
  407. /data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  408. /data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  409. /data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  410. /data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  411. /data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  412. /data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  413. /data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  414. /data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  415. /data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  416. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  417. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  418. /data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  419. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  420. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  421. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  422. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
@@ -8,12 +8,12 @@
8
8
  function longer (a,b){ return b.textContent.length - a.textContent.length; }
9
9
 
10
10
  $('ul.facet-values, ul.pivot-facet').each(function(){
11
- var longest = $(this).find('span.facet-count').sort(longer).first();
12
- var clone = longest.clone()
13
- .css('visibility','hidden').css('width', 'auto');
14
- $('body').append(clone);
15
- $(this).find('.facet-count').first().width(clone.width());
16
- clone.remove();
11
+ var longest = $(this).find('span.facet-count').sort(longer)[0];
12
+
13
+ if (longest && longest.textContent) {
14
+ var width = longest.textContent.length + 1 + 'ch';
15
+ $(this).find('.facet-count').first().width(width);
16
+ }
17
17
  });
18
18
  };
19
19
 
@@ -1,27 +1,25 @@
1
- //= require blacklight/core
2
-
3
1
  /*
4
- The ajax_modal plugin can display some interactions inside a Bootstrap
2
+ The blacklight modal plugin can display some interactions inside a Bootstrap
5
3
  modal window, including some multi-page interactions.
6
4
 
7
5
  It supports unobtrusive Javascript, where a link or form that would have caused
8
6
  a new page load is changed to display it's results inside a modal dialog,
9
7
  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
8
+ on the page with id #blacklight-modal to use as the modal -- the standard Blacklight
11
9
  layout provides this.
12
10
 
13
11
  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)
12
+ `data-blacklight-modal="trigger"` to the link or form. (Note, form itself not submit input)
15
13
  With Rails link_to helper, you'd do that like:
16
14
 
17
- link_to something, link, :data => {:ajax_modal => "trigger"}
15
+ link_to something, link, data: { blacklight_modal: "trigger" }
18
16
 
19
17
  The results of the link href or form submit will be displayed inside
20
18
  a modal -- they should include the proper HTML markup for a bootstrap modal's
21
19
  contents. Also, you ordinarily won't want the Rails template with wrapping
22
20
  navigational elements to be used. The Rails controller could suppress
23
21
  the layout when a JS AJAX request is detected, OR the response
24
- can include a `<div data-ajax-modal="container">` -- only the contents
22
+ can include a `<div data-blacklight-modal="container">` -- only the contents
25
23
  of the container will be placed inside the modal, the rest of the
26
24
  page will be ignored.
27
25
 
@@ -33,12 +31,12 @@
33
31
 
34
32
  Link or forms inside the modal will ordinarily cause page loads
35
33
  when they are triggered. However, if you'd like their results
36
- to stay within the modal, just add `data-ajax-modal="preserve"`
34
+ to stay within the modal, just add `data-blacklight-modal="preserve"`
37
35
  to the link or form.
38
36
 
39
37
  Here's an example of what might be returned, demonstrating most of the devices available:
40
38
 
41
- <div data-ajax-modal="container">
39
+ <div data-blacklight-modal="container">
42
40
  <div class="modal-header">
43
41
  <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
44
42
  <h3 class="modal-title">Request Placed</h3>
@@ -46,47 +44,46 @@
46
44
 
47
45
  <div class="modal-body">
48
46
  <p>Some message</p>
49
- <%= link_to "This result will still be within modal", some_link, :data => {:ajax_modal => "preserve"} %>
47
+ <%= link_to "This result will still be within modal", some_link, data: { blacklight: "preserve" } %>
50
48
  </div>
51
49
 
52
50
 
53
51
  <div class="modal-footer">
54
- <%= link_to "Close the modal", request_done_path, :class => "submit button dialog-close", :data => {:dismiss => "modal"} %>
52
+ <%= link_to "Close the modal", request_done_path, class: "submit button dialog-close", data: { dismiss: "modal" } %>
55
53
  </div>
56
54
  </div>
57
55
 
58
56
 
59
57
  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
58
+ has an element with `data-blacklight-modal=close`, that will trigger the modal
61
59
  to be closed. And if this element includes a node with class "flash_messages",
62
60
  the flash-messages node will be added to the main page inside #main-flahses.
63
61
 
64
62
  == Events
65
63
 
66
- We'll send out an event 'loaded.blacklight.ajax-modal' with the #ajax-modal
64
+ We'll send out an event 'loaded.blacklight.blacklight-modal' with the #blacklight-modal
67
65
  dialog as the target, right after content is loaded into the modal but before
68
66
  it is shown (if not already a shown modal). In an event handler, you can
69
67
  inspect loaded content by looking inside $(this). If you call event.preventDefault(),
70
68
  we won't 'show' the dialog (although it may already have been shown, you may want to
71
69
  $(this).modal("hide") if you want to ensure hidden/closed.
72
70
 
73
- The data-ajax-modal=close behavior is implemented with this event, see for example.
71
+ The data-blacklight-modal=close behavior is implemented with this event, see for example.
74
72
  */
75
73
 
76
- // We keep all our data in Blacklight.ajaxModal object.
74
+ // We keep all our data in Blacklight.modal object.
77
75
  // Create lazily if someone else created first.
78
- if (Blacklight.ajaxModal === undefined) {
79
- Blacklight.ajaxModal = {};
76
+ if (Blacklight.modal === undefined) {
77
+ Blacklight.modal = {};
80
78
  }
81
79
 
82
-
83
80
  // a Bootstrap modal div that should be already on the page hidden
84
- Blacklight.ajaxModal.modalSelector = "#ajax-modal";
81
+ Blacklight.modal.modalSelector = '#blacklight-modal';
85
82
 
86
83
  // Trigger selectors identify forms or hyperlinks that should open
87
84
  // 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";
85
+ Blacklight.modal.triggerLinkSelector = 'a[data-blacklight-modal~=trigger]';
86
+ Blacklight.modal.triggerFormSelector = 'form[data-blacklight-modal~=trigger]';
90
87
 
91
88
  // preserve selectors identify forms or hyperlinks that, if activated already
92
89
  // inside a modal dialog, should have destinations remain inside the modal -- but
@@ -95,57 +92,58 @@ Blacklight.ajaxModal.triggerFormSelector = "form[data-ajax-modal~=trigger], for
95
92
  // No need to repeat selectors from trigger selectors, those will already
96
93
  // be preserved. MUST be manually prefixed with the modal selector,
97
94
  // 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]'
95
+ Blacklight.modal.preserveLinkSelector = Blacklight.modal.modalSelector + ' a[data-blacklight-modal~=preserve]';
100
96
 
101
- Blacklight.ajaxModal.containerSelector = "[data-ajax-modal~=container]";
97
+ Blacklight.modal.containerSelector = '[data-blacklight-modal~=container]';
102
98
 
103
- Blacklight.ajaxModal.modalCloseSelector = "[data-ajax-modal~=close], span.ajax-close-modal";
99
+ Blacklight.modal.modalCloseSelector = '[data-blacklight-modal~=close]';
104
100
 
105
101
  // Called on fatal failure of ajax load, function returns content
106
102
  // to show to user in modal. Right now called only for extreme
107
103
  // 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');
104
+ Blacklight.modal.onFailure = function(data) {
105
+ var contents = '<div class="modal-header">' +
106
+ '<div class="modal-title">Network Error</div>' +
107
+ '<button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="Close">' +
108
+ ' <span aria-hidden="true">&times;</span>' +
109
+ '</button>';
110
+ $(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
111
+ $(Blacklight.modal.modalSelector).modal('show');
114
112
  }
115
113
 
116
- Blacklight.ajaxModal.receiveAjax = function (contents) {
114
+ Blacklight.modal.receiveAjax = function (contents) {
117
115
  // does it have a data- selector for container?
118
116
  // important we don't execute script tags, we shouldn't.
119
117
  // 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();
118
+ var container = $('<div>').
119
+ append( jQuery.parseHTML(contents) ).find( Blacklight.modal.containerSelector ).first();
122
120
  if (container.length !== 0) {
123
121
  contents = container.html();
124
122
  }
125
123
 
126
- $(Blacklight.ajaxModal.modalSelector).find('.modal-content').html(contents);
124
+ $(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
127
125
 
128
126
  // 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);
127
+ var e = $.Event('loaded.blacklight.blacklight-modal')
128
+ $(Blacklight.modal.modalSelector).trigger(e);
131
129
  // if they did preventDefault, don't show the dialog
132
130
  if (e.isDefaultPrevented()) return;
133
131
 
134
- $(Blacklight.ajaxModal.modalSelector).modal('show');
132
+ $(Blacklight.modal.modalSelector).modal('show');
135
133
  };
136
134
 
137
135
 
138
- Blacklight.ajaxModal.modalAjaxLinkClick = function(e) {
136
+ Blacklight.modal.modalAjaxLinkClick = function(e) {
139
137
  e.preventDefault();
140
138
 
141
139
  $.ajax({
142
140
  url: $(this).attr('href')
143
141
  })
144
- .fail(Blacklight.ajaxModal.onFailure)
145
- .done(Blacklight.ajaxModal.receiveAjax)
142
+ .fail(Blacklight.modal.onFailure)
143
+ .done(Blacklight.modal.receiveAjax)
146
144
  };
147
145
 
148
- Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
146
+ Blacklight.modal.modalAjaxFormSubmit = function(e) {
149
147
  e.preventDefault();
150
148
 
151
149
  $.ajax({
@@ -153,54 +151,54 @@ Blacklight.ajaxModal.modalAjaxFormSubmit = function(e) {
153
151
  data: $(this).serialize(),
154
152
  type: $(this).attr('method') // POST
155
153
  })
156
- .fail(Blacklight.ajaxModal.onFailure)
157
- .done(Blacklight.ajaxModal.receiveAjax)
154
+ .fail(Blacklight.modal.onFailure)
155
+ .done(Blacklight.modal.receiveAjax)
158
156
  }
159
157
 
160
158
 
161
159
 
162
- Blacklight.ajaxModal.setup_modal = function() {
160
+ Blacklight.modal.setupModal = function() {
163
161
  // Event indicating blacklight is setting up a modal link,
164
162
  // you can catch it and call e.preventDefault() to abort
165
163
  // setup.
166
- var e = $.Event('setup.blacklight.ajax-modal');
167
- $("body").trigger(e);
164
+ var e = $.Event('setup.blacklight.blacklight-modal');
165
+ $('body').trigger(e);
168
166
  if (e.isDefaultPrevented()) return;
169
167
 
170
168
  // Register both trigger and preserve selectors in ONE event handler, combining
171
169
  // into one selector with a comma, so if something matches BOTH selectors, it
172
170
  // 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);
171
+ $('body').on('click', Blacklight.modal.triggerLinkSelector + ', ' + Blacklight.modal.preserveLinkSelector,
172
+ Blacklight.modal.modalAjaxLinkClick);
173
+ $('body').on('submit', Blacklight.modal.triggerFormSelector + ', ' + Blacklight.modal.preserveFormSelector,
174
+ Blacklight.modal.modalAjaxFormSubmit);
177
175
 
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);
176
+ // Catch our own custom loaded event to implement data-blacklight-modal=closed
177
+ $('body').on('loaded.blacklight.blacklight-modal', Blacklight.modal.checkCloseModal);
180
178
 
181
179
  // we support doing data-dismiss=modal on a <a> with a href for non-ajax
182
180
  // use, we need to suppress following the a's href that's there for
183
181
  // non-JS contexts.
184
- $("body ").on("click", Blacklight.ajaxModal.modalSelector + " a[data-dismiss~=modal]", function (e) {
182
+ $('body').on('click', Blacklight.modal.modalSelector + ' a[data-dismiss~=modal]', function (e) {
185
183
  e.preventDefault();
186
184
  });
187
185
  };
188
186
 
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');
187
+ // A function used as an event handler on loaded.blacklight.blacklight-modal
188
+ // to catch contained data-blacklight-modal=closed directions
189
+ Blacklight.modal.checkCloseModal = function(event) {
190
+ if ($(event.target).find(Blacklight.modal.modalCloseSelector).length) {
191
+ var modalFlashes = $(this).find('.flash_messages');
194
192
 
195
- $(event.target).modal("hide");
193
+ $(event.target).modal('hide');
196
194
  event.preventDefault();
197
195
 
198
- main_flashes = $('#main-flashes');
199
- main_flashes.append(modal_flashes);
200
- modal_flashes.fadeIn(500);
196
+ var mainFlashes = $('#main-flashes');
197
+ mainFlashes.append(modalFlashes);
198
+ modalFlashes.fadeIn(500);
201
199
  }
202
200
  }
203
201
 
204
202
  Blacklight.onLoad(function() {
205
- Blacklight.ajaxModal.setup_modal();
203
+ Blacklight.modal.setupModal();
206
204
  });
@@ -1,12 +1,19 @@
1
- //= require blacklight/core
2
1
  (function($) {
3
- Blacklight.do_search_context_behavior = function() {
2
+ Blacklight.doSearchContextBehavior = function() {
3
+ if (typeof Blacklight.do_search_context_behavior == 'function') {
4
+ console.warn("do_search_context_behavior is deprecated. Use doSearchContextBehavior instead.");
5
+ return Blacklight.do_search_context_behavior();
6
+ }
4
7
  $('a[data-context-href]').on('click.search-context', Blacklight.handleSearchContextMethod);
5
8
  };
6
9
 
7
10
  // this is the $.rails.handleMethod with a couple adjustments, described inline:
8
11
  // first, we're attaching this directly to the event handler, so we can check for meta-keys
9
12
  Blacklight.handleSearchContextMethod = function(event) {
13
+ if (typeof Blacklight.handle_search_context_method == 'function') {
14
+ console.warn("handle_search_context_method is deprecated. Use handleSearchContextMethod instead.");
15
+ return Blacklight.handle_search_context_method(event);
16
+ }
10
17
  var link = $(this);
11
18
 
12
19
  // instead of using the normal href, we need to use the context href instead
@@ -37,6 +44,6 @@
37
44
  };
38
45
 
39
46
  Blacklight.onLoad(function() {
40
- Blacklight.do_search_context_behavior();
47
+ Blacklight.doSearchContextBehavior();
41
48
  });
42
49
  })(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,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Blacklight
4
+ class Icon
5
+ attr_reader :icon_name
6
+ ##
7
+ # @param [String, Symbol] icon_name
8
+ # @param [Hash] options
9
+ # @param [String] classes additional classes separated by a string
10
+ def initialize(icon_name, classes: '')
11
+ @icon_name = icon_name
12
+ @classes = classes
13
+ end
14
+
15
+ ##
16
+ # Returns the raw source, but you could extend this to add additional attributes
17
+ # @return [String]
18
+ def svg
19
+ file_source
20
+ end
21
+
22
+ ##
23
+ # @return [Hash]
24
+ def options
25
+ {
26
+ class: classes
27
+ }
28
+ end
29
+
30
+ ##
31
+ # @return [String]
32
+ def path
33
+ "blacklight/#{icon_name}.svg"
34
+ end
35
+
36
+ ##
37
+ # @return [String]
38
+ def file_source
39
+ raise Blacklight::Exceptions::IconNotFound, "Could not find #{path}" if file.blank?
40
+
41
+ file.source.force_encoding('UTF-8')
42
+ end
43
+
44
+ private
45
+
46
+ def file
47
+ # Rails.application.assets is `nil` in production mode (where compile assets is enabled).
48
+ # This workaround is based off of this comment: https://github.com/fphilipe/premailer-rails/issues/145#issuecomment-225992564
49
+ (Rails.application.assets || ::Sprockets::Railtie.build_environment(Rails.application)).find_asset(path)
50
+ end
51
+
52
+ def classes
53
+ " blacklight-icons #{@classes} ".strip
54
+ end
55
+ end
56
+ 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,10 +1,12 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Blacklight
3
4
  class SuggestSearch
4
5
  attr_reader :request_params, :repository
5
-
6
+
6
7
  ##
7
8
  # @param [Hash] params
9
+ # @param [Blacklight::AbstractRepository] repository
8
10
  def initialize(params, repository)
9
11
  @request_params = { q: params[:q] }
10
12
  @repository = repository
@@ -15,20 +17,7 @@ module Blacklight
15
17
  # Blacklight::Suggest::Response
16
18
  # @return [Blacklight::Suggest::Response]
17
19
  def suggestions
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
20
+ repository.suggestions(request_params)
32
21
  end
33
22
  end
34
23
  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
- value ||= default_document_type
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
@@ -8,6 +8,11 @@ module Blacklight::Document
8
8
  include ::ActiveModel::Conversion
9
9
 
10
10
  module ClassMethods
11
+ # This is actually an ActiveRecord method starting in Rails 5.2
12
+ def polymorphic_name
13
+ base_class.name
14
+ end
15
+
11
16
  def primary_key
12
17
  unique_key
13
18
  end
@@ -24,27 +29,24 @@ module Blacklight::Document
24
29
  repository.find(id).documents.first
25
30
  end
26
31
  end
27
-
32
+
28
33
  ##
29
34
  # Unique ID for the document
30
35
  def id
31
36
  self[self.class.unique_key]
32
37
  end
33
38
 
34
- ##
35
- # accessors for reading attribute
36
- def [] *args
37
- _source.send :[], *args
39
+ def ==(other)
40
+ super ||
41
+ (other.instance_of?(self.class) &&
42
+ id &&
43
+ other.id == id)
38
44
  end
39
-
45
+
40
46
  def _read_attribute(attr)
41
47
  self[attr]
42
48
  end
43
49
 
44
- def as_json(options = nil)
45
- _source.as_json(options)
46
- end
47
-
48
50
  ##
49
51
  # ActiveRecord::Persistence method stubs to get non-AR objects to
50
52
  # play nice with e.g. Blacklight's bookmarks
@@ -55,7 +57,7 @@ module Blacklight::Document
55
57
  def destroyed?
56
58
  false
57
59
  end
58
-
60
+
59
61
  def new_record?
60
62
  false
61
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?