blacklight-spotlight 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
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>