blacklight-spotlight 3.0.0.rc1 → 3.0.0.rc6

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 (338) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  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/images/blacklight/close.svg +1 -0
  6. data/app/assets/images/blacklight/zoom_in.svg +1 -0
  7. data/app/assets/images/blacklight/zoom_out.svg +1 -0
  8. data/app/assets/javascripts/spotlight/admin/{add_new_page_button.js → add_new_button.js} +7 -0
  9. data/app/assets/javascripts/spotlight/admin/block_mixins/autocompleteable.js +4 -4
  10. data/app/assets/javascripts/spotlight/admin/blocks/browse_group_categories_block.js +88 -0
  11. data/app/assets/javascripts/spotlight/admin/blocks/pages_block.js +1 -1
  12. data/app/assets/javascripts/spotlight/admin/blocks/solr_documents_base_block.js +1 -1
  13. data/app/assets/javascripts/spotlight/admin/blocks/uploaded_items_block.js +8 -1
  14. data/app/assets/javascripts/spotlight/admin/catalog_edit.js +13 -47
  15. data/app/assets/javascripts/spotlight/admin/croppable.js +1 -1
  16. data/app/assets/javascripts/spotlight/admin/exhibit_tag_autocomplete.js +37 -0
  17. data/app/assets/javascripts/spotlight/admin/index.js +0 -2
  18. data/app/assets/javascripts/spotlight/admin/{reindex_monitor.js → progress_monitor.js} +26 -4
  19. data/app/assets/javascripts/spotlight/admin/search_typeahead.js +2 -2
  20. data/app/assets/javascripts/spotlight/admin/sir-trevor/locales.js +9 -2
  21. data/app/assets/javascripts/spotlight/user/browse_group_categories.js +59 -0
  22. data/app/assets/javascripts/spotlight/user/index.js +1 -0
  23. data/app/assets/javascripts/spotlight/user/zpr_links.js.erb +29 -14
  24. data/app/assets/stylesheets/spotlight/_breadcrumbs.scss +8 -0
  25. data/app/assets/stylesheets/spotlight/_browse.scss +8 -0
  26. data/app/assets/stylesheets/spotlight/_catalog.scss +34 -8
  27. data/app/assets/stylesheets/spotlight/_exhibit_admin.scss +9 -0
  28. data/app/assets/stylesheets/spotlight/_featured_browse_categories_block.scss +212 -84
  29. data/app/assets/stylesheets/spotlight/_item_text_block.scss +1 -1
  30. data/app/assets/stylesheets/spotlight/_modals.scss +3 -0
  31. data/app/assets/stylesheets/spotlight/_nestable.scss +8 -0
  32. data/app/assets/stylesheets/spotlight/_pages.scss +9 -4
  33. data/app/assets/stylesheets/spotlight/_spotlight.scss +4 -0
  34. data/app/assets/stylesheets/spotlight/_translations.scss +6 -0
  35. data/app/assets/stylesheets/spotlight/_view_larger.scss +22 -0
  36. data/app/assets/stylesheets/spotlight/browse_group_categories_block.scss +92 -0
  37. data/app/assets/stylesheets/spotlight/typeahead.css +23 -23
  38. data/app/builders/spotlight/bootstrap_breadcrumbs_builder.rb +5 -4
  39. data/app/controllers/concerns/spotlight/base.rb +1 -1
  40. data/app/controllers/concerns/spotlight/catalog.rb +7 -1
  41. data/app/controllers/concerns/spotlight/search_helper.rb +2 -8
  42. data/app/controllers/spotlight/appearances_controller.rb +0 -13
  43. data/app/controllers/spotlight/browse_controller.rb +15 -17
  44. data/app/controllers/spotlight/bulk_actions_controller.rb +62 -0
  45. data/app/controllers/spotlight/bulk_updates_controller.rb +67 -0
  46. data/app/controllers/spotlight/catalog_controller.rb +17 -14
  47. data/app/controllers/spotlight/concerns/application_controller.rb +13 -2
  48. data/app/controllers/spotlight/dashboards_controller.rb +5 -4
  49. data/app/controllers/spotlight/exhibits_controller.rb +1 -1
  50. data/app/controllers/spotlight/featured_images_controller.rb +1 -1
  51. data/app/controllers/spotlight/groups_controller.rb +80 -0
  52. data/app/controllers/spotlight/job_trackers_controller.rb +17 -0
  53. data/app/controllers/spotlight/pages_controller.rb +8 -13
  54. data/app/controllers/spotlight/searches_controller.rb +4 -17
  55. data/app/controllers/spotlight/tags_controller.rb +39 -5
  56. data/app/helpers/spotlight/application_helper.rb +21 -2
  57. data/app/helpers/spotlight/crud_link_helpers.rb +1 -1
  58. data/app/helpers/spotlight/job_trackers_helper.rb +31 -0
  59. data/app/helpers/spotlight/main_app_helpers.rb +4 -5
  60. data/app/helpers/spotlight/meta_helper.rb +2 -2
  61. data/app/helpers/spotlight/pages_helper.rb +1 -8
  62. data/app/helpers/spotlight/roles_helper.rb +1 -1
  63. data/app/helpers/spotlight/searches_helper.rb +1 -1
  64. data/app/jobs/concerns/spotlight/gather_documents.rb +35 -0
  65. data/app/jobs/concerns/spotlight/job_tracking.rb +64 -0
  66. data/app/jobs/concerns/spotlight/limit_concurrency.rb +33 -0
  67. data/app/jobs/spotlight/add_tags_job.rb +31 -0
  68. data/app/jobs/spotlight/add_uploads_from_csv.rb +4 -3
  69. data/app/jobs/spotlight/application_job.rb +8 -0
  70. data/app/jobs/spotlight/change_visibility_job.rb +33 -0
  71. data/app/jobs/spotlight/cleanup_job_trackers_job.rb +13 -0
  72. data/app/jobs/spotlight/default_thumbnail_job.rb +1 -3
  73. data/app/jobs/spotlight/process_bulk_updates_csv_job.rb +82 -0
  74. data/app/jobs/spotlight/reindex_exhibit_job.rb +39 -0
  75. data/app/jobs/spotlight/reindex_job.rb +64 -44
  76. data/app/jobs/spotlight/remove_tags_job.rb +31 -0
  77. data/app/jobs/spotlight/rename_sidecar_field_job.rb +3 -2
  78. data/app/jobs/spotlight/rename_tags_job.rb +33 -0
  79. data/app/jobs/spotlight/update_job_trackers_job.rb +20 -0
  80. data/app/models/concerns/spotlight/browse_category_search_builder.rb +59 -0
  81. data/app/models/concerns/spotlight/exhibit_analytics.rb +2 -6
  82. data/app/models/concerns/spotlight/exhibit_defaults.rb +1 -1
  83. data/app/models/concerns/spotlight/exhibit_documents.rb +2 -2
  84. data/app/models/concerns/spotlight/resources/web.rb +1 -1
  85. data/app/models/concerns/spotlight/search_builder.rb +11 -0
  86. data/app/models/concerns/spotlight/solr_document.rb +1 -1
  87. data/app/models/concerns/spotlight/solr_document/atomic_updates.rb +2 -2
  88. data/app/models/concerns/spotlight/user.rb +7 -2
  89. data/app/models/sir_trevor_rails/blocks/browse_group_categories_block.rb +25 -0
  90. data/app/models/sir_trevor_rails/blocks/solr_documents_block.rb +9 -0
  91. data/app/models/sir_trevor_rails/blocks/uploaded_items_block.rb +4 -0
  92. data/app/models/spotlight/ability.rb +8 -2
  93. data/app/models/spotlight/about_page.rb +1 -1
  94. data/app/models/spotlight/attachment.rb +1 -1
  95. data/app/models/spotlight/background_job_progress.rb +96 -0
  96. data/app/models/spotlight/blacklight_configuration.rb +28 -7
  97. data/app/models/spotlight/bulk_update.rb +8 -0
  98. data/app/models/spotlight/event.rb +13 -0
  99. data/app/models/spotlight/exhibit.rb +15 -12
  100. data/app/models/spotlight/feature_page.rb +1 -3
  101. data/app/models/spotlight/featured_image.rb +8 -2
  102. data/app/models/spotlight/field_metadata.rb +4 -8
  103. data/app/models/spotlight/group.rb +22 -0
  104. data/app/models/spotlight/group_member.rb +11 -0
  105. data/app/models/spotlight/home_page.rb +1 -1
  106. data/app/models/spotlight/job_tracker.rb +114 -0
  107. data/app/models/spotlight/page.rb +3 -5
  108. data/app/models/spotlight/page_configurations.rb +15 -9
  109. data/app/models/spotlight/resource.rb +28 -62
  110. data/app/models/spotlight/resources/iiif_harvester.rb +12 -3
  111. data/app/models/spotlight/resources/iiif_manifest.rb +9 -7
  112. data/app/models/spotlight/resources/iiif_service.rb +9 -2
  113. data/app/models/spotlight/resources/json_upload.rb +12 -0
  114. data/app/models/spotlight/resources/upload.rb +25 -2
  115. data/app/models/spotlight/role.rb +1 -2
  116. data/app/models/spotlight/search.rb +5 -0
  117. data/app/models/spotlight/solr_document_sidecar.rb +2 -1
  118. data/app/presenters/spotlight/iiif_manifest_presenter.rb +2 -2
  119. data/app/services/spotlight/bulk_updates_csv_template_service.rb +93 -0
  120. data/app/services/spotlight/etl.rb +7 -0
  121. data/app/services/spotlight/etl/context.rb +52 -0
  122. data/app/services/spotlight/etl/executor.rb +192 -0
  123. data/app/services/spotlight/etl/loaders.rb +12 -0
  124. data/app/services/spotlight/etl/pipeline.rb +81 -0
  125. data/app/services/spotlight/etl/solr_loader.rb +96 -0
  126. data/app/services/spotlight/etl/sources.rb +25 -0
  127. data/app/services/spotlight/etl/step.rb +82 -0
  128. data/app/services/spotlight/etl/transforms.rb +64 -0
  129. data/app/services/spotlight/exhibit_import_export_service.rb +50 -22
  130. data/app/services/spotlight/iiif_resource_resolver.rb +1 -1
  131. data/app/services/spotlight/validity_checker.rb +5 -5
  132. data/app/uploaders/spotlight/bulk_updates_uploader.rb +7 -0
  133. data/app/uploaders/spotlight/featured_image_uploader.rb +1 -1
  134. data/app/views/catalog/_add_tags.html.erb +28 -0
  135. data/app/views/catalog/_bulk_actions.html.erb +12 -0
  136. data/app/views/catalog/_change_visibility.html.erb +35 -0
  137. data/app/views/catalog/_curator_actions.html.erb +3 -0
  138. data/app/views/catalog/_remove_tags.html.erb +37 -0
  139. data/app/views/catalog/_save_search.html.erb +1 -1
  140. data/app/views/spotlight/about_pages/_empty.html.erb +5 -5
  141. data/app/views/spotlight/browse/_search.html.erb +2 -1
  142. data/app/views/spotlight/browse/_search_box.html.erb +9 -9
  143. data/app/views/spotlight/browse/index.html.erb +13 -0
  144. data/app/views/spotlight/bulk_updates/_download.html.erb +23 -0
  145. data/app/views/spotlight/bulk_updates/_overview.html.erb +1 -0
  146. data/app/views/spotlight/bulk_updates/_progress_panel.html.erb +19 -0
  147. data/app/views/spotlight/bulk_updates/_upload.html.erb +12 -0
  148. data/app/views/spotlight/bulk_updates/edit.html.erb +37 -0
  149. data/app/views/spotlight/catalog/_admin_header.html.erb +1 -1
  150. data/app/views/spotlight/catalog/_admin_index_header_default.html.erb +1 -1
  151. data/app/views/spotlight/catalog/_admin_thumbnail_default.html.erb +3 -2
  152. data/app/views/spotlight/catalog/_document.html.erb +2 -4
  153. data/app/views/spotlight/catalog/_edit_default.html.erb +2 -2
  154. data/app/views/spotlight/catalog/_reindex_progress_panel.html.erb +1 -1
  155. data/app/views/spotlight/catalog/index.iiif_json.jbuilder +22 -0
  156. data/app/views/spotlight/contacts/_form.html.erb +1 -1
  157. data/app/views/spotlight/custom_fields/_form.html.erb +1 -1
  158. data/app/views/spotlight/custom_search_fields/_form.html.erb +1 -1
  159. data/app/views/spotlight/dashboards/_reindexing_activity.html.erb +6 -6
  160. data/app/views/spotlight/exhibits/_exhibit_card.html.erb +1 -1
  161. data/app/views/spotlight/feature_pages/_empty.html.erb +5 -5
  162. data/app/views/spotlight/featured_images/_form.html.erb +2 -2
  163. data/app/views/spotlight/featured_images/_upload_form.html.erb +1 -1
  164. data/app/views/spotlight/home_pages/_empty.html.erb +3 -3
  165. data/app/views/spotlight/job_trackers/show.html.erb +79 -0
  166. data/app/views/spotlight/metadata_configurations/_metadata_field.html.erb +2 -2
  167. data/app/views/spotlight/pages/_form.html.erb +2 -2
  168. data/app/views/spotlight/pages/_view_type_group.html.erb +3 -3
  169. data/app/views/spotlight/resources/_form.html.erb +1 -1
  170. data/app/views/spotlight/resources/csv_upload/_form.html.erb +1 -1
  171. data/app/views/spotlight/resources/iiif/_form.html.erb +1 -1
  172. data/app/views/spotlight/resources/json_upload/_form.html.erb +2 -2
  173. data/app/views/spotlight/resources/upload/_form.html.erb +1 -1
  174. data/app/views/spotlight/search_configurations/_document_index_view_types.html.erb +2 -2
  175. data/app/views/spotlight/searches/_form.html.erb +14 -2
  176. data/app/views/spotlight/searches/_group.html.erb +27 -0
  177. data/app/views/spotlight/searches/index.html.erb +58 -17
  178. data/app/views/spotlight/shared/_curation_sidebar.html.erb +3 -0
  179. data/app/views/spotlight/shared/_locale_picker.html.erb +1 -1
  180. data/app/views/spotlight/sir_trevor/blocks/_browse_group_categories_block.html.erb +45 -0
  181. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb +8 -8
  182. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb +7 -7
  183. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb +9 -7
  184. data/app/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb +5 -5
  185. data/app/views/spotlight/sir_trevor/blocks/_uploaded_items_block.html.erb +4 -0
  186. data/app/views/spotlight/tags/_tag.html.erb +24 -0
  187. data/app/views/spotlight/tags/index.html.erb +12 -16
  188. data/app/views/spotlight/translations/_groups.html.erb +34 -0
  189. data/app/views/spotlight/translations/_import.html.erb +5 -5
  190. data/app/views/spotlight/translations/edit.html.erb +6 -0
  191. data/app/views/spotlight/translations/show.yaml.yamlbuilder +6 -0
  192. data/config/i18n-tasks.yml +6 -0
  193. data/config/locales/spotlight.ar.yml +11 -1
  194. data/config/locales/spotlight.en.yml +283 -87
  195. data/config/routes.rb +39 -1
  196. data/db/migrate/20210113092223_create_spotlight_groups.rb +23 -0
  197. data/db/migrate/20210122082032_create_job_trackers.rb +22 -0
  198. data/db/migrate/20210126123041_create_events.rb +15 -0
  199. data/db/migrate/20210305070001_remove_class_from_sirtrevor_image_blocks.rb +20 -0
  200. data/db/migrate/20210305171150_create_bulk_updates.rb +9 -0
  201. data/db/migrate/20210308090000_migrate_caption_values_for_title_key.rb +29 -0
  202. data/lib/generators/spotlight/install_generator.rb +5 -5
  203. data/lib/generators/spotlight/scaffold_resource_generator.rb +5 -13
  204. data/lib/generators/spotlight/templates/config/initializers/riiif.rb +7 -5
  205. data/lib/generators/spotlight/templates/config/initializers/spotlight_initializer.rb +1 -1
  206. data/lib/generators/spotlight/templates/solr/config/schema.xml +1 -1
  207. data/lib/migration/iiif.rb +3 -3
  208. data/lib/spotlight/engine.rb +26 -4
  209. data/lib/spotlight/version.rb +1 -1
  210. data/spec/controllers/spotlight/about_pages_controller_spec.rb +3 -3
  211. data/spec/controllers/spotlight/browse_controller_spec.rb +23 -6
  212. data/spec/controllers/spotlight/bulk_actions_controller_spec.rb +124 -0
  213. data/spec/controllers/spotlight/bulk_updates_controller_spec.rb +77 -0
  214. data/spec/controllers/spotlight/catalog_controller_spec.rb +15 -13
  215. data/spec/controllers/spotlight/contacts_controller_spec.rb +2 -2
  216. data/spec/controllers/spotlight/feature_pages_controller_spec.rb +11 -0
  217. data/spec/controllers/spotlight/featured_images_controller_spec.rb +3 -3
  218. data/spec/controllers/spotlight/groups_controller_spec.rb +103 -0
  219. data/spec/controllers/spotlight/home_pages_controller_spec.rb +1 -1
  220. data/spec/controllers/spotlight/job_trackers_controller_spec.rb +37 -0
  221. data/spec/controllers/spotlight/searches_controller_spec.rb +10 -3
  222. data/spec/controllers/spotlight/tags_controller_spec.rb +5 -1
  223. data/spec/controllers/spotlight/view_configurations_controller_spec.rb +1 -1
  224. data/spec/examples.txt +1501 -1410
  225. data/spec/factories/bulk_updates.rb +15 -0
  226. data/spec/factories/exhibits.rb +4 -0
  227. data/spec/factories/group.rb +17 -0
  228. data/spec/factories/job_trackers.rb +11 -0
  229. data/spec/factories/searches.rb +11 -1
  230. data/spec/factories/users.rb +27 -8
  231. data/spec/features/add_items_spec.rb +10 -5
  232. data/spec/features/browse_category_admin_spec.rb +37 -5
  233. data/spec/features/browse_category_navigation_spec.rb +44 -0
  234. data/spec/features/browse_category_spec.rb +2 -2
  235. data/spec/features/bulk_actions_spec.rb +72 -0
  236. data/spec/features/catalog_spec.rb +3 -2
  237. data/spec/features/dashboard_spec.rb +2 -2
  238. data/spec/features/edit_search_fields_spec.rb +2 -2
  239. data/spec/features/exhibits/edit_metadata_fields_spec.rb +1 -1
  240. data/spec/features/exhibits/translation_editing_spec.rb +55 -6
  241. data/spec/features/home_page_spec.rb +5 -5
  242. data/spec/features/import_exhibit_spec.rb +5 -1
  243. data/spec/features/item_admin_spec.rb +4 -4
  244. data/spec/features/javascript/about_page_admin_spec.rb +1 -1
  245. data/spec/features/javascript/block_controls_spec.rb +1 -1
  246. data/spec/features/javascript/blocks/browse_group_categories_block_spec.rb +64 -0
  247. data/spec/features/javascript/blocks/solr_documents_block_spec.rb +4 -4
  248. data/spec/features/javascript/blocks/uploaded_items_block_spec.rb +27 -1
  249. data/spec/features/javascript/browse_group_admin_spec.rb +45 -0
  250. data/spec/features/javascript/edit_in_place_spec.rb +3 -3
  251. data/spec/features/javascript/feature_page_admin_spec.rb +1 -1
  252. data/spec/features/javascript/reindex_monitor_spec.rb +1 -1
  253. data/spec/features/javascript/search_config_admin_spec.rb +1 -1
  254. data/spec/features/report_a_problem_spec.rb +1 -1
  255. data/spec/features/site_users_management_spec.rb +5 -5
  256. data/spec/fixtures/bulk-update-template.csv +57 -0
  257. data/spec/fixtures/updated-bulk-update-template-w-tags.csv +4 -0
  258. data/spec/fixtures/updated-bulk-update-template.csv +4 -0
  259. data/spec/helpers/spotlight/application_helper_spec.rb +5 -6
  260. data/spec/helpers/spotlight/crud_link_helpers_spec.rb +3 -3
  261. data/spec/helpers/spotlight/pages_helper_spec.rb +8 -15
  262. data/spec/helpers/spotlight/roles_helper_spec.rb +1 -1
  263. data/spec/i18n_spec.rb +1 -0
  264. data/spec/jobs/spotlight/add_tags_job_spec.rb +34 -0
  265. data/spec/jobs/spotlight/add_uploads_from_csv_spec.rb +4 -1
  266. data/spec/jobs/spotlight/change_visibility_job_spec.rb +30 -0
  267. data/spec/jobs/spotlight/process_bulk_updates_csv_job_spec.rb +78 -0
  268. data/spec/jobs/spotlight/reindex_exhibit_job_spec.rb +43 -0
  269. data/spec/jobs/spotlight/reindex_job_spec.rb +34 -60
  270. data/spec/jobs/spotlight/remove_tags_job_spec.rb +39 -0
  271. data/spec/lib/migration/iiif_spec.rb +1 -1
  272. data/spec/models/sir_trevor_rails/blocks/browse_group_categories_block_spec.rb +41 -0
  273. data/spec/models/spotlight/ability_spec.rb +27 -0
  274. data/spec/models/spotlight/background_job_progress_spec.rb +137 -0
  275. data/spec/models/spotlight/blacklight_configuration_spec.rb +22 -17
  276. data/spec/models/spotlight/browse_category_search_builder_spec.rb +49 -0
  277. data/spec/models/spotlight/exhibit_spec.rb +13 -59
  278. data/spec/models/spotlight/featured_image_spec.rb +1 -1
  279. data/spec/models/spotlight/group_spec.rb +19 -0
  280. data/spec/models/spotlight/main_navigation_spec.rb +1 -1
  281. data/spec/models/spotlight/resource_spec.rb +89 -87
  282. data/spec/models/spotlight/resources/iiif_harvester_spec.rb +9 -10
  283. data/spec/models/spotlight/role_spec.rb +1 -1
  284. data/spec/models/spotlight/search_spec.rb +30 -3
  285. data/spec/models/spotlight/solr_document/atomic_updates_spec.rb +10 -0
  286. data/spec/models/spotlight/solr_document_sidecar_spec.rb +1 -0
  287. data/spec/presenters/spotlight/iiif_manifest_presenter_spec.rb +1 -1
  288. data/spec/services/spotlight/bulk_updates_csv_template_service_spec.rb +26 -0
  289. data/spec/services/spotlight/etl/context_spec.rb +66 -0
  290. data/spec/services/spotlight/etl/executor_spec.rb +149 -0
  291. data/spec/services/spotlight/etl/pipeline_spec.rb +22 -0
  292. data/spec/services/spotlight/etl/solr_loader_spec.rb +76 -0
  293. data/spec/services/spotlight/etl/step_spec.rb +70 -0
  294. data/spec/services/spotlight/exhibit_import_export_service_spec.rb +48 -1
  295. data/spec/spec_helper.rb +3 -6
  296. data/spec/support/features/test_features_helpers.rb +15 -0
  297. data/spec/test_app_templates/Gemfile.extra +2 -0
  298. data/spec/test_app_templates/catalog_controller.rb +6 -3
  299. data/spec/test_app_templates/lib/generators/test_app_generator.rb +2 -2
  300. data/spec/uploaders/spotlight/featured_image_uploader_spec.rb +2 -2
  301. data/spec/views/shared/_exhibit_navbar.html.erb_spec.rb +1 -1
  302. data/spec/views/spotlight/browse/index.html.erb_spec.rb +2 -0
  303. data/spec/views/spotlight/catalog/_edit_default.html.erb_spec.rb +1 -1
  304. data/spec/views/spotlight/dashboards/_analytics.html.erb_spec.rb +1 -1
  305. data/spec/views/spotlight/dashboards/_reindexing_activity.html.erb_spec.rb +30 -25
  306. data/spec/views/spotlight/job_trackers/show.html.erb_spec.rb +65 -0
  307. data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +3 -4
  308. data/spec/views/spotlight/pages/show.html.erb_spec.rb +1 -0
  309. data/spec/views/spotlight/search_configurations/_facets.html.erb_spec.rb +1 -1
  310. data/spec/views/spotlight/sir_trevor/blocks/_browse_block.html.erb_spec.rb +1 -1
  311. data/spec/views/spotlight/sir_trevor/blocks/_iframe_block.html.erb_spec.rb +1 -1
  312. data/spec/views/spotlight/sir_trevor/blocks/_link_to_search_block.html.erb_spec.rb +1 -1
  313. data/spec/views/spotlight/sir_trevor/blocks/_rule_block.html.erb_spec.rb +1 -1
  314. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_block.html.erb_spec.rb +8 -4
  315. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_carousel_block.html.erb_spec.rb +7 -2
  316. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_embed_block.html.erb_spec.rb +8 -5
  317. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_features_block.html.erb_spec.rb +3 -2
  318. data/spec/views/spotlight/sir_trevor/blocks/_solr_documents_grid_block.html.erb_spec.rb +9 -4
  319. data/spec/views/spotlight/tags/index.html.erb_spec.rb +5 -2
  320. data/vendor/assets/javascripts/tiny-slider.js +3218 -0
  321. data/vendor/assets/stylesheets/tiny-slider.css +1 -0
  322. metadata +471 -281
  323. data/app/assets/images/blacklight/add_circle.svg +0 -1
  324. data/app/assets/images/blacklight/custom_fullscreen.svg +0 -1
  325. data/app/assets/images/blacklight/remove_circle.svg +0 -1
  326. data/app/assets/images/blacklight/resize_small.svg +0 -1
  327. data/app/models/concerns/spotlight/resources/open_graph.rb +0 -36
  328. data/app/models/spotlight/reindex_progress.rb +0 -78
  329. data/app/models/spotlight/reindexing_log_entry.rb +0 -42
  330. data/app/services/spotlight/resources/iiif_builder.rb +0 -19
  331. data/app/services/spotlight/solr_document_builder.rb +0 -77
  332. data/app/services/spotlight/upload_solr_document_builder.rb +0 -57
  333. data/spec/factories/reindexing_log_entries.rb +0 -54
  334. data/spec/models/spotlight/reindex_progress_spec.rb +0 -122
  335. data/spec/models/spotlight/reindexing_log_entry_spec.rb +0 -129
  336. data/spec/models/spotlight/resources/open_graph_spec.rb +0 -65
  337. data/spec/services/spotlight/solr_document_builder_spec.rb +0 -66
  338. data/vendor/assets/javascripts/handlebars-v1.3.0.js +0 -2746
data/config/routes.rb CHANGED
@@ -99,8 +99,26 @@ Spotlight::Engine.routes.draw do
99
99
  get :autocomplete
100
100
  end
101
101
  end
102
+ get 'browse/:browse_category_id', to: 'catalog#index', constraints: ->(req) { req.format != :html }
102
103
  resources :browse, only: %i[index show]
103
- resources :tags, only: %i[index destroy]
104
+ get 'browse/group/:group_id', to: 'browse#index', as: 'browse_groups'
105
+ get 'browse/group/:group_id/:id', to: 'browse#show', as: 'browse_group'
106
+
107
+ resources :groups, except: %i[show] do
108
+ collection do
109
+ patch :update_all
110
+ end
111
+ end
112
+
113
+ resources :tags, only: %i[index destroy] do
114
+ collection do
115
+ patch :update_all
116
+ end
117
+
118
+ member do
119
+ post :rename
120
+ end
121
+ end
104
122
 
105
123
  resources :contacts, only: %i[edit update destroy]
106
124
 
@@ -132,10 +150,29 @@ Spotlight::Engine.routes.draw do
132
150
  get :clone
133
151
  end
134
152
  end
153
+ resource :bulk_actions, only: [] do
154
+ member do
155
+ post :change_visibility
156
+ post :add_tags
157
+ post :remove_tags
158
+ end
159
+ end
160
+
161
+ resource :bulk_updates, only: %i[edit update] do
162
+ collection do
163
+ get :monitor
164
+ end
165
+
166
+ member do
167
+ post :download_template
168
+ end
169
+ end
170
+
135
171
  post '/pages/:id/preview' => 'pages#preview', as: :preview_block
136
172
  get '/pages' => 'pages#index', constraints: { format: 'json' }
137
173
 
138
174
  resources :lock, only: [:destroy]
175
+ resources :job_trackers, only: [:show]
139
176
 
140
177
  resources :roles, path: 'users', only: %i[index create destroy] do
141
178
  collection do
@@ -149,6 +186,7 @@ Spotlight::Engine.routes.draw do
149
186
  patch 'import'
150
187
  end
151
188
  end
189
+ get 'iiif/collection' => 'catalog#index', defaults: { q: '*:*', format: :iiif_json }
152
190
  end
153
191
 
154
192
  get '/:exhibit_id' => 'home_pages#show', as: :exhibit_root
@@ -0,0 +1,23 @@
1
+ class CreateSpotlightGroups < ActiveRecord::Migration[5.2]
2
+ def self.up
3
+ create_table :spotlight_groups do |t|
4
+ t.string :slug
5
+ t.text :title
6
+ t.references :exhibit
7
+ t.integer :weight, default: 50
8
+ t.boolean :published
9
+
10
+ t.timestamps
11
+ end
12
+
13
+ create_table :spotlight_groups_members, id: false do |t|
14
+ t.references :group
15
+ t.references :member, polymorphic: true
16
+ end
17
+ end
18
+
19
+ def self.down
20
+ drop_table :spotlight_groups
21
+ drop_table :spotlight_groups_members
22
+ end
23
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateJobTrackers < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :spotlight_job_trackers do |t|
6
+ t.references :on, null: false, polymorphic: true, index: true
7
+ t.references :resource, null: false, polymorphic: true, index: true
8
+ t.string :job_id
9
+ t.string :job_class
10
+ t.string :parent_job_id
11
+ t.string :parent_job_class
12
+ t.string :status
13
+ t.references :user
14
+ t.text :log
15
+ t.text :data
16
+
17
+ t.timestamps
18
+ end
19
+
20
+ add_index :spotlight_job_trackers, :job_id
21
+ end
22
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class CreateEvents < ActiveRecord::Migration[5.2]
4
+ def change
5
+ create_table :spotlight_events do |t|
6
+ t.references :exhibit, null: true
7
+ t.references :resource, null: false, polymorphic: true, index: true
8
+ t.string :type
9
+ t.string :collation_key
10
+ t.text :data
11
+
12
+ t.timestamps
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Remove the class field from the block; ostruct 0.3 helpfully allows it to override
4
+ # this field and that confuses sir trevor..
5
+ class RemoveClassFromSirtrevorImageBlocks < ActiveRecord::Migration[5.2]
6
+ def up
7
+ Spotlight::Page.reset_column_information
8
+ image = SirTrevorRails::Block.block_class('image')
9
+
10
+ Spotlight::Page.find_each do |page|
11
+ next unless page.content.any? { |block| block.is_a? image }
12
+ page.content.select { |block| block.is_a?(image) && block.respond_to?(:class=) }.each do |block|
13
+ block.delete_field(:class)
14
+ block.attachment = Spotlight::Attachment.find(block.id).to_global_id rescue nil
15
+ end
16
+
17
+ page.update(content: page.content)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,9 @@
1
+ class CreateBulkUpdates < ActiveRecord::Migration[5.2]
2
+ def change
3
+ create_table :spotlight_bulk_updates do |t|
4
+ t.string :file, null: false
5
+ t.references :exhibit
6
+ t.timestamps
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Migrate caption fields for the document title (pointing at the solr field name) to use the
4
+ # new `Spotlight::PageConfigurations::DOCUMENT_TITLE_KEY` for run-time lookups instead.
5
+ class MigrateCaptionValuesForTitleKey < ActiveRecord::Migration[5.2]
6
+ def up
7
+ Spotlight::Page.reset_column_information
8
+ change_caption_field_of(Spotlight::Page, from: CatalogController.blacklight_config.index.title_field, to: Spotlight::PageConfigurations::DOCUMENT_TITLE_KEY)
9
+ end
10
+
11
+ def down
12
+ Spotlight::Page.reset_column_information
13
+ change_caption_field_of(Spotlight::Page, from: Spotlight::PageConfigurations::DOCUMENT_TITLE_KEY, to: CatalogController.blacklight_config.index.title_field)
14
+ end
15
+
16
+ def change_caption_field_of(scope, from:, to:)
17
+ scope.find_each do |page|
18
+ changed = false
19
+
20
+ page.content.select { |block| block['primary-caption-field'] == from || block['secondary-caption-field'] == from }.each do |block|
21
+ changed = true
22
+ block['primary-caption-field'] = to if block['primary-caption-field'] == from
23
+ block['secondary-caption-field'] = to if block['secondary-caption-field'] == from
24
+ end
25
+
26
+ page.update(content: page.content) if changed
27
+ end
28
+ end
29
+ end
@@ -17,8 +17,8 @@ module Spotlight
17
17
  gem 'coffee-rails', '~> 4.2'
18
18
  gem 'uglifier', '>= 1.3.0'
19
19
 
20
- append_to_file 'app/assets/config/manifest.js', '//= link_directory ../javascripts .js'
21
- append_to_file 'app/assets/javascripts/application.js', '//= require_tree .'
20
+ append_to_file 'app/assets/config/manifest.js', "\n//= link_directory ../javascripts .js\n"
21
+ append_to_file 'app/assets/javascripts/application.js', "\n//= require_tree .\n"
22
22
  gsub_file 'app/views/layouts/application.html.erb', /pack/, 'include'
23
23
  inject_into_file 'config/environments/production.rb', after: ' # config.assets.css_compressor = :sass' do
24
24
  "\n config.assets.js_compressor = :uglifier"
@@ -113,10 +113,10 @@ module Spotlight
113
113
  def add_search_builder_mixin
114
114
  if File.exist? 'app/models/search_builder.rb'
115
115
  inject_into_file 'app/models/search_builder.rb', after: "include Blacklight::Solr::SearchBuilderBehavior\n" do
116
- "\n include Spotlight::AccessControlsEnforcementSearchBuilder\n"
116
+ "\n include Spotlight::SearchBuilder\n"
117
117
  end
118
118
  else
119
- say 'Unable to find SearchBuilder class; add `include Spotlight::AccessControlsEnforcementSearchBuilder` to the class manually.'
119
+ say 'Unable to find SearchBuilder class; add `include Spotlight::SearchBuilder` to the class manually.'
120
120
  end
121
121
  end
122
122
 
@@ -125,7 +125,7 @@ module Spotlight
125
125
  end
126
126
 
127
127
  def add_osd_viewer
128
- gem 'blacklight-gallery', '~> 1.1'
128
+ gem 'blacklight-gallery', '~> 3.0'
129
129
  generate 'blacklight_gallery:install'
130
130
  end
131
131
 
@@ -7,23 +7,15 @@ module Spotlight
7
7
  # spotlight:scaffold_resource generator
8
8
  class ScaffoldResource < Rails::Generators::NamedBase
9
9
  source_root File.expand_path('templates', __dir__)
10
- def create_document_builder
11
- create_file "app/services/#{file_name}_builder.rb", <<-FILE.strip_heredoc
12
- class #{class_name}Builder < Spotlight::SolrDocumentBuilder
13
- def to_solr
14
- return to_enum(:to_solr) unless block_given?
15
-
16
- # TODO: your implementation here
17
- # yield { id: resource.id }
18
- end
19
- end
20
- FILE
21
- end
22
10
 
23
11
  def create_model
24
12
  create_file "app/models/#{file_name}_resource.rb", <<-FILE.strip_heredoc
25
13
  class #{class_name}Resource < Spotlight::Resource
26
- self.document_builder_class = #{class_name}Builder
14
+ def self.indexing_pipeline
15
+ @indexing_pipeline ||= super.dup.tap do |pipeline|
16
+ # your pipeline here...
17
+ end
18
+ end
27
19
  end
28
20
  FILE
29
21
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Riiif::Image.file_resolver = Spotlight::CarrierwaveFileResolver.new
3
+ ActiveSupport::Reloader.to_prepare do
4
+ Riiif::Image.file_resolver = Spotlight::CarrierwaveFileResolver.new
4
5
 
5
- # Riiif::Image.authorization_service = IIIFAuthorizationService
6
+ # Riiif::Image.authorization_service = IIIFAuthorizationService
6
7
 
7
- # Riiif.not_found_image = 'app/assets/images/us_404.svg'
8
- #
9
- Riiif::Engine.config.cache_duration = 365.days
8
+ # Riiif.not_found_image = 'app/assets/images/us_404.svg'
9
+ #
10
+ Riiif::Engine.config.cache_duration = 365.days
11
+ end
@@ -73,7 +73,7 @@
73
73
  # These are set by default by Spotlight's configuration,
74
74
  # but you can customize them here, or in the SirTrevorRails::Block#custom_block_types method
75
75
  # Spotlight::Engine.config.sir_trevor_widgets = %w(
76
- # Heading Text List Quote Iframe Video Oembed Rule UploadedItems Browse
76
+ # Heading Text List Quote Iframe Video Oembed Rule UploadedItems Browse BrowseGroupCategories LinkToSearch
77
77
  # FeaturedPages SolrDocuments SolrDocumentsCarousel SolrDocumentsEmbed
78
78
  # SolrDocumentsFeatures SolrDocumentsGrid SearchResults
79
79
  # )
@@ -306,7 +306,7 @@
306
306
  <filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="15" />
307
307
  </analyzer>
308
308
 
309
- <analyzer type="index">
309
+ <analyzer type="query">
310
310
  <tokenizer class="solr.ICUTokenizerFactory"/>
311
311
  <filter class="solr.ICUFoldingFilterFactory"/> <!-- NFKC, case folding, diacritics removed -->
312
312
  <filter class="solr.EnglishPossessiveFilterFactory"/>
@@ -73,7 +73,7 @@ module Migration
73
73
 
74
74
  old_file = File.new(filepath)
75
75
  image = contact.create_avatar { |i| i.image.store!(old_file) }
76
- iiif_tilesource = riiif.info_path(image.id)
76
+ iiif_tilesource = riiif.info_path(image)
77
77
  image.update(iiif_tilesource: iiif_tilesource, iiif_region: avatar_coordinates(contact))
78
78
  image
79
79
  end
@@ -87,7 +87,7 @@ module Migration
87
87
 
88
88
  old_file = File.new(filepath)
89
89
  image = upload.create_upload { |i| i.image.store!(old_file) }
90
- iiif_tilesource = riiif.info_path(image.id)
90
+ iiif_tilesource = riiif.info_path(image)
91
91
  image.update(iiif_tilesource: iiif_tilesource)
92
92
  upload.upload_id = image.id
93
93
  upload.save_and_index
@@ -95,7 +95,7 @@ module Migration
95
95
 
96
96
  def update_iiif_url(image)
97
97
  image.update(
98
- iiif_tilesource: riiif.info_url(image.id, host: hostname),
98
+ iiif_tilesource: riiif.info_url(image, host: hostname),
99
99
  iiif_region: coordinates(image)
100
100
  )
101
101
  end
@@ -6,6 +6,7 @@
6
6
  require 'devise'
7
7
  require 'devise_invitable'
8
8
 
9
+ require 'activejob-status'
9
10
  require 'blacklight'
10
11
  require 'autoprefixer-rails'
11
12
  require 'friendly_id'
@@ -16,6 +17,8 @@ require 'leaflet-rails'
16
17
  require 'i18n/active_record'
17
18
  require 'spotlight/upload_field_config'
18
19
  require 'riiif'
20
+ require 'faraday'
21
+ require 'faraday_middleware'
19
22
 
20
23
  module Spotlight
21
24
  ##
@@ -38,8 +41,8 @@ module Spotlight
38
41
  require 'github/markup'
39
42
  require 'sir_trevor_rails'
40
43
  require 'openseadragon'
44
+ require 'handlebars_assets'
41
45
  require 'sprockets/es6'
42
- require 'almond-rails'
43
46
 
44
47
  config.assets.precompile += %w[spotlight/fallback/*.png]
45
48
 
@@ -55,6 +58,7 @@ module Spotlight
55
58
  require 'acts-as-taggable-on'
56
59
 
57
60
  Mime::Type.register 'application/solr+json', :solr_json
61
+ Mime::Type.register 'application/iiif+json', :iiif_json
58
62
  end
59
63
 
60
64
  initializer 'spotlight.factories', after: 'factory_bot.set_factory_paths' do
@@ -64,7 +68,7 @@ module Spotlight
64
68
  initializer 'spotlight.assets.precompile' do |app|
65
69
  app.config.assets.precompile += %w[spotlight/default_thumbnail.jpg spotlight/default_browse_thumbnail.jpg]
66
70
 
67
- Sprockets::ES6.configuration = { 'modules' => 'amd', 'moduleIds' => true }
71
+ Sprockets::ES6.configuration = { 'modules' => 'umd', 'moduleIds' => true }
68
72
  # When we upgrade to Sprockets 4, we can ditch sprockets-es6 and config AMD
69
73
  # in this way:
70
74
  # https://github.com/rails/sprockets/issues/73#issuecomment-139113466
@@ -99,7 +103,7 @@ module Spotlight
99
103
  config.external_resources_partials = []
100
104
  config.solr_batch_size = 20
101
105
 
102
- Spotlight::Engine.config.reindex_progress_window = 10
106
+ Spotlight::Engine.config.reindex_progress_window = 1.hour
103
107
 
104
108
  # Filter resources by exhibit by default
105
109
  config.filter_resources_by_exhibit = true
@@ -124,6 +128,7 @@ module Spotlight
124
128
  }
125
129
 
126
130
  config.resource_global_id_field = :"#{config.solr_fields.prefix}spotlight_resource_id#{config.solr_fields.string_suffix}"
131
+ config.job_tracker_id_field = :"#{config.solr_fields.prefix}spotlight_job_tracker_id#{config.solr_fields.string_suffix}"
127
132
 
128
133
  # Set to nil if you don't want to pull thumbnails from the index
129
134
  config.full_image_field = :full_image_url_ssm
@@ -267,7 +272,7 @@ module Spotlight
267
272
  # Added here for backwards compatability with SirTrevor 0.6
268
273
  # and apps who have customized their avaialble widgets
269
274
  config.sir_trevor_widgets = %w[
270
- Heading Text List Quote Iframe Video Oembed Rule UploadedItems Browse LinkToSearch
275
+ Heading Text List Quote Iframe Video Oembed Rule UploadedItems Browse BrowseGroupCategories LinkToSearch
271
276
  FeaturedPages SolrDocuments SolrDocumentsCarousel SolrDocumentsEmbed
272
277
  SolrDocumentsFeatures SolrDocumentsGrid SearchResults
273
278
  ]
@@ -284,5 +289,22 @@ module Spotlight
284
289
  pages: true,
285
290
  resources: true
286
291
  }
292
+
293
+ config.reindexing_batch_size = nil
294
+ config.reindexing_batch_count = nil
295
+ config.hidden_job_classes = %w[Spotlight::ReindexJob]
296
+
297
+ config.bulk_actions_batch_size = 1000
298
+
299
+ config.bulk_updates = OpenStruct.new
300
+ config.bulk_updates.csv_id = 'Item ID'
301
+ config.bulk_updates.csv_title = 'Item Title'
302
+ config.bulk_updates.csv_visibility = 'Visibility'
303
+ config.bulk_updates.csv_tags_prefix = 'Tag:'
304
+ config.bulk_updates.csv_tags = 'Tag: %s'
305
+
306
+ config.assign_default_roles_to_first_user = true
307
+
308
+ config.exhibit_roles = %w[admin curator viewer]
287
309
  end
288
310
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spotlight
4
- VERSION = '3.0.0.rc1'
4
+ VERSION = '3.0.0.rc6'
5
5
  end
@@ -112,7 +112,7 @@ describe Spotlight::AboutPagesController, type: :controller, versioning: true do
112
112
  describe 'on the main about page' do
113
113
  it 'is successful' do
114
114
  expect(controller).to receive(:add_breadcrumb).with('Home', exhibit_root_path(exhibit))
115
- expect(controller).to receive(:add_breadcrumb).with('About Pages', exhibit_about_pages_path(exhibit))
115
+ expect(controller).to receive(:add_breadcrumb).with('About pages', exhibit_about_pages_path(exhibit))
116
116
  get :edit, params: { id: page, exhibit_id: exhibit }
117
117
  expect(assigns(:page)).to eq page
118
118
  expect(assigns(:exhibit)).to eq exhibit
@@ -122,7 +122,7 @@ describe Spotlight::AboutPagesController, type: :controller, versioning: true do
122
122
  describe 'on a different about page' do
123
123
  it 'is successful' do
124
124
  expect(controller).to receive(:add_breadcrumb).with('Home', exhibit_root_path(exhibit))
125
- expect(controller).to receive(:add_breadcrumb).with('About Pages', exhibit_about_pages_path(exhibit))
125
+ expect(controller).to receive(:add_breadcrumb).with('About pages', exhibit_about_pages_path(exhibit))
126
126
  expect(controller).to receive(:add_breadcrumb).with(page2.title, [:edit, exhibit, page2])
127
127
  get :edit, params: { id: page2, exhibit_id: exhibit }
128
128
  expect(assigns(:page)).to eq page2
@@ -137,7 +137,7 @@ describe Spotlight::AboutPagesController, type: :controller, versioning: true do
137
137
  it 'is successful' do
138
138
  expect(controller).to receive(:add_breadcrumb).with('Home', exhibit_root_path(exhibit))
139
139
  expect(controller).to receive(:add_breadcrumb).with('Curation', exhibit_dashboard_path(exhibit))
140
- expect(controller).to receive(:add_breadcrumb).with('About Pages', exhibit_about_pages_path(exhibit))
140
+ expect(controller).to receive(:add_breadcrumb).with('About pages', exhibit_about_pages_path(exhibit))
141
141
  get :index, params: { exhibit_id: exhibit }
142
142
  expect(assigns(:page)).to be_kind_of Spotlight::Page
143
143
  expect(assigns(:page)).to be_new_record