blacklight 6.25.0 → 7.0.0.rc1

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