blacklight 8.0.0.beta1 → 8.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/.env +1 -0
  3. data/.github/workflows/ruby.yml +6 -0
  4. data/.gitignore +1 -0
  5. data/.rubocop_todo.yml +3 -1
  6. data/README.md +1 -1
  7. data/Rakefile +18 -0
  8. data/VERSION +1 -1
  9. data/app/assets/config/blacklight/manifest.js +3 -0
  10. data/app/assets/javascripts/blacklight/blacklight.esm.js +132 -140
  11. data/app/assets/javascripts/blacklight/blacklight.esm.js.map +1 -1
  12. data/app/assets/javascripts/blacklight/blacklight.js +132 -140
  13. data/app/assets/javascripts/blacklight/blacklight.js.map +1 -1
  14. data/app/assets/stylesheets/blacklight/_bootstrap_overrides.scss +1 -1
  15. data/app/assets/stylesheets/blacklight/_facets.scss +32 -5
  16. data/app/assets/stylesheets/blacklight/blacklight_defaults.scss +1 -1
  17. data/app/components/blacklight/advanced_search_form_component.rb +3 -3
  18. data/app/components/blacklight/document/actions_component.rb +1 -1
  19. data/app/components/blacklight/document/show_tools_component.html.erb +12 -0
  20. data/app/components/blacklight/document/show_tools_component.rb +23 -0
  21. data/app/components/blacklight/document_component.rb +48 -20
  22. data/app/components/blacklight/document_metadata_component.html.erb +4 -2
  23. data/app/components/blacklight/document_metadata_component.rb +8 -2
  24. data/app/components/blacklight/facet_field_checkboxes_component.html.erb +2 -2
  25. data/app/components/blacklight/facet_field_list_component.html.erb +2 -2
  26. data/app/components/blacklight/metadata_field_component.html.erb +2 -2
  27. data/app/components/blacklight/metadata_field_layout_component.rb +7 -4
  28. data/app/components/blacklight/metadata_field_plain_text_layout_component.rb +17 -0
  29. data/app/components/blacklight/response/facet_group_component.html.erb +2 -1
  30. data/app/components/blacklight/response/facet_group_component.rb +1 -1
  31. data/app/components/blacklight/response/sort_component.rb +1 -1
  32. data/app/components/blacklight/response/spellcheck_component.rb +1 -1
  33. data/app/components/blacklight/response/view_type_button_component.rb +1 -1
  34. data/app/components/blacklight/response/view_type_component.rb +2 -2
  35. data/app/components/blacklight/search/sidebar_component.html.erb +1 -1
  36. data/app/components/blacklight/search_context/server_applied_params_component.html.erb +4 -0
  37. data/app/components/blacklight/search_context/server_applied_params_component.rb +13 -0
  38. data/app/components/blacklight/search_context/server_item_pagination_component.rb +71 -0
  39. data/app/components/blacklight/system/dropdown_component.rb +3 -3
  40. data/app/components/blacklight/system/flash_message_component.rb +2 -2
  41. data/app/components/blacklight/system/modal_component.rb +1 -1
  42. data/app/components/blacklight/top_navbar_component.html.erb +1 -1
  43. data/app/components/blacklight/top_navbar_component.rb +4 -0
  44. data/app/controllers/concerns/blacklight/bookmarks.rb +1 -1
  45. data/app/controllers/concerns/blacklight/search_context.rb +46 -6
  46. data/app/helpers/blacklight/blacklight_helper_behavior.rb +0 -101
  47. data/app/helpers/blacklight/catalog_helper_behavior.rb +27 -54
  48. data/app/helpers/blacklight/component_helper_behavior.rb +0 -11
  49. data/app/helpers/blacklight/document_helper_behavior.rb +76 -0
  50. data/app/helpers/blacklight/layout_helper_behavior.rb +59 -0
  51. data/app/helpers/blacklight/render_partials_helper_behavior.rb +1 -0
  52. data/app/helpers/blacklight/url_helper_behavior.rb +11 -3
  53. data/app/javascript/blacklight/bookmark_toggle.js +8 -15
  54. data/app/javascript/blacklight/button_focus.js +10 -10
  55. data/app/javascript/blacklight/index.js +6 -5
  56. data/app/javascript/blacklight/modal.js +24 -24
  57. data/app/javascript/blacklight/search_context.js +51 -57
  58. data/app/models/concerns/blacklight/document.rb +11 -0
  59. data/app/models/record_mailer.rb +19 -15
  60. data/app/presenters/blacklight/document_presenter.rb +13 -11
  61. data/app/presenters/blacklight/index_presenter.rb +1 -1
  62. data/app/presenters/blacklight/rendering/abstract_step.rb +4 -0
  63. data/app/presenters/blacklight/rendering/join.rb +7 -1
  64. data/app/presenters/blacklight/rendering/link_to_facet.rb +1 -1
  65. data/app/presenters/blacklight/rendering/microdata.rb +1 -1
  66. data/app/services/blacklight/search_service.rb +2 -1
  67. data/app/views/catalog/_document.atom.builder +1 -1
  68. data/app/views/catalog/_document.html.erb +3 -8
  69. data/app/views/catalog/_document_list.html.erb +2 -1
  70. data/app/views/catalog/_facet_layout.html.erb +2 -2
  71. data/app/views/catalog/_show_main_content.html.erb +5 -11
  72. data/app/views/catalog/_show_tools.html.erb +1 -14
  73. data/app/views/catalog/facet.html.erb +3 -3
  74. data/app/views/catalog/index.html.erb +3 -0
  75. data/app/views/catalog/show.html.erb +1 -6
  76. data/app/views/layouts/blacklight/base.html.erb +4 -5
  77. data/app/views/record_mailer/email_record.text.erb +4 -3
  78. data/app/views/record_mailer/sms_record.text.erb +4 -4
  79. data/blacklight.gemspec +2 -2
  80. data/config/importmap.rb +1 -1
  81. data/config/locales/blacklight.ar.yml +209 -232
  82. data/config/locales/blacklight.ca.yml +0 -6
  83. data/config/locales/blacklight.de.yml +197 -215
  84. data/config/locales/blacklight.en.yml +2 -6
  85. data/config/locales/blacklight.es.yml +196 -215
  86. data/config/locales/blacklight.fr.yml +196 -219
  87. data/config/locales/blacklight.hu.yml +193 -212
  88. data/config/locales/blacklight.it.yml +197 -215
  89. data/config/locales/blacklight.nl.yml +193 -212
  90. data/config/locales/blacklight.pt-BR.yml +195 -215
  91. data/config/locales/blacklight.sq.yml +193 -212
  92. data/config/locales/blacklight.zh.yml +194 -213
  93. data/docker-compose.yml +1 -0
  94. data/lib/blacklight/configuration/session_tracking_config.rb +45 -0
  95. data/lib/blacklight/configuration/view_config.rb +0 -4
  96. data/lib/blacklight/configuration.rb +8 -4
  97. data/lib/blacklight/engine.rb +6 -7
  98. data/lib/blacklight/routes/searchable.rb +1 -0
  99. data/lib/generators/blacklight/assets/importmap_generator.rb +9 -8
  100. data/lib/generators/blacklight/assets/propshaft_generator.rb +11 -2
  101. data/lib/generators/blacklight/assets/sprockets_generator.rb +2 -0
  102. data/lib/generators/blacklight/assets_generator.rb +3 -1
  103. data/lib/generators/blacklight/install_generator.rb +3 -1
  104. data/lib/generators/blacklight/templates/solr_document.rb +0 -6
  105. data/package.json +7 -4
  106. data/rollup.config.js +11 -1
  107. data/spec/components/blacklight/document_component_spec.rb +66 -15
  108. data/spec/components/blacklight/header_component_spec.rb +20 -0
  109. data/spec/components/blacklight/response/view_type_component_spec.rb +17 -0
  110. data/spec/components/blacklight/search_bar_component_spec.rb +1 -1
  111. data/spec/components/blacklight/search_context/server_applied_params_component_spec.rb +29 -0
  112. data/spec/components/blacklight/{search_context_component_spec.rb → search_context/server_item_pagination_component_spec.rb} +15 -4
  113. data/spec/controllers/bookmarks_controller_spec.rb +1 -1
  114. data/spec/controllers/catalog_controller_spec.rb +18 -6
  115. data/spec/features/component_template_override_spec.rb +8 -0
  116. data/spec/features/modal_spec.rb +12 -0
  117. data/spec/features/sitelinks_search_box_spec.rb +13 -0
  118. data/spec/helpers/blacklight/url_helper_behavior_spec.rb +1 -1
  119. data/spec/helpers/blacklight_helper_spec.rb +0 -56
  120. data/spec/helpers/catalog_helper_spec.rb +56 -0
  121. data/spec/lib/blacklight/configuration/session_tracking_config_spec.rb +38 -0
  122. data/spec/lib/blacklight/open_struct_with_hash_access_spec.rb +2 -2
  123. data/spec/models/blacklight/configuration_spec.rb +2 -2
  124. data/spec/models/blacklight/icon_spec.rb +0 -2
  125. data/spec/models/blacklight/search_builder_spec.rb +3 -3
  126. data/spec/models/blacklight/solr/request_spec.rb +2 -2
  127. data/spec/models/record_mailer_spec.rb +36 -23
  128. data/spec/presenters/blacklight/document_presenter_spec.rb +1 -0
  129. data/spec/presenters/blacklight/field_presenter_spec.rb +2 -2
  130. data/spec/presenters/blacklight/index_presenter_spec.rb +1 -0
  131. data/spec/presenters/blacklight/show_presenter_spec.rb +1 -0
  132. data/spec/presenters/pipeline_spec.rb +13 -2
  133. data/spec/routing/catalog_routing_spec.rb +4 -0
  134. data/spec/spec_helper.rb +1 -1
  135. data/spec/support/view_component_test_helpers.rb +21 -0
  136. data/spec/test_app_templates/Gemfile.extra +4 -0
  137. data/spec/test_app_templates/lib/generators/test_app_generator.rb +8 -0
  138. data/spec/views/catalog/_document.html.erb_spec.rb +22 -1
  139. data/spec/views/catalog/_document_list.html.erb_spec.rb +7 -2
  140. data/spec/views/catalog/_show_tools.html.erb_spec.rb +2 -2
  141. data/spec/views/catalog/index.json.jbuilder_spec.rb +1 -1
  142. data/tasks/blacklight.rake +1 -1
  143. metadata +39 -21
  144. data/app/components/blacklight/search_context_component.rb +0 -68
  145. data/app/models/concerns/blacklight/document/email.rb +0 -27
  146. data/app/models/concerns/blacklight/document/sms.rb +0 -25
  147. data/spec/features/sitelinks_search_box.rb +0 -13
  148. data/spec/models/blacklight/document/email_spec.rb +0 -57
  149. data/spec/models/blacklight/document/sms_spec.rb +0 -58
  150. data/spec/support/view_component_capybara_test_helpers.rb +0 -8
  151. /data/app/components/blacklight/{search_context_component.html.erb → search_context/server_item_pagination_component.html.erb} +0 -0
@@ -1,240 +1,221 @@
1
+ ---
1
2
  zh:
2
- views:
3
- pagination:
4
- first: '« 首页'
5
- last: '末页 »'
6
- previous: '« 上一页'
7
- next: '下一页 »'
8
- truncate: '…'
9
- aria:
10
- container_label: 分页链接
11
- current_page: 当前页面,页面%{page}
12
- go_to_page: 前往页面%{page}
13
- go_to_previous_page: 转到上一页
14
- go_to_next_page: 转到下一页
15
- go_to_first_page: 转到第一页
16
- go_to_last_page: 转到最后一页
17
-
18
- pagination_compact:
19
- previous: '« 上一页'
20
- next: '下一页 »'
21
-
22
3
  blacklight:
23
- application_name: 'Blacklight'
24
- skip_links:
25
- label: '跳过链接'
26
- main_content: '转到主要内容'
27
- search_field: '转到搜索'
28
- first_result: '转到第一个搜索结果'
29
- header_links:
30
- login: '登陆'
31
- logout: '注销'
32
- bookmarks: '书签'
33
- search_history: '搜索历史'
34
-
35
- welcome: '欢迎!'
36
- and: '和'
37
- or: '或'
38
-
39
- modal:
40
- close: "关闭"
41
-
4
+ and: 和
5
+ application_name: Blacklight
6
+ back_to_bookmarks: 返回书签页面
7
+ back_to_search: 返回搜索页面
42
8
  bookmarks:
43
- title: '书签'
44
- page_title: '书签 - %{application_name}'
45
- no_bookmarks: '你还没有任何书签'
46
9
  add:
47
- button: '书签'
10
+ button: 书签
11
+ failure: 抱歉,保存书签时出错。
48
12
  success:
49
- one: '成功添加书签。'
50
- other: '成功添加书签。'
51
- failure: '抱歉,保存书签时出错。'
52
- remove:
53
- button: '删除书签'
54
- success: '成功删除书签。'
55
- failure: '抱歉,删除书签时出错。'
56
- action_confirm: '删除这个书签?'
57
- clear:
58
- action_title: '清除书签'
59
- action_confirm: '清除所有书签?'
60
- success: '已经清除了所有书签。'
61
- failure: '抱歉,清除书签时出错。'
62
- need_login: '登陆后才能访问你的书签功能。'
63
- list_title: '你的书签'
64
- delete: '删除'
65
-
66
- search_history:
13
+ one: 成功添加书签。
14
+ other: 成功添加书签。
67
15
  clear:
68
- action_title: '清除搜索历史'
69
- action_confirm: '清除搜索历史?'
70
- success: '已经清除搜索历史。'
71
- failure: '清除搜索历史时出错。'
72
- title: ''
73
- page_title: '搜索历史 - %{application_name}'
74
- no_history: '你没有任何搜索历史'
75
- recent: '你最近搜索历史'
76
- forget: '去除'
77
- save: '保存'
78
-
79
- tools:
80
- title: '工具'
81
- citation: '引用'
82
- email: '电子邮件'
83
- sms: '发送短信'
84
- clear: '清除'
85
-
16
+ action_confirm: 清除所有书签?
17
+ action_title: 清除书签
18
+ failure: 抱歉,清除书签时出错。
19
+ success: 已经清除了所有书签。
20
+ delete: 删除
21
+ list_title: 你的书签
22
+ need_login: 登陆后才能访问你的书签功能。
23
+ no_bookmarks: 你还没有任何书签
24
+ page_title: 书签 - %{application_name}
25
+ remove:
26
+ action_confirm: 删除这个书签?
27
+ button: 删除书签
28
+ failure: 抱歉,删除书签时出错。
29
+ success: 成功删除书签。
30
+ title: 书签
86
31
  citation:
87
- mla: 'MLA'
88
- apa: 'APA'
89
- chicago: 'Chicago'
90
-
32
+ apa: APA
33
+ chicago: Chicago
34
+ mla: MLA
35
+ did_you_mean: 你是要输入: %{options} 吗?
91
36
  email:
37
+ errors:
38
+ to:
39
+ blank: 请输入电子邮件接收人才能发送
40
+ invalid: 请输入合法电子邮件地址
92
41
  form:
93
- title: '通过电子邮件发送'
94
- to: '电子邮件:'
95
- message: '正文:'
96
- submit: '发送'
42
+ message: 正文:
43
+ submit: 发送
44
+ title: 通过电子邮件发送
45
+ to: 电子邮件:
46
+ success: 已发送电子邮件
97
47
  text:
98
- default_title: '无'
99
- title: '标题: %{value}'
100
- author: '作者: %{value}'
101
- format: '格式: %{value}'
102
- language: '语言: %{value}'
48
+ default_title: 无
49
+ message: 正文: %{message}
103
50
  subject:
104
51
  one: '记录: %{title}'
105
- other: '记录'
52
+ other: 记录
106
53
  url: '网址: %{url}'
107
- message: '正文: %{message}'
108
-
109
- success: "已发送电子邮件"
110
-
111
- errors:
112
- to:
113
- invalid: '请输入合法电子邮件地址'
114
- blank: '请输入电子邮件接收人才能发送'
115
- sms:
116
- form:
117
- title: '通过短信发送'
118
- to: '电话号码:'
119
- carrier: '运营商'
120
- carrier_prompt: '请选择运营商'
121
- submit: '发送'
122
- text:
123
- title: '%{value}'
124
- author: ' 来自 %{value}'
125
- url: '链接: %{url}'
126
- success: "已发送短信"
127
- errors:
128
- to:
129
- invalid: '请输入10位正确电话号码'
130
- blank: "请输入接收人电话号码才能发送短信"
131
- carrier:
132
- blank: '你必须选择一个运营商'
133
- invalid: "你必须输入一个运营商"
134
-
135
- back_to_search: '返回搜索页面'
136
- back_to_bookmarks: '返回书签页面'
137
-
54
+ entry_name:
55
+ default: 条目
56
+ grouped:
57
+ default: 分组结果
58
+ header_links:
59
+ bookmarks: 书签
60
+ login: 登陆
61
+ logout: 注销
62
+ search_history: 搜索历史
63
+ main:
64
+ aria:
65
+ main_container: 主要内容
66
+ modal:
67
+ close: 关闭
68
+ or: 或
138
69
  search:
139
- page_title:
140
- title: '%{constraints} - %{application_name} 搜索结果'
141
- constraint: '%{label}: %{value}'
142
- many_constraint_values: '%{values} 已选'
143
- header: '搜'
144
- search_constraints_header: '搜索条件'
145
- search_results: '搜索结果'
146
- errors:
147
- invalid_solr_id: "抱歉,你要找的结果不存在。"
148
- per_page:
149
- label: '%{count}<span class="sr-only visually-hidden"> 每页</span>'
150
- button_label: '%{count} 每页' # TODO: Remove during major release
151
- button_label_html: '%{count}<span class="d-none d-sm-inline"> 每页</span>'
152
- title: '每页显示结果数'
153
- submit: '更新'
154
- aria_label: '结果导航'
155
- sort:
156
- label: '按 %{field} 排序' # TODO: Remove during major release
157
- label_html: '<span class="d-none d-sm-inline">按 %{field} </span>排序'
158
- submit: '排序'
159
- form:
160
- search_field:
161
- label: '搜索字段'
162
- title: '设定的搜索选项'
163
- post_label: '为'
164
- search:
165
- label: '搜索'
166
- placeholder: '搜索...'
167
- submit: '搜索'
168
- pagination:
169
- title: '搜索结果导航'
170
- pagination_info:
171
- no_items_found: '没有找到 %{entry_name} '
172
- single_item_found: '找到 <strong>1</strong> %{entry_name}'
173
- pages:
174
- one: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> 共 <strong>%{total_num}</strong>'
175
- other: '<strong>%{start_num}</strong> - <strong>%{end_num}</strong> 共 <strong>%{total_num}</strong>'
176
- entry_pagination_info:
177
- one: '<strong>1 / 1</strong>'
178
- other: '<strong>%{current}</strong> / <strong>%{total}</strong>'
70
+ atom_feed: 搜索结果Atom
71
+ bookmarks:
72
+ absent: 加入书签
73
+ inprogress: 保存...
74
+ present: 在书签中
179
75
  documents:
180
76
  aria:
181
- search_results: '搜索结果'
182
- limit_search: '限定搜索'
183
- counter: '%{counter}. '
77
+ limit_search: 限定搜索
78
+ search_results: 搜索结果
79
+ counter: "%{counter}. "
80
+ entry_pagination_info:
81
+ one: "<strong>1 / 1</strong>"
82
+ other: "<strong>%{current}</strong> / <strong>%{total}</strong>"
83
+ errors:
84
+ invalid_solr_id: 抱歉,你要找的结果不存在。
184
85
  facets:
185
- title: '限定搜索'
186
- clear: '清除搜索条件'
187
- all: '皆'
188
- sort:
189
- count: '按数量排序'
190
- index: '按字母排序'
191
- count: '%{number}'
192
- more_html: '更多 <span class="sr-only visually-hidden">%{field_name}</span> »'
193
- selected:
194
- remove: '[删除]'
86
+ all: 皆
87
+ clear: 清除搜索条件
88
+ count: "%{number}"
89
+ group:
90
+ close: 隐藏方面
91
+ open: 显示方面
92
+ toggle: 更多 »
195
93
  missing: "[未找到]"
94
+ more_html: 更多 <span class="sr-only visually-hidden">%{field_name}</span> »
196
95
  pivot:
197
- show: 打开
198
96
  hide: 关
199
- group:
200
- toggle: '更多 »'
201
- group:
202
- more: '更多 »'
97
+ show: 打开
98
+ selected:
99
+ remove: "[删除]"
100
+ sort:
101
+ count: 按数量排序
102
+ index: 按字母排序
103
+ title: 限定搜索
203
104
  filters:
204
- title: '你在搜索:'
205
- label: '%{label}:'
105
+ label: "%{label}:"
206
106
  remove:
207
- value: '删除限定条件 %{value}'
208
107
  label_value: '删除限定条件 %{label}: %{value}'
209
- start_over: '重新开始'
108
+ value: 删除限定条件 %{value}
109
+ title: 你在搜索:
110
+ form:
111
+ search:
112
+ label: 搜索
113
+ placeholder: 搜索...
114
+ search_field:
115
+ label: 搜索字段
116
+ post_label: 为
117
+ title: 设定的搜索选项
118
+ submit: 搜索
119
+ group:
120
+ more: 更多 »
121
+ header: 搜
210
122
  index:
211
- label: '%{label}:'
123
+ label: "%{label}:"
124
+ page_title:
125
+ constraint: "%{label}: %{value}"
126
+ many_constraint_values: "%{values} 已选"
127
+ title: "%{constraints} - %{application_name} 搜索结果"
128
+ pagination:
129
+ title: 搜索结果导航
130
+ pagination_info:
131
+ no_items_found: '没有找到 %{entry_name} '
132
+ pages:
133
+ one: "<strong>%{start_num}</strong> - <strong>%{end_num}</strong> 共 <strong>%{total_num}</strong>"
134
+ other: "<strong>%{start_num}</strong> - <strong>%{end_num}</strong> 共 <strong>%{total_num}</strong>"
135
+ single_item_found: 找到 <strong>1</strong> %{entry_name}
136
+ per_page:
137
+ aria_label: 结果导航
138
+ button_label: "%{count} 每页"
139
+ button_label_html: '%{count}<span class="d-none d-sm-inline"> 每页</span>'
140
+ label: '%{count}<span class="sr-only visually-hidden"> 每页</span>'
141
+ submit: 更新
142
+ title: 每页显示结果数
143
+ rss_feed: 搜索结果RSS
144
+ search_constraints_header: 搜索条件
145
+ search_results: 搜索结果
212
146
  show:
213
- title: '%{document_title} - %{application_name}'
214
- label: '%{label}:'
215
- rss_feed: '搜索结果RSS'
216
- atom_feed: '搜索结果Atom'
217
- bookmarks:
218
- present: "在书签中"
219
- absent: "加入书签"
220
- inprogress: "保存..."
221
- zero_results:
222
- title: "未找到任何结果"
223
- modify_search: "请更改你的搜索条件"
224
- use_fewer_keywords: "使用更少的搜索条件,使用左边的链接来筛选搜索结果。"
225
- search_fields: "你在搜索如下字段 %{search_fields}"
226
- search_everything: "试一试搜索所有记录"
227
- view_title: "以如下方式察看搜索结果: "
147
+ label: "%{label}:"
148
+ title: "%{document_title} - %{application_name}"
149
+ sort:
150
+ label: 按 %{field} 排序
151
+ label_html: <span class="d-none d-sm-inline">按 %{field} </span>排序
152
+ submit: 排序
153
+ start_over: 重新开始
228
154
  view:
229
- list: "列表"
230
-
231
- entry_name:
232
- default: '条目'
233
- grouped:
234
- default: '分组结果'
235
-
236
- did_you_mean: '你是要输入: %{options} 吗?'
237
-
238
- main:
155
+ list: 列表
156
+ view_title: '以如下方式察看搜索结果: '
157
+ zero_results:
158
+ modify_search: 请更改你的搜索条件
159
+ search_everything: 试一试搜索所有记录
160
+ search_fields: 你在搜索如下字段 %{search_fields}
161
+ title: 未找到任何结果
162
+ use_fewer_keywords: 使用更少的搜索条件,使用左边的链接来筛选搜索结果。
163
+ search_history:
164
+ clear:
165
+ action_confirm: 清除搜索历史?
166
+ action_title: 清除搜索历史
167
+ failure: 清除搜索历史时出错。
168
+ success: 已经清除搜索历史。
169
+ forget: 去除
170
+ no_history: 你没有任何搜索历史
171
+ page_title: 搜索历史 - %{application_name}
172
+ recent: 你最近搜索历史
173
+ save: 保存
174
+ title: ''
175
+ skip_links:
176
+ first_result: 转到第一个搜索结果
177
+ label: 跳过链接
178
+ main_content: 转到主要内容
179
+ search_field: 转到搜索
180
+ sms:
181
+ errors:
182
+ carrier:
183
+ blank: 你必须选择一个运营商
184
+ invalid: 你必须输入一个运营商
185
+ to:
186
+ blank: 请输入接收人电话号码才能发送短信
187
+ invalid: 请输入10位正确电话号码
188
+ form:
189
+ carrier: 运营商
190
+ carrier_prompt: 请选择运营商
191
+ submit: 发送
192
+ title: 通过短信发送
193
+ to: '电话号码:'
194
+ success: 已发送短信
195
+ text:
196
+ url: '链接: %{url}'
197
+ tools:
198
+ citation: 引用
199
+ clear: 清除
200
+ email: 电子邮件
201
+ sms: 发送短信
202
+ title: 工具
203
+ welcome: 欢迎!
204
+ views:
205
+ pagination:
239
206
  aria:
240
- main_container: '主要内容'
207
+ container_label: 分页链接
208
+ current_page: 当前页面,页面%{page}
209
+ go_to_first_page: 转到第一页
210
+ go_to_last_page: 转到最后一页
211
+ go_to_next_page: 转到下一页
212
+ go_to_page: 前往页面%{page}
213
+ go_to_previous_page: 转到上一页
214
+ first: "&laquo; 首页"
215
+ last: 末页 &raquo;
216
+ next: 下一页 &raquo;
217
+ previous: "&laquo; 上一页"
218
+ truncate: "…"
219
+ pagination_compact:
220
+ next: 下一页 &raquo;
221
+ previous: "&laquo; 上一页"
data/docker-compose.yml CHANGED
@@ -17,6 +17,7 @@ services:
17
17
  environment:
18
18
  - SOLR_URL # Set via environment variable or use default defined in .env file
19
19
  - RAILS_VERSION # Set via environment variable or use default defined in .env file
20
+ - VIEW_COMPONENT_VERSION # Set via environment variable or use default defined in .env file
20
21
  - SOLR_ENV=docker-compose
21
22
  - ENGINE_CART_RAILS_OPTIONS=--skip-git --skip-listen --skip-spring --skip-keeps --skip-action-cable --skip-coffee --skip-test --skip-solr
22
23
 
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Blacklight::Configuration
4
+ class SessionTrackingConfig < Blacklight::OpenStructWithHashAccess
5
+ # @!attribute storage
6
+ # @return [String, FalseClass] 'server': use server-side tracking; 'client': delegate search tracking and prev/next navigation to client
7
+ # @!attribute applied_params_component
8
+ # @return [Class] component class used to render a facet group
9
+ # @!attribute item_pagination_component
10
+ # @return [Class] component class used to render the constraints
11
+
12
+ def initialize(property_hash = {})
13
+ super({ storage: 'server' }.merge(property_hash))
14
+ end
15
+
16
+ def applied_params_component
17
+ super || default_applied_params_component(storage)
18
+ end
19
+
20
+ def item_pagination_component
21
+ super || default_item_pagination_component(storage)
22
+ end
23
+
24
+ def url_helper
25
+ super || default_url_helper(storage)
26
+ end
27
+
28
+ def default_applied_params_component(storage)
29
+ return Blacklight::SearchContext::ServerAppliedParamsComponent if storage == 'server'
30
+
31
+ nil
32
+ end
33
+
34
+ def default_item_pagination_component(storage)
35
+ return Blacklight::SearchContext::ServerItemPaginationComponent if storage == 'server'
36
+
37
+ nil
38
+ end
39
+
40
+ # extension point for alternative storage types
41
+ def default_url_helper(_storage)
42
+ nil
43
+ end
44
+ end
45
+ end
@@ -26,10 +26,6 @@ class Blacklight::Configuration
26
26
  # @return [Class] component class used to render the search bar
27
27
  # @!attribute search_header_component
28
28
  # @return [Class] component class used to render the header above the documents
29
- def search_bar_presenter_class
30
- super || Blacklight::SearchBarPresenter
31
- end
32
-
33
29
  def display_label(**options)
34
30
  I18n.t(
35
31
  :"blacklight.search.view_title.#{key}",
@@ -20,6 +20,7 @@ module Blacklight
20
20
  autoload :DisplayField
21
21
  autoload :IndexField
22
22
  autoload :ShowField
23
+ autoload :SessionTrackingConfig
23
24
  end
24
25
 
25
26
  class_attribute :default_values, default: {}
@@ -200,7 +201,9 @@ module Blacklight
200
201
  ViewConfig,
201
202
  default: { top_level_config: :index },
202
203
  show: { top_level_config: :show },
203
- citation: { parent_config: :show }
204
+ citation: { parent_config: :show },
205
+ email_record: { top_level_config: :email },
206
+ sms_record: { top_level_config: :sms }
204
207
  )
205
208
 
206
209
  # @!attribute sms
@@ -279,9 +282,10 @@ module Blacklight
279
282
  property :raw_endpoint, default: OpenStructWithHashAccess.new(enabled: false)
280
283
 
281
284
  # @!attribute track_search_session
282
- # @since v7.1.0
283
- # @return [Boolean]
284
- property :track_search_session, default: true
285
+ # { storage: false } value: do no tracking
286
+ # @since v8.0.0
287
+ # @return [Blacklight::Configuration::SessionTrackingConfig]
288
+ property :track_search_session, default: Blacklight::Configuration::SessionTrackingConfig.new
285
289
 
286
290
  # @!attribute advanced_search
287
291
  # @since v7.15.0
@@ -19,15 +19,14 @@ module Blacklight
19
19
  end
20
20
  end
21
21
 
22
- initializer "blacklight.assets.precompile" do
23
- # rubocop:disable Lint/ConstantDefinitionInBlock
24
- PRECOMPILE_ASSETS = %w(favicon.ico blacklight/blacklight.js blacklight/blacklight.js.map blacklight/blacklight.esm.js blacklight/blacklight.esm.js.map).freeze
25
- # rubocop:enable Lint/ConstantDefinitionInBlock
22
+ PRECOMPILE_ASSETS = %w(favicon.ico blacklight/blacklight.js blacklight/blacklight.js.map blacklight/blacklight.esm.js blacklight/blacklight.esm.js.map).freeze
26
23
 
24
+ initializer "blacklight.assets.precompile" do |app|
27
25
  # When Rails has been generated in API mode, it does not have sprockets available
28
- if Rails.application.config.respond_to?(:assets)
29
- Rails.application.config.assets.precompile += PRECOMPILE_ASSETS
30
- end
26
+ next unless app.config.respond_to?(:assets)
27
+
28
+ app.config.assets.paths << Engine.root.join("app/javascript")
29
+ app.config.assets.precompile += Blacklight::Engine::PRECOMPILE_ASSETS
31
30
  end
32
31
 
33
32
  initializer "blacklight.importmap", before: "importmap" do |app|
@@ -10,6 +10,7 @@ module Blacklight
10
10
  def call(mapper, _options = {})
11
11
  mapper.match '/', action: 'index', as: 'search', via: [:get, :post]
12
12
  mapper.get '/advanced', action: 'advanced_search', as: 'advanced_search'
13
+ mapper.get '/page_links', action: 'page_links', as: 'page_links'
13
14
 
14
15
  mapper.post ":id/track", action: 'track', as: 'track'
15
16
  mapper.get ":id/raw", action: 'raw', as: 'raw', defaults: { format: 'json' }
@@ -14,10 +14,15 @@ module Blacklight
14
14
  def import_javascript_assets
15
15
  append_to_file 'config/importmap.rb' do
16
16
  <<~CONTENT
17
+ pin "@github/auto-complete-element", to: "https://cdn.skypack.dev/@github/auto-complete-element"
17
18
  pin "@popperjs/core", to: "https://ga.jspm.io/npm:@popperjs/core@2.11.6/dist/umd/popper.min.js"
18
19
  pin "bootstrap", to: "https://ga.jspm.io/npm:bootstrap@#{(defined?(Bootstrap) && Bootstrap::VERSION) || '5.2.2'}/dist/js/bootstrap.js"
19
- pin "blacklight", to: "blacklight/blacklight.js"
20
- pin "dialog-polyfill", to: "https://ga.jspm.io/npm:dialog-polyfill@0.5.6/dist/dialog-polyfill.js"
20
+ CONTENT
21
+ end
22
+
23
+ append_to_file 'app/assets/config/manifest.js' do
24
+ <<~CONTENT
25
+ //= link blacklight/manifest.js
21
26
  CONTENT
22
27
  end
23
28
  end
@@ -26,12 +31,8 @@ module Blacklight
26
31
  append_to_file 'app/javascript/application.js' do
27
32
  <<~CONTENT
28
33
  import bootstrap from "bootstrap"
29
- import "blacklight"
30
- import dialogPolyfill from "dialog-polyfill"
31
- Blacklight.onLoad(() => {
32
- const dialog = document.querySelector('dialog')
33
- dialogPolyfill.registerDialog(dialog)
34
- })
34
+ import githubAutoCompleteElement from "@github/auto-complete-element"
35
+ import Blacklight from "blacklight"
35
36
  CONTENT
36
37
  end
37
38
  end
@@ -4,7 +4,15 @@ module Blacklight
4
4
  module Assets
5
5
  class PropshaftGenerator < Rails::Generators::Base
6
6
  def add_package
7
- run 'yarn add blacklight-frontend'
7
+ if ENV['CI']
8
+ run "yarn add blacklight-frontend:#{Blacklight::Engine.root}"
9
+ else
10
+ run 'yarn add blacklight-frontend'
11
+ end
12
+ end
13
+
14
+ def add_third_party_packages
15
+ run 'yarn add @github/auto-complete-element'
8
16
  end
9
17
 
10
18
  def add_package_assets
@@ -16,7 +24,8 @@ module Blacklight
16
24
 
17
25
  append_to_file 'app/javascript/application.js' do
18
26
  <<~CONTENT
19
- import Blacklight from "blacklight-frontend/app/assets/javascripts/blacklight/blacklight.esm";
27
+ import Blacklight from "blacklight-frontend";
28
+ import githubAutoCompleteElement from "@github/auto-complete-element";
20
29
  CONTENT
21
30
  end
22
31
  end
@@ -18,6 +18,7 @@ module Blacklight
18
18
  return if Rails.version > '7' || Sprockets::VERSION < '4'
19
19
 
20
20
  append_to_file 'app/assets/config/manifest.js', "\n//= link application.js"
21
+ append_to_file 'app/assets/config/manifest.js', "\n//= link blacklight/manifest.js"
21
22
  empty_directory 'app/assets/images'
22
23
  end
23
24
 
@@ -42,6 +43,7 @@ module Blacklight
42
43
  // Required by Blacklight
43
44
  //= require popper
44
45
  //= require bootstrap
46
+ //= require blacklight/blacklight
45
47
  CONTENT
46
48
  end
47
49
  end
@@ -1,11 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'shellwords'
4
+
3
5
  module Blacklight
4
6
  class AssetsGenerator < Rails::Generators::Base
5
7
  class_option :'bootstrap-version', type: :string, default: ENV.fetch('BOOTSTRAP_VERSION', '~> 5.1'), desc: "Set the generated app's bootstrap version"
6
8
 
7
9
  def run_asset_pipeline_specific_generator
8
- generated_options = "--bootstrap-version='#{options[:'bootstrap-version']}'" if options[:'bootstrap-version']
10
+ generated_options = "--bootstrap-version='#{Shellwords.escape(options[:'bootstrap-version'])}'" if options[:'bootstrap-version']
9
11
 
10
12
  generator = if defined?(Propshaft)
11
13
  'blacklight:assets:propshaft'