blacklight-spotlight 3.0.0.alpha.9 → 3.0.0.rc4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (262) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -3
  3. data/app/assets/images/blacklight/arrow-alt-circle-left.svg +1 -0
  4. data/app/assets/images/blacklight/arrow-alt-circle-right.svg +1 -0
  5. data/app/assets/javascripts/spotlight/admin/{add_new_page_button.js → add_new_button.js} +7 -0
  6. data/app/assets/javascripts/spotlight/admin/block_mixins/autocompleteable.js +4 -4
  7. data/app/assets/javascripts/spotlight/admin/blocks/browse_block.js +55 -1
  8. data/app/assets/javascripts/spotlight/admin/blocks/browse_group_categories_block.js +88 -0
  9. data/app/assets/javascripts/spotlight/admin/blocks/pages_block.js +1 -1
  10. data/app/assets/javascripts/spotlight/admin/blocks/solr_documents_base_block.js +1 -1
  11. data/app/assets/javascripts/spotlight/admin/blocks/uploaded_items_block.js +7 -2
  12. data/app/assets/javascripts/spotlight/admin/crop.es6 +11 -0
  13. data/app/assets/javascripts/spotlight/admin/croppable.js +1 -1
  14. data/app/assets/javascripts/spotlight/admin/index.js +0 -2
  15. data/app/assets/javascripts/spotlight/admin/reindex_monitor.js +1 -0
  16. data/app/assets/javascripts/spotlight/admin/search_typeahead.js +2 -2
  17. data/app/assets/javascripts/spotlight/admin/sir-trevor/block_controls.js +21 -12
  18. data/app/assets/javascripts/spotlight/admin/sir-trevor/locales.js +11 -3
  19. data/app/assets/javascripts/spotlight/user/browse_group_categories.js +59 -0
  20. data/app/assets/javascripts/spotlight/user/index.js +1 -0
  21. data/app/assets/stylesheets/spotlight/_accessibility.scss +1 -1
  22. data/app/assets/stylesheets/spotlight/_breadcrumbs.scss +8 -0
  23. data/app/assets/stylesheets/spotlight/_browse.scss +16 -0
  24. data/app/assets/stylesheets/spotlight/_catalog.scss +6 -6
  25. data/app/assets/stylesheets/spotlight/_curation.scss +6 -0
  26. data/app/assets/stylesheets/spotlight/_featured_browse_categories_block.scss +214 -83
  27. data/app/assets/stylesheets/spotlight/_header.scss +1 -1
  28. data/app/assets/stylesheets/spotlight/_item_text_block.scss +6 -0
  29. data/app/assets/stylesheets/spotlight/_pages.scss +9 -4
  30. data/app/assets/stylesheets/spotlight/_report_a_problem.scss +5 -2
  31. data/app/assets/stylesheets/spotlight/_spotlight.scss +2 -0
  32. data/app/assets/stylesheets/spotlight/_translations.scss +7 -0
  33. data/app/assets/stylesheets/spotlight/browse_group_categories_block.scss +92 -0
  34. data/app/builders/spotlight/bootstrap_breadcrumbs_builder.rb +1 -2
  35. data/app/controllers/concerns/spotlight/search_helper.rb +2 -8
  36. data/app/controllers/spotlight/appearances_controller.rb +0 -12
  37. data/app/controllers/spotlight/browse_controller.rb +7 -3
  38. data/app/controllers/spotlight/catalog_controller.rb +5 -2
  39. data/app/controllers/spotlight/concerns/application_controller.rb +13 -2
  40. data/app/controllers/spotlight/dashboards_controller.rb +1 -1
  41. data/app/controllers/spotlight/exhibits_controller.rb +2 -3
  42. data/app/controllers/spotlight/featured_images_controller.rb +1 -1
  43. data/app/controllers/spotlight/groups_controller.rb +80 -0
  44. data/app/controllers/spotlight/pages_controller.rb +6 -9
  45. data/app/controllers/spotlight/resources/csv_upload_controller.rb +1 -1
  46. data/app/controllers/spotlight/searches_controller.rb +7 -19
  47. data/app/controllers/spotlight/translations_controller.rb +46 -0
  48. data/app/helpers/spotlight/application_helper.rb +20 -1
  49. data/app/helpers/spotlight/crop_helper.rb +4 -1
  50. data/app/helpers/spotlight/crud_link_helpers.rb +1 -1
  51. data/app/helpers/spotlight/main_app_helpers.rb +1 -1
  52. data/app/helpers/spotlight/pages_helper.rb +1 -1
  53. data/app/jobs/concerns/spotlight/job_tracking.rb +47 -0
  54. data/app/jobs/concerns/spotlight/limit_concurrency.rb +33 -0
  55. data/app/jobs/spotlight/add_uploads_from_csv.rb +34 -6
  56. data/app/jobs/spotlight/application_job.rb +8 -0
  57. data/app/jobs/spotlight/cleanup_job_trackers_job.rb +13 -0
  58. data/app/jobs/spotlight/default_thumbnail_job.rb +1 -3
  59. data/app/jobs/spotlight/reindex_exhibit_job.rb +36 -0
  60. data/app/jobs/spotlight/reindex_job.rb +49 -41
  61. data/app/jobs/spotlight/rename_sidecar_field_job.rb +2 -2
  62. data/app/jobs/spotlight/update_job_trackers_job.rb +20 -0
  63. data/app/mailers/spotlight/indexing_complete_mailer.rb +3 -2
  64. data/app/models/concerns/spotlight/exhibit_defaults.rb +1 -1
  65. data/app/models/concerns/spotlight/translatables.rb +17 -1
  66. data/app/models/concerns/spotlight/user.rb +2 -1
  67. data/app/models/sir_trevor_rails/blocks/browse_group_categories_block.rb +25 -0
  68. data/app/models/spotlight/ability.rb +2 -0
  69. data/app/models/spotlight/about_page.rb +3 -1
  70. data/app/models/spotlight/blacklight_configuration.rb +2 -1
  71. data/app/models/spotlight/contact.rb +1 -1
  72. data/app/models/spotlight/custom_field.rb +3 -3
  73. data/app/models/spotlight/event.rb +13 -0
  74. data/app/models/spotlight/exhibit.rb +18 -14
  75. data/app/models/spotlight/feature_page.rb +3 -1
  76. data/app/models/spotlight/featured_image.rb +29 -12
  77. data/app/models/spotlight/group.rb +22 -0
  78. data/app/models/spotlight/group_member.rb +11 -0
  79. data/app/models/spotlight/home_page.rb +3 -1
  80. data/app/models/spotlight/job_tracker.rb +105 -0
  81. data/app/models/spotlight/main_navigation.rb +2 -2
  82. data/app/models/spotlight/masthead.rb +1 -1
  83. data/app/models/spotlight/page.rb +5 -1
  84. data/app/models/spotlight/page_configurations.rb +6 -0
  85. data/app/models/spotlight/page_content.rb +2 -0
  86. data/app/models/spotlight/reindex_progress.rb +44 -27
  87. data/app/models/spotlight/resource.rb +24 -58
  88. data/app/models/spotlight/resources/csv_upload.rb +2 -1
  89. data/app/models/spotlight/resources/iiif_harvester.rb +10 -1
  90. data/app/models/spotlight/resources/iiif_manifest.rb +11 -7
  91. data/app/models/spotlight/resources/iiif_service.rb +1 -1
  92. data/app/models/spotlight/resources/json_upload.rb +12 -0
  93. data/app/models/spotlight/resources/upload.rb +25 -2
  94. data/app/models/spotlight/search.rb +10 -1
  95. data/app/models/spotlight/solr_document_sidecar.rb +9 -6
  96. data/app/models/spotlight/temporary_image.rb +8 -0
  97. data/app/services/spotlight/etl.rb +7 -0
  98. data/app/services/spotlight/etl/context.rb +52 -0
  99. data/app/services/spotlight/etl/executor.rb +194 -0
  100. data/app/services/spotlight/etl/loaders.rb +12 -0
  101. data/app/services/spotlight/etl/pipeline.rb +81 -0
  102. data/app/services/spotlight/etl/solr_loader.rb +96 -0
  103. data/app/services/spotlight/etl/sources.rb +25 -0
  104. data/app/services/spotlight/etl/step.rb +82 -0
  105. data/app/services/spotlight/etl/transforms.rb +64 -0
  106. data/app/services/spotlight/exhibit_import_export_service.rb +482 -0
  107. data/app/services/spotlight/validity_checker.rb +5 -5
  108. data/app/values/custom_field_name.rb +1 -0
  109. data/app/views/catalog/_save_search.html.erb +1 -1
  110. data/app/views/spotlight/about_pages/_empty.html.erb +5 -5
  111. data/app/views/spotlight/browse/_search.html.erb +5 -3
  112. data/app/views/spotlight/browse/_search_title.html.erb +2 -1
  113. data/app/views/spotlight/browse/index.html.erb +13 -0
  114. data/app/views/spotlight/catalog/_document.html.erb +2 -4
  115. data/app/views/spotlight/catalog/index.iiif_json.jbuilder +22 -0
  116. data/app/views/spotlight/contacts/_form.html.erb +1 -1
  117. data/app/views/spotlight/dashboards/_reindexing_activity.html.erb +6 -6
  118. data/app/views/spotlight/feature_pages/_empty.html.erb +5 -5
  119. data/app/views/spotlight/featured_images/_form.html.erb +1 -1
  120. data/app/views/spotlight/featured_images/_upload_form.html.erb +1 -1
  121. data/app/views/spotlight/home_pages/_empty.html.erb +3 -3
  122. data/app/views/spotlight/indexing_complete_mailer/documents_indexed.html.erb +9 -0
  123. data/app/views/spotlight/pages/_form.html.erb +2 -2
  124. data/app/views/spotlight/searches/_form.html.erb +13 -0
  125. data/app/views/spotlight/searches/_group.html.erb +27 -0
  126. data/app/views/spotlight/searches/_search.html.erb +1 -0
  127. data/app/views/spotlight/searches/index.html.erb +58 -17
  128. data/app/views/spotlight/shared/_honeypot_field.html.erb +4 -0
  129. data/app/views/spotlight/shared/_locale_picker.html.erb +1 -1
  130. data/app/views/spotlight/shared/_report_a_problem.html.erb +7 -10
  131. data/app/views/spotlight/sir_trevor/blocks/_browse_block.html.erb +1 -0
  132. data/app/views/spotlight/sir_trevor/blocks/_browse_group_categories_block.html.erb +45 -0
  133. data/app/views/spotlight/sir_trevor/blocks/_uploaded_items_block.html.erb +7 -1
  134. data/app/views/spotlight/translations/_browse_categories.html.erb +29 -3
  135. data/app/views/spotlight/translations/_general.html.erb +7 -7
  136. data/app/views/spotlight/translations/_groups.html.erb +34 -0
  137. data/app/views/spotlight/translations/_import.html.erb +24 -0
  138. data/app/views/spotlight/translations/_metadata.html.erb +1 -1
  139. data/app/views/spotlight/translations/_page.html.erb +5 -5
  140. data/app/views/spotlight/translations/_pages.html.erb +4 -4
  141. data/app/views/spotlight/translations/_pages_table.html.erb +5 -5
  142. data/app/views/spotlight/translations/_search_fields.html.erb +3 -3
  143. data/app/views/spotlight/translations/edit.html.erb +14 -6
  144. data/app/views/spotlight/translations/show.yaml.yamlbuilder +81 -0
  145. data/config/i18n-tasks.yml +7 -0
  146. data/config/locales/spotlight.ar.yml +57 -24
  147. data/config/locales/spotlight.en.yml +184 -128
  148. data/config/routes.rb +16 -1
  149. data/db/migrate/20200403161512_add_subtitle_to_searches.rb +7 -0
  150. data/db/migrate/20210113092223_create_spotlight_groups.rb +23 -0
  151. data/db/migrate/20210122082032_create_job_trackers.rb +22 -0
  152. data/db/migrate/20210126123041_create_events.rb +15 -0
  153. data/lib/generators/spotlight/install_generator.rb +23 -2
  154. data/lib/generators/spotlight/scaffold_resource_generator.rb +5 -13
  155. data/lib/generators/spotlight/templates/config/initializers/sir_trevor_rails.rb +10 -0
  156. data/lib/generators/spotlight/templates/config/initializers/spotlight_initializer.rb +3 -1
  157. data/lib/spotlight/engine.rb +35 -4
  158. data/lib/spotlight/upload_field_config.rb +1 -0
  159. data/lib/spotlight/version.rb +1 -1
  160. data/spec/controllers/spotlight/about_pages_controller_spec.rb +3 -3
  161. data/spec/controllers/spotlight/browse_controller_spec.rb +24 -1
  162. data/spec/controllers/spotlight/catalog_controller_spec.rb +4 -2
  163. data/spec/controllers/spotlight/contacts_controller_spec.rb +2 -2
  164. data/spec/controllers/spotlight/feature_pages_controller_spec.rb +11 -0
  165. data/spec/controllers/spotlight/groups_controller_spec.rb +103 -0
  166. data/spec/controllers/spotlight/home_pages_controller_spec.rb +2 -2
  167. data/spec/controllers/spotlight/resources/csv_upload_controller_spec.rb +4 -4
  168. data/spec/controllers/spotlight/searches_controller_spec.rb +10 -3
  169. data/spec/controllers/spotlight/translations_controller_spec.rb +53 -2
  170. data/spec/controllers/spotlight/view_configurations_controller_spec.rb +1 -1
  171. data/spec/examples.txt +1448 -125
  172. data/spec/factories/featured_images.rb +4 -0
  173. data/spec/factories/group.rb +17 -0
  174. data/spec/factories/job_trackers.rb +9 -0
  175. data/spec/factories/searches.rb +11 -1
  176. data/spec/features/add_contacts_spec.rb +1 -1
  177. data/spec/features/add_items_spec.rb +9 -4
  178. data/spec/features/browse_category_admin_spec.rb +39 -7
  179. data/spec/features/browse_category_navigation_spec.rb +44 -0
  180. data/spec/features/browse_category_spec.rb +2 -2
  181. data/spec/features/catalog_spec.rb +2 -2
  182. data/spec/features/create_exhibit_spec.rb +5 -4
  183. data/spec/features/dashboard_spec.rb +7 -7
  184. data/spec/features/edit_search_fields_spec.rb +2 -2
  185. data/spec/features/exhibits/administration_spec.rb +3 -3
  186. data/spec/features/exhibits/edit_metadata_fields_spec.rb +1 -1
  187. data/spec/features/exhibits/language_create_edit_spec.rb +3 -3
  188. data/spec/features/exhibits/translation_editing_spec.rb +57 -8
  189. data/spec/features/home_page_spec.rb +13 -4
  190. data/spec/features/item_admin_spec.rb +4 -4
  191. data/spec/features/javascript/about_page_admin_spec.rb +1 -1
  192. data/spec/features/javascript/block_controls_spec.rb +3 -1
  193. data/spec/features/javascript/blocks/browse_group_categories_block_spec.rb +64 -0
  194. data/spec/features/javascript/blocks/uploaded_items_block_spec.rb +4 -1
  195. data/spec/features/javascript/browse_group_admin_spec.rb +45 -0
  196. data/spec/features/javascript/edit_in_place_spec.rb +3 -3
  197. data/spec/features/javascript/feature_page_admin_spec.rb +1 -1
  198. data/spec/features/javascript/reindex_monitor_spec.rb +1 -1
  199. data/spec/features/javascript/search_config_admin_spec.rb +1 -1
  200. data/spec/features/report_a_problem_spec.rb +6 -5
  201. data/spec/features/site_users_management_spec.rb +4 -4
  202. data/spec/helpers/spotlight/crud_link_helpers_spec.rb +3 -3
  203. data/spec/helpers/spotlight/pages_helper_spec.rb +10 -2
  204. data/spec/i18n_spec.rb +0 -2
  205. data/spec/jobs/spotlight/add_uploads_from_csv_spec.rb +13 -1
  206. data/spec/jobs/spotlight/reindex_exhibit_job_spec.rb +43 -0
  207. data/spec/jobs/spotlight/reindex_job_spec.rb +30 -59
  208. data/spec/mailers/spotlight/indexing_complete_mailer_spec.rb +11 -1
  209. data/spec/models/sir_trevor_rails/blocks/browse_group_categories_block_spec.rb +41 -0
  210. data/spec/models/solr_document_spec.rb +2 -3
  211. data/spec/models/spotlight/access_controls_enforcement_search_builder_spec.rb +1 -0
  212. data/spec/models/spotlight/exhibit_spec.rb +21 -59
  213. data/spec/models/spotlight/featured_image_spec.rb +27 -0
  214. data/spec/models/spotlight/group_spec.rb +19 -0
  215. data/spec/models/spotlight/main_navigation_spec.rb +1 -1
  216. data/spec/models/spotlight/page_spec.rb +6 -1
  217. data/spec/models/spotlight/reindex_progress_spec.rb +89 -87
  218. data/spec/models/spotlight/resource_spec.rb +69 -90
  219. data/spec/models/spotlight/resources/iiif_harvester_spec.rb +9 -10
  220. data/spec/models/spotlight/resources/upload_spec.rb +43 -79
  221. data/spec/models/spotlight/role_spec.rb +3 -3
  222. data/spec/models/spotlight/search_spec.rb +30 -3
  223. data/spec/models/spotlight/solr_document_sidecar_spec.rb +1 -0
  224. data/spec/services/spotlight/etl/context_spec.rb +66 -0
  225. data/spec/services/spotlight/etl/executor_spec.rb +149 -0
  226. data/spec/services/spotlight/etl/pipeline_spec.rb +22 -0
  227. data/spec/services/spotlight/etl/solr_loader_spec.rb +76 -0
  228. data/spec/services/spotlight/etl/step_spec.rb +70 -0
  229. data/spec/{serializers/spotlight/exhibit_export_serializer_spec.rb → services/spotlight/exhibit_import_export_service_spec.rb} +168 -23
  230. data/spec/services/spotlight/iiif_resource_resolver_spec.rb +1 -1
  231. data/spec/spec_helper.rb +3 -6
  232. data/spec/support/features/test_features_helpers.rb +15 -0
  233. data/spec/test_app_templates/Gemfile.extra +1 -3
  234. data/spec/test_app_templates/catalog_controller.rb +6 -3
  235. data/spec/test_app_templates/lib/generators/test_app_generator.rb +1 -1
  236. data/spec/views/shared/_exhibit_navbar.html.erb_spec.rb +1 -1
  237. data/spec/views/spotlight/browse/index.html.erb_spec.rb +2 -0
  238. data/spec/views/spotlight/dashboards/_analytics.html.erb_spec.rb +1 -1
  239. data/spec/views/spotlight/dashboards/_reindexing_activity.html.erb_spec.rb +28 -25
  240. data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +3 -3
  241. data/spec/views/spotlight/pages/show.html.erb_spec.rb +1 -0
  242. data/spec/views/spotlight/search_configurations/_facets.html.erb_spec.rb +1 -1
  243. data/spec/views/spotlight/search_configurations/_sort.html.erb_spec.rb +7 -8
  244. data/spec/views/spotlight/translations/_import.html.erb_spec.rb +24 -0
  245. data/vendor/assets/javascripts/leaflet-iiif.js +46 -21
  246. data/vendor/assets/javascripts/tiny-slider.js +3218 -0
  247. data/vendor/assets/stylesheets/tiny-slider.css +1 -0
  248. metadata +444 -289
  249. data/app/models/concerns/spotlight/resources/open_graph.rb +0 -36
  250. data/app/models/spotlight/reindexing_log_entry.rb +0 -42
  251. data/app/serializers/spotlight/exhibit_export_serializer.rb +0 -205
  252. data/app/serializers/spotlight/featured_image_representer.rb +0 -29
  253. data/app/serializers/spotlight/main_navigation_representer.rb +0 -13
  254. data/app/serializers/spotlight/page_representer.rb +0 -33
  255. data/app/services/spotlight/resources/iiif_builder.rb +0 -19
  256. data/app/services/spotlight/solr_document_builder.rb +0 -76
  257. data/app/services/spotlight/upload_solr_document_builder.rb +0 -57
  258. data/spec/factories/reindexing_log_entries.rb +0 -54
  259. data/spec/models/spotlight/reindexing_log_entry_spec.rb +0 -129
  260. data/spec/models/spotlight/resources/open_graph_spec.rb +0 -65
  261. data/spec/services/spotlight/solr_document_builder_spec.rb +0 -66
  262. data/vendor/assets/javascripts/handlebars-v1.3.0.js +0 -2746
@@ -5,16 +5,16 @@ module Spotlight
5
5
  # check if a delayed job still needs to run
6
6
  class ValidityChecker
7
7
  # Return a validity token
8
- # @param [ActiveModel::Model]
8
+ # @param [ActiveJob::Base]
9
9
  # @return [Object] any serializable object
10
- def mint(_model); end
10
+ def mint(_job); end
11
11
 
12
12
  # Check if the token is still valid for the model
13
- # @param [ActiveModel::Model]
13
+ # @param [ActiveJob::Base]
14
14
  # @param [Object] the serializable token minted by #mint
15
15
  # @return [boolean]
16
- def check(_model, _token)
17
- true
16
+ def check(_job, validity_token: nil)
17
+ validity_token || true
18
18
  end
19
19
  end
20
20
  end
@@ -5,6 +5,7 @@
5
5
  class CustomFieldName
6
6
  delegate :readonly_field?, :configuration, :field_type, to: :custom_field
7
7
  attr_reader :custom_field
8
+
8
9
  def initialize(custom_field)
9
10
  @custom_field = custom_field
10
11
  end
@@ -12,7 +12,7 @@
12
12
  <div class="modal-body">
13
13
  <%= f.text_field :title, label: t(:'spotlight.saved_search.title') %>
14
14
  <%= label_tag :id, t(:'spotlight.saved_search.id'), class: 'col-form-label' %>
15
- <%= select_tag :id, options_for_select(current_exhibit.searches.map { |s| [s.title, s.id] }), include_blank: true, class: 'form-control' %>
15
+ <%= select_tag :id, options_for_select(current_exhibit.searches.map { |s| [s.full_title, s.id] }), include_blank: true, class: 'form-control' %>
16
16
  <%= render_hash_as_hidden_fields(search_state.params_for_search.except(:qt, :page, :utf8)) %>
17
17
  </div>
18
18
  <div class="modal-footer d-flex flex-row-reverse justify-content-start">
@@ -4,23 +4,23 @@
4
4
 
5
5
  <ol>
6
6
  <li>
7
- To add content to this page, click the Edit button above to enter Edit mode.
7
+ To add content to this page, select the Edit button above to enter edit mode.
8
8
  </li>
9
9
  <li>
10
- In Edit mode, click the plus sign icon to display the widget selection panel. This panel displays a range of widgets, each of which adds a different type of content to the page.
10
+ In edit mode, select the plus sign icon to display the widget selection panel. This panel displays a range of widgets, each of which adds a different type of content to the page.
11
11
  </li>
12
12
  <li>
13
- Select a widget to configure. Click <strong>Save changes</strong> when you're ready to add it to the page.
13
+ Select a widget to configure. Select <b>Save changes</b> when you're ready to add it to the page.
14
14
  </li>
15
15
  <li>
16
16
  Repeat the steps above to continue adding widgets to build out the page. To work more efficiently, you can configure multiple widgets before saving the page. Use the icons in the lower right of the widget configuration panel to preview, reorder, or delete widgets.
17
17
  </li>
18
18
  <li>
19
- Use the checkbox in the <strong>Options</strong> tab to publish or unpublish the page.
19
+ Use the checkbox in the <b>Options</b> tab to publish or unpublish the page.
20
20
  </li>
21
21
  <li>
22
22
  Visit the Spotlight <%= link_to 'documentation pages', 'https://github.com/projectblacklight/spotlight/wiki' %> to learn more about creating exhibit pages.
23
23
  </li>
24
24
  </ol>
25
25
  </div>
26
- <% end %>
26
+ <% end %>
@@ -1,12 +1,14 @@
1
1
  <%= cache [@exhibit, search, I18n.locale] do %>
2
+ <% group ||= @group %>
2
3
  <div class="col-md-4 col-12 category">
3
- <%= link_to spotlight.exhibit_browse_path(@exhibit, search) do %>
4
+ <%= link_to group.present? ? spotlight.exhibit_browse_group_path(@exhibit, group, search) : spotlight.exhibit_browse_path(@exhibit, search) do %>
4
5
  <div class="image-overlay">
5
6
  <%= image_tag(search.thumbnail_image_url || 'spotlight/default_browse_thumbnail.jpg', class: 'img-responsive', alt: '') %>
6
7
  <div class="text-overlay">
7
8
  <h2 class="browse-category-title">
8
- <%= search.title%>
9
- <small><%= t :'spotlight.browse.search.item_count', count: search.count %></small>
9
+ <span class="title"><%= search.title%></span>
10
+ <% if search.subtitle.present? %><span class="category-subtitle"><%= search.subtitle %></span><% end %>
11
+ <small class="item-count"><%= t :'spotlight.browse.search.item_count', count: search.count %></small>
10
12
  </h2>
11
13
  </div>
12
14
  </div>
@@ -1,2 +1,3 @@
1
- <%= search.title %>
1
+ <span class="title"><%= search.title %></span>
2
+ <% if search.subtitle.present? %><span class="subtitle"><%= search.subtitle %></span><% end %>
2
3
  <small class="item-count"><%= t :'spotlight.browse.search.item_count', count: params[:browse_q] ? parent_search_count: search.count %></small>
@@ -2,6 +2,19 @@
2
2
  <% set_html_page_title(title) %>
3
3
  <h1 class="sr-only"><%= title %></h1>
4
4
 
5
+ <% if @groups.any? # active %>
6
+ <ul class="browse-group-navigation nav nav-pills justify-content-center">
7
+ <li class="nav-item">
8
+ <%= link_to t('spotlight.exhibits.groups.all'), exhibit_browse_index_path(current_exhibit), class: "nav-link #{'active' if @group.blank?}" %>
9
+ </li>
10
+ <% @groups.each do |group| %>
11
+ <li class="nav-item">
12
+ <%= link_to group.title, exhibit_browse_groups_path(current_exhibit, group), class: "nav-link #{'active' if @group.present? && @group.id == group.id}" %>
13
+ </li>
14
+ <% end %>
15
+ </ul>
16
+ <% end %>
17
+
5
18
  <div class="browse-landing row">
6
19
  <%= render collection: @searches, partial: 'spotlight/browse/search' %>
7
20
  </div>
@@ -1,4 +1,2 @@
1
- <% # copied from blacklight; rails tries to render spotlight/catalog/document explicitly.. -%>
2
- <div class="document <%= render_document_class document %>" itemscope itemtype="<%= document.itemtype %>">
3
- <%= render_document_partials document, blacklight_config.view_config(document_index_view_type).partials, :document_counter => document_counter %>
4
- </div>
1
+ <% # try to render the blacklight provided catalog/document partial; rails tries to render spotlight/catalog/document explicitly.. -%>
2
+ <%= render 'catalog/document', local_assigns %>
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ json.set! :@context, 'http://iiif.io/api/presentation/2/context.json'
4
+ json.set! :@id, exhibit_iiif_collection_url(page: params[:page]&.to_i)
5
+ json.set! :@type, 'sc:Collection'
6
+ json.label current_exhibit.title
7
+ json.viewingHint 'top'
8
+ json.description current_exhibit.description if current_exhibit.description
9
+ json.manifests do
10
+ json.array!(@response.documents) do |doc|
11
+ next unless doc.first(Spotlight::Engine.config.iiif_manifest_field)
12
+
13
+ json.set! :@id, doc.first(Spotlight::Engine.config.iiif_manifest_field)
14
+ json.set! :@type, 'sc:manifest'
15
+ json.label presenter(doc).label(document_show_link_field(doc)).to_str
16
+ end
17
+ end
18
+
19
+ json.total @response.total
20
+ json.first exhibit_iiif_collection_url(page: nil)
21
+
22
+ json.next exhibit_iiif_collection_url(page: @response.next_page) unless @response.last_page? || @response.out_of_range?
@@ -9,7 +9,7 @@
9
9
  <%= f.fields_for :avatar, (@contact.avatar || @contact.build_avatar) do |af| %>
10
10
  <div data-cropper="<%= af.object.model_name.singular_route_key %>" data-form-prefix="<%= form_prefix(af) %>">
11
11
  <%= field_set_tag(t(:'.avatar.header')) do %>
12
- <p class="instructions"><%= t(:'featured_images.form.crop_area.help', scope: [:spotlight], thing: 'contact photo') %></p>
12
+ <p class="instructions"><%= t(:'featured_images.form.crop_area.help_html', scope: [:spotlight], thing: 'contact photo') %></p>
13
13
 
14
14
  <div>
15
15
  <%= af.radio_button(:source, :remote, label: t(:'.source.remote.label')) %>
@@ -12,13 +12,13 @@
12
12
  </tr>
13
13
  </thead>
14
14
  <tbody>
15
- <% @recent_reindexing.each do |log_entry| %>
15
+ <% @recent_reindexing.each do |tracker| %>
16
16
  <tr class="d-flex">
17
- <td class="col-3"><%= l log_entry.start_time, format: :long if log_entry.start_time %></td>
18
- <td class="col-3"><%= log_entry.user.email if log_entry.user %></td>
19
- <td class="col-1"><%= log_entry.items_reindexed_count %></td>
20
- <td class="col-3"><%= distance_of_time_in_words log_entry.duration, 0, include_seconds: true if log_entry.duration %></td>
21
- <td class="col-2"><%= t "reindexing_log.status.#{log_entry.job_status}" %></td>
17
+ <td class="col-3"><%= l tracker.created_at, format: :long %></td>
18
+ <td class="col-3"><%= tracker.user.email if tracker.user %></td>
19
+ <td class="col-1"><%= tracker.progress %></td>
20
+ <td class="col-3"><%= distance_of_time_in_words tracker.created_at, tracker.updated_at, include_seconds: true if tracker.completed? || tracker.failed? %></td>
21
+ <td class="col-2"><%= t "reindexing_log.status.#{tracker.status}" %></td>
22
22
  </tr>
23
23
  <% end %>
24
24
  </tbody>
@@ -4,23 +4,23 @@
4
4
 
5
5
  <ol>
6
6
  <li>
7
- To add content to this page, click the Edit button above to enter Edit mode.
7
+ To add content to this page, select the Edit button above to enter edit mode.
8
8
  </li>
9
9
  <li>
10
- In Edit mode, click the plus sign icon to display the widget selection panel. This panel displays a range of widgets, each of which adds a different type of content to the page.
10
+ In edit mode, select the plus sign icon to display the widget selection panel. This panel displays a range of widgets, each of which adds a different type of content to the page.
11
11
  </li>
12
12
  <li>
13
- Select a widget to configure. Click <strong>Save changes</strong> when you're ready to add it to the page.
13
+ Select a widget to configure. Select <b>Save changes</b> when you're ready to add it to the page.
14
14
  </li>
15
15
  <li>
16
16
  Repeat the steps above to continue adding widgets to build out the page. To work more efficiently, you can configure multiple widgets before saving the page. Use the icons in the lower right of the widget configuration panel to preview, reorder, or delete widgets.
17
17
  </li>
18
18
  <li>
19
- Note the <strong>Options</strong> and <strong>Thumbnail</strong> tabs at the top of the page in Edit mode. Options in these tabs enable you to publish or unpublish the page, turn on or off the page sidebar, and create a thumbnail image to represent the page.
19
+ Note the <b>Options</b> and <b>Thumbnail</b> tabs at the top of the page in edit mode. Options in these tabs enable you to publish or unpublish the page, turn on or off the page sidebar, and create a thumbnail image to represent the page.
20
20
  </li>
21
21
  <li>
22
22
  Visit the Spotlight <%= link_to 'documentation pages', 'https://github.com/projectblacklight/spotlight/wiki' %> to learn more about creating exhibit pages.
23
23
  </li>
24
24
  </ol>
25
25
  </div>
26
- <% end %>
26
+ <% end %>
@@ -30,7 +30,7 @@
30
30
  </div>
31
31
  <% end %>
32
32
  <%= field_set_tag(t(:'.source.remote.header')) do %>
33
- <p class="instructions"><%= t(:'.crop_area.help', thing: crop_type) %></p>
33
+ <p class="instructions"><%= t(:'.crop_area.help_html', thing: crop_type) %></p>
34
34
  <%= iiif_cropper_tags f, initial_crop_selection: initial_crop_selection %>
35
35
  <% end %>
36
36
  </div>
@@ -12,7 +12,7 @@
12
12
  </div>
13
13
  <% end %>
14
14
  <%= field_set_tag(t(:'.source.remote.header')) do %>
15
- <p class="instructions"><%= t(:'.crop_area.help', thing: crop_type) %></p>
15
+ <p class="instructions"><%= t(:'.crop_area.help_html', thing: crop_type) %></p>
16
16
  <%= iiif_cropper_tags f, initial_crop_selection: initial_crop_selection %>
17
17
  <% end %>
18
18
  </div>
@@ -20,14 +20,14 @@
20
20
  <% end %>
21
21
 
22
22
  <% if Spotlight::Engine.config.resource_partials.any? %>
23
- <li>Add items to the exhibit. Go to the <%= link_to "Curation > Items", admin_exhibit_catalog_path(current_exhibit) %> page and click <strong>Add items</strong>. You can add items individually or in bulk via a CSV file.</li>
23
+ <li>Add items to the exhibit. Go to the <%= link_to "Curation > Items", admin_exhibit_catalog_path(current_exhibit) %> page and select <b>Add items</b>. You can add items individually or in bulk via a CSV file.</li>
24
24
  <% end %>
25
25
 
26
26
  <% if can? :update, current_exhibit.blacklight_configuration %>
27
- <li>Use the other Curation pages, such as <%= link_to "Curation > Metadata", edit_exhibit_metadata_configuration_path(current_exhibit) %> and <%= link_to "Curation > Search", edit_exhibit_search_configuration_path(current_exhibit) %>, to customize the way various features are presented to exhibit visitors.</li>
27
+ <li>Use the other curation pages, such as <%= link_to "Curation > Metadata", edit_exhibit_metadata_configuration_path(current_exhibit) %> and <%= link_to "Curation > Search", edit_exhibit_search_configuration_path(current_exhibit) %>, to customize the way various features are presented to exhibit visitors.</li>
28
28
  <% end %>
29
29
 
30
30
  <li>Visit the Spotlight <%= link_to "documentation pages", "https://github.com/projectblacklight/spotlight/wiki" %> to learn how to add and edit feature pages, about pages, custom browse categories, and more.</li>
31
31
  </ol>
32
32
  <% end %>
33
- </div>
33
+ </div>
@@ -1,3 +1,12 @@
1
1
  <p><%= t :".title" %></p>
2
2
 
3
3
  <p><%= t :".body", count: @number, title: @exhibit.title %></p>
4
+
5
+ <% if @errors.length > 0 %>
6
+ <p><%= t :".errors", default: :'spotlight.catalog.reindex_progress_panel.error' %></p>
7
+ <ul>
8
+ <% @errors.each do |index, message| %>
9
+ <li><%= t :'.error', index: index, message: message.to_sentence %>
10
+ <% end %>
11
+ </ul>
12
+ <% end %>
@@ -2,7 +2,7 @@
2
2
  # TODO: the "if @page.persisted?" business below could possibly be done w/ some clever polymorphic routing.
3
3
  # Leaving as-is for now since technically you can't get to the new page form anyway.
4
4
  %>
5
- <%= bootstrap_form_for([spotlight, @page.exhibit, @page], role: 'form', html: { data: configurations_for_current_page.merge('form-observer': true)}) do |f| %>
5
+ <%= bootstrap_form_for(@page, url: url_for([spotlight, @page.exhibit, @page, format: nil]), role: 'form', html: { data: configurations_for_current_page.merge('form-observer': true)}) do |f| %>
6
6
  <%= render @page.lock if @page.lock and not @page.lock.stale? and not @page.lock.current_session? %>
7
7
  <% if @page.errors.any? %>
8
8
  <div id="error_explanation">
@@ -40,7 +40,7 @@
40
40
  </div>
41
41
  <div class="form-group">
42
42
  <%= f.label :content, class: 'sr-only' %>
43
- <%= f.text_area_without_bootstrap :content, value: { data: f.object.content.as_json }.to_json, class: content_editor_class(f.object), data: { 'block-types': Spotlight::Engine.config.sir_trevor_widgets } %>
43
+ <%= f.text_area_without_bootstrap :content, value: { data: f.object.content.as_json }.to_json, class: content_editor_class(f.object), data: { 'block-types': SirTrevorRails::Block.custom_block_types } %>
44
44
  </div>
45
45
  </div>
46
46
 
@@ -16,6 +16,10 @@
16
16
  <a href="#search-description" aria-controls="search-description" role="tab" data-toggle="tab" class="nav-link active"><%= t(:'.search_description') %></a>
17
17
  </li>
18
18
 
19
+ <li role="presentation" class="nav-item">
20
+ <a href="#search-group" aria-controls="search-group" role="tab" data-toggle="tab" class="nav-link"><%= t(:'.search_group') %></a>
21
+ </li>
22
+
19
23
  <li role="presentation" class="nav-item">
20
24
  <a href="#search-masthead" aria-controls="search-masthead" role="tab" data-toggle="tab" class="nav-link"><%= t(:'.search_masthead') %></a>
21
25
  </li>
@@ -29,6 +33,7 @@
29
33
  <div class="tab-content">
30
34
  <div role="tabpanel" class="tab-pane active" id="search-description">
31
35
  <%= f.text_field :title, control_col: "col-sm-5" %>
36
+ <%= f.text_field :subtitle, control_col: "col-sm-5" %>
32
37
  <%= f.text_area :long_description, rows: 5 %>
33
38
  <%= f.form_group :search_box, label: { text: t(:'.search_box.label'), class: 'pt-0' }, help: t(:'.search_box.help_block') do %>
34
39
  <%= f.check_box :search_box, label: t(:'.search_box.checkbox_label') %>
@@ -49,6 +54,14 @@
49
54
  </div>
50
55
  <% end %>
51
56
  </div>
57
+ <div role="tabpanel" class="tab-pane" id="search-group">
58
+ <% if @groups.present? %>
59
+ <p class="instructions"><%= t(:'.group.help') %></p>
60
+ <%= f.collection_check_boxes(:group_ids, @groups, :id, :title, hide_label: true) %>
61
+ <% else %>
62
+ <p class="instructions"><%= t(:'.group.help_no_groups') %></p>
63
+ <% end %>
64
+ </div>
52
65
  <div role="tabpanel" class="tab-pane" id="search-masthead">
53
66
  <%= f.fields_for :masthead, (@search.masthead || @search.build_masthead) do |m| %>
54
67
  <p class="instructions"><%= t(:'.masthead.help') %></p>
@@ -0,0 +1,27 @@
1
+ <% group = f.object %>
2
+ <%= render layout: 'spotlight/shared/dd3_item', locals: { id: group.id.to_s, field: f, dd3_content_classes: "group" , enabled_method: :published, label_method: :title, label: group.title } do |_, section| %>
3
+ <% case section when nil %>
4
+ <div class="d-flex flex-grow-1">
5
+ <div>
6
+ <%= f.check_box :published, inline: true, hide_label: true %>
7
+ </div>
8
+
9
+ <div class="flex-grow-1 mx-2 main">
10
+ <h4 class="card-title h6 mb-0" data-in-place-edit-target=".edit-in-place" data-in-place-edit-field-target="[data-edit-field-target='true']">
11
+ <a href="#edit-in-place" class="field-label edit-in-place"><%= group.title %></a>
12
+ <%= f.hidden_field :title, value: group.title , class: 'form-control form-control-sm title-field', data: {:"edit-field-target" => 'true'} %>
13
+ </h4>
14
+
15
+ <div class="card-text">
16
+ <div class=""><%= t :'spotlight.searches.group.category_count', count: group.searches.count %> <%= t :'spotlight.searches.group.unpublished_count', count: group.searches.unpublished.count %> &bull; <%= link_to t(:'helpers.action.view'), exhibit_browse_groups_path(current_exhibit, group) %></div>
17
+ <%= f.hidden_field :id %>
18
+ <%= f.hidden_field :weight, data: {property: "weight"} %>
19
+ </div>
20
+ </div>
21
+ <div class="flex m-2">
22
+ <div class="card-text">
23
+ <%= exhibit_delete_link(group) %>
24
+ </div>
25
+ </div>
26
+ <% end %>
27
+ <% end %>
@@ -13,6 +13,7 @@
13
13
  <div class="flex-grow-1 mx-2 main">
14
14
  <h4 class="card-title h6 mb-0">
15
15
  <%= search.title %>
16
+ <% if search.subtitle.present? %><span class="subtitle"><%= search.subtitle %></span><% end %>
16
17
  </h4>
17
18
 
18
19
  <div class="card-text">
@@ -3,7 +3,6 @@
3
3
  <% end %>
4
4
 
5
5
  <%= curation_page_title %>
6
- <h2><%= t(:'.categories_header') %></h2>
7
6
 
8
7
  <% if @searches.empty? %>
9
8
  <%= t :'.no_saved_searches' %>
@@ -13,24 +12,66 @@
13
12
  </p>
14
13
  <% end %>
15
14
  <% else %>
16
- <p class="instructions"><%= t(:'.instructions') %></p>
17
- <% unless @exhibit.searchable? %>
18
- <p class="instructions alert-warning">
19
- <%= t(:'.not_searchable_html', href: link_to(t(:'spotlight.configuration.sidebar.search_configuration'), spotlight.edit_exhibit_search_configuration_path(@exhibit))) %>
20
- </p>
21
- <% end %>
22
- <%= bootstrap_form_for @exhibit, url: update_all_exhibit_searches_path(@exhibit), layout: :horizontal, control_col: 'col-sm-10' do |f| %>
15
+ <div role="tabpanel">
16
+ <ul class="nav nav-tabs" role="tablist">
17
+ <li role="presentation" class="nav-item">
18
+ <a href="#browse-categories" aria-controls="browse-categories" role="tab" data-toggle="tab" class="nav-link active"><%= t(:'.categories_header') %></a>
19
+ </li>
23
20
 
24
- <div class="panel-group dd search_admin" id="nested-pages" data-behavior="nestable" data-max-depth="1">
25
- <ol class="dd-list">
26
- <%= f.fields_for :searches do |p| %>
27
- <%= render partial: 'search', locals: { f: p} %>
21
+ <li role="presentation" class="nav-item">
22
+ <a href="#browse-groups" aria-controls="browse-groups" role="tab" data-toggle="tab" class="nav-link"><%= t(:'.groups_header') %></a>
23
+ </li>
24
+ </ul>
25
+ <div class="tab-content">
26
+ <div role="tabpanel" class="tab-pane active" id="browse-categories">
27
+ <p class="instructions"><%= t(:'.categories_instructions') %></p>
28
+ <% unless @exhibit.searchable? %>
29
+ <p class="instructions alert-warning">
30
+ <%= t(:'.not_searchable_html', href: link_to(t(:'spotlight.configuration.sidebar.search_configuration'), spotlight.edit_exhibit_search_configuration_path(@exhibit))) %>
31
+ </p>
28
32
  <% end %>
29
- </ol>
30
- </div>
33
+ <%= bootstrap_form_for @exhibit, url: update_all_exhibit_searches_path(@exhibit), layout: :horizontal, control_col: 'col-sm-10' do |f| %>
31
34
 
32
- <div class="float-right">
33
- <%= submit_tag t(:'helpers.action.update_all'), class: "btn btn-primary" %>
35
+ <div class="panel-group dd search_admin" id="nested-pages" data-behavior="nestable" data-max-depth="1">
36
+ <ol class="dd-list">
37
+ <%= f.fields_for :searches do |p| %>
38
+ <%= render partial: 'search', locals: { f: p} %>
39
+ <% end %>
40
+ </ol>
41
+ </div>
42
+
43
+ <div class="float-right">
44
+ <%= submit_tag t(:'helpers.action.update_all'), class: "btn btn-primary" %>
45
+ </div>
46
+ <% end %>
47
+ </div>
48
+ <div role="tabpanel" class="tab-pane" id="browse-groups">
49
+ <div class="instructions"><%= t(:'.groups_instructions_html') %></div>
50
+ <%= bootstrap_form_for @exhibit, url: update_all_exhibit_groups_path(@exhibit), layout: :horizontal, control_col: 'col-sm-10' do |f| %>
51
+
52
+ <div class="panel-group dd search_admin" id="nested-pages" data-behavior="nestable" data-max-depth="1">
53
+ <ol class="dd-list">
54
+ <%= f.fields_for :groups do |p| %>
55
+ <%= render partial: 'group', locals: { f: p} %>
56
+ <% end %>
57
+ </ol>
58
+ </div>
59
+
60
+ <div class="float-right">
61
+ <%= submit_tag t(:'helpers.action.update_all'), class: "btn btn-primary" %>
62
+ </div>
63
+ <% end %>
64
+ <%= form_for :group, url: spotlight.exhibit_groups_path(current_exhibit), html: {class: "expanded-add-button"} do |f|%>
65
+ <a href='#add-new' class="btn btn-primary" data-turbolinks="false" data-expanded-add-button="true" data-field-target="[data-title-field]">
66
+ <%= t(:'.add_new_group') %> <%= blacklight_icon('chevron_right') %>
67
+ <span data-title-field="true" class="input-field">
68
+ <%= f.text_field(:title) %>
69
+ <%= f.submit t(:'.save'), data: {behavior: "save"} %>
70
+ <%= f.submit t(:'.cancel'), data: {behavior: "cancel"} %>
71
+ </span>
72
+ </a>
73
+ <%- end -%>
74
+ </div>
34
75
  </div>
35
- <% end %>
76
+ </div>
36
77
  <% end %>