blacklight 6.20.0 → 7.3.0

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