geoblacklight 4.0.0.pre.alpha.3 → 4.0.0.pre.rc3

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 (209) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +1 -1
  3. data/.github/workflows/ruby.yml +32 -103
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +12 -6
  6. data/.rubocop_todo.yml +0 -3
  7. data/.solr_wrapper +2 -0
  8. data/README.md +1 -4
  9. data/Rakefile +0 -1
  10. data/app/assets/images/blacklight/child-item.svg +3 -0
  11. data/app/assets/images/blacklight/collections.svg +4 -0
  12. data/app/assets/images/blacklight/datasets.svg +7 -0
  13. data/app/assets/images/blacklight/geoblacklight-icons.json +363 -332
  14. data/app/assets/images/blacklight/imagery.svg +4 -0
  15. data/app/assets/images/blacklight/maps.svg +4 -0
  16. data/app/assets/images/blacklight/parent-item.svg +3 -0
  17. data/app/assets/images/blacklight/university-of-colorado-boulder.svg +6 -0
  18. data/app/assets/images/blacklight/websites.svg +4 -0
  19. data/app/assets/javascripts/geoblacklight/controls/fullscreen.js +8 -0
  20. data/app/assets/javascripts/geoblacklight/geoblacklight.js +2 -1
  21. data/app/assets/javascripts/geoblacklight/viewers/esri.js +1 -0
  22. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +1 -0
  23. data/app/assets/javascripts/geoblacklight/viewers/tilejson.js +33 -0
  24. data/app/assets/javascripts/geoblacklight/viewers/tms.js +2 -2
  25. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +3 -0
  26. data/app/assets/javascripts/geoblacklight/viewers/wms.js +2 -2
  27. data/app/assets/javascripts/geoblacklight/viewers/wmts.js +85 -0
  28. data/app/assets/javascripts/geoblacklight/viewers/xyz.js +10 -0
  29. data/app/assets/stylesheets/geoblacklight/geoblacklight.scss +1 -0
  30. data/app/assets/stylesheets/geoblacklight/modules/_base.scss +0 -1
  31. data/app/assets/stylesheets/geoblacklight/modules/_styles.scss +5 -1
  32. data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +20 -47
  33. data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +68 -0
  34. data/app/assets/stylesheets/geoblacklight/modules/item.scss +16 -0
  35. data/app/assets/stylesheets/geoblacklight/modules/modal.scss +6 -0
  36. data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +4 -0
  37. data/app/components/geoblacklight/icon_facet_item_component.rb +33 -0
  38. data/app/controllers/wms_controller.rb +1 -1
  39. data/app/helpers/geoblacklight_helper.rb +6 -45
  40. data/app/models/concerns/geoblacklight/bbox_filter_field.rb +64 -0
  41. data/app/models/concerns/geoblacklight/bbox_filter_query.rb +50 -0
  42. data/app/models/concerns/geoblacklight/solr_document.rb +1 -1
  43. data/app/models/concerns/geoblacklight/suppressed_records_search_behavior.rb +31 -0
  44. data/app/presenters/geoblacklight/bbox_item_presenter.rb +9 -0
  45. data/app/views/catalog/_downloads_collapse.html.erb +27 -0
  46. data/app/views/catalog/_header_icons.html.erb +2 -2
  47. data/app/views/catalog/_index_split_default.html.erb +2 -2
  48. data/app/views/catalog/_show_default_viewer_container.html.erb +17 -0
  49. data/app/views/catalog/_show_downloads.html.erb +10 -21
  50. data/app/views/catalog/_show_sidebar.html.erb +3 -0
  51. data/app/views/catalog/_show_web_services.html.erb +11 -0
  52. data/app/views/catalog/_web_services.html.erb +3 -2
  53. data/app/views/catalog/web_services.html.erb +1 -1
  54. data/app/views/shared/_header_navbar.html.erb +13 -3
  55. data/config/locales/geoblacklight.en.yml +6 -1
  56. data/geoblacklight.gemspec +7 -7
  57. data/lib/generators/geoblacklight/assets_generator.rb +1 -1
  58. data/lib/generators/geoblacklight/install_generator.rb +18 -1
  59. data/lib/generators/geoblacklight/templates/assets/_customizations.scss +5 -4
  60. data/lib/generators/geoblacklight/templates/assets/application.scss +0 -3
  61. data/lib/generators/geoblacklight/templates/catalog_controller.rb +86 -57
  62. data/lib/generators/geoblacklight/templates/settings.gbl_v1.yml +5 -5
  63. data/lib/generators/geoblacklight/templates/settings.yml +62 -25
  64. data/lib/geoblacklight/bounding_box.rb +5 -1
  65. data/lib/geoblacklight/constants.rb +3 -0
  66. data/lib/geoblacklight/download.rb +1 -1
  67. data/lib/geoblacklight/engine.rb +7 -4
  68. data/lib/geoblacklight/faraday_middleware/follow_redirects.rb +176 -0
  69. data/lib/geoblacklight/item_viewer.rb +13 -1
  70. data/lib/geoblacklight/metadata/base.rb +2 -1
  71. data/lib/geoblacklight/metadata_transformer/base.rb +1 -1
  72. data/lib/geoblacklight/version.rb +1 -1
  73. data/lib/geoblacklight/view_helper_override.rb +2 -28
  74. data/lib/geoblacklight.rb +0 -10
  75. data/lib/tasks/geoblacklight.rake +1 -1
  76. data/schema/geoblacklight-schema-aardvark.json +3 -23
  77. data/solr/conf/schema.xml +37 -43
  78. data/solr/conf/solrconfig.xml +17 -17
  79. data/spec/components/geoblacklight/icon_facet_item_component_spec.rb +17 -0
  80. data/spec/config/initializers/rails_config_spec.rb +1 -1
  81. data/spec/controllers/catalog_controller_spec.rb +8 -8
  82. data/spec/controllers/download_controller_spec.rb +4 -4
  83. data/spec/controllers/relation_controller_spec.rb +1 -1
  84. data/spec/controllers/wms_controller_spec.rb +2 -4
  85. data/spec/features/download_layer_spec.rb +31 -14
  86. data/spec/features/esri_viewer_spec.rb +5 -1
  87. data/spec/features/full_screen_controll_spec.rb +15 -0
  88. data/spec/features/home_page_spec.rb +2 -2
  89. data/spec/features/index_map_spec.rb +2 -2
  90. data/spec/features/missing_metadata_spec.rb +1 -1
  91. data/spec/features/multiple_downloads_spec.rb +2 -1
  92. data/spec/features/relations_spec.rb +12 -1
  93. data/spec/features/saved_searches_spec.rb +1 -1
  94. data/spec/features/search_results_complex_geometry_spec.rb +24 -0
  95. data/spec/features/search_results_icons_spec.rb +16 -0
  96. data/spec/features/search_results_map_spec.rb +2 -2
  97. data/spec/features/search_spec.rb +17 -0
  98. data/spec/features/show_page_download_spec.rb +6 -3
  99. data/spec/features/show_page_metadata_spec.rb +2 -2
  100. data/spec/features/split_view.html.erb_spec.rb +12 -1
  101. data/spec/features/tilejson_spec.rb +22 -0
  102. data/spec/features/tms_spec.rb +2 -2
  103. data/spec/features/web_services_modal_spec.rb +35 -2
  104. data/spec/features/wmts_spec.rb +34 -0
  105. data/spec/features/xyz_spec.rb +10 -0
  106. data/spec/fixtures/manifests/tilejson.json +21 -0
  107. data/spec/fixtures/manifests/wmts-multiple.xml +813 -0
  108. data/spec/fixtures/manifests/wmts-single.xml +126 -0
  109. data/spec/fixtures/solr_documents/README.md +46 -43
  110. data/spec/fixtures/solr_documents/actual-papermap1.json +2 -1
  111. data/spec/fixtures/solr_documents/actual-point1.json +2 -1
  112. data/spec/fixtures/solr_documents/actual-polygon1.json +2 -1
  113. data/spec/fixtures/solr_documents/actual-raster1.json +3 -2
  114. data/spec/fixtures/solr_documents/b1g_wabash_child_15.json +62 -0
  115. data/spec/fixtures/solr_documents/b1g_wabash_child_16.json +64 -0
  116. data/spec/fixtures/solr_documents/b1g_wabash_child_17.json +62 -0
  117. data/spec/fixtures/solr_documents/b1g_wabash_child_18.json +62 -0
  118. data/spec/fixtures/solr_documents/b1g_wabash_parent.json +59 -0
  119. data/spec/fixtures/solr_documents/baruch_ancestor1.json +2 -1
  120. data/spec/fixtures/solr_documents/baruch_ancestor2.json +2 -1
  121. data/spec/fixtures/solr_documents/baruch_documentation_download.json +1 -1
  122. data/spec/fixtures/solr_documents/bbox-spans-180.json +2 -1
  123. data/spec/fixtures/solr_documents/cornell_html_metadata.json +4 -3
  124. data/spec/fixtures/solr_documents/esri-dynamic-layer-all-layers.json +3 -2
  125. data/spec/fixtures/solr_documents/esri-dynamic-layer-single-layer.json +3 -2
  126. data/spec/fixtures/solr_documents/esri-feature-layer.json +2 -1
  127. data/spec/fixtures/solr_documents/esri-image-map-layer.json +3 -2
  128. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +2 -1
  129. data/spec/fixtures/solr_documents/esri-wms-layer.json +2 -1
  130. data/spec/fixtures/solr_documents/harvard_raster.json +3 -2
  131. data/spec/fixtures/solr_documents/iiif-eastern-hemisphere.json +3 -2
  132. data/spec/fixtures/solr_documents/index-map-polygon-no-downloadurl.json +2 -1
  133. data/spec/fixtures/solr_documents/index-map-polygon.json +2 -1
  134. data/spec/fixtures/solr_documents/index-map-stanford.json +2 -1
  135. data/spec/fixtures/solr_documents/index_map_point.json +3 -2
  136. data/spec/fixtures/solr_documents/metadata_no_provider.json +2 -1
  137. data/spec/fixtures/solr_documents/multiple-downloads.json +3 -2
  138. data/spec/fixtures/solr_documents/no_spatial.json +1 -4
  139. data/spec/fixtures/solr_documents/oembed.json +2 -1
  140. data/spec/fixtures/solr_documents/princeton-child1.json +3 -2
  141. data/spec/fixtures/solr_documents/princeton-child2.json +3 -2
  142. data/spec/fixtures/solr_documents/princeton-child3.json +2 -1
  143. data/spec/fixtures/solr_documents/princeton-child4.json +3 -2
  144. data/spec/fixtures/solr_documents/princeton-parent.json +5 -3
  145. data/spec/fixtures/solr_documents/public_direct_download.json +2 -1
  146. data/spec/fixtures/solr_documents/public_iiif_princeton.json +3 -2
  147. data/spec/fixtures/solr_documents/public_polygon_mit.json +2 -1
  148. data/spec/fixtures/solr_documents/restricted-line.json +2 -1
  149. data/spec/fixtures/solr_documents/tilejson.json +48 -0
  150. data/spec/fixtures/solr_documents/tms.json +15 -18
  151. data/spec/fixtures/solr_documents/umn_metro_result1.json +5 -3
  152. data/spec/fixtures/solr_documents/umn_state_result1.json +3 -2
  153. data/spec/fixtures/solr_documents/umn_state_result2.json +3 -5
  154. data/spec/fixtures/solr_documents/uva_slug_colon.json +2 -1
  155. data/spec/fixtures/solr_documents/wmts-multiple.json +41 -0
  156. data/spec/fixtures/solr_documents/wmts-single-layer.json +48 -0
  157. data/spec/fixtures/solr_documents/xyz.json +46 -0
  158. data/spec/helpers/geoblacklight_helper_spec.rb +14 -37
  159. data/spec/lib/geoblacklight/document_presenter_spec.rb +3 -3
  160. data/spec/lib/geoblacklight/download/geojson_download_spec.rb +1 -1
  161. data/spec/lib/geoblacklight/download/geotiff_download_spec.rb +1 -1
  162. data/spec/lib/geoblacklight/download/kmz_download_spec.rb +1 -1
  163. data/spec/lib/geoblacklight/download/shapefile_download_spec.rb +1 -1
  164. data/spec/lib/geoblacklight/download_spec.rb +2 -2
  165. data/spec/lib/geoblacklight/metadata/base_spec.rb +19 -1
  166. data/spec/lib/geoblacklight/metadata_transformer/fgdc_spec.rb +1 -1
  167. data/spec/lib/geoblacklight/metadata_transformer/iso19139_spec.rb +1 -1
  168. data/spec/lib/geoblacklight/references_spec.rb +5 -3
  169. data/spec/lib/geoblacklight/relation/relation_response_spec.rb +5 -0
  170. data/spec/lib/geoblacklight/view_helper_override_spec.rb +0 -10
  171. data/spec/lib/geoblacklight/wms_layer_spec.rb +1 -1
  172. data/spec/models/concerns/geoblacklight/bbox_filter_field_spec.rb +96 -0
  173. data/spec/models/concerns/geoblacklight/bbox_filter_query_spec.rb +105 -0
  174. data/spec/models/concerns/geoblacklight/solr_document/inspection_spec.rb +2 -1
  175. data/spec/models/concerns/geoblacklight/suppressed_records_search_behavior_spec.rb +31 -0
  176. data/spec/presenters/geoblacklight/bbox_item_presenter_spec.rb +36 -0
  177. data/spec/spec_helper.rb +8 -3
  178. data/spec/test_app_templates/Gemfile.extra +1 -0
  179. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -4
  180. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +1 -1
  181. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +6 -6
  182. data/template.rb +2 -4
  183. data/vendor/assets/images/fullscreen.png +0 -0
  184. data/vendor/assets/images/fullscreen@2x.png +0 -0
  185. data/vendor/assets/javascripts/Leaflet.fullscreen.js +152 -0
  186. data/vendor/assets/javascripts/esri-leaflet.js +10 -3
  187. data/vendor/assets/javascripts/esri-leaflet.js.map +1 -1
  188. data/vendor/assets/javascripts/leaflet-iiif.js +39 -18
  189. data/vendor/assets/javascripts/leaflet-src.js.erb +14126 -0
  190. data/vendor/assets/javascripts/leaflet-src.js.map +1 -1
  191. data/vendor/assets/stylesheets/leaflet.css +640 -634
  192. data/vendor/assets/stylesheets/leaflet.fullscreen.css +40 -0
  193. metadata +102 -49
  194. data/app/models/concerns/geoblacklight/spatial_search_behavior.rb +0 -71
  195. data/app/views/catalog/_download_generated_link.html.erb +0 -4
  196. data/app/views/catalog/_download_link.html.erb +0 -3
  197. data/app/views/catalog/_downloads_generated.html.erb +0 -6
  198. data/app/views/catalog/_downloads_primary.html.erb +0 -21
  199. data/app/views/catalog/_downloads_secondary.html.erb +0 -39
  200. data/app/views/catalog/_icon_facet.html.erb +0 -16
  201. data/bin/coverage.rb +0 -36
  202. data/lib/generators/geoblacklight/templates/Procfile +0 -3
  203. data/lib/generators/geoblacklight/templates/package.json +0 -14
  204. data/lib/generators/geoblacklight/templates/webpacker.yml +0 -67
  205. data/lib/generators/geoblacklight/webpacker_generator.rb +0 -36
  206. data/lib/geoblacklight/catalog_helper_override.rb +0 -14
  207. data/spec/models/concerns/geoblacklight/spatial_search_behavior_spec.rb +0 -97
  208. data/vendor/assets/javascripts/leaflet.js.erb +0 -13922
  209. data/vendor/assets/stylesheets/leaflet-label.css +0 -54
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class BboxFilterField < Blacklight::SearchState::FilterField
5
+ # this accessor is unnecessary after Blacklight 7.25.0
6
+ attr_accessor :filters_key
7
+
8
+ def initialize(*args)
9
+ super
10
+ @filters_key = :bbox
11
+ end
12
+
13
+ # @param [String,#value] a filter item to add to the url
14
+ # @return [Blacklight::SearchState] new state
15
+ def add(item)
16
+ new_state = search_state.reset_search
17
+ params = new_state.params
18
+ value = as_url_parameter(item)
19
+
20
+ params[filters_key] = value.to_param
21
+
22
+ new_state.reset(params)
23
+ end
24
+
25
+ # @param [String,#value] a filter to remove from the url
26
+ # @return [Blacklight::SearchState] new state
27
+ def remove(_item)
28
+ new_state = search_state.reset_search
29
+ params = new_state.params
30
+
31
+ params.delete(filters_key)
32
+ new_state.reset(params)
33
+ end
34
+
35
+ # @return [Array] an array of applied filters
36
+ def values(except: [])
37
+ params = search_state.params
38
+ return [] if except.include?(:filters) || params[filters_key].blank?
39
+
40
+ [Geoblacklight::BoundingBox.from_rectangle(params[filters_key])]
41
+ rescue Geoblacklight::Exceptions::WrongBoundingBoxFormat => e
42
+ Rails.logger.warn(e)
43
+
44
+ []
45
+ end
46
+
47
+ # @param [String,#value] a filter to remove from the url
48
+ # @return [Boolean] whether the provided filter is currently applied/selected
49
+ delegate :include?, to: :values
50
+
51
+ # @since Blacklight v7.25.0
52
+ # normal filter fields demangle when they encounter a hash, which they assume to be a number-indexed map
53
+ def needs_normalization?(value_params)
54
+ value_params.is_a?(Hash) && value_params.keys.map(&:to_s).all? { |k| k =~ /^\d+$/ }
55
+ end
56
+
57
+ # @since Blacklight v7.25.0
58
+ # value should be the first value from a mangled hash,
59
+ # otherwise return the value as-is
60
+ def normalize(value_params)
61
+ needs_normalization?(value_params) ? value_params.values : value_params
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class BboxFilterQuery
5
+ def self.call(_search_builder, filter, solr_params)
6
+ bbox_filter_query = Geoblacklight::BboxFilterQuery.new(filter, solr_params)
7
+
8
+ [bbox_filter_query.intersects_filter, bbox_filter_query.relevancy_boost]
9
+ end
10
+
11
+ def initialize(filter, solr_params)
12
+ @filter = filter
13
+ @solr_params = solr_params
14
+ end
15
+
16
+ def intersects_filter
17
+ "#{@filter.key}:\"Intersects(#{envelope_bounds})\""
18
+ end
19
+
20
+ def relevancy_boost
21
+ boosted_params = @solr_params.slice(:bq, :bf)
22
+
23
+ boosted_params[:bq] ||= []
24
+ boosted_params[:bq] << "#{@filter.key}:\"IsWithin(#{envelope_bounds})\"#{boost}"
25
+
26
+ if field_config.overlap_boost
27
+ boosted_params[:bf] ||= []
28
+ boosted_params[:overlap] =
29
+ "{!field uf=* defType=lucene f=#{field_config.overlap_field} score=overlapRatio}Intersects(#{envelope_bounds})"
30
+ boosted_params[:bf] << "$overlap^#{field_config.overlap_boost}"
31
+ end
32
+
33
+ boosted_params
34
+ end
35
+
36
+ def envelope_bounds
37
+ @filter.values.first.to_envelope
38
+ end
39
+
40
+ def boost
41
+ "^#{field_config.within_boost || '10'}"
42
+ end
43
+
44
+ private
45
+
46
+ def field_config
47
+ @filter.config
48
+ end
49
+ end
50
+ end
@@ -72,7 +72,7 @@ module Geoblacklight
72
72
  end
73
73
 
74
74
  def geom_field
75
- fetch(Settings.FIELDS.SPATIAL_EXTENT, '')
75
+ fetch(Settings.FIELDS.GEOMETRY, '')
76
76
  end
77
77
 
78
78
  def geometry
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ module Geoblacklight
3
+ module SuppressedRecordsSearchBehavior
4
+ extend ActiveSupport::Concern
5
+
6
+ included do
7
+ self.default_processor_chain += [:hide_suppressed_records]
8
+ end
9
+
10
+ ##
11
+ # Hide suppressed records in search
12
+ # @param [Blacklight::Solr::Request]
13
+ # @return [Blacklight::Solr::Request]
14
+ def hide_suppressed_records(solr_params)
15
+ # Show suppressed records when searching relationships
16
+ return if blacklight_params.fetch(:f,
17
+ {}).keys.any? do |field|
18
+ Settings.RELATIONSHIPS_SHOWN.map do |_key, value|
19
+ value.field
20
+ end.include?(field)
21
+ end
22
+
23
+ # Do not suppress action_documents method calls for individual documents
24
+ # ex. CatalogController#web_services (exportable views)
25
+ return if solr_params[:q]&.include?("{!lucene}#{Settings.FIELDS.ID}:")
26
+
27
+ solr_params[:fq] ||= []
28
+ solr_params[:fq] << "-#{Settings.FIELDS.SUPPRESSED}: true"
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geoblacklight
4
+ class BboxItemPresenter < Blacklight::FacetItemPresenter
5
+ def label
6
+ super.to_param
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,27 @@
1
+ <%# Renders the options of the downloads dropdown button %>
2
+ <% document ||= @document %>
3
+
4
+ <% if document.direct_download.present? %>
5
+ <% if document.direct_download[:download].is_a? Array %>
6
+ <% document.direct_download[:download].each do |download| %>
7
+ <%= download_link_file(download['label'], document.id, download['url']) %>
8
+ <% end %>
9
+ <% end %>
10
+ <% if document.direct_download[:download].is_a? String %>
11
+ <%= download_link_file(download_text(document.file_format), document.id, document.direct_download[:download]) %>
12
+ <% end %>
13
+ <% end %>
14
+
15
+ <% if document.hgl_download.present? %>
16
+ <%= download_link_hgl(download_text(document.download_types.first[0]), document) %>
17
+ <% end %>
18
+
19
+ <% if document.iiif_download.present? %>
20
+ <%= download_link_iiif %>
21
+ <% end %>
22
+
23
+ <% if document.download_types.present? %>
24
+ <% document.download_types.each do |type| %>
25
+ <%= download_link_generated(type.first, document) %>
26
+ <% end %>
27
+ <% end %>
@@ -1,3 +1,3 @@
1
- <%= geoblacklight_icon(document[Settings.FIELDS.GEOM_TYPE], classes: 'svg_tooltip') %>
1
+ <%= geoblacklight_icon(document[Settings.FIELDS.RESOURCE_CLASS]&.first, classes: 'svg_tooltip') %>
2
2
  <%= geoblacklight_icon(document[Settings.FIELDS.PROVIDER], classes: 'svg_tooltip') %>
3
- <%= geoblacklight_icon(document[Settings.FIELDS.RIGHTS], classes: 'svg_tooltip') %>
3
+ <%= geoblacklight_icon(document[Settings.FIELDS.ACCESS_RIGHTS], classes: 'svg_tooltip') %>
@@ -5,7 +5,7 @@
5
5
  <span class="document-counter">
6
6
  <%= t('blacklight.search.documents.counter', :counter => counter) if counter %>
7
7
  </span>
8
- <%= link_to_document document, counter: counter %>
8
+ <%= link_to_document document, counter: counter, itemprop: "name" %>
9
9
  </h3>
10
10
  <span class='status-icons'>
11
11
  <%= render partial: 'header_icons', locals: { document: document } %>
@@ -23,7 +23,7 @@
23
23
 
24
24
  <div class='more-info-area'>
25
25
  <div id="doc-<%= document.id %>-fields-collapse" class='collapse'>
26
- <small>
26
+ <small itemprop="description">
27
27
  <%= geoblacklight_present(:index_fields_display, document) %>
28
28
  </small>
29
29
  </div>
@@ -6,6 +6,23 @@
6
6
  <%= render_help_text_entry('viewer_protocol', document.viewer_protocol) %>
7
7
  <% end %>
8
8
 
9
+ <% if document.item_viewer.index_map %>
10
+ <div class="index-map-legend">
11
+ <div class="index-map-legend-info">
12
+ <span class="index-map-legend-default"></span>
13
+ <p><span class="sr-only">Green tile indicates </span>Map held by collection</p>
14
+ </div>
15
+ <div class="index-map-legend-info">
16
+ <span class="index-map-legend-unavailable"></span>
17
+ <p><span class="sr-only">Yellow tile indicates </span>Map not held by collection</p>
18
+ </div>
19
+ <div class="index-map-legend-info">
20
+ <span class="index-map-legend-selected"></span>
21
+ <p><span class="sr-only">Blue tile indicates </span>Selected map tile</p>
22
+ </div>
23
+ </div>
24
+ <% end %>
25
+
9
26
  <%= content_tag :div, id: 'map', aria: { label: t('geoblacklight.map.label') }, data: { map: 'item', protocol: document.viewer_protocol.camelize, url: document.viewer_endpoint, 'layer-id' => document.wxs_identifier, 'map-geom' => document.geometry.geojson, 'catalog-path'=> search_catalog_path, available: document_available?, inspect: show_attribute_table?, basemap: geoblacklight_basemap, leaflet_options: leaflet_options } do %>
10
27
  <% end %>
11
28
  </div>
@@ -1,28 +1,17 @@
1
1
  <% document ||= @document %>
2
2
 
3
3
  <% if document_downloadable? %>
4
- <% if document.direct_download.present? || document.hgl_download.present? || document.iiif_download.present? %>
5
- <div class="card downloads">
6
- <div class="card-header">
7
- <h2><%= t('geoblacklight.download.download').pluralize %></h2>
4
+ <% if document.direct_download.present? || document.hgl_download.present? || document.iiif_download.present? || document.download_types.present? %>
5
+ <div class="downloads-sidebar">
6
+ <%# the dropdown-toggle class gives us the little arrow %>
7
+ <button type="button" class="btn btn-primary dropdown-toggle sidebar-btn" id="downloads-button" data-toggle="collapse" data-target="#downloads-collapse" aria-expanded="false" aria-controls="downloads-collapse">
8
+ Download
9
+ </button>
10
+ <div class="collapse" id="downloads-collapse">
11
+ <div class="card card-body">
12
+ <%= render 'downloads_collapse' %>
13
+ </div>
8
14
  </div>
9
-
10
- <ul class="list-group list-group-flush js-download-list">
11
- <%= render 'downloads_primary' %>
12
- </ul>
13
- </div>
14
- <% end %>
15
-
16
- <% if document.download_types.present? %>
17
- <div class="card exports">
18
- <div class="card-header">
19
-
20
- <h2><%= t('geoblacklight.download.export_formats') %></h2>
21
- </div>
22
-
23
- <ul class="list-group list-group-flush">
24
- <%= render 'downloads_generated' %>
25
- </ul>
26
15
  </div>
27
16
  <% end %>
28
17
  <% elsif document.restricted? && document.same_institution? %>
@@ -1,6 +1,9 @@
1
1
  <%= render :partial => 'show_tools' %>
2
2
 
3
+ <div class="sidebar-buttons">
4
+ <%= render :partial => "show_web_services" %>
3
5
  <%= render :partial => "show_downloads" %>
6
+ </div>
4
7
 
5
8
  <% unless @document.more_like_this.empty? %>
6
9
  <div class="card">
@@ -0,0 +1,11 @@
1
+ <% document ||= @document %>
2
+
3
+ <% if (Settings.WEBSERVICES_SHOWN & document.references.refs.map(&:type).map(&:to_s)).any? %>
4
+ <div class="web-services-sidebar">
5
+ <%= link_to "Web services",
6
+ web_services_solr_document_path(id: document.id),
7
+ class: ['btn', 'btn-primary', 'sidebar-btn'],
8
+ id: "web-services-button",
9
+ data: {blacklight_modal: "trigger"} %>
10
+ </div>
11
+ <% end %>
@@ -2,7 +2,8 @@
2
2
 
3
3
  <% document.references.refs.each do |reference| %>
4
4
  <% if Settings.WEBSERVICES_SHOWN.include? reference.type.to_s %>
5
- <%= render_web_services(reference) %>
6
- <hr>
5
+ <div class="web-services-modal-entry">
6
+ <%= render_web_services(reference) %>
7
+ </div>
7
8
  <% end %>
8
9
  <% end %>
@@ -4,7 +4,7 @@
4
4
  <span aria-hidden="true">&times;</span>
5
5
  </button>
6
6
  </div>
7
- <div class="modal-body">
7
+ <div class="modal-body web-services-modal-body">
8
8
  <%= render partial: 'web_services' %>
9
9
  </div>
10
10
  <div class="modal-footer">
@@ -10,11 +10,16 @@
10
10
  </div>
11
11
  </div>
12
12
  </nav>
13
-
13
+ <%- renderable_fields = blacklight_config.search_fields.values.collect { |field_def| [label_for_search_field(field_def.key), field_def.key] if should_render_field?(field_def)}.compact %>
14
14
  <% if controller_name == 'catalog' && (has_search_parameters? || params[:action] == 'show') %>
15
15
  <div class="navbar-search navbar navbar-light bg-faded" role="navigation">
16
16
  <div class="<%= container_classes %> stuff">
17
- <%= render_search_bar %>
17
+ <%= render((blacklight_config&.view_config(document_index_view_type)&.search_bar_component ||Blacklight::SearchBarComponent).new(
18
+ url: search_action_url,
19
+ advanced_search_url: search_action_url(action: 'advanced_search'),
20
+ search_fields: renderable_fields,
21
+ params: search_state.params_for_search.except(:qt),
22
+ autocomplete_path: search_action_path(action: :suggest))) %>
18
23
  </div>
19
24
  </div>
20
25
  <% else %>
@@ -28,7 +33,12 @@
28
33
  <div class='row justify-content-md-center'>
29
34
  <div class='col-md-6 col-sm-12'>
30
35
  <div class='navbar-search'>
31
- <%= render_search_bar %>
36
+ <%= render((blacklight_config&.view_config(document_index_view_type)&.search_bar_component ||Blacklight::SearchBarComponent).new(
37
+ url: search_action_url,
38
+ advanced_search_url: search_action_url(action: 'advanced_search'),
39
+ search_fields: renderable_fields,
40
+ params: search_state.params_for_search.except(:qt),
41
+ autocomplete_path: search_action_path(action: :suggest))) %>
32
42
  </div>
33
43
  </div>
34
44
  </div>
@@ -16,10 +16,11 @@ en:
16
16
  error: 'Sorry, the requested file could not be downloaded'
17
17
  error_with_url: 'Sorry, the requested file could not be downloaded. Try downloading it directly from: %{link}'
18
18
  export_formats: 'Export Formats'
19
- export_link: 'Export'
19
+ export_link: 'Export %{download_format}'
20
20
  export_shapefile_link: 'Shapefile'
21
21
  export_kmz_link: 'KMZ'
22
22
  export_geojson_link: 'GeoJSON'
23
+ export_geotiff_link: 'GeoTIFF'
23
24
  home:
24
25
  headline: 'Explore and discover...'
25
26
  search_heading: 'Find the maps and data you need'
@@ -65,11 +66,15 @@ en:
65
66
  services: 'Web services'
66
67
  services_close: 'Close'
67
68
  tms: 'Tile Map Service'
69
+ tilejson: 'TileJSON Document'
70
+ xyz: 'XYZ Tiles'
71
+ wmts: 'Web Map Tile Service'
68
72
  relations:
69
73
  ancestor: 'Source Datasets'
70
74
  descendant: 'Derived Datasets'
71
75
  member_of: 'Belongs to collection...'
72
76
  part_of: 'Is part of...'
77
+ part_of_descendants: 'Has part...'
73
78
  relation: 'Related Records'
74
79
  replaces: 'Item replaces...'
75
80
  replaced_by: 'Item replaced by...'
@@ -19,11 +19,10 @@ Gem::Specification.new do |spec|
19
19
  spec.require_paths = ['lib']
20
20
  spec.required_rubygems_version = '>= 2.5.2'
21
21
 
22
- spec.add_dependency 'rails', '>= 5.2.4', '< 6.2'
23
- spec.add_dependency 'blacklight', '~> 7.8'
22
+ spec.add_dependency 'rails', '>= 6.1', '< 7.1'
23
+ spec.add_dependency 'blacklight', '~> 7.12'
24
24
  spec.add_dependency 'config'
25
- spec.add_dependency 'faraday', '~> 1.0'
26
- spec.add_dependency 'faraday_middleware', '~> 1.0.0.rc1'
25
+ spec.add_dependency 'faraday', '>= 1.0'
27
26
  spec.add_dependency 'coderay'
28
27
  spec.add_dependency 'deprecation'
29
28
  spec.add_dependency 'geo_combine', '~> 0.4'
@@ -41,7 +40,8 @@ Gem::Specification.new do |spec|
41
40
  spec.add_development_dependency 'database_cleaner', '~> 1.3'
42
41
  spec.add_development_dependency 'simplecov', '~> 0.17.1'
43
42
  spec.add_development_dependency 'foreman'
44
- spec.add_development_dependency 'rubocop', '~> 1.10'
45
- spec.add_development_dependency 'rubocop-rails', '~> 2.9'
46
- spec.add_development_dependency 'rubocop-rspec', '~> 2.2'
43
+ spec.add_development_dependency 'rubocop', '~> 1.25'
44
+ spec.add_development_dependency 'rubocop-rails', '~> 2.13'
45
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.8'
46
+ spec.add_development_dependency 'webmock', '~> 3.14'
47
47
  end
@@ -17,7 +17,7 @@ module Geoblacklight
17
17
  def add_javascript
18
18
  copy_file 'assets/geoblacklight.js', 'app/assets/javascripts/geoblacklight.js'
19
19
 
20
- if Rails.version.to_i == 6
20
+ if Rails.version.to_i >= 6
21
21
  append_to_file 'app/assets/javascripts/application.js',
22
22
  "\n// Required by GeoBlacklight\n//= require geoblacklight"
23
23
  end
@@ -7,6 +7,23 @@ module Geoblacklight
7
7
 
8
8
  desc 'Install Geoblacklight'
9
9
 
10
+ def allow_geoblacklight_params
11
+ gbl_params = <<-"PARAMS"
12
+ before_action :allow_geoblacklight_params
13
+
14
+ def allow_geoblacklight_params
15
+ # Blacklight::Parameters will pass these to params.permit
16
+ blacklight_config.search_state_fields.append(Settings.GBL_PARAMS)
17
+ end
18
+ PARAMS
19
+
20
+ inject_into_file 'app/controllers/application_controller.rb', gbl_params, before: /^end/
21
+ end
22
+
23
+ def raise_unpermitted_params
24
+ inject_into_file 'config/environments/test.rb', "config.action_controller.action_on_unpermitted_parameters = :raise\n", before: /^end/
25
+ end
26
+
10
27
  def mount_geoblacklight_engine
11
28
  inject_into_file 'config/routes.rb', "mount Geoblacklight::Engine => 'geoblacklight'\n", before: /^end/
12
29
  end
@@ -62,7 +79,7 @@ module Geoblacklight
62
79
 
63
80
  def add_spatial_search_behavior
64
81
  inject_into_file 'app/models/search_builder.rb', after: 'include Blacklight::Solr::SearchBuilderBehavior' do
65
- "\n include Geoblacklight::SpatialSearchBehavior"
82
+ "\n include Geoblacklight::SuppressedRecordsSearchBehavior"
66
83
  end
67
84
  end
68
85
 
@@ -13,16 +13,17 @@ $logo-image: image_url('blacklight/logo.svg') !default;
13
13
  // Override default Bootstrap variables here
14
14
 
15
15
  // Example: Bootstrap Colors
16
- $blue: #007bff !default;
16
+ $blue: #0d6efd !default;
17
17
  $indigo: #6610f2 !default;
18
18
  $purple: #6f42c1 !default;
19
- $pink: #e83e8c !default;
19
+ $pink: #d63384 !default;
20
20
  $red: #dc3545 !default;
21
21
  $orange: #fd7e14 !default;
22
22
  $yellow: #ffc107 !default;
23
- $green: #28a745 !default;
23
+ $green: #198754 !default;
24
24
  $teal: #20c997 !default;
25
- $cyan: #17a2b8 !default;
25
+ $cyan: #0dcaf0 !default;
26
+ $dark: #212529 !default; // $gray-900
26
27
 
27
28
  // Example: Bootstrap Link color
28
29
  $link-color: $blue;
@@ -1,6 +1,3 @@
1
- /*
2
- *= require leaflet-label
3
- */
4
1
  @import 'customizations';
5
2
  @import 'bootstrap';
6
3
  @import 'blacklight';