blacklight 6.14.0 → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (422) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -0
  3. data/.npmignore +23 -0
  4. data/.rubocop.yml +40 -16
  5. data/.rubocop_todo.yml +479 -375
  6. data/.solr_wrapper.yml +9 -2
  7. data/.travis.yml +27 -20
  8. data/Gemfile +3 -1
  9. data/README.md +22 -5
  10. data/Rakefile +3 -2
  11. data/VERSION +1 -1
  12. data/Vagrantfile +2 -0
  13. data/app/assets/images/blacklight/list.svg +1 -0
  14. data/app/assets/images/blacklight/search.svg +1 -0
  15. data/app/assets/javascripts/blacklight/blacklight.js +497 -57
  16. data/app/assets/stylesheets/blacklight/_balanced_list.scss +7 -12
  17. data/app/assets/stylesheets/blacklight/_blacklight_base.scss +18 -15
  18. data/app/assets/stylesheets/blacklight/_bookmark.scss +1 -13
  19. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +27 -0
  20. data/app/assets/stylesheets/blacklight/_constraints.scss +17 -25
  21. data/app/assets/stylesheets/blacklight/_controls.scss +8 -16
  22. data/app/assets/stylesheets/blacklight/_facets.scss +64 -93
  23. data/app/assets/stylesheets/blacklight/_header.scss +35 -48
  24. data/app/assets/stylesheets/blacklight/_icons.scss +35 -0
  25. data/app/assets/stylesheets/blacklight/_layout.scss +0 -10
  26. data/app/assets/stylesheets/blacklight/_mixins.scss +15 -0
  27. data/app/assets/stylesheets/blacklight/_modal.scss +9 -17
  28. data/app/assets/stylesheets/blacklight/_pagination.scss +2 -17
  29. data/app/assets/stylesheets/blacklight/_search_form.scss +7 -0
  30. data/app/assets/stylesheets/blacklight/_search_history.scss +5 -13
  31. data/app/assets/stylesheets/blacklight/_search_results.scss +9 -8
  32. data/app/assets/stylesheets/blacklight/_twitter_typeahead.scss +1 -2
  33. data/app/assets/stylesheets/blacklight/blacklight.scss +1 -1
  34. data/app/builders/blacklight/action_builder.rb +57 -0
  35. data/app/controllers/bookmarks_controller.rb +2 -2
  36. data/app/controllers/catalog_controller.rb +2 -2
  37. data/app/controllers/concerns/blacklight/base.rb +0 -33
  38. data/app/controllers/concerns/blacklight/bookmarks.rb +36 -33
  39. data/app/controllers/concerns/blacklight/catalog.rb +266 -210
  40. data/app/controllers/concerns/blacklight/controller.rb +111 -126
  41. data/app/controllers/concerns/blacklight/default_component_configuration.rb +12 -43
  42. data/app/controllers/concerns/blacklight/facet.rb +3 -0
  43. data/app/controllers/concerns/blacklight/search_context.rb +16 -14
  44. data/app/controllers/concerns/blacklight/search_fields.rb +4 -14
  45. data/app/controllers/concerns/blacklight/search_history.rb +1 -6
  46. data/app/controllers/concerns/blacklight/token_based_user.rb +24 -9
  47. data/app/helpers/blacklight/blacklight_helper_behavior.rb +39 -119
  48. data/app/helpers/blacklight/catalog_helper_behavior.rb +94 -88
  49. data/app/helpers/blacklight/component_helper_behavior.rb +21 -19
  50. data/app/helpers/blacklight/configuration_helper_behavior.rb +30 -57
  51. data/app/helpers/blacklight/facets_helper_behavior.rb +55 -51
  52. data/app/helpers/blacklight/hash_as_hidden_fields_helper_behavior.rb +9 -11
  53. data/app/helpers/blacklight/icon_helper_behavior.rb +18 -0
  54. data/app/helpers/blacklight/layout_helper_behavior.rb +3 -3
  55. data/app/helpers/blacklight/render_constraints_helper_behavior.rb +8 -6
  56. data/app/helpers/blacklight/render_partials_helper_behavior.rb +195 -0
  57. data/app/helpers/blacklight/search_history_constraints_helper_behavior.rb +19 -11
  58. data/app/helpers/blacklight/suggest_helper_behavior.rb +1 -0
  59. data/app/helpers/blacklight/url_helper_behavior.rb +50 -41
  60. data/app/{assets/javascripts → javascript}/blacklight/autocomplete.js +3 -2
  61. data/app/javascript/blacklight/bookmark_toggle.js +25 -0
  62. data/app/javascript/blacklight/checkbox_submit.js +134 -0
  63. data/app/{assets/javascripts → javascript}/blacklight/collapsable.js +1 -1
  64. data/app/{assets/javascripts → javascript}/blacklight/core.js +10 -8
  65. data/app/{assets/javascripts → javascript}/blacklight/facet_load.js +6 -6
  66. data/app/{assets/javascripts/blacklight/ajax_modal.js → javascript/blacklight/modal.js} +62 -64
  67. data/app/{assets/javascripts → javascript}/blacklight/search_context.js +10 -3
  68. data/app/models/blacklight/facet_paginator.rb +3 -3
  69. data/app/models/blacklight/icon.rb +56 -0
  70. data/app/models/blacklight/solr/facet_paginator.rb +3 -3
  71. data/app/models/blacklight/suggest_search.rb +4 -15
  72. data/app/models/bookmark.rb +5 -10
  73. data/app/models/concerns/blacklight/configurable.rb +13 -13
  74. data/app/models/concerns/blacklight/document/active_model_shim.rb +13 -11
  75. data/app/models/concerns/blacklight/document/cache_key.rb +1 -1
  76. data/app/models/concerns/blacklight/document/dublin_core.rb +2 -2
  77. data/app/models/concerns/blacklight/document/email.rb +1 -1
  78. data/app/models/concerns/blacklight/document/extensions.rb +5 -5
  79. data/app/models/concerns/blacklight/document/semantic_fields.rb +9 -9
  80. data/app/models/concerns/blacklight/document/sms.rb +1 -1
  81. data/app/models/concerns/blacklight/document.rb +26 -40
  82. data/app/models/concerns/blacklight/solr/document.rb +8 -8
  83. data/app/models/concerns/blacklight/suggest/response.rb +5 -3
  84. data/app/models/concerns/blacklight/user.rb +7 -6
  85. data/app/models/record_mailer.rb +5 -6
  86. data/app/models/search.rb +5 -7
  87. data/app/presenters/blacklight/document_presenter.rb +25 -140
  88. data/app/presenters/blacklight/field_presenter.rb +7 -5
  89. data/app/presenters/blacklight/index_presenter.rb +41 -58
  90. data/app/presenters/blacklight/json_presenter.rb +10 -14
  91. data/app/presenters/blacklight/link_alternate_presenter.rb +3 -1
  92. data/app/presenters/blacklight/rendering/abstract_step.rb +7 -5
  93. data/app/presenters/blacklight/rendering/helper_method.rb +10 -8
  94. data/app/presenters/blacklight/rendering/join.rb +5 -3
  95. data/app/presenters/blacklight/rendering/link_to_facet.rb +23 -19
  96. data/app/presenters/blacklight/rendering/microdata.rb +6 -3
  97. data/app/presenters/blacklight/rendering/pipeline.rb +7 -5
  98. data/app/presenters/blacklight/rendering/terminator.rb +2 -0
  99. data/app/presenters/blacklight/search_bar_presenter.rb +39 -0
  100. data/app/presenters/blacklight/show_presenter.rb +26 -63
  101. data/app/presenters/blacklight/thumbnail_presenter.rb +74 -0
  102. data/app/services/blacklight/document_factory.rb +13 -0
  103. data/app/services/blacklight/field_retriever.rb +26 -24
  104. data/app/services/blacklight/search_service.rb +152 -0
  105. data/app/values/blacklight/types.rb +31 -0
  106. data/app/views/blacklight/nav/_bookmark.html.erb +2 -2
  107. data/app/views/blacklight/nav/_search_history.html.erb +1 -1
  108. data/app/views/bookmarks/_tools.html.erb +2 -2
  109. data/app/views/bookmarks/index.html.erb +12 -13
  110. data/app/views/catalog/_bookmark_control.html.erb +26 -10
  111. data/app/views/catalog/_citation.html.erb +4 -4
  112. data/app/views/catalog/_constraints.html.erb +6 -7
  113. data/app/views/catalog/_constraints_element.html.erb +6 -6
  114. data/app/views/catalog/_did_you_mean.html.erb +1 -1
  115. data/app/views/catalog/{_document_default.atom.builder → _document.atom.builder} +19 -18
  116. data/app/views/catalog/_document.html.erb +5 -3
  117. data/app/views/catalog/{_document_default.rss.builder → _document.rss.builder} +2 -0
  118. data/app/views/catalog/_document_action.html.erb +2 -1
  119. data/app/views/catalog/_email_form.html.erb +8 -4
  120. data/app/views/catalog/_facet_index_navigation.html.erb +5 -4
  121. data/app/views/catalog/_facet_layout.html.erb +6 -10
  122. data/app/views/catalog/_facet_limit.html.erb +3 -2
  123. data/app/views/catalog/_facet_pagination.html.erb +8 -8
  124. data/app/views/catalog/_facet_pivot.html.erb +2 -2
  125. data/app/views/catalog/_facets.html.erb +9 -12
  126. data/app/views/catalog/_field.json.jbuilder +10 -0
  127. data/app/views/catalog/{_group_default.html.erb → _group.html.erb} +1 -1
  128. data/app/views/catalog/_home_text.html.erb +32 -36
  129. data/app/views/catalog/_index.html.erb +10 -0
  130. data/app/views/catalog/{_index_header_default.html.erb → _index_header.html.erb} +3 -3
  131. data/app/views/catalog/_per_page_widget.html.erb +6 -7
  132. data/app/views/catalog/_previous_next_doc.html.erb +6 -14
  133. data/app/views/catalog/_results_pagination.html.erb +2 -2
  134. data/app/views/catalog/_search_form.html.erb +12 -8
  135. data/app/views/catalog/_search_header.html.erb +0 -3
  136. data/app/views/catalog/_search_results.html.erb +6 -2
  137. data/app/views/catalog/_show.html.erb +8 -0
  138. data/app/views/catalog/_show_main_content.html.erb +4 -4
  139. data/app/views/catalog/_show_more_like_this.html.erb +1 -1
  140. data/app/views/catalog/_show_sidebar.html.erb +3 -3
  141. data/app/views/catalog/_show_tools.html.erb +10 -12
  142. data/app/views/catalog/_sms_form.html.erb +8 -4
  143. data/app/views/catalog/_sort_and_per_page.html.erb +3 -3
  144. data/app/views/catalog/_sort_widget.html.erb +7 -7
  145. data/app/views/catalog/_thumbnail.html.erb +5 -0
  146. data/app/views/catalog/_view_type_group.html.erb +2 -2
  147. data/app/views/catalog/_zero_results.html.erb +1 -1
  148. data/app/views/catalog/citation.js.erb +4 -2
  149. data/app/views/catalog/email.html.erb +5 -3
  150. data/app/views/catalog/email_success.html.erb +12 -8
  151. data/app/views/catalog/facet.html.erb +10 -8
  152. data/app/views/catalog/facet.json.jbuilder +2 -0
  153. data/app/views/catalog/index.atom.builder +13 -16
  154. data/app/views/catalog/index.html.erb +9 -11
  155. data/app/views/catalog/index.json.jbuilder +84 -3
  156. data/app/views/catalog/index.rss.builder +7 -5
  157. data/app/views/catalog/opensearch.xml.builder +12 -10
  158. data/app/views/catalog/show.html.erb +11 -6
  159. data/app/views/catalog/show.json.jbuilder +21 -0
  160. data/app/views/catalog/sms.html.erb +3 -1
  161. data/app/views/catalog/sms_success.html.erb +12 -8
  162. data/app/views/kaminari/blacklight/_first_page.html.erb +2 -2
  163. data/app/views/kaminari/blacklight/_gap.html.erb +2 -2
  164. data/app/views/kaminari/blacklight/_last_page.html.erb +2 -2
  165. data/app/views/kaminari/blacklight/_next_page.html.erb +5 -5
  166. data/app/views/kaminari/blacklight/_page.html.erb +5 -3
  167. data/app/views/kaminari/blacklight/_prev_page.html.erb +4 -4
  168. data/app/views/kaminari/blacklight_compact/_paginator.html.erb +4 -4
  169. data/app/views/layouts/blacklight/base.html.erb +35 -0
  170. data/app/views/layouts/blacklight.html.erb +14 -41
  171. data/app/views/layouts/catalog_result.html.erb +11 -0
  172. data/app/views/search_history/index.html.erb +16 -21
  173. data/app/views/shared/_header_navbar.html.erb +8 -13
  174. data/app/views/shared/_modal.html.erb +6 -0
  175. data/app/views/shared/_user_util_links.html.erb +22 -0
  176. data/blacklight.gemspec +10 -11
  177. data/config/i18n-tasks.yml +17 -0
  178. data/config/locales/blacklight.de.yml +71 -82
  179. data/config/locales/blacklight.en.yml +15 -27
  180. data/config/locales/blacklight.es.yml +14 -26
  181. data/config/locales/blacklight.fr.yml +16 -33
  182. data/config/locales/blacklight.hu.yml +212 -0
  183. data/config/locales/blacklight.it.yml +15 -26
  184. data/config/locales/blacklight.nl.yml +212 -0
  185. data/config/locales/blacklight.pt-BR.yml +24 -29
  186. data/config/locales/blacklight.sq.yml +4 -28
  187. data/config/locales/blacklight.zh.yml +3 -25
  188. data/config/routes.rb +2 -10
  189. data/db/migrate/20140202020202_create_bookmarks.rb +0 -1
  190. data/db/migrate/20140320000000_add_polymorphic_type_to_bookmarks.rb +1 -1
  191. data/lib/blacklight/abstract_repository.rb +22 -10
  192. data/lib/blacklight/configuration/context.rb +12 -1
  193. data/lib/blacklight/configuration/facet_field.rb +16 -9
  194. data/lib/blacklight/configuration/field.rb +32 -3
  195. data/lib/blacklight/configuration/fields.rb +61 -58
  196. data/lib/blacklight/configuration/null_field.rb +2 -0
  197. data/lib/blacklight/configuration/search_field.rb +2 -2
  198. data/lib/blacklight/configuration/sort_field.rb +2 -2
  199. data/lib/blacklight/configuration/view_config.rb +4 -0
  200. data/lib/blacklight/configuration.rb +101 -88
  201. data/lib/blacklight/engine.rb +11 -7
  202. data/lib/blacklight/exceptions.rb +4 -7
  203. data/lib/blacklight/{utils.rb → nested_open_struct_with_hash_access.rb} +9 -81
  204. data/lib/blacklight/open_struct_with_hash_access.rb +49 -0
  205. data/lib/blacklight/parameters.rb +1 -1
  206. data/lib/blacklight/routes/exportable.rb +1 -3
  207. data/lib/blacklight/routes/searchable.rb +3 -3
  208. data/lib/blacklight/runtime_registry.rb +2 -0
  209. data/lib/blacklight/search_builder.rb +28 -35
  210. data/lib/blacklight/search_state.rb +10 -8
  211. data/lib/blacklight/solr/repository.rb +40 -6
  212. data/lib/blacklight/solr/request.rb +1 -1
  213. data/lib/blacklight/solr/response/facets.rb +29 -31
  214. data/lib/blacklight/solr/response/group.rb +3 -3
  215. data/lib/blacklight/solr/response/group_response.rb +1 -1
  216. data/lib/blacklight/solr/response/more_like_this.rb +2 -2
  217. data/lib/blacklight/solr/response/response.rb +2 -2
  218. data/lib/blacklight/solr/response/spelling.rb +4 -3
  219. data/lib/blacklight/solr/response.rb +29 -30
  220. data/lib/blacklight/solr/search_builder_behavior.rb +25 -29
  221. data/lib/blacklight/version.rb +1 -1
  222. data/lib/blacklight.rb +10 -8
  223. data/lib/generators/blacklight/assets_generator.rb +18 -12
  224. data/lib/generators/blacklight/controller_generator.rb +4 -5
  225. data/lib/generators/blacklight/document_generator.rb +1 -1
  226. data/lib/generators/blacklight/install_generator.rb +18 -28
  227. data/lib/generators/blacklight/search_builder_generator.rb +1 -1
  228. data/lib/generators/blacklight/{solr5_generator.rb → solr_generator.rb} +12 -6
  229. data/lib/generators/blacklight/templates/.solr_wrapper.yml +5 -0
  230. data/lib/generators/blacklight/templates/alternate_controller.rb +4 -4
  231. data/lib/generators/blacklight/templates/blacklight.scss +0 -2
  232. data/lib/generators/blacklight/templates/catalog_controller.rb +59 -49
  233. data/lib/generators/blacklight/templates/config/blacklight.yml +1 -13
  234. data/lib/generators/blacklight/templates/solr/conf/schema.xml +388 -0
  235. data/lib/generators/blacklight/templates/solr/conf/solrconfig.xml +195 -0
  236. data/lib/generators/blacklight/test_support_generator.rb +10 -10
  237. data/lib/generators/blacklight/user_generator.rb +5 -6
  238. data/lib/railties/blacklight.rake +17 -21
  239. data/package-lock.json +2195 -0
  240. data/package.json +29 -0
  241. data/spec/controllers/alternate_controller_spec.rb +5 -4
  242. data/spec/controllers/application_controller_spec.rb +1 -5
  243. data/spec/controllers/blacklight/base_spec.rb +6 -3
  244. data/spec/controllers/blacklight/catalog/component_configuration_spec.rb +11 -7
  245. data/spec/controllers/blacklight/facet_spec.rb +1 -2
  246. data/spec/controllers/blacklight/search_fields_spec.rb +25 -34
  247. data/spec/controllers/bookmarks_controller_spec.rb +46 -11
  248. data/spec/controllers/catalog_controller_spec.rb +334 -161
  249. data/spec/controllers/search_history_controller_spec.rb +6 -6
  250. data/spec/features/alternate_controller_spec.rb +4 -4
  251. data/spec/features/autocomplete_spec.rb +4 -2
  252. data/spec/features/bookmarks_spec.rb +10 -10
  253. data/spec/features/did_you_mean_spec.rb +7 -12
  254. data/spec/features/facets_spec.rb +29 -17
  255. data/spec/features/record_view_spec.rb +12 -18
  256. data/spec/features/search_context_spec.rb +6 -7
  257. data/spec/features/search_crawler_spec.rb +3 -5
  258. data/spec/features/search_filters_spec.rb +80 -80
  259. data/spec/features/search_formats_spec.rb +1 -1
  260. data/spec/features/search_history_spec.rb +6 -29
  261. data/spec/features/search_pagination_spec.rb +4 -2
  262. data/spec/features/search_results_spec.rb +14 -12
  263. data/spec/features/search_sort_spec.rb +2 -2
  264. data/spec/features/search_spec.rb +8 -9
  265. data/spec/features/sitelinks_search_box.rb +4 -4
  266. data/{solr → spec/fixtures}/sample_solr_documents.yml +688 -688
  267. data/spec/helpers/{configuration_helper_spec.rb → blacklight/configuration_helper_behavior_spec.rb} +97 -92
  268. data/spec/helpers/{facets_helper_spec.rb → blacklight/facets_helper_behavior_spec.rb} +72 -67
  269. data/spec/helpers/{hash_as_hidden_fields_spec.rb → blacklight/hash_as_hidden_fields_behavior_spec.rb} +2 -2
  270. data/spec/helpers/blacklight/icon_helper_behavior_spec.rb +10 -0
  271. data/spec/helpers/{layout_helper_spec.rb → blacklight/layout_helper_behavior_spec.rb} +5 -5
  272. data/spec/helpers/{render_constraints_helper_spec.rb → blacklight/render_constraints_helper_behavior_spec.rb} +10 -6
  273. data/spec/helpers/blacklight/render_partials_helper_behavior_spec.rb +92 -0
  274. data/spec/helpers/{search_history_constraints_helper_spec.rb → blacklight/search_history_constraints_helper_behavior_spec.rb} +29 -30
  275. data/spec/helpers/{suggest_helper_spec.rb → blacklight/suggest_helper_behavior_spec.rb} +9 -2
  276. data/spec/helpers/{url_helper_spec.rb → blacklight/url_helper_behavior_spec.rb} +56 -54
  277. data/spec/helpers/blacklight_helper_spec.rb +65 -150
  278. data/spec/helpers/catalog_helper_spec.rb +80 -96
  279. data/spec/i18n_spec.rb +18 -0
  280. data/spec/integration/generators/blacklight/{solr5_generator_spec.rb → solr_generator_spec.rb} +21 -13
  281. data/spec/lib/blacklight/configuration/facet_field_spec.rb +13 -0
  282. data/spec/lib/blacklight/configuration/field_spec.rb +15 -0
  283. data/spec/lib/blacklight/nested_open_struct_with_hash_access_spec.rb +17 -0
  284. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +148 -0
  285. data/spec/lib/blacklight/parameters_spec.rb +4 -2
  286. data/spec/lib/blacklight/search_state_spec.rb +53 -36
  287. data/spec/lib/blacklight_spec.rb +14 -15
  288. data/spec/lib/tasks/blacklight_task_spec.rb +4 -6
  289. data/spec/models/blacklight/configurable_spec.rb +24 -27
  290. data/spec/models/blacklight/configuration/context_spec.rb +9 -10
  291. data/spec/models/blacklight/configuration_spec.rb +248 -223
  292. data/spec/models/blacklight/document/active_model_shim_spec.rb +15 -6
  293. data/spec/models/blacklight/document/cache_key_spec.rb +9 -2
  294. data/spec/models/blacklight/document/dublin_core_spec.rb +17 -20
  295. data/spec/models/blacklight/document/email_spec.rb +10 -10
  296. data/spec/models/blacklight/document/sms_spec.rb +10 -10
  297. data/spec/models/blacklight/document_spec.rb +10 -22
  298. data/spec/models/blacklight/facet_paginator_spec.rb +40 -30
  299. data/spec/models/blacklight/icon_spec.rb +44 -0
  300. data/spec/models/blacklight/search_builder_spec.rb +41 -26
  301. data/spec/models/blacklight/solr/document_spec.rb +224 -216
  302. data/spec/models/blacklight/solr/facet_paginator_spec.rb +6 -4
  303. data/spec/models/blacklight/solr/repository_spec.rb +61 -46
  304. data/spec/models/blacklight/solr/request_spec.rb +17 -18
  305. data/spec/models/blacklight/solr/response/facets_spec.rb +58 -58
  306. data/spec/models/blacklight/solr/response/group_response_spec.rb +16 -22
  307. data/spec/models/blacklight/solr/response/group_spec.rb +18 -25
  308. data/spec/models/blacklight/solr/response_spec.rb +56 -55
  309. data/spec/models/blacklight/solr/search_builder_spec.rb +150 -164
  310. data/spec/models/blacklight/suggest/response_spec.rb +6 -4
  311. data/spec/models/blacklight/suggest_search_spec.rb +9 -16
  312. data/spec/models/blacklight/user_spec.rb +9 -11
  313. data/spec/models/bookmark_spec.rb +7 -6
  314. data/spec/models/record_mailer_spec.rb +23 -21
  315. data/spec/models/search_spec.rb +19 -18
  316. data/spec/models/solr_document_spec.rb +33 -5
  317. data/spec/presenters/blacklight/document_presenter_spec.rb +86 -0
  318. data/spec/presenters/blacklight/index_presenter_spec.rb +186 -0
  319. data/spec/presenters/blacklight/json_presenter_spec.rb +59 -0
  320. data/spec/presenters/blacklight/link_alternate_presenter_spec.rb +3 -0
  321. data/spec/presenters/blacklight/search_bar_presenter_spec.rb +79 -0
  322. data/spec/presenters/blacklight/show_presenter_spec.rb +333 -0
  323. data/spec/presenters/pipeline_spec.rb +18 -11
  324. data/spec/presenters/thumbnail_presenter_spec.rb +174 -0
  325. data/spec/routing/catalog_routing_spec.rb +13 -15
  326. data/spec/services/blacklight/search_service_spec.rb +488 -0
  327. data/spec/spec_helper.rb +20 -19
  328. data/spec/support/features/session_helpers.rb +4 -4
  329. data/spec/support/features.rb +1 -1
  330. data/spec/test_app_templates/Gemfile.extra +2 -4
  331. data/spec/test_app_templates/lib/generators/test_app_generator.rb +12 -13
  332. data/spec/views/catalog/_constraints.html.erb_spec.rb +3 -6
  333. data/spec/views/catalog/_constraints_element.html.erb_spec.rb +17 -13
  334. data/spec/views/catalog/_document.html.erb_spec.rb +11 -11
  335. data/spec/views/catalog/_document_list.html.erb_spec.rb +2 -1
  336. data/spec/views/catalog/_facet_index_navigation.html.erb_spec.rb +5 -5
  337. data/spec/views/catalog/_facet_layout.html.erb_spec.rb +6 -6
  338. data/spec/views/catalog/_facets.html.erb_spec.rb +10 -12
  339. data/spec/views/catalog/{_index_default.erb_spec.rb → _index.html.erb_spec.rb} +14 -15
  340. data/spec/views/catalog/{_index_header_default.html.erb_spec.rb → _index_header.html.erb_spec.rb} +6 -9
  341. data/spec/views/catalog/_paginate_compact.html.erb_spec.rb +7 -30
  342. data/spec/views/catalog/_search_header.erb_spec.rb +1 -3
  343. data/spec/views/catalog/{_show_default.erb_spec.rb → _show.html.erb_spec.rb} +13 -14
  344. data/spec/views/catalog/_show_sidebar.erb_spec.rb +6 -9
  345. data/spec/views/catalog/_show_tools.html.erb_spec.rb +5 -5
  346. data/spec/views/catalog/_sort_and_per_page.html.erb_spec.rb +1 -2
  347. data/spec/views/catalog/_sort_widget.html.erb_spec.rb +3 -1
  348. data/spec/views/catalog/{_thumbnail_default.erb_spec.rb → _thumbnail.html.erb_spec.rb} +7 -9
  349. data/spec/views/catalog/_view_type_group.html.erb_spec.rb +12 -10
  350. data/spec/views/catalog/email_success.html.erb_spec.rb +8 -0
  351. data/spec/views/catalog/facet.html.erb_spec.rb +4 -3
  352. data/spec/views/catalog/facet.json.jbuilder_spec.rb +3 -2
  353. data/spec/views/catalog/index.atom.builder_spec.rb +11 -6
  354. data/spec/views/catalog/index.html.erb_spec.rb +6 -8
  355. data/spec/views/catalog/index.json.jbuilder_spec.rb +119 -26
  356. data/spec/views/catalog/opensearch.xml.builder_spec.rb +1 -1
  357. data/spec/views/catalog/show.html.erb_spec.rb +8 -8
  358. data/spec/views/catalog/show.json.jbuilder_spec.rb +40 -0
  359. data/spec/views/catalog/sms_success.html.erb_spec.rb +8 -0
  360. data/spec/views/{_user_util_links.html.erb_spec.rb → shared/_user_util_links.html.erb_spec.rb} +4 -7
  361. data/tasks/blacklight.rake +10 -8
  362. data/template.demo.rb +3 -11
  363. metadata +188 -189
  364. data/app/assets/javascripts/blacklight/autofocus.js +0 -16
  365. data/app/assets/javascripts/blacklight/bookmark_toggle.js +0 -23
  366. data/app/assets/javascripts/blacklight/checkbox_submit.js +0 -135
  367. data/app/controllers/concerns/blacklight/request_builders.rb +0 -77
  368. data/app/controllers/concerns/blacklight/saved_searches.rb +0 -70
  369. data/app/controllers/concerns/blacklight/search_helper.rb +0 -155
  370. data/app/controllers/concerns/blacklight/suggest.rb +0 -25
  371. data/app/controllers/saved_searches_controller.rb +0 -4
  372. data/app/controllers/suggest_controller.rb +0 -4
  373. data/app/helpers/blacklight/deprecated_url_helper_behavior.rb +0 -57
  374. data/app/helpers/blacklight/render_partials_helper.rb +0 -205
  375. data/app/helpers/blacklight_configuration_helper.rb +0 -4
  376. data/app/helpers/blacklight_url_helper.rb +0 -4
  377. data/app/helpers/component_helper.rb +0 -4
  378. data/app/helpers/facets_helper.rb +0 -4
  379. data/app/helpers/hash_as_hidden_fields_helper.rb +0 -4
  380. data/app/helpers/layout_helper.rb +0 -4
  381. data/app/helpers/render_constraints_helper.rb +0 -4
  382. data/app/helpers/search_history_constraints_helper.rb +0 -4
  383. data/app/helpers/suggest_helper.rb +0 -4
  384. data/app/models/concerns/blacklight/solr/document/more_like_this.rb +0 -6
  385. data/app/views/_user_util_links.html.erb +0 -26
  386. data/app/views/blacklight/nav/_saved_searches.html.erb +0 -1
  387. data/app/views/catalog/_index_default.html.erb +0 -12
  388. data/app/views/catalog/_show_default.html.erb +0 -10
  389. data/app/views/catalog/_thumbnail_default.html.erb +0 -5
  390. data/app/views/saved_searches/index.html.erb +0 -32
  391. data/app/views/shared/_ajax_modal.html.erb +0 -6
  392. data/lib/generators/blacklight/solr4_generator.rb +0 -31
  393. data/lib/generators/blacklight/templates/config/jetty.yml +0 -13
  394. data/solr/conf/schema.xml +0 -629
  395. data/solr/conf/solrconfig.xml +0 -411
  396. data/spec/controllers/blacklight/search_helper_spec.rb +0 -470
  397. data/spec/controllers/saved_searches_controller_spec.rb +0 -32
  398. data/spec/controllers/suggest_controller_spec.rb +0 -17
  399. data/spec/features/saved_searches_spec.rb +0 -47
  400. data/spec/helpers/deprecated_url_helper_behavior_spec.rb +0 -101
  401. data/spec/lib/blacklight/utils_spec.rb +0 -167
  402. data/spec/models/blacklight/solr/document/more_like_this_spec.rb +0 -18
  403. data/spec/presenters/document_presenter_spec.rb +0 -438
  404. data/spec/presenters/index_presenter_spec.rb +0 -173
  405. data/spec/presenters/show_presenter_spec.rb +0 -313
  406. data/spec/support/backport_test.rb +0 -14
  407. /data/app/views/catalog/{_show_header_default.html.erb → _show_header.html.erb} +0 -0
  408. /data/app/views/{_flash_msg.html.erb → shared/_flash_msg.html.erb} +0 -0
  409. /data/{solr → lib/generators/blacklight/templates/solr}/conf/_rest_managed.json +0 -0
  410. /data/{solr → lib/generators/blacklight/templates/solr}/conf/admin-extra.html +0 -0
  411. /data/{solr → lib/generators/blacklight/templates/solr}/conf/elevate.xml +0 -0
  412. /data/{solr → lib/generators/blacklight/templates/solr}/conf/mapping-ISOLatin1Accent.txt +0 -0
  413. /data/{solr → lib/generators/blacklight/templates/solr}/conf/protwords.txt +0 -0
  414. /data/{solr → lib/generators/blacklight/templates/solr}/conf/scripts.conf +0 -0
  415. /data/{solr → lib/generators/blacklight/templates/solr}/conf/spellings.txt +0 -0
  416. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords.txt +0 -0
  417. /data/{solr → lib/generators/blacklight/templates/solr}/conf/stopwords_en.txt +0 -0
  418. /data/{solr → lib/generators/blacklight/templates/solr}/conf/synonyms.txt +0 -0
  419. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example.xsl +0 -0
  420. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_atom.xsl +0 -0
  421. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/example_rss.xsl +0 -0
  422. /data/{solr → lib/generators/blacklight/templates/solr}/conf/xslt/luke.xsl +0 -0
@@ -1,59 +1,499 @@
1
- // This file is generated by Blacklight. You probably don't want to edit
2
- // this file directly, or you'll have to manually merge your changes if later
3
- // versions of Blacklight change this file. Instead, use your own JS file
4
- // which over-rides things in this JS file, as described below.
5
- //
6
- // These javascript files are compiled in via the Rails asset pipeline:
7
- //= require blacklight/core
8
- //= require blacklight/autofocus
9
- //= require blacklight/bookmark_toggle
10
- //= require blacklight/ajax_modal
11
- //= require blacklight/search_context
12
- //= require blacklight/collapsable
13
- //= require blacklight/facet_load
14
- //= require blacklight/autocomplete
15
- //
16
- //Bootstrap JS for providing collapsable tablet/mobile menu/alert boxes
17
- //= require bootstrap/transition
18
- //= require bootstrap/collapse
19
- //= require bootstrap/dropdown
20
- //= require bootstrap/alert
21
- //= require bootstrap/modal
22
-
23
- // Twitter Typeahead for autocomplete
24
- //= require twitter/typeahead
25
-
26
- /* Blacklight has a Javascript setup meant to support local disabling,
27
- modification, and use of Blacklight behaviors.
28
-
29
- There is a global Blacklight object, available to your local JS.
30
-
31
- Individual logic to apply JS behaviors to particular elements is
32
- stored in functions on that Blacklight object.
33
-
34
- The actual behaviors themselves are implemented as JQuery plugins,
35
- JQuery-UI widgets (a special kind of JQuery plugin), or in some cases
36
- just as logic in the Blacklight global object.
37
-
38
- All of these things can be modified by your local JS code -- these functions
39
- are all set up on js load, and only called on document ready, so do your
40
- modifications just on js load, and they'll be made by the time document ready
41
- comes along.
42
-
43
- Examples, in your application's own JS:
44
-
45
- Turn off adding of behavior to facet 'more' links, using a no-op function:
46
-
47
- Blacklight.do_more_facets_behavior = function() {};
48
-
49
- Change the implementation of facet 'more' link behavior to use entirely
50
- different JS.
51
-
52
- Blacklight.do_more_facets_behavior = function() {
53
- $(Blacklight.do_more_facets_behavior.selector).each(function() {
54
- //my own thing!
55
- });
56
- };
57
- */
1
+ Blacklight = function () {
2
+ var buffer = new Array();
3
+ return {
4
+ onLoad: function (func) {
5
+ buffer.push(func);
6
+ },
7
+
8
+ activate: function () {
9
+ for (var i = 0; i < buffer.length; i++) {
10
+ buffer[i].call();
11
+ }
12
+ },
13
+
14
+ listeners: function () {
15
+ var listeners = [];
16
+ if (typeof Turbolinks !== 'undefined' && Turbolinks.supported) {
17
+ // Turbolinks 5
18
+ if (Turbolinks.BrowserAdapter) {
19
+ listeners.push('turbolinks:load');
20
+ } else {
21
+ // Turbolinks < 5
22
+ listeners.push('page:load', 'DOMContentLoaded');
23
+ }
24
+ } else {
25
+ listeners.push('DOMContentLoaded');
26
+ }
27
+
28
+ return listeners;
29
+ }
30
+ };
31
+ }();
32
+
33
+ // turbolinks triggers page:load events on page transition
34
+ // If app isn't using turbolinks, this event will never be triggered, no prob.
35
+ Blacklight.listeners().forEach(function (listener) {
36
+ document.addEventListener(listener, function () {
37
+ Blacklight.activate();
38
+ });
39
+ });
58
40
 
59
41
  $('.no-js').removeClass('no-js').addClass('js');
42
+ /*global Bloodhound */
43
+
44
+ Blacklight.onLoad(function () {
45
+ 'use strict';
46
+
47
+ $('[data-autocomplete-enabled="true"]').each(function () {
48
+ var $el = $(this);
49
+ if ($el.hasClass('tt-hint')) {
50
+ return;
51
+ }
52
+ var suggestUrl = $el.data().autocompletePath;
53
+
54
+ var terms = new Bloodhound({
55
+ datumTokenizer: Bloodhound.tokenizers.obj.whitespace('value'),
56
+ queryTokenizer: Bloodhound.tokenizers.whitespace,
57
+ remote: {
58
+ url: suggestUrl + '?q=%QUERY',
59
+ wildcard: '%QUERY'
60
+ }
61
+ });
62
+
63
+ terms.initialize();
64
+
65
+ $el.typeahead({
66
+ hint: true,
67
+ highlight: true,
68
+ minLength: 2
69
+ }, {
70
+ name: 'terms',
71
+ displayKey: 'term',
72
+ source: terms.ttAdapter()
73
+ });
74
+ });
75
+ });
76
+ (function ($) {
77
+ //change form submit toggle to checkbox
78
+ Blacklight.doBookmarkToggleBehavior = function () {
79
+ if (typeof Blacklight.do_bookmark_toggle_behavior == 'function') {
80
+ console.warn("do_bookmark_toggle_behavior is deprecated. Use doBookmarkToggleBehavior instead.");
81
+ return Blacklight.do_bookmark_toggle_behavior();
82
+ }
83
+ $(Blacklight.doBookmarkToggleBehavior.selector).blCheckboxSubmit({
84
+ // cssClass is added to elements added, plus used for id base
85
+ cssClass: 'toggle-bookmark',
86
+ success: function (checked, response) {
87
+ if (response.bookmarks) {
88
+ $('[data-role=bookmark-counter]').text(response.bookmarks.count);
89
+ }
90
+ }
91
+ });
92
+ };
93
+ Blacklight.doBookmarkToggleBehavior.selector = 'form.bookmark-toggle';
94
+
95
+ Blacklight.onLoad(function () {
96
+ Blacklight.doBookmarkToggleBehavior();
97
+ });
98
+ })(jQuery);
99
+ /* A JQuery plugin (should this be implemented as a widget instead? not sure)
100
+ that will convert a "toggle" form, with single submit button to add/remove
101
+ something, like used for Bookmarks, into an AJAXy checkbox instead.
102
+
103
+ Apply to a form. Does require certain assumption about the form:
104
+ 1) The same form 'action' href must be used for both ADD and REMOVE
105
+ actions, with the different being the hidden input name="_method"
106
+ being set to "put" or "delete" -- that's the Rails method to pretend
107
+ to be doing a certain HTTP verb. So same URL, PUT to add, DELETE
108
+ to remove. This plugin assumes that.
109
+
110
+ Plus, the form this is applied to should provide a data-doc-id
111
+ attribute (HTML5-style doc-*) that contains the id/primary key
112
+ of the object in question -- used by plugin for a unique value for
113
+ DOM id's.
114
+
115
+ Uses HTML for a checkbox compatible with Bootstrap 3.
116
+
117
+ Pass in options for your class name and labels:
118
+ $("form.something").blCheckboxSubmit({
119
+ //cssClass is added to elements added, plus used for id base
120
+ cssClass: "toggle_my_kinda_form",
121
+ error: function() {
122
+ #optional callback
123
+ },
124
+ success: function(after_success_check_state) {
125
+ #optional callback
126
+ }
127
+ });
128
+ */
129
+ (function ($) {
130
+ $.fn.blCheckboxSubmit = function (argOpts) {
131
+ this.each(function () {
132
+ var options = $.extend({}, $.fn.blCheckboxSubmit.defaults, argOpts);
133
+
134
+ var form = $(this);
135
+ form.children().hide();
136
+ //We're going to use the existing form to actually send our add/removes
137
+ //This works conveneintly because the exact same action href is used
138
+ //for both bookmarks/$doc_id. But let's take out the irrelevant parts
139
+ //of the form to avoid any future confusion.
140
+ form.find('input[type=submit]').remove();
141
+
142
+ //View needs to set data-doc-id so we know a unique value
143
+ //for making DOM id
144
+ var uniqueId = form.attr('data-doc-id') || Math.random();
145
+ // if form is currently using method delete to change state,
146
+ // then checkbox is currently checked
147
+ var checked = form.find('input[name=_method][value=delete]').length != 0;
148
+
149
+ var checkbox = $('<input type="checkbox">').addClass(options.cssClass).attr('id', options.cssClass + '_' + uniqueId);
150
+ var label = $('<label>').addClass(options.cssClass).attr('for', options.cssClass + '_' + uniqueId).attr('title', form.attr('title') || '');
151
+ var span = $('<span>');
152
+
153
+ label.append(checkbox);
154
+ label.append(' ');
155
+ label.append(span);
156
+
157
+ var checkboxDiv = $('<div class="checkbox" />').addClass(options.cssClass).append(label);
158
+
159
+ function updateStateFor(state) {
160
+ checkbox.prop('checked', state);
161
+ label.toggleClass('checked', state);
162
+ if (state) {
163
+ //Set the Rails hidden field that fakes an HTTP verb
164
+ //properly for current state action.
165
+ form.find('input[name=_method]').val('delete');
166
+ span.text(form.attr('data-present'));
167
+ } else {
168
+ form.find('input[name=_method]').val('put');
169
+ span.text(form.attr('data-absent'));
170
+ }
171
+ }
172
+
173
+ form.append(checkboxDiv);
174
+ updateStateFor(checked);
175
+
176
+ checkbox.click(function () {
177
+ span.text(form.attr('data-inprogress'));
178
+ label.attr('disabled', 'disabled');
179
+ checkbox.attr('disabled', 'disabled');
180
+
181
+ $.ajax({
182
+ url: form.attr('action'),
183
+ dataType: 'json',
184
+ type: form.attr('method').toUpperCase(),
185
+ data: form.serialize(),
186
+ error: function () {
187
+ label.removeAttr('disabled');
188
+ checkbox.removeAttr('disabled');
189
+ options.error.call();
190
+ },
191
+ success: function (data, status, xhr) {
192
+ //if app isn't running at all, xhr annoyingly
193
+ //reports success with status 0.
194
+ if (xhr.status != 0) {
195
+ checked = !checked;
196
+ updateStateFor(checked);
197
+ label.removeAttr('disabled');
198
+ checkbox.removeAttr('disabled');
199
+ options.success.call(form, checked, xhr.responseJSON);
200
+ } else {
201
+ label.removeAttr('disabled');
202
+ checkbox.removeAttr('disabled');
203
+ options.error.call();
204
+ }
205
+ }
206
+ });
207
+
208
+ return false;
209
+ }); //checkbox.click
210
+
211
+ }); //this.each
212
+ return this;
213
+ };
214
+
215
+ $.fn.blCheckboxSubmit.defaults = {
216
+ //cssClass is added to elements added, plus used for id base
217
+ cssClass: 'blCheckboxSubmit',
218
+ error: function () {
219
+ alert("Error");
220
+ },
221
+ success: function () {} //callback
222
+ };
223
+ })(jQuery);
224
+ (function ($) {
225
+ Blacklight.onLoad(function () {
226
+ // when clicking on a link that toggles the collapsing behavior, don't do anything
227
+ // with the hash or the page could jump around.
228
+ $(document).on('click', 'a[data-toggle=collapse][href="#"], [data-toggle=collapse] a[href="#"]', function (event) {
229
+ event.preventDefault();
230
+ });
231
+ });
232
+ })(jQuery);
233
+ /*global Blacklight */
234
+
235
+ (function ($) {
236
+ 'use strict';
237
+
238
+ Blacklight.doResizeFacetLabelsAndCounts = function () {
239
+ // adjust width of facet columns to fit their contents
240
+ function longer(a, b) {
241
+ return b.textContent.length - a.textContent.length;
242
+ }
243
+
244
+ $('ul.facet-values, ul.pivot-facet').each(function () {
245
+ var longest = $(this).find('span.facet-count').sort(longer)[0];
246
+
247
+ if (longest && longest.textContent) {
248
+ var width = longest.textContent.length + 1 + 'ch';
249
+ $(this).find('.facet-count').first().width(width);
250
+ }
251
+ });
252
+ };
253
+
254
+ Blacklight.onLoad(function () {
255
+ Blacklight.doResizeFacetLabelsAndCounts();
256
+ });
257
+ })(jQuery);
258
+ /*
259
+ The blacklight modal plugin can display some interactions inside a Bootstrap
260
+ modal window, including some multi-page interactions.
261
+
262
+ It supports unobtrusive Javascript, where a link or form that would have caused
263
+ a new page load is changed to display it's results inside a modal dialog,
264
+ by this plugin. The plugin assumes there is a Bootstrap modal div
265
+ on the page with id #blacklight-modal to use as the modal -- the standard Blacklight
266
+ layout provides this.
267
+
268
+ To make a link or form have their results display inside a modal, add
269
+ `data-blacklight-modal="trigger"` to the link or form. (Note, form itself not submit input)
270
+ With Rails link_to helper, you'd do that like:
271
+
272
+ link_to something, link, data: { blacklight_modal: "trigger" }
273
+
274
+ The results of the link href or form submit will be displayed inside
275
+ a modal -- they should include the proper HTML markup for a bootstrap modal's
276
+ contents. Also, you ordinarily won't want the Rails template with wrapping
277
+ navigational elements to be used. The Rails controller could suppress
278
+ the layout when a JS AJAX request is detected, OR the response
279
+ can include a `<div data-blacklight-modal="container">` -- only the contents
280
+ of the container will be placed inside the modal, the rest of the
281
+ page will be ignored.
282
+
283
+ If you'd like to have a link or button that closes the modal,
284
+ you can just add a `data-dismiss="modal"` to the link,
285
+ standard Bootstrap convention. But you can also have
286
+ an href on this link for non-JS contexts, we'll make sure
287
+ inside the modal it closes the modal and the link is NOT followed.
288
+
289
+ Link or forms inside the modal will ordinarily cause page loads
290
+ when they are triggered. However, if you'd like their results
291
+ to stay within the modal, just add `data-blacklight-modal="preserve"`
292
+ to the link or form.
293
+
294
+ Here's an example of what might be returned, demonstrating most of the devices available:
295
+
296
+ <div data-blacklight-modal="container">
297
+ <div class="modal-header">
298
+ <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
299
+ <h3 class="modal-title">Request Placed</h3>
300
+ </div>
301
+
302
+ <div class="modal-body">
303
+ <p>Some message</p>
304
+ <%= link_to "This result will still be within modal", some_link, data: { blacklight: "preserve" } %>
305
+ </div>
306
+
307
+
308
+ <div class="modal-footer">
309
+ <%= link_to "Close the modal", request_done_path, class: "submit button dialog-close", data: { dismiss: "modal" } %>
310
+ </div>
311
+ </div>
312
+
313
+
314
+ One additional feature. If the content returned from the AJAX modal load
315
+ has an element with `data-blacklight-modal=close`, that will trigger the modal
316
+ to be closed. And if this element includes a node with class "flash_messages",
317
+ the flash-messages node will be added to the main page inside #main-flahses.
318
+
319
+ == Events
320
+
321
+ We'll send out an event 'loaded.blacklight.blacklight-modal' with the #blacklight-modal
322
+ dialog as the target, right after content is loaded into the modal but before
323
+ it is shown (if not already a shown modal). In an event handler, you can
324
+ inspect loaded content by looking inside $(this). If you call event.preventDefault(),
325
+ we won't 'show' the dialog (although it may already have been shown, you may want to
326
+ $(this).modal("hide") if you want to ensure hidden/closed.
327
+
328
+ The data-blacklight-modal=close behavior is implemented with this event, see for example.
329
+ */
330
+
331
+ // We keep all our data in Blacklight.modal object.
332
+ // Create lazily if someone else created first.
333
+ if (Blacklight.modal === undefined) {
334
+ Blacklight.modal = {};
335
+ }
336
+
337
+ // a Bootstrap modal div that should be already on the page hidden
338
+ Blacklight.modal.modalSelector = '#blacklight-modal';
339
+
340
+ // Trigger selectors identify forms or hyperlinks that should open
341
+ // inside a modal dialog.
342
+ Blacklight.modal.triggerLinkSelector = 'a[data-blacklight-modal~=trigger]';
343
+ Blacklight.modal.triggerFormSelector = 'form[data-blacklight-modal~=trigger]';
344
+
345
+ // preserve selectors identify forms or hyperlinks that, if activated already
346
+ // inside a modal dialog, should have destinations remain inside the modal -- but
347
+ // won't trigger a modal if not already in one.
348
+ //
349
+ // No need to repeat selectors from trigger selectors, those will already
350
+ // be preserved. MUST be manually prefixed with the modal selector,
351
+ // so they only apply to things inside a modal.
352
+ Blacklight.modal.preserveLinkSelector = Blacklight.modal.modalSelector + ' a[data-blacklight-modal~=preserve]';
353
+
354
+ Blacklight.modal.containerSelector = '[data-blacklight-modal~=container]';
355
+
356
+ Blacklight.modal.modalCloseSelector = '[data-blacklight-modal~=close]';
357
+
358
+ // Called on fatal failure of ajax load, function returns content
359
+ // to show to user in modal. Right now called only for extreme
360
+ // network errors.
361
+ Blacklight.modal.onFailure = function (data) {
362
+ var contents = '<div class="modal-header">' + '<div class="modal-title">Network Error</div>' + '<button type="button" class="blacklight-modal-close close" data-dismiss="modal" aria-label="Close">' + ' <span aria-hidden="true">&times;</span>' + '</button>';
363
+ $(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
364
+ $(Blacklight.modal.modalSelector).modal('show');
365
+ };
366
+
367
+ Blacklight.modal.receiveAjax = function (contents) {
368
+ // does it have a data- selector for container?
369
+ // important we don't execute script tags, we shouldn't.
370
+ // code modelled off of JQuery ajax.load. https://github.com/jquery/jquery/blob/master/src/ajax/load.js?source=c#L62
371
+ var container = $('<div>').append(jQuery.parseHTML(contents)).find(Blacklight.modal.containerSelector).first();
372
+ if (container.length !== 0) {
373
+ contents = container.html();
374
+ }
375
+
376
+ $(Blacklight.modal.modalSelector).find('.modal-content').html(contents);
377
+
378
+ // send custom event with the modal dialog div as the target
379
+ var e = $.Event('loaded.blacklight.blacklight-modal');
380
+ $(Blacklight.modal.modalSelector).trigger(e);
381
+ // if they did preventDefault, don't show the dialog
382
+ if (e.isDefaultPrevented()) return;
383
+
384
+ $(Blacklight.modal.modalSelector).modal('show');
385
+ };
386
+
387
+ Blacklight.modal.modalAjaxLinkClick = function (e) {
388
+ e.preventDefault();
389
+
390
+ $.ajax({
391
+ url: $(this).attr('href')
392
+ }).fail(Blacklight.modal.onFailure).done(Blacklight.modal.receiveAjax);
393
+ };
394
+
395
+ Blacklight.modal.modalAjaxFormSubmit = function (e) {
396
+ e.preventDefault();
397
+
398
+ $.ajax({
399
+ url: $(this).attr('action'),
400
+ data: $(this).serialize(),
401
+ type: $(this).attr('method') // POST
402
+ }).fail(Blacklight.modal.onFailure).done(Blacklight.modal.receiveAjax);
403
+ };
404
+
405
+ Blacklight.modal.setupModal = function () {
406
+ // Event indicating blacklight is setting up a modal link,
407
+ // you can catch it and call e.preventDefault() to abort
408
+ // setup.
409
+ var e = $.Event('setup.blacklight.blacklight-modal');
410
+ $('body').trigger(e);
411
+ if (e.isDefaultPrevented()) return;
412
+
413
+ // Register both trigger and preserve selectors in ONE event handler, combining
414
+ // into one selector with a comma, so if something matches BOTH selectors, it
415
+ // still only gets the event handler called once.
416
+ $('body').on('click', Blacklight.modal.triggerLinkSelector + ', ' + Blacklight.modal.preserveLinkSelector, Blacklight.modal.modalAjaxLinkClick);
417
+ $('body').on('submit', Blacklight.modal.triggerFormSelector + ', ' + Blacklight.modal.preserveFormSelector, Blacklight.modal.modalAjaxFormSubmit);
418
+
419
+ // Catch our own custom loaded event to implement data-blacklight-modal=closed
420
+ $('body').on('loaded.blacklight.blacklight-modal', Blacklight.modal.checkCloseModal);
421
+
422
+ // we support doing data-dismiss=modal on a <a> with a href for non-ajax
423
+ // use, we need to suppress following the a's href that's there for
424
+ // non-JS contexts.
425
+ $('body').on('click', Blacklight.modal.modalSelector + ' a[data-dismiss~=modal]', function (e) {
426
+ e.preventDefault();
427
+ });
428
+ };
429
+
430
+ // A function used as an event handler on loaded.blacklight.blacklight-modal
431
+ // to catch contained data-blacklight-modal=closed directions
432
+ Blacklight.modal.checkCloseModal = function (event) {
433
+ if ($(event.target).find(Blacklight.modal.modalCloseSelector).length) {
434
+ var modalFlashes = $(this).find('.flash_messages');
435
+
436
+ $(event.target).modal('hide');
437
+ event.preventDefault();
438
+
439
+ var mainFlashes = $('#main-flashes');
440
+ mainFlashes.append(modalFlashes);
441
+ modalFlashes.fadeIn(500);
442
+ }
443
+ };
444
+
445
+ Blacklight.onLoad(function () {
446
+ Blacklight.modal.setupModal();
447
+ });
448
+ (function ($) {
449
+ Blacklight.doSearchContextBehavior = function () {
450
+ if (typeof Blacklight.do_search_context_behavior == 'function') {
451
+ console.warn("do_search_context_behavior is deprecated. Use doSearchContextBehavior instead.");
452
+ return Blacklight.do_search_context_behavior();
453
+ }
454
+ $('a[data-context-href]').on('click.search-context', Blacklight.handleSearchContextMethod);
455
+ };
456
+
457
+ // this is the $.rails.handleMethod with a couple adjustments, described inline:
458
+ // first, we're attaching this directly to the event handler, so we can check for meta-keys
459
+ Blacklight.handleSearchContextMethod = function (event) {
460
+ if (typeof Blacklight.handle_search_context_method == 'function') {
461
+ console.warn("handle_search_context_method is deprecated. Use handleSearchContextMethod instead.");
462
+ return Blacklight.handle_search_context_method(event);
463
+ }
464
+ var link = $(this);
465
+
466
+ // instead of using the normal href, we need to use the context href instead
467
+ var href = link.data('context-href'),
468
+ method = 'post',
469
+ target = link.attr('target'),
470
+ csrfToken = $('meta[name=csrf-token]').attr('content'),
471
+ csrfParam = $('meta[name=csrf-param]').attr('content'),
472
+ form = $('<form method="post" action="' + href + '"></form>'),
473
+ metadataInput = '<input name="_method" value="' + method + '" type="hidden" />',
474
+ redirectHref = '<input name="redirect" value="' + link.attr('href') + '" type="hidden" />';
475
+
476
+ // check for meta keys.. if set, we should open in a new tab
477
+ if (event.metaKey || event.ctrlKey) {
478
+ target = '_blank';
479
+ }
480
+
481
+ if (csrfParam !== undefined && csrfToken !== undefined) {
482
+ metadataInput += '<input name="' + csrfParam + '" value="' + csrfToken + '" type="hidden" />';
483
+ }
484
+
485
+ if (target) {
486
+ form.attr('target', target);
487
+ }
488
+
489
+ form.hide().append(metadataInput).append(redirectHref).appendTo('body');
490
+ form.submit();
491
+
492
+ return false;
493
+ };
494
+
495
+ Blacklight.onLoad(function () {
496
+ Blacklight.doSearchContextBehavior();
497
+ });
498
+ })(jQuery);
499
+
@@ -1,18 +1,13 @@
1
- .dl-horizontal {
2
- dd {
3
- margin-bottom: $padding-base-vertical;
4
-
5
- &:after {
6
- clear: none;
7
- }
8
- }
9
- }
10
-
11
1
  .dl-invert {
12
2
  dt {
13
3
  font-weight: normal;
14
4
  color: $field_name_color;
5
+ @media (max-width: breakpoint-max(sm)) {
6
+ text-align: left;
7
+ }
8
+
9
+ @media (min-width: breakpoint-max(sm)) {
10
+ text-align: right;
11
+ }
15
12
  }
16
13
  }
17
-
18
-
@@ -6,18 +6,21 @@
6
6
  which over-rides things in this file. Or of course you can choose
7
7
  not to use the Blacklight CSS file at all in your local app. */
8
8
 
9
- @import 'blacklight/blacklight_defaults';
10
-
11
- @import "blacklight/layout";
12
- @import "blacklight/header";
13
- @import "blacklight/constraints";
14
- @import "blacklight/controls";
15
- @import "blacklight/search_results";
16
- @import "blacklight/pagination";
17
- @import "blacklight/group";
18
- @import "blacklight/bookmark";
19
- @import "blacklight/balanced_list";
20
- @import "blacklight/facets";
21
- @import "blacklight/search_history";
22
- @import "blacklight/modal";
23
- @import "blacklight/twitter_typeahead";
9
+ @import "mixins";
10
+ @import 'blacklight_defaults';
11
+ @import "bootstrap_overrides";
12
+ @import "layout";
13
+ @import "header";
14
+ @import "constraints";
15
+ @import "controls";
16
+ @import "search_form";
17
+ @import "search_results";
18
+ @import "pagination";
19
+ @import "group";
20
+ @import "bookmark";
21
+ @import "balanced_list";
22
+ @import "facets";
23
+ @import "search_history";
24
+ @import "modal";
25
+ @import "twitter_typeahead";
26
+ @import "icons";
@@ -1,16 +1,4 @@
1
- .clear-bookmarks {
2
- margin-left: $border-radius-base;
3
- }
4
-
5
- label.toggle_bookmark {
1
+ label.toggle-bookmark {
6
2
  font-weight: inherit;
7
3
  min-width: 8.5em;
8
4
  }
9
-
10
- // Tools link on document show page
11
- .show-tools {
12
- .bookmark_toggle {
13
- padding: $nav-link-padding;
14
- }
15
- }
16
-
@@ -0,0 +1,27 @@
1
+ .navbar + .container {
2
+ @extend .py-2;
3
+ }
4
+
5
+ .card-header.collapse-toggle {
6
+ margin-bottom: 0;
7
+
8
+ &::after {
9
+ content: "❯";
10
+ float: right;
11
+ transform: rotate(90deg);
12
+ }
13
+
14
+ &.collapsed {
15
+ border-bottom: 0;
16
+
17
+ &::after {
18
+ transform: rotate(0deg);
19
+ transition: transform 0.1s ease;
20
+ }
21
+ }
22
+ }
23
+
24
+
25
+ .page-link {
26
+ white-space: nowrap;
27
+ }