blacklight 8.0.0.beta4 → 8.0.0.beta6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (122) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop_todo.yml +3 -1
  4. data/Gemfile +0 -4
  5. data/README.md +1 -1
  6. data/Rakefile +18 -0
  7. data/VERSION +1 -1
  8. data/app/assets/config/blacklight/manifest.js +3 -0
  9. data/app/assets/stylesheets/blacklight/_facets.scss +32 -5
  10. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +1 -1
  11. data/app/components/blacklight/document_component.rb +44 -18
  12. data/app/components/blacklight/document_metadata_component.html.erb +4 -2
  13. data/app/components/blacklight/document_metadata_component.rb +8 -2
  14. data/app/components/blacklight/metadata_field_layout_component.rb +7 -4
  15. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
  16. data/app/components/blacklight/response/facet_group_component.html.erb +2 -1
  17. data/app/components/blacklight/response/sort_component.rb +1 -1
  18. data/app/components/blacklight/response/spellcheck_component.rb +1 -1
  19. data/app/components/blacklight/response/view_type_button_component.rb +1 -1
  20. data/app/components/blacklight/response/view_type_component.rb +1 -1
  21. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
  22. data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
  23. data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
  24. data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
  25. data/app/components/blacklight/system/dropdown_component.rb +1 -1
  26. data/app/components/blacklight/system/flash_message_component.rb +1 -1
  27. data/app/components/blacklight/system/modal_component.rb +1 -1
  28. data/app/controllers/concerns/blacklight/bookmarks.rb +1 -1
  29. data/app/controllers/concerns/blacklight/search_context.rb +46 -6
  30. data/app/helpers/blacklight/blacklight_helper_behavior.rb +0 -101
  31. data/app/helpers/blacklight/catalog_helper_behavior.rb +27 -54
  32. data/app/helpers/blacklight/component_helper_behavior.rb +0 -11
  33. data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
  34. data/app/helpers/blacklight/layout_helper_behavior.rb +59 -0
  35. data/app/helpers/blacklight/url_helper_behavior.rb +11 -3
  36. data/app/javascript/blacklight/bookmark_toggle.js +8 -15
  37. data/app/javascript/blacklight/button_focus.js +10 -10
  38. data/app/javascript/blacklight/index.js +5 -5
  39. data/app/javascript/blacklight/modal.js +11 -16
  40. data/app/javascript/blacklight/search_context.js +51 -57
  41. data/app/models/concerns/blacklight/document.rb +11 -0
  42. data/app/models/record_mailer.rb +19 -15
  43. data/app/presenters/blacklight/document_presenter.rb +13 -11
  44. data/app/presenters/blacklight/index_presenter.rb +1 -1
  45. data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
  46. data/app/presenters/blacklight/rendering/join.rb +7 -1
  47. data/app/presenters/blacklight/rendering/link_to_facet.rb +1 -1
  48. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  49. data/app/services/blacklight/search_service.rb +2 -1
  50. data/app/views/catalog/_document.atom.builder +1 -1
  51. data/app/views/catalog/_document.html.erb +3 -8
  52. data/app/views/catalog/_document_list.html.erb +2 -1
  53. data/app/views/catalog/_show_main_content.html.erb +3 -9
  54. data/app/views/catalog/index.html.erb +3 -0
  55. data/app/views/catalog/show.html.erb +1 -6
  56. data/app/views/layouts/blacklight/base.html.erb +4 -4
  57. data/app/views/record_mailer/email_record.text.erb +4 -3
  58. data/app/views/record_mailer/sms_record.text.erb +4 -4
  59. data/blacklight.gemspec +1 -1
  60. data/config/importmap.rb +1 -1
  61. data/config/locales/blacklight.ar.yml +209 -232
  62. data/config/locales/blacklight.ca.yml +0 -6
  63. data/config/locales/blacklight.de.yml +197 -215
  64. data/config/locales/blacklight.en.yml +2 -6
  65. data/config/locales/blacklight.es.yml +196 -215
  66. data/config/locales/blacklight.fr.yml +196 -219
  67. data/config/locales/blacklight.hu.yml +193 -212
  68. data/config/locales/blacklight.it.yml +197 -215
  69. data/config/locales/blacklight.nl.yml +193 -212
  70. data/config/locales/blacklight.pt-BR.yml +195 -215
  71. data/config/locales/blacklight.sq.yml +193 -212
  72. data/config/locales/blacklight.zh.yml +194 -213
  73. data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
  74. data/lib/blacklight/configuration/view_config.rb +0 -4
  75. data/lib/blacklight/configuration.rb +8 -4
  76. data/lib/blacklight/engine.rb +6 -7
  77. data/lib/blacklight/routes/searchable.rb +1 -0
  78. data/lib/generators/blacklight/assets/importmap_generator.rb +9 -2
  79. data/lib/generators/blacklight/assets/propshaft_generator.rb +11 -2
  80. data/lib/generators/blacklight/assets/sprockets_generator.rb +2 -0
  81. data/lib/generators/blacklight/templates/solr_document.rb +0 -6
  82. data/package.json +7 -4
  83. data/rollup.config.js +11 -1
  84. data/spec/components/blacklight/document_component_spec.rb +9 -4
  85. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
  86. data/spec/components/blacklight/{search_context_component_spec.rb → search_context/server_item_pagination_component_spec.rb} +15 -4
  87. data/spec/controllers/bookmarks_controller_spec.rb +1 -1
  88. data/spec/controllers/catalog_controller_spec.rb +17 -5
  89. data/spec/features/component_template_override_spec.rb +8 -0
  90. data/spec/features/modal_spec.rb +12 -0
  91. data/spec/features/sitelinks_search_box_spec.rb +13 -0
  92. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +1 -1
  93. data/spec/helpers/blacklight_helper_spec.rb +0 -56
  94. data/spec/helpers/catalog_helper_spec.rb +56 -0
  95. data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
  96. data/spec/models/blacklight/icon_spec.rb +0 -2
  97. data/spec/models/record_mailer_spec.rb +36 -23
  98. data/spec/presenters/blacklight/document_presenter_spec.rb +1 -0
  99. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -2
  100. data/spec/presenters/blacklight/index_presenter_spec.rb +1 -0
  101. data/spec/presenters/blacklight/show_presenter_spec.rb +1 -0
  102. data/spec/presenters/pipeline_spec.rb +13 -2
  103. data/spec/routing/catalog_routing_spec.rb +4 -0
  104. data/spec/spec_helper.rb +1 -1
  105. data/spec/support/view_component_test_helpers.rb +21 -0
  106. data/spec/test_app_templates/Gemfile.extra +4 -0
  107. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -0
  108. data/spec/views/catalog/_document.html.erb_spec.rb +22 -1
  109. data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
  110. data/tasks/blacklight.rake +1 -1
  111. metadata +24 -20
  112. data/app/assets/javascripts/blacklight/blacklight.esm.js +0 -390
  113. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +0 -1
  114. data/app/assets/javascripts/blacklight/blacklight.js +0 -398
  115. data/app/assets/javascripts/blacklight/blacklight.js.map +0 -1
  116. data/app/components/blacklight/search_context_component.rb +0 -68
  117. data/app/models/concerns/blacklight/document/email.rb +0 -27
  118. data/app/models/concerns/blacklight/document/sms.rb +0 -25
  119. data/spec/features/sitelinks_search_box.rb +0 -13
  120. data/spec/models/blacklight/document/email_spec.rb +0 -57
  121. data/spec/models/blacklight/document/sms_spec.rb +0 -58
  122. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
@@ -6,8 +6,6 @@ module Blacklight::BlacklightHelperBehavior
6
6
  include Blacklight::LayoutHelperBehavior
7
7
  include Blacklight::IconHelperBehavior
8
8
 
9
- # @!group Layout helpers
10
-
11
9
  ##
12
10
  # Get the name of this application from an i18n string
13
11
  # key: blacklight.application_name
@@ -23,63 +21,6 @@ module Blacklight::BlacklightHelperBehavior
23
21
  end
24
22
  end
25
23
 
26
- ##
27
- # Get the page's HTML title
28
- #
29
- # @return [String]
30
- def render_page_title
31
- (content_for(:page_title) if content_for?(:page_title)) || @page_title || application_name
32
- end
33
-
34
- ##
35
- # Create <link rel="alternate"> links from a documents dynamically
36
- # provided export formats.
37
- #
38
- # Returns empty string if no links available.
39
- #
40
- # @param [SolrDocument] document
41
- # @param [Hash] options
42
- # @option options [Boolean] :unique ensures only one link is output for every
43
- # content type, e.g. as required by atom
44
- # @option options [Array<String>] :exclude array of format shortnames to not include in the output
45
- # @return [String]
46
- def render_link_rel_alternates(document = @document, options = {})
47
- return if document.nil?
48
-
49
- document_presenter(document).link_rel_alternates(options)
50
- end
51
-
52
- ##
53
- # Render classes for the <body> element
54
- # @return [String]
55
- def render_body_class
56
- extra_body_classes.join " "
57
- end
58
-
59
- ##
60
- # List of classes to be applied to the <body> element
61
- # @see render_body_class
62
- # @return [Array<String>]
63
- def extra_body_classes
64
- @extra_body_classes ||= ["blacklight-#{controller.controller_name}", "blacklight-#{[controller.controller_name, controller.action_name].join('-')}"]
65
- end
66
-
67
- ##
68
- # Get the current "view type" (and ensure it is a valid type)
69
- #
70
- # @param [Hash] query_params the query parameters to check
71
- # @return [Symbol]
72
- def document_index_view_type query_params = params
73
- view_param = query_params[:view]
74
- view_param ||= session[:preferred_view]
75
- if view_param && document_index_views.key?(view_param.to_sym)
76
- view_param.to_sym
77
- else
78
- default_document_index_view_type
79
- end
80
- end
81
-
82
- # @!group Search result helpers
83
24
  ##
84
25
  # Render a partial of an arbitrary format inside a
85
26
  # template of a different format. (e.g. render an HTML
@@ -96,46 +37,4 @@ module Blacklight::BlacklightHelperBehavior
96
37
  self.formats = old_formats
97
38
  nil
98
39
  end
99
-
100
- ##
101
- # Should we render a grouped response (because the response
102
- # contains a grouped response instead of the normal response)
103
- #
104
- # Default to false if there's no response object available (sometimes the case
105
- # for tests, but might happen in other circumstances too..)
106
- # @return [Boolean]
107
- def render_grouped_response? response = @response
108
- response&.grouped?
109
- end
110
-
111
- ##
112
- # Returns a document presenter for the given document
113
- def document_presenter(document)
114
- document_presenter_class(document).new(document, self)
115
- end
116
-
117
- ##
118
- # Override this method if you want to use a differnet presenter for your documents
119
- # @param [Blacklight::Document] _document optional, here for extension + backwards compatibility only
120
- def document_presenter_class(_document = nil)
121
- case action_name
122
- when 'show', 'citation'
123
- blacklight_config.view_config(:show, action_name: action_name).document_presenter_class
124
- else
125
- blacklight_config.view_config(document_index_view_type, action_name: action_name).document_presenter_class
126
- end
127
- end
128
-
129
- # @return [Class]
130
- def search_bar_presenter_class
131
- blacklight_config.view_config(action_name: :index).search_bar_presenter_class
132
- end
133
-
134
- # @!group Layout helpers
135
- ##
136
- # Open Search discovery tag for HTML <head> links
137
- # @return [String]
138
- def opensearch_description_tag title, href
139
- tag :link, href: href, title: title, type: "application/opensearchdescription+xml", rel: "search"
140
- end
141
40
  end
@@ -4,6 +4,7 @@
4
4
  module Blacklight::CatalogHelperBehavior
5
5
  include Blacklight::ConfigurationHelperBehavior
6
6
  include Blacklight::ComponentHelperBehavior
7
+ include Blacklight::DocumentHelperBehavior
7
8
  include Blacklight::FacetsHelperBehavior
8
9
  include Blacklight::RenderPartialsHelperBehavior
9
10
 
@@ -113,40 +114,6 @@ module Blacklight::CatalogHelperBehavior
113
114
  (@response.rows if @response && @response.rows > 0) || params.fetch(:per_page, blacklight_config.default_per_page).to_i
114
115
  end
115
116
 
116
- ##
117
- # Get the classes to add to a document's div
118
- #
119
- # @param [Blacklight::Document] document
120
- # @return [String]
121
- def render_document_class(document = @document)
122
- types = document_presenter(document).display_type
123
- return if types.blank?
124
-
125
- Array(types).compact.map do |t|
126
- "#{document_class_prefix}#{t.try(:parameterize) || t}"
127
- end.join(' ')
128
- end
129
-
130
- ##
131
- # Return a prefix for the document classes infered from the document
132
- # @see #render_document_class
133
- # @return [String]
134
- def document_class_prefix
135
- 'blacklight-'
136
- end
137
-
138
- ##
139
- # Render the sidebar partial for a document
140
- # This is used as an integration point by downstream apps to add to the
141
- # default sidebar.
142
- # See: https://github.com/geoblacklight/geoblacklight/blob/7d3c31c7af3362879b97e2c1351a2496c728c59c/app/helpers/blacklight_helper.rb#L7
143
- #
144
- # @param [SolrDocument] document
145
- # @return [String]
146
- def render_document_sidebar_partial(document)
147
- render 'show_sidebar', document: document
148
- end
149
-
150
117
  ##
151
118
  # Should we display the sort and per page widget?
152
119
  #
@@ -167,26 +134,6 @@ module Blacklight::CatalogHelperBehavior
167
134
  response.limit_value > 0
168
135
  end
169
136
 
170
- ##
171
- # return the Bookmarks on a set of documents (all bookmarks on the page)
172
- # @private
173
- # @return [Enumerable<Bookmark>]
174
- def current_bookmarks
175
- @current_bookmarks ||= begin
176
- documents = @document.presence || @response.documents
177
- current_or_guest_user.bookmarks_for_documents(Array(documents)).to_a
178
- end
179
- end
180
- private :current_bookmarks
181
-
182
- ##
183
- # Check if the document is in the user's bookmarks
184
- # @param [Blacklight::Document] document
185
- # @return [Boolean]
186
- def bookmarked? document
187
- current_bookmarks.any? { |x| x.document_id == document.id && x.document_type == document.class }
188
- end
189
-
190
137
  # Render an html <title> appropriate string for a selected facet field and values
191
138
  #
192
139
  # @see #render_search_to_page_title
@@ -233,6 +180,32 @@ module Blacklight::CatalogHelperBehavior
233
180
  constraints.join(' / ')
234
181
  end
235
182
 
183
+ ##
184
+ # Should we render a grouped response (because the response
185
+ # contains a grouped response instead of the normal response)
186
+ #
187
+ # Default to false if there's no response object available (sometimes the case
188
+ # for tests, but might happen in other circumstances too..)
189
+ # @return [Boolean]
190
+ def render_grouped_response? response = @response
191
+ response&.grouped?
192
+ end
193
+
194
+ ##
195
+ # Get the current "view type" (and ensure it is a valid type)
196
+ #
197
+ # @param [Hash] query_params the query parameters to check
198
+ # @return [Symbol]
199
+ def document_index_view_type query_params = params || {}
200
+ view_param = query_params[:view]
201
+ view_param ||= session[:preferred_view] if respond_to?(:session)
202
+ if view_param && document_index_views.key?(view_param.to_sym)
203
+ view_param.to_sym
204
+ else
205
+ default_document_index_view_type
206
+ end
207
+ end
208
+
236
209
  private
237
210
 
238
211
  # @param [String] format
@@ -2,17 +2,6 @@
2
2
 
3
3
  module Blacklight
4
4
  module ComponentHelperBehavior
5
- ##
6
- # Render "document actions" area for navigation header
7
- # (normally renders "Saved Searches", "History", "Bookmarks")
8
- # These things are added by add_nav_action
9
- #
10
- # @param [Hash] options
11
- # @return [String]
12
- def render_nav_actions(options = {}, &block)
13
- render_filtered_partials(blacklight_config.navbar.partials, options, &block)
14
- end
15
-
16
5
  ##
17
6
  # Render "document actions" area for search results view
18
7
  # (normally renders next to title in the list view)
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Helper methods for catalog-like controllers that work with documents
4
+ module Blacklight::DocumentHelperBehavior
5
+ ##
6
+ # Get the classes to add to a document's div
7
+ #
8
+ # @param [Blacklight::Document] document
9
+ # @return [String]
10
+ def render_document_class(document = @document)
11
+ types = document_presenter(document).display_type
12
+ return if types.blank?
13
+
14
+ Array(types).compact.map do |t|
15
+ "#{document_class_prefix}#{t.try(:parameterize) || t}"
16
+ end.join(' ')
17
+ end
18
+
19
+ ##
20
+ # Return a prefix for the document classes infered from the document
21
+ # @see #render_document_class
22
+ # @return [String]
23
+ def document_class_prefix
24
+ 'blacklight-'
25
+ end
26
+
27
+ ##
28
+ # Render the sidebar partial for a document
29
+ # This is used as an integration point by downstream apps to add to the
30
+ # default sidebar.
31
+ # See: https://github.com/geoblacklight/geoblacklight/blob/7d3c31c7af3362879b97e2c1351a2496c728c59c/app/helpers/blacklight_helper.rb#L7
32
+ #
33
+ # @param [SolrDocument] document
34
+ # @return [String]
35
+ def render_document_sidebar_partial(document)
36
+ render 'show_sidebar', document: document
37
+ end
38
+
39
+ ##
40
+ # return the Bookmarks on a set of documents (all bookmarks on the page)
41
+ # @private
42
+ # @return [Enumerable<Bookmark>]
43
+ def current_bookmarks
44
+ @current_bookmarks ||= begin
45
+ documents = @document.presence || @response.documents
46
+ current_or_guest_user.bookmarks_for_documents(Array(documents)).to_a
47
+ end
48
+ end
49
+ private :current_bookmarks
50
+
51
+ ##
52
+ # Check if the document is in the user's bookmarks
53
+ # @param [Blacklight::Document] document
54
+ # @return [Boolean]
55
+ def bookmarked? document
56
+ current_bookmarks.any? { |x| x.document_id == document.id && x.document_type == document.class }
57
+ end
58
+
59
+ ##
60
+ # Returns a document presenter for the given document
61
+ def document_presenter(document)
62
+ document_presenter_class(document).new(document, self)
63
+ end
64
+
65
+ ##
66
+ # Override this method if you want to use a differnet presenter for your documents
67
+ # @param [Blacklight::Document] _document optional, here for extension + backwards compatibility only
68
+ def document_presenter_class(_document = nil)
69
+ case action_name
70
+ when 'show', 'citation'
71
+ blacklight_config.view_config(:show, action_name: action_name).document_presenter_class
72
+ else
73
+ blacklight_config.view_config(document_index_view_type, action_name: action_name).document_presenter_class
74
+ end
75
+ end
76
+ end
@@ -47,5 +47,64 @@ module Blacklight
47
47
  def container_classes
48
48
  'container'
49
49
  end
50
+
51
+ ##
52
+ # Render "document actions" area for navigation header
53
+ # (normally renders "Saved Searches", "History", "Bookmarks")
54
+ # These things are added by add_nav_action
55
+ #
56
+ # @param [Hash] options
57
+ # @return [String]
58
+ def render_nav_actions(options = {}, &block)
59
+ render_filtered_partials(blacklight_config.navbar.partials, options, &block)
60
+ end
61
+
62
+ ##
63
+ # Open Search discovery tag for HTML <head> links
64
+ # @return [String]
65
+ def opensearch_description_tag title, href
66
+ tag :link, href: href, title: title, type: "application/opensearchdescription+xml", rel: "search"
67
+ end
68
+
69
+ ##
70
+ # Get the page's HTML title
71
+ #
72
+ # @return [String]
73
+ def render_page_title
74
+ (content_for(:page_title) if content_for?(:page_title)) || @page_title || application_name
75
+ end
76
+
77
+ ##
78
+ # Create <link rel="alternate"> links from a documents dynamically
79
+ # provided export formats.
80
+ #
81
+ # Returns empty string if no links available.
82
+ #
83
+ # @param [SolrDocument] document
84
+ # @param [Hash] options
85
+ # @option options [Boolean] :unique ensures only one link is output for every
86
+ # content type, e.g. as required by atom
87
+ # @option options [Array<String>] :exclude array of format shortnames to not include in the output
88
+ # @return [String]
89
+ def render_link_rel_alternates(document = @document, options = {})
90
+ return if document.nil?
91
+
92
+ document_presenter(document).link_rel_alternates(options)
93
+ end
94
+
95
+ ##
96
+ # Render classes for the <body> element
97
+ # @return [String]
98
+ def render_body_class
99
+ extra_body_classes.join " "
100
+ end
101
+
102
+ ##
103
+ # List of classes to be applied to the <body> element
104
+ # @see render_body_class
105
+ # @return [Array<String>]
106
+ def extra_body_classes
107
+ @extra_body_classes ||= ["blacklight-#{controller.controller_name}", "blacklight-#{[controller.controller_name, controller.action_name].join('-')}"]
108
+ end
50
109
  end
51
110
  end
@@ -43,16 +43,22 @@ module Blacklight::UrlHelperBehavior
43
43
  # session_tracking_params(SolrDocument.new(id: 123), 7)
44
44
  # => { data: { context_href: '/catalog/123/track?counter=7&search_id=999' } }
45
45
  def session_tracking_params document, counter, per_page: search_session['per_page'], search_id: current_search_session&.id
46
- path = session_tracking_path(document, per_page: params.fetch(:per_page, per_page), counter: counter, search_id: search_id, document_id: document&.id)
46
+ path_params = { per_page: params.fetch(:per_page, per_page), counter: counter, search_id: search_id }
47
+ if blacklight_config.track_search_session.storage == 'server'
48
+ path_params[:document_id] = document&.id
49
+ path_params[:search_id] = search_id
50
+ end
51
+ path = session_tracking_path(document, path_params)
47
52
  return {} if path.nil?
48
53
 
49
- { data: { context_href: path } }
54
+ context_method = blacklight_config.track_search_session.storage == 'client' ? 'get' : 'post'
55
+ { data: { context_href: path, context_method: context_method } }
50
56
  end
51
57
 
52
58
  ##
53
59
  # Get the URL for tracking search sessions across pages using polymorphic routing
54
60
  def session_tracking_path document, params = {}
55
- return if document.nil? || !blacklight_config&.track_search_session
61
+ return if document.nil? || !blacklight_config.track_search_session.storage
56
62
 
57
63
  if main_app.respond_to?(controller_tracking_method)
58
64
  return main_app.public_send(controller_tracking_method, params.merge(id: document))
@@ -63,6 +69,8 @@ module Blacklight::UrlHelperBehavior
63
69
  end
64
70
 
65
71
  def controller_tracking_method
72
+ return blacklight_config.track_search_session.url_helper if blacklight_config.track_search_session.url_helper
73
+
66
74
  "track_#{controller_name}_path"
67
75
  end
68
76
 
@@ -1,19 +1,12 @@
1
- import Blacklight from './core'
2
- import CheckboxSubmit from './checkbox_submit'
1
+ import CheckboxSubmit from 'blacklight/checkbox_submit'
3
2
 
4
- const BookmarkToggle = (() => {
5
- // change form submit toggle to checkbox
6
- Blacklight.doBookmarkToggleBehavior = function() {
7
- document.addEventListener('click', (e) => {
8
- if (e.target.matches('[data-checkboxsubmit-target="checkbox"]')) {
9
- const form = e.target.closest('form')
10
- if (form) new CheckboxSubmit(form).clicked(e);
11
- }
12
- });
13
- };
14
- Blacklight.doBookmarkToggleBehavior.selector = 'form.bookmark-toggle';
3
+ const BookmarkToggle = (e) => {
4
+ if (e.target.matches('[data-checkboxsubmit-target="checkbox"]')) {
5
+ const form = e.target.closest('form')
6
+ if (form) new CheckboxSubmit(form).clicked(e);
7
+ }
8
+ };
15
9
 
16
- Blacklight.doBookmarkToggleBehavior();
17
- })()
10
+ document.addEventListener('click', BookmarkToggle);
18
11
 
19
12
  export default BookmarkToggle
@@ -1,12 +1,12 @@
1
- const ButtonFocus = (() => {
2
- document.addEventListener('click', (e) => {
3
- // Button clicks should change focus. As of 10/3/19, Firefox for Mac and
4
- // Safari both do not set focus to a button on button click.
5
- // See https://zellwk.com/blog/inconsistent-button-behavior/ for background information
6
- if (e.target.matches('[data-toggle="collapse"]') || e.target.matches('[data-bs-toggle="collapse"]')) {
7
- e.target.focus()
8
- }
9
- })
10
- })()
1
+ const ButtonFocus = (e) => {
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
+ // See https://zellwk.com/blog/inconsistent-button-behavior/ for background information
5
+ if (e.target.matches('[data-toggle="collapse"]') || e.target.matches('[data-bs-toggle="collapse"]')) {
6
+ e.target.focus()
7
+ }
8
+ }
9
+
10
+ document.addEventListener('click', ButtonFocus)
11
11
 
12
12
  export default ButtonFocus
@@ -1,8 +1,8 @@
1
- import BookmarkToggle from './bookmark_toggle'
2
- import ButtonFocus from './button_focus'
3
- import Modal from './modal'
4
- import SearchContext from './search_context'
5
- import Core from './core'
1
+ import BookmarkToggle from 'blacklight/bookmark_toggle'
2
+ import ButtonFocus from 'blacklight/button_focus'
3
+ import Modal from 'blacklight/modal'
4
+ import SearchContext from 'blacklight/search_context'
5
+ import Core from 'blacklight/core'
6
6
 
7
7
  export default {
8
8
  BookmarkToggle,
@@ -32,7 +32,7 @@
32
32
 
33
33
  <div data-blacklight-modal="container">
34
34
  <div class="modal-header">
35
- <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
35
+ <button type="button" class="close" data-bl-dismiss="modal" aria-hidden="true">×</button>
36
36
  <h3 class="modal-title">Request Placed</h3>
37
37
  </div>
38
38
 
@@ -43,7 +43,7 @@
43
43
 
44
44
 
45
45
  <div class="modal-footer">
46
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
46
+ <button type="button" class="btn btn-secondary" data-bl-dismiss="modal">Close</button>
47
47
  </div>
48
48
  </div>
49
49
 
@@ -52,17 +52,10 @@
52
52
  can be a turbo-stream that defines some HTML fragementsand where on the page to put them:
53
53
  https://turbo.hotwired.dev/handbook/streams
54
54
  */
55
- import Blacklight from './core'
56
- import ModalForm from './modalForm'
55
+ import ModalForm from 'blacklight/modalForm'
57
56
 
58
57
  const Modal = (() => {
59
- // We keep all our data in Blacklight.modal object.
60
- // Create lazily if someone else created first.
61
- if (Blacklight.modal === undefined) {
62
- Blacklight.modal = {};
63
- }
64
-
65
- const modal = Blacklight.modal
58
+ const modal = {}
66
59
 
67
60
  // a Bootstrap modal div that should be already on the page hidden
68
61
  modal.modalSelector = '#blacklight-modal';
@@ -89,7 +82,7 @@ const Modal = (() => {
89
82
 
90
83
  const contents = `<div class="modal-header">
91
84
  <div class="modal-title">There was a problem with your request.</div>
92
- <button type="button" class="blacklight-modal-close btn-close close" data-dismiss="modal" data-bs-dismiss="modal" aria-label="Close">
85
+ <button type="button" class="blacklight-modal-close btn-close close" data-bl-dismiss="modal" aria-label="Close">
93
86
  <span aria-hidden="true" class="visually-hidden">&times;</span>
94
87
  </button>
95
88
  </div>
@@ -139,28 +132,30 @@ const Modal = (() => {
139
132
  // into one selector with a comma, so if something matches BOTH selectors, it
140
133
  // still only gets the event handler called once.
141
134
  document.addEventListener('click', (e) => {
142
- if (e.target.matches(`${modal.triggerLinkSelector}, ${modal.preserveLinkSelector}`))
135
+ if (e.target.closest(`${modal.triggerLinkSelector}, ${modal.preserveLinkSelector}`))
143
136
  modal.modalAjaxLinkClick(e)
144
- else if (e.target.matches('[data-bl-dismiss="modal"]'))
137
+ else if (e.target.closest('[data-bl-dismiss="modal"]'))
145
138
  modal.hide()
146
139
  })
147
140
  };
148
141
 
149
142
  modal.hide = function (el) {
150
- const dom = document.querySelector(Blacklight.modal.modalSelector)
143
+ const dom = document.querySelector(modal.modalSelector)
151
144
 
152
145
  if (!dom.open) return
153
146
  dom.close()
154
147
  }
155
148
 
156
149
  modal.show = function(el) {
157
- const dom = document.querySelector(Blacklight.modal.modalSelector)
150
+ const dom = document.querySelector(modal.modalSelector)
158
151
 
159
152
  if (dom.open) return
160
153
  dom.showModal()
161
154
  }
162
155
 
163
156
  modal.setupModal()
157
+
158
+ return modal;
164
159
  })()
165
160
 
166
161
  export default Modal