blacklight-spotlight 1.0.0 → 1.1.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 (215) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -4
  3. data/app/assets/javascripts/spotlight/blocks/link_to_search_block.js +16 -0
  4. data/app/assets/javascripts/spotlight/exhibits.js +16 -5
  5. data/app/assets/javascripts/spotlight/form_observer.js +2 -2
  6. data/app/assets/javascripts/spotlight/pages.js.erb +3 -2
  7. data/app/assets/javascripts/spotlight/sir-trevor/locales.js +6 -0
  8. data/app/controllers/spotlight/concerns/application_controller.rb +4 -8
  9. data/app/controllers/spotlight/contact_email_controller.rb +22 -0
  10. data/app/controllers/spotlight/searches_controller.rb +3 -1
  11. data/app/models/concerns/spotlight/blacklight_configuration_defaults.rb +4 -4
  12. data/app/models/sir_trevor_rails/blocks/browse_block.rb +7 -1
  13. data/app/models/sir_trevor_rails/blocks/featured_pages_block.rb +3 -1
  14. data/app/models/sir_trevor_rails/blocks/link_to_search_block.rb +15 -0
  15. data/app/models/spotlight/ability.rb +1 -1
  16. data/app/models/spotlight/blacklight_configuration.rb +8 -7
  17. data/app/models/spotlight/exhibit.rb +2 -0
  18. data/app/models/spotlight/resource.rb +8 -2
  19. data/app/services/spotlight/carrierwave_file_resolver.rb +5 -0
  20. data/app/services/spotlight/upload_solr_document_builder.rb +2 -2
  21. data/app/views/spotlight/appearances/edit.html.erb +1 -1
  22. data/app/views/spotlight/exhibits/_confirmation_status.html.erb +1 -1
  23. data/app/views/spotlight/exhibits/_contact.html.erb +15 -10
  24. data/app/views/spotlight/exhibits/_exhibit_card_back.html.erb +2 -2
  25. data/app/views/spotlight/exhibits/_form.html.erb +7 -6
  26. data/app/views/spotlight/metadata_configurations/edit.html.erb +1 -1
  27. data/app/views/spotlight/pages/_form.html.erb +1 -1
  28. data/app/views/spotlight/search_configurations/_facets.html.erb +1 -1
  29. data/app/views/spotlight/search_configurations/_search_fields.html.erb +1 -1
  30. data/app/views/spotlight/search_configurations/_sort.html.erb +1 -1
  31. data/app/views/spotlight/sir_trevor/blocks/_link_to_search_block.html.erb +23 -0
  32. data/config/locales/spotlight.en.yml +9 -0
  33. data/config/routes.rb +1 -0
  34. data/db/migrate/20171005231502_add_missing_indexes_on_taggings.acts_as_taggable_on_engine.rb +23 -0
  35. data/lib/spotlight/engine.rb +4 -3
  36. data/lib/spotlight/version.rb +1 -1
  37. data/spec/controllers/application_controller_spec.rb +1 -1
  38. data/spec/controllers/spotlight/about_pages_controller_spec.rb +15 -15
  39. data/spec/controllers/spotlight/admin_users_controller_spec.rb +4 -4
  40. data/spec/controllers/spotlight/appearances_controller_spec.rb +3 -3
  41. data/spec/controllers/spotlight/application_controller_spec.rb +1 -1
  42. data/spec/controllers/spotlight/attachments_controller_spec.rb +2 -2
  43. data/spec/controllers/spotlight/browse_controller_spec.rb +4 -4
  44. data/spec/controllers/spotlight/catalog_controller_spec.rb +15 -15
  45. data/spec/controllers/spotlight/confirmations_controller_spec.rb +1 -1
  46. data/spec/controllers/spotlight/contact_email_controller_spec.rb +63 -0
  47. data/spec/controllers/spotlight/contact_forms_controller_spec.rb +1 -1
  48. data/spec/controllers/spotlight/contacts_controller_spec.rb +5 -5
  49. data/spec/controllers/spotlight/custom_fields_controller_spec.rb +3 -3
  50. data/spec/controllers/spotlight/dashboards_controller_spec.rb +3 -3
  51. data/spec/controllers/spotlight/exhibits_controller_spec.rb +4 -4
  52. data/spec/controllers/spotlight/feature_pages_controller_spec.rb +12 -12
  53. data/spec/controllers/spotlight/featured_images_controller_spec.rb +2 -2
  54. data/spec/controllers/spotlight/filters_controller_spec.rb +4 -4
  55. data/spec/controllers/spotlight/home_pages_controller_spec.rb +5 -5
  56. data/spec/controllers/spotlight/metadata_configurations_controller_spec.rb +3 -3
  57. data/spec/controllers/spotlight/resources/csv_upload_controller_spec.rb +2 -2
  58. data/spec/controllers/spotlight/resources/upload_controller_spec.rb +2 -2
  59. data/spec/controllers/spotlight/resources_controller_spec.rb +2 -2
  60. data/spec/controllers/spotlight/roles_controller_spec.rb +4 -4
  61. data/spec/controllers/spotlight/search_configurations_controller_spec.rb +3 -3
  62. data/spec/controllers/spotlight/searches_controller_spec.rb +10 -11
  63. data/spec/controllers/spotlight/sites_controller_spec.rb +5 -5
  64. data/spec/controllers/spotlight/solr_controller_spec.rb +3 -3
  65. data/spec/controllers/spotlight/tags_controller_spec.rb +3 -3
  66. data/spec/controllers/spotlight/versions_controller_spec.rb +7 -7
  67. data/spec/controllers/spotlight/view_configurations_controller_spec.rb +3 -3
  68. data/spec/examples.txt +1154 -1136
  69. data/spec/factories/contact_emails.rb +6 -0
  70. data/spec/factories/contact_images.rb +1 -1
  71. data/spec/factories/contacts.rb +1 -1
  72. data/spec/factories/custom_fields.rb +1 -1
  73. data/spec/factories/exhibit_thumbnails.rb +1 -1
  74. data/spec/factories/exhibits.rb +2 -2
  75. data/spec/factories/featured_images.rb +1 -1
  76. data/spec/factories/pages.rb +2 -2
  77. data/spec/factories/reindexing_log_entries.rb +1 -1
  78. data/spec/factories/resources.rb +1 -1
  79. data/spec/factories/roles.rb +2 -2
  80. data/spec/factories/searches.rb +3 -3
  81. data/spec/factories/tags.rb +3 -3
  82. data/spec/factories/users.rb +2 -2
  83. data/spec/features/about_page_spec.rb +6 -6
  84. data/spec/features/add_contacts_spec.rb +3 -3
  85. data/spec/features/add_custom_field_metadata_spec.rb +4 -4
  86. data/spec/features/add_iiif_manifest_spec.rb +2 -2
  87. data/spec/features/add_items_spec.rb +4 -4
  88. data/spec/features/autocomplete_typeahead_spec.rb +3 -4
  89. data/spec/features/browse_category_admin_spec.rb +3 -3
  90. data/spec/features/browse_category_spec.rb +3 -3
  91. data/spec/features/catalog_spec.rb +3 -3
  92. data/spec/features/confirm_email_spec.rb +1 -1
  93. data/spec/features/create_exhibit_spec.rb +1 -1
  94. data/spec/features/create_page_spec.rb +5 -5
  95. data/spec/features/curator_items.rb +2 -2
  96. data/spec/features/dashboard_spec.rb +4 -4
  97. data/spec/features/edit_contact_spec.rb +4 -4
  98. data/spec/features/edit_search_fields_spec.rb +2 -2
  99. data/spec/features/exhibit_masthead_spec.rb +2 -2
  100. data/spec/features/exhibit_themes_spec.rb +2 -2
  101. data/spec/features/exhibits/add_tags_spec.rb +3 -3
  102. data/spec/features/exhibits/administration_spec.rb +78 -4
  103. data/spec/features/exhibits/custom_metadata_fields_spec.rb +2 -2
  104. data/spec/features/exhibits/edit_metadata_fields_spec.rb +2 -2
  105. data/spec/features/exhibits_index_spec.rb +3 -3
  106. data/spec/features/feature_page_spec.rb +9 -9
  107. data/spec/features/home_page_spec.rb +4 -4
  108. data/spec/features/import_exhibit_spec.rb +2 -2
  109. data/spec/features/item_admin_spec.rb +2 -2
  110. data/spec/features/javascript/about_page_admin_spec.rb +2 -2
  111. data/spec/features/javascript/block_controls_spec.rb +2 -2
  112. data/spec/features/javascript/blocks/featured_browse_categories_block_spec.rb +5 -5
  113. data/spec/features/javascript/blocks/featured_pages_block_spec.rb +4 -4
  114. data/spec/features/javascript/blocks/link_to_search_block_spec.rb +44 -0
  115. data/spec/features/javascript/{rule_block_spec.rb → blocks/rule_block_spec.rb} +4 -4
  116. data/spec/features/javascript/blocks/search_result_block_spec.rb +4 -4
  117. data/spec/features/javascript/blocks/solr_documents_block_spec.rb +5 -6
  118. data/spec/features/javascript/blocks/uploaded_items_block_spec.rb +3 -4
  119. data/spec/features/javascript/edit_in_place_spec.rb +2 -2
  120. data/spec/features/javascript/feature_page_admin_spec.rb +26 -7
  121. data/spec/features/javascript/home_page_edit_spec.rb +3 -3
  122. data/spec/features/javascript/metadata_admin_spec.rb +2 -2
  123. data/spec/features/javascript/multi_image_select_spec.rb +6 -6
  124. data/spec/features/javascript/reindex_monitor_spec.rb +4 -4
  125. data/spec/features/javascript/roles_admin_spec.rb +3 -3
  126. data/spec/features/javascript/search_config_admin_spec.rb +2 -3
  127. data/spec/features/javascript/search_context_spec.rb +6 -6
  128. data/spec/features/main_navigation_spec.rb +2 -2
  129. data/spec/features/metadata_admin_spec.rb +2 -2
  130. data/spec/features/report_a_problem_spec.rb +2 -2
  131. data/spec/features/site_admin_management_spec.rb +4 -4
  132. data/spec/features/site_masthead_spec.rb +1 -1
  133. data/spec/features/slideshow_spec.rb +4 -3
  134. data/spec/features/tags_admin_spec.rb +3 -3
  135. data/spec/features/user_admin_spec.rb +2 -2
  136. data/spec/helpers/spotlight/application_helper_spec.rb +2 -2
  137. data/spec/helpers/spotlight/crud_link_helpers_spec.rb +1 -1
  138. data/spec/helpers/spotlight/main_app_helpers_spec.rb +3 -3
  139. data/spec/helpers/spotlight/meta_helper_spec.rb +1 -1
  140. data/spec/helpers/spotlight/pages_helper_spec.rb +2 -2
  141. data/spec/jobs/spotlight/add_uploads_from_csv_spec.rb +3 -3
  142. data/spec/jobs/spotlight/reindex_job_spec.rb +3 -3
  143. data/spec/jobs/spotlight/rename_sidecar_field_job_spec.rb +1 -1
  144. data/spec/lib/migration/iiif_spec.rb +3 -3
  145. data/spec/lib/spotlight/controller_spec.rb +3 -3
  146. data/spec/models/sir_trevor_rails/blocks/browse_block_spec.rb +19 -1
  147. data/spec/models/sir_trevor_rails/blocks/featured_pages_block_spec.rb +9 -1
  148. data/spec/models/sir_trevor_rails/blocks/search_results_block_spec.rb +1 -1
  149. data/spec/models/sir_trevor_rails/blocks/solr_documents_block_spec.rb +1 -1
  150. data/spec/models/solr_document_spec.rb +2 -2
  151. data/spec/models/spotlight/ability_spec.rb +9 -9
  152. data/spec/models/spotlight/about_page_spec.rb +1 -1
  153. data/spec/models/spotlight/access_controls_enforcement_search_builder_spec.rb +1 -1
  154. data/spec/models/spotlight/blacklight_configuration_spec.rb +15 -1
  155. data/spec/models/spotlight/contact_email_spec.rb +1 -1
  156. data/spec/models/spotlight/contact_form_spec.rb +1 -1
  157. data/spec/models/spotlight/contact_spec.rb +1 -1
  158. data/spec/models/spotlight/custom_field_spec.rb +5 -5
  159. data/spec/models/spotlight/exhibit_spec.rb +20 -16
  160. data/spec/models/spotlight/feature_page_spec.rb +14 -14
  161. data/spec/models/spotlight/field_metadata_spec.rb +1 -1
  162. data/spec/models/spotlight/home_page_spec.rb +1 -1
  163. data/spec/models/spotlight/main_navigation_spec.rb +1 -1
  164. data/spec/models/spotlight/page_spec.rb +12 -8
  165. data/spec/models/spotlight/reindex_progress_spec.rb +4 -4
  166. data/spec/models/spotlight/reindexing_log_entry_spec.rb +8 -8
  167. data/spec/models/spotlight/resource_spec.rb +12 -1
  168. data/spec/models/spotlight/resources/iiif_harvester_spec.rb +1 -1
  169. data/spec/models/spotlight/resources/iiif_manifest_spec.rb +1 -1
  170. data/spec/models/spotlight/resources/upload_spec.rb +3 -3
  171. data/spec/models/spotlight/role_spec.rb +3 -3
  172. data/spec/models/spotlight/search_spec.rb +7 -7
  173. data/spec/models/spotlight/sitemap_spec.rb +6 -6
  174. data/spec/models/spotlight/solr_document_sidecar_spec.rb +1 -1
  175. data/spec/presenters/spotlight/iiif_manifest_presenter_spec.rb +1 -1
  176. data/spec/serializers/spotlight/exhibit_export_serializer_spec.rb +20 -20
  177. data/spec/services/spotlight/carrierwave_file_resolver_spec.rb +1 -1
  178. data/spec/services/spotlight/iiif_resource_resolver_spec.rb +1 -1
  179. data/spec/services/spotlight/solr_document_builder_spec.rb +3 -3
  180. data/spec/spec_helper.rb +4 -5
  181. data/spec/support/features/test_features_helpers.rb +2 -2
  182. data/spec/uploaders/spotlight/featured_image_uploader_spec.rb +1 -1
  183. data/spec/views/_user_util_links.html.erb_spec.rb +1 -1
  184. data/spec/views/shared/_exhibit_navbar.html.erb_spec.rb +9 -9
  185. data/spec/views/shared/_masthead.html.erb_spec.rb +3 -3
  186. data/spec/views/spotlight/about_pages/_sidebar.html.erb_spec.rb +4 -4
  187. data/spec/views/spotlight/browse/_search.html.erb_spec.rb +2 -2
  188. data/spec/views/spotlight/browse/index.html.erb_spec.rb +2 -2
  189. data/spec/views/spotlight/browse/show.html.erb_spec.rb +2 -2
  190. data/spec/views/spotlight/contacts/edit.html.erb_spec.rb +1 -1
  191. data/spec/views/spotlight/dashboards/_analytics.html.erb_spec.rb +1 -1
  192. data/spec/views/spotlight/dashboards/_reindexing_activity.html.erb_spec.rb +6 -6
  193. data/spec/views/spotlight/dashboards/analytics.html.erb_spec.rb +1 -1
  194. data/spec/views/spotlight/exhibits/_exhibit_card_front.html.erb_spec.rb +1 -1
  195. data/spec/views/spotlight/exhibits/edit.html.erb_spec.rb +1 -1
  196. data/spec/views/spotlight/exhibits/index.html.erb_spec.rb +6 -6
  197. data/spec/views/spotlight/feature_pages/_sidebar.html.erb_spec.rb +8 -8
  198. data/spec/views/spotlight/home_pages/_empty.html.erb_spec.rb +1 -1
  199. data/spec/views/spotlight/metadata_configurations/_metadata_field.html.erb_spec.rb +1 -1
  200. data/spec/views/spotlight/metadata_configurations/edit.html.erb_spec.rb +1 -1
  201. data/spec/views/spotlight/pages/_form.html.erb_spec.rb +18 -0
  202. data/spec/views/spotlight/roles/index.html.erb_spec.rb +2 -2
  203. data/spec/views/spotlight/search_configurations/_facets.html.erb_spec.rb +14 -2
  204. data/spec/views/spotlight/search_configurations/_search_fields.html.erb_spec.rb +9 -2
  205. data/spec/views/spotlight/search_configurations/_sort.html.erb_spec.rb +10 -1
  206. data/spec/views/spotlight/searches/_search.html.erb_spec.rb +8 -8
  207. data/spec/views/spotlight/searches/edit.html.erb_spec.rb +1 -1
  208. data/spec/views/spotlight/sir_trevor/blocks/_browse_block.html.erb_spec.rb +1 -1
  209. data/spec/views/spotlight/sir_trevor/blocks/_link_to_search_block.html.erb_spec.rb +18 -0
  210. data/spec/views/spotlight/sites/edit_exhibits.html.erb_spec.rb +2 -2
  211. data/spec/views/spotlight/tags/index.html.erb_spec.rb +3 -3
  212. metadata +226 -200
  213. data/app/assets/stylesheets/spotlight/application.scss +0 -5
  214. data/vendor/assets/javascripts/leaflet.js +0 -9
  215. data/vendor/assets/stylesheets/leaflet.css +0 -624
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 2f70d64ceee688642329ed7e806e8c7b65dfe180
4
- data.tar.gz: 53170077f35be3b010e71ca3865d094886337050
3
+ metadata.gz: 6301051ced974a8d8437609d2dd11d82551a2dc0
4
+ data.tar.gz: 1a3d296988ee287cb7aa9575eb4e6a3936222fee
5
5
  SHA512:
6
- metadata.gz: 59bce50a85d3172c19f268e91fb2fdc9400197ba8443d5eeb165131427d7cac455cf203ccd93f952fe4316b120af0e0dc3e6c820eea60eb0fd1f444a07ed2dff
7
- data.tar.gz: b60c9a739d273bc57bfe25bc68e74bbb2aafd173eb4d0362dbaba4f7e84b8f7d5eb18b8cfb433be45ec91784b00494e3f60e7971e579001f8b172fe6770cc6a4
6
+ metadata.gz: 5deb0cdcfb5bd95631a649c14b2b45456ff2767977507e2cb87987512f18b06d40ecce3c87afc9af47e2b8a32e3ad45119bb70b13a1d98415ff0b11f7c2163e6
7
+ data.tar.gz: 200ae22837964033cfc064f50751085e1df04c3209100bacf89e9130a214d12a18d7d536a12469b98d9e436c359f2f619413d7ea91c9e641a1d45af5f0bf628f
data/README.md CHANGED
@@ -81,10 +81,6 @@ Our `$ rake ci` and `$ rake spotlight:server` tasks utilize Solr and the testing
81
81
 
82
82
  ## Tests
83
83
 
84
- ### Prerequisites
85
-
86
- PhantomJS (https://github.com/teampoltergeist/poltergeist#installing-phantomjs) is an addition requirement for testing javascript.
87
-
88
84
  ### Run all the tests:
89
85
 
90
86
  ```
@@ -0,0 +1,16 @@
1
+ //= require spotlight/blocks/browse_block
2
+
3
+ SirTrevor.Blocks.LinkToSearch = (function(){
4
+
5
+ return SirTrevor.Blocks.Browse.extend({
6
+
7
+ type: "link_to_search",
8
+
9
+ icon_name: 'search_results',
10
+
11
+ searches_key: "slug",
12
+ view_key: "view",
13
+ plustextable: false,
14
+
15
+ });
16
+ })();
@@ -16,21 +16,32 @@ Spotlight.onLoad(function() {
16
16
  $("#another-email").on("click", function() {
17
17
  var container = $(this).closest('.form-group');
18
18
  var contacts = container.find('.contact');
19
- var input_container = contacts.first().clone();
19
+ var inputContainer = contacts.first().clone();
20
20
 
21
21
  // wipe out any values from the inputs
22
- input_container.find('input').each(function() {
22
+ inputContainer.find('input').each(function() {
23
23
  $(this).val('');
24
24
  $(this).attr('id', $(this).attr('id').replace('0', contacts.length));
25
25
  $(this).attr('name', $(this).attr('name').replace('0', contacts.length));
26
26
  });
27
27
 
28
- input_container.find('.first-row-only').remove();
28
+ inputContainer.find('.contact-email-delete-wrapper').remove();
29
+ inputContainer.find('.confirmation-status').remove();
29
30
 
30
31
  // bootstrap does not render input-groups with only one value in them correctly.
31
- input_container.find('.input-group input:only-child').closest('.input-group').removeClass('input-group');
32
+ inputContainer.find('.input-group input:only-child').closest('.input-group').removeClass('input-group');
32
33
 
33
- $(input_container).insertAfter(contacts.last());
34
+ $(inputContainer).insertAfter(contacts.last());
35
+ });
36
+
37
+ $('.contact-email-delete').on('ajax:success', function() {
38
+ $(this).closest('.contact').fadeOut(250, function() { $(this).remove(); });
39
+ });
40
+
41
+ $('.contact-email-delete').on('ajax:error', function(event, _xhr, _status, error) {
42
+ var errSpan = $(this).closest('.contact').find('.contact-email-delete-error');
43
+ errSpan.show();
44
+ errSpan.find('.error-msg').first().text(error || event.detail[1]);
34
45
  });
35
46
 
36
47
  $('.btn-with-tooltip').tooltip();
@@ -52,7 +52,7 @@ function observedFormsStatusHasChanged(){
52
52
  // Compare stored and current form serializations
53
53
  // to determine if the form has changed before
54
54
  // unload and before any turbolinks change event
55
- $(window).on('beforeunload page:before-change', function(event) {
55
+ $(window).on('beforeunload page:before-change turbolinks:before-cache', function(event) {
56
56
  if ( observedFormsStatusHasChanged() ) {
57
57
  var message = "You have unsaved changes. Are you sure you want to leave this page?";
58
58
  if ( event.type == "beforeunload" ) {
@@ -61,4 +61,4 @@ $(window).on('beforeunload page:before-change', function(event) {
61
61
  return confirm(message)
62
62
  }
63
63
  }
64
- });
64
+ });
@@ -1,13 +1,14 @@
1
1
  // Place all the behaviors and hooks related to the matching controller here.
2
2
  // All this logic will automatically be available in application.js.
3
3
  Spotlight.onLoad(function(){
4
-
4
+ // Set a ujs adapter to support both rails-ujs and jquery-ujs
5
+ var ujs = typeof Rails === 'undefined' ? $.rails : Rails;
5
6
  SirTrevor.setDefaults({
6
7
  iconUrl: <%= asset_path('spotlight/blocks/sir-trevor-icons.svg').to_json %>,
7
8
  uploadUrl: $('[data-attachment-endpoint]').data('attachment-endpoint'),
8
9
  ajaxOptions: {
9
10
  headers: {
10
- 'X-CSRF-Token': (Rails || $.rails).csrfToken() || ''
11
+ 'X-CSRF-Token': ujs.csrfToken() || ''
11
12
  },
12
13
  credentials: 'same-origin'
13
14
  }
@@ -9,6 +9,12 @@ SirTrevor.Locales.en.blocks = $.extend(SirTrevor.Locales.en.blocks, {
9
9
  item_counts: "Include item counts?"
10
10
  },
11
11
 
12
+ link_to_search: {
13
+ title: "Saved Searches",
14
+ description: "This widget highlights saved searches. Each highlighted saved search links to the search results page generated by the saved search parameters. Any saved search listed on the Curation > Browse Categories page, whether published or not, can be highlighted as a saved search.",
15
+ item_counts: "Include item counts?"
16
+ },
17
+
12
18
  iframe: {
13
19
  title: "IFrame",
14
20
  description: "This widget embeds iframe-based embed code into pages",
@@ -27,9 +27,7 @@ module Spotlight
27
27
  end
28
28
 
29
29
  def enabled_in_spotlight_view_type_configuration?(config, *args)
30
- if config.respond_to?(:upstream_if) &&
31
- !config.upstream_if.nil? &&
32
- !blacklight_configuration_context.evaluate_configuration_conditional(config.upstream_if, config, *args)
30
+ if config.respond_to?(:original) && !blacklight_configuration_context.evaluate_if_unless_configuration(config.original, *args)
33
31
  false
34
32
  elsif current_exhibit.nil? || is_a?(Spotlight::PagesController)
35
33
  true
@@ -38,13 +36,11 @@ module Spotlight
38
36
  end
39
37
  end
40
38
 
41
- # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/MethodLength
39
+ # rubocop:disable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/MethodLength
42
40
  def field_enabled?(field, *args)
43
41
  if !field.enabled
44
42
  false
45
- elsif field.respond_to?(:upstream_if) &&
46
- !field.upstream_if.nil? &&
47
- !blacklight_configuration_context.evaluate_configuration_conditional(field.upstream_if, field, *args)
43
+ elsif field.respond_to?(:original) && !blacklight_configuration_context.evaluate_if_unless_configuration(field.original, *args)
48
44
  false
49
45
  elsif field.is_a?(Blacklight::Configuration::SortField) || field.is_a?(Blacklight::Configuration::SearchField)
50
46
  field.enabled
@@ -54,7 +50,7 @@ module Spotlight
54
50
  field.send(document_index_view_type)
55
51
  end
56
52
  end
57
- # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/AbcSize, Metrics/MethodLength
53
+ # rubocop:enable Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity, Metrics/MethodLength
58
54
 
59
55
  private
60
56
 
@@ -0,0 +1,22 @@
1
+ module Spotlight
2
+ ##
3
+ # CRUD actions for exhibit contact emails
4
+ class ContactEmailController < Spotlight::ApplicationController
5
+ rescue_from ActiveRecord::RecordNotFound, with: :record_not_found
6
+
7
+ before_action :authenticate_user!
8
+ load_and_authorize_resource :exhibit, class: 'Spotlight::Exhibit'
9
+ load_and_authorize_resource through: :exhibit
10
+
11
+ def destroy
12
+ @contact_email.destroy
13
+ render json: { success: true, error: nil }
14
+ end
15
+
16
+ private
17
+
18
+ def record_not_found(_error)
19
+ render json: { success: false, error: 'Not Found' }, status: :not_found
20
+ end
21
+ end
22
+ end
@@ -28,7 +28,9 @@ module Spotlight
28
28
  def index
29
29
  respond_to do |format|
30
30
  format.html
31
- format.json { render json: @searches.published.as_json(methods: [:count, :thumbnail_image_url]), root: false }
31
+ format.json do
32
+ render json: @searches.as_json(methods: [:count, :thumbnail_image_url]), root: false
33
+ end
32
34
  end
33
35
  end
34
36
 
@@ -26,8 +26,8 @@ module Spotlight
26
26
  # can't use default_blacklight_config until after the BlacklightConfiguration
27
27
  # is created or we run into a circular dependency.
28
28
  default_fields = Spotlight::Engine.blacklight_config.search_fields
29
- self.search_fields = default_fields.each_with_object({}) do |(k, _v), obj|
30
- obj[k] = { enabled: true }
29
+ self.search_fields = default_fields.each_with_object({}) do |(k, v), obj|
30
+ obj[k] = { enabled: v.fetch(:enabled, true) }
31
31
  end
32
32
  end
33
33
 
@@ -37,8 +37,8 @@ module Spotlight
37
37
  # can't use default_blacklight_config until after the BlacklightConfiguration
38
38
  # is created or we run into a circular dependency.
39
39
  default_fields = Spotlight::Engine.blacklight_config.sort_fields
40
- self.sort_fields = default_fields.each_with_object({}) do |(k, _v), obj|
41
- obj[k] = { enabled: true }
40
+ self.sort_fields = default_fields.each_with_object({}) do |(k, v), obj|
41
+ obj[k] = { enabled: v.fetch(:enabled, true) }
42
42
  end
43
43
  end
44
44
 
@@ -32,7 +32,13 @@ module SirTrevorRails
32
32
  def as_json
33
33
  result = super
34
34
 
35
- result[:data][:item].each do |_k, v|
35
+ result[:data][:item] ||= {}
36
+
37
+ # TODO: This is a temporary fix that simply removes any item if the search identifier does not exist
38
+ # We should have a more permanent solution that will allow browse blocks to be updated without erroring
39
+ result[:data][:item].select! { |_, v| parent.exhibit.searches.exists?(v['id']) }
40
+
41
+ result[:data][:item].each_value do |v|
36
42
  v['thumbnail_image_url'] = parent.exhibit.searches.find(v['id']).thumbnail_image_url
37
43
  end
38
44
 
@@ -22,7 +22,9 @@ module SirTrevorRails
22
22
  def as_json
23
23
  result = super
24
24
 
25
- result[:data][:item].each do |_k, v|
25
+ result[:data][:item] ||= {}
26
+
27
+ result[:data][:item].each_value do |v|
26
28
  v['thumbnail_image_url'] = parent.exhibit.pages.find(v['id']).thumbnail_image_url
27
29
  end
28
30
 
@@ -0,0 +1,15 @@
1
+ module SirTrevorRails
2
+ module Blocks
3
+ ##
4
+ # Embed search results (from a browse category) into the page
5
+ class LinkToSearchBlock < BrowseBlock
6
+ include Displayable
7
+
8
+ def searches
9
+ @searches ||= parent.exhibit.searches.where(slug: item_ids).sort do |a, b|
10
+ ordered_items.index(a.slug) <=> ordered_items.index(b.slug)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -14,7 +14,7 @@ module Spotlight
14
14
 
15
15
  # exhibit admin
16
16
  can [:update, :import, :export, :destroy], Spotlight::Exhibit, id: user.admin_roles.pluck(:resource_id)
17
- can :manage, Spotlight::BlacklightConfiguration, exhibit_id: user.admin_roles.pluck(:resource_id)
17
+ can :manage, [Spotlight::BlacklightConfiguration, Spotlight::ContactEmail], exhibit_id: user.admin_roles.pluck(:resource_id)
18
18
  can :manage, Spotlight::Role, resource_id: user.admin_roles.pluck(:resource_id), resource_type: 'Spotlight::Exhibit'
19
19
 
20
20
  can :manage, PaperTrail::Version if user.roles.any?
@@ -5,6 +5,8 @@ module Spotlight
5
5
  # Exhibit-specific blacklight configuration model
6
6
  # rubocop:disable Metrics/ClassLength
7
7
  class BlacklightConfiguration < ActiveRecord::Base
8
+ has_paper_trail
9
+
8
10
  belongs_to :exhibit, touch: true, optional: true
9
11
  serialize :facet_fields, Hash
10
12
  serialize :index_fields, Hash
@@ -88,6 +90,7 @@ module Spotlight
88
90
 
89
91
  # Update with customizations
90
92
  config.index_fields.each do |k, v|
93
+ v.original = v.dup
91
94
  if index_fields[k]
92
95
  v.merge! index_fields[k].symbolize_keys
93
96
  elsif custom_index_fields[k]
@@ -99,7 +102,6 @@ module Spotlight
99
102
  v.immutable = Blacklight::OpenStructWithHashAccess.new(v.immutable)
100
103
  v.merge! v.immutable.to_h.symbolize_keys
101
104
 
102
- v.upstream_if = v.if unless v.if.nil?
103
105
  v.if = :field_enabled? unless v.if == false
104
106
 
105
107
  v.normalize! config
@@ -109,6 +111,7 @@ module Spotlight
109
111
  config.show_fields.reject! { |_k, v| v.if == false }
110
112
 
111
113
  config.show_fields.reject { |k, _v| config.index_fields[k] }.each do |k, v|
114
+ v.original = v.dup
112
115
  config.index_fields[k] = v
113
116
 
114
117
  if index_fields[k]
@@ -120,7 +123,6 @@ module Spotlight
120
123
  v.immutable = Blacklight::OpenStructWithHashAccess.new(v.immutable)
121
124
  v.merge! v.immutable.to_h.symbolize_keys
122
125
 
123
- v.upstream_if = v.if unless v.if.nil?
124
126
  v.if = :field_enabled? unless v.if == false
125
127
 
126
128
  v.normalize! config
@@ -133,7 +135,7 @@ module Spotlight
133
135
  config.search_fields = Hash[config.search_fields.sort_by { |k, _v| field_weight(search_fields, k) }]
134
136
 
135
137
  config.search_fields.each do |k, v|
136
- v.upstream_if = v.if unless v.if.nil?
138
+ v.original = v.dup
137
139
  v.if = :field_enabled? unless v.if == false
138
140
  next if search_fields[k].blank?
139
141
 
@@ -147,7 +149,7 @@ module Spotlight
147
149
  config.sort_fields = Hash[config.sort_fields.sort_by { |k, _v| field_weight(sort_fields, k) }]
148
150
 
149
151
  config.sort_fields.each do |k, v|
150
- v.upstream_if = v.if unless v.if.nil?
152
+ v.original = v.dup
151
153
  v.if = :field_enabled? unless v.if == false
152
154
  next if sort_fields[k].blank?
153
155
 
@@ -162,13 +164,12 @@ module Spotlight
162
164
  config.facet_fields = Hash[config.facet_fields.sort_by { |k, _v| field_weight(facet_fields, k) }]
163
165
 
164
166
  config.facet_fields.each do |k, v|
167
+ v.original = v.dup
165
168
  next if facet_fields[k].blank?
166
169
 
167
170
  v.merge! facet_fields[k].symbolize_keys
168
- v.upstream_if = v.if unless v.if.nil?
169
171
  v.enabled = v.show
170
172
  v.if = :field_enabled? unless v.if == false
171
- v.upstream_if = nil if v.upstream_if == v.if
172
173
  v.normalize! config
173
174
  v.validate!
174
175
  end
@@ -182,8 +183,8 @@ module Spotlight
182
183
  end
183
184
 
184
185
  config.view.each do |k, v|
186
+ v.original = v.dup
185
187
  v.key = k
186
- v.upstream_if = v.if unless v.if.nil?
187
188
  v.if = :enabled_in_spotlight_view_type_configuration? unless v.if == false
188
189
  end unless document_index_view_types.blank?
189
190
 
@@ -7,6 +7,8 @@ module Spotlight
7
7
  include Spotlight::ExhibitDefaults
8
8
  include Spotlight::ExhibitDocuments
9
9
 
10
+ has_paper_trail
11
+
10
12
  scope :published, -> { where(published: true) }
11
13
  scope :unpublished, -> { where(published: false) }
12
14
  scope :ordered_by_weight, -> { order('weight ASC') }
@@ -80,9 +80,11 @@ module Spotlight
80
80
  end
81
81
 
82
82
  def write_to_index(batch)
83
- return unless write?
83
+ documents = documents_that_have_ids(batch)
84
+ return unless write? && documents.present?
85
+
84
86
  blacklight_solr.update params: { commitWithin: 500 },
85
- data: batch.to_json,
87
+ data: documents.to_json,
86
88
  headers: { 'Content-Type' => 'application/json' }
87
89
  end
88
90
 
@@ -100,6 +102,10 @@ module Spotlight
100
102
  def write?
101
103
  Spotlight::Engine.config.writable_index
102
104
  end
105
+
106
+ def documents_that_have_ids(document_list)
107
+ document_list.reject { |d| d[document_builder.document_model.unique_key.to_sym].blank? }
108
+ end
103
109
  end
104
110
  end
105
111
  end
@@ -1,6 +1,11 @@
1
1
  module Spotlight
2
2
  # Used by RIIIF to find files uploaded by carrierwave
3
3
  class CarrierwaveFileResolver < Riiif::AbstractFileSystemResolver
4
+ # Override initialzer to avoid deprecation about not providing base path
5
+ def initializer
6
+ # nop
7
+ end
8
+
4
9
  def pattern(id)
5
10
  uploaded_file = Spotlight::FeaturedImage.find(id).image.file
6
11
  raise Riiif::ImageNotFoundError, "unable to find file for #{id}" if uploaded_file.nil?
@@ -21,8 +21,8 @@ module Spotlight
21
21
 
22
22
  def add_image_dimensions(solr_hash)
23
23
  dimensions = Riiif::Image.new(resource.upload_id).info
24
- solr_hash[:spotlight_full_image_width_ssm] = dimensions[:width]
25
- solr_hash[:spotlight_full_image_height_ssm] = dimensions[:height]
24
+ solr_hash[:spotlight_full_image_width_ssm] = dimensions.width
25
+ solr_hash[:spotlight_full_image_height_ssm] = dimensions.height
26
26
  end
27
27
 
28
28
  def add_file_versions(solr_hash)
@@ -41,7 +41,7 @@
41
41
  <%= f.form_group :theme, label: { text: t(:'.site_theme.label') } do %>
42
42
  <% Spotlight::Engine.config.exhibit_themes.each do |theme| %>
43
43
  <div class="col-md-6">
44
- <%= image_tag "spotlight/themes/#{theme}_preview", width: 100, height: 100 %>
44
+ <%= image_tag "spotlight/themes/#{theme}_preview.png", width: 100, height: 100 %>
45
45
  <%= f.radio_button :theme, theme, label: t(:".site_theme.#{theme}", default: theme.to_s.titleize), inline: true %>
46
46
  </div>
47
47
  <% end %>
@@ -1,4 +1,4 @@
1
- <div class="col-md-4 confirmation-status <%= 'not-validated' unless contact_email.confirmed? or contact_email.recently_sent? %>">
1
+ <div class="confirmation-status <%= 'not-validated' unless contact_email.confirmed? or contact_email.recently_sent? %>">
2
2
  <% if contact_email.confirmed? %>
3
3
  <span class="confirmed"><span class="glyphicon glyphicon-ok-sign"></span> <%= t('.confirmed') %></span>
4
4
  <% elsif contact_email.recently_sent? %>
@@ -1,17 +1,22 @@
1
- <%= contact.hidden_field :id %>
2
1
  <div class="row contact">
2
+ <%= contact.hidden_field :id %>
3
3
  <div class="col-md-8<%= ' has-error' if contact.object.errors[:email].present? %>">
4
- <% if contact.index == 0 %>
5
- <div class="input-group">
6
- <%= text_field_tag "#{contact.object_name}[email]", contact.object.email, class: 'exhibit-contact form-control' %>
7
- <span id='another-email' class="input-group-addon first-row-only">+</span>
8
- </div>
9
- <% else %>
10
- <%= text_field_tag "#{contact.object_name}[email]", contact.object.email, class: 'exhibit-contact form-control' %>
11
- <% end %>
4
+ <%= text_field_tag "#{contact.object_name}[email]", contact.object.email, class: 'exhibit-contact form-control' %>
12
5
  <% if contact.object.errors[:email].present? %>
13
6
  <span class="help-block"><%=contact.object.errors[:email].join(", ".html_safe) %></span>
14
7
  <% end %>
8
+ <p>
9
+ <span class="contact-email-delete-error text-danger callout-danger" style="display: none;"><%= t('.email_delete_error') %> <span class="error-msg"></span></span>
10
+ </p>
11
+ </div>
12
+ <div class="col-md-4">
13
+ <% if contact.object.id %>
14
+ <span class="contact-email-delete-wrapper">
15
+ <%= link_to exhibit_contact_email_path(exhibit_id: exhibit.id, id: contact.object.id), class: 'contact-email-delete btn btn-xs btn-danger', method: :delete, data: { confirm: t('.email_delete_confirmation'), remote: true } do %>
16
+ <%= t('.email_delete_button') %>
17
+ <% end %>
18
+ </span>
19
+ <% end %>
20
+ <%= render partial: 'confirmation_status', locals: {contact_email: contact.object} unless contact.object.new_record? %>
15
21
  </div>
16
- <%= render partial: 'confirmation_status', locals: {contact_email: contact.object} unless contact.object.new_record? %>
17
22
  </div>