geoblacklight 4.0.0.pre.alpha.1 → 4.0.0.pre.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. checksums.yaml +4 -4
  2. data/.github/ISSUE_TEMPLATE.md +1 -1
  3. data/.github/workflows/ruby.yml +32 -64
  4. data/.gitignore +1 -0
  5. data/.rubocop.yml +6 -6
  6. data/.rubocop_todo.yml +0 -3
  7. data/.solr_wrapper +1 -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/michigan-state-university.svg +0 -1
  17. data/app/assets/images/blacklight/parent-item.svg +3 -0
  18. data/app/assets/images/blacklight/pennsylvania-state-university.svg +0 -1
  19. data/app/assets/images/blacklight/purdue-university.svg +0 -1
  20. data/app/assets/images/blacklight/the-ohio-state-university.svg +0 -1
  21. data/app/assets/images/blacklight/university-of-chicago.svg +0 -1
  22. data/app/assets/images/blacklight/university-of-colorado-boulder.svg +6 -0
  23. data/app/assets/images/blacklight/university-of-illinois-urbana-champaign.svg +0 -1
  24. data/app/assets/images/blacklight/university-of-iowa.svg +0 -1
  25. data/app/assets/images/blacklight/university-of-maryland.svg +0 -1
  26. data/app/assets/images/blacklight/university-of-michigan.svg +0 -1
  27. data/app/assets/images/blacklight/university-of-minnesota.svg +0 -1
  28. data/app/assets/images/blacklight/university-of-nebraska-lincoln.svg +0 -1
  29. data/app/assets/images/blacklight/university-of-wisconsin-madison.svg +0 -1
  30. data/app/assets/images/blacklight/websites.svg +4 -0
  31. data/app/assets/javascripts/geoblacklight/controls/fullscreen.js +8 -0
  32. data/app/assets/javascripts/geoblacklight/geoblacklight.js +2 -1
  33. data/app/assets/javascripts/geoblacklight/viewers/esri.js +1 -0
  34. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +1 -0
  35. data/app/assets/javascripts/geoblacklight/viewers/tilejson.js +33 -0
  36. data/app/assets/javascripts/geoblacklight/viewers/tms.js +2 -2
  37. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +3 -0
  38. data/app/assets/javascripts/geoblacklight/viewers/wms.js +2 -2
  39. data/app/assets/javascripts/geoblacklight/viewers/wmts.js +85 -0
  40. data/app/assets/javascripts/geoblacklight/viewers/xyz.js +10 -0
  41. data/app/assets/stylesheets/geoblacklight/geoblacklight.scss +1 -0
  42. data/app/assets/stylesheets/geoblacklight/modules/_base.scss +0 -1
  43. data/app/assets/stylesheets/geoblacklight/modules/_styles.scss +5 -1
  44. data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +20 -47
  45. data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +68 -0
  46. data/app/assets/stylesheets/geoblacklight/modules/item.scss +16 -0
  47. data/app/assets/stylesheets/geoblacklight/modules/modal.scss +6 -0
  48. data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +4 -0
  49. data/app/components/geoblacklight/icon_facet_item_component.rb +33 -0
  50. data/app/helpers/geoblacklight_helper.rb +6 -45
  51. data/app/models/concerns/geoblacklight/bbox_filter_field.rb +45 -0
  52. data/app/models/concerns/geoblacklight/bbox_filter_query.rb +50 -0
  53. data/app/models/concerns/geoblacklight/solr_document.rb +1 -1
  54. data/app/models/concerns/geoblacklight/suppressed_records_search_behavior.rb +26 -0
  55. data/app/presenters/geoblacklight/bbox_item_presenter.rb +9 -0
  56. data/app/views/catalog/_downloads_collapse.html.erb +27 -0
  57. data/app/views/catalog/_header_icons.html.erb +2 -2
  58. data/app/views/catalog/_index_split_default.html.erb +2 -2
  59. data/app/views/catalog/_show_default_viewer_container.html.erb +17 -0
  60. data/app/views/catalog/_show_downloads.html.erb +10 -21
  61. data/app/views/catalog/_show_sidebar.html.erb +3 -0
  62. data/app/views/catalog/_show_web_services.html.erb +11 -0
  63. data/app/views/catalog/_web_services.html.erb +3 -2
  64. data/app/views/catalog/web_services.html.erb +1 -1
  65. data/app/views/relation/_relations.html.erb +1 -1
  66. data/app/views/relation/index.html.erb +1 -1
  67. data/config/locales/geoblacklight.en.yml +4 -1
  68. data/geoblacklight.gemspec +6 -6
  69. data/lib/generators/geoblacklight/install_generator.rb +1 -1
  70. data/lib/generators/geoblacklight/templates/assets/_customizations.scss +5 -4
  71. data/lib/generators/geoblacklight/templates/assets/application.scss +0 -3
  72. data/lib/generators/geoblacklight/templates/catalog_controller.rb +74 -56
  73. data/lib/generators/geoblacklight/templates/settings.gbl_v1.yml +5 -5
  74. data/lib/generators/geoblacklight/templates/settings.yml +36 -23
  75. data/lib/geoblacklight/bounding_box.rb +4 -0
  76. data/lib/geoblacklight/constants.rb +3 -0
  77. data/lib/geoblacklight/engine.rb +3 -2
  78. data/lib/geoblacklight/faraday_middleware/follow_redirects.rb +176 -0
  79. data/lib/geoblacklight/item_viewer.rb +13 -1
  80. data/lib/geoblacklight/metadata/base.rb +2 -1
  81. data/lib/geoblacklight/version.rb +1 -1
  82. data/lib/geoblacklight/view_helper_override.rb +2 -28
  83. data/lib/geoblacklight.rb +0 -10
  84. data/lib/tasks/geoblacklight.rake +1 -1
  85. data/schema/geoblacklight-schema-aardvark.json +3 -23
  86. data/solr/conf/schema.xml +37 -43
  87. data/solr/conf/solrconfig.xml +17 -17
  88. data/spec/components/geoblacklight/icon_facet_item_component_spec.rb +17 -0
  89. data/spec/controllers/catalog_controller_spec.rb +1 -1
  90. data/spec/features/download_layer_spec.rb +31 -14
  91. data/spec/features/esri_viewer_spec.rb +5 -1
  92. data/spec/features/full_screen_controll_spec.rb +15 -0
  93. data/spec/features/home_page_spec.rb +2 -2
  94. data/spec/features/index_map_spec.rb +2 -2
  95. data/spec/features/missing_metadata_spec.rb +1 -1
  96. data/spec/features/multiple_downloads_spec.rb +2 -1
  97. data/spec/features/relations_spec.rb +1 -1
  98. data/spec/features/saved_searches_spec.rb +1 -1
  99. data/spec/features/search_results_complex_geometry_spec.rb +24 -0
  100. data/spec/features/search_results_icons_spec.rb +16 -0
  101. data/spec/features/search_results_map_spec.rb +2 -2
  102. data/spec/features/search_spec.rb +22 -0
  103. data/spec/features/show_page_download_spec.rb +29 -0
  104. data/spec/features/show_page_metadata_spec.rb +2 -2
  105. data/spec/features/split_view.html.erb_spec.rb +12 -1
  106. data/spec/features/tilejson_spec.rb +22 -0
  107. data/spec/features/tms_spec.rb +2 -2
  108. data/spec/features/web_services_modal_spec.rb +35 -2
  109. data/spec/features/wmts_spec.rb +34 -0
  110. data/spec/features/xyz_spec.rb +10 -0
  111. data/spec/fixtures/manifests/tilejson.json +21 -0
  112. data/spec/fixtures/manifests/wmts-multiple.xml +813 -0
  113. data/spec/fixtures/manifests/wmts-single.xml +126 -0
  114. data/spec/fixtures/solr_documents/README.md +46 -43
  115. data/spec/fixtures/solr_documents/actual-papermap1.json +2 -1
  116. data/spec/fixtures/solr_documents/actual-point1.json +2 -1
  117. data/spec/fixtures/solr_documents/actual-polygon1.json +2 -1
  118. data/spec/fixtures/solr_documents/actual-raster1.json +3 -2
  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 +12 -35
  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/references_spec.rb +1 -1
  167. data/spec/lib/geoblacklight/relation/relation_response_spec.rb +5 -0
  168. data/spec/lib/geoblacklight/view_helper_override_spec.rb +0 -10
  169. data/spec/models/concerns/geoblacklight/bbox_filter_field_spec.rb +77 -0
  170. data/spec/models/concerns/geoblacklight/bbox_filter_query_spec.rb +105 -0
  171. data/spec/models/concerns/geoblacklight/solr_document/inspection_spec.rb +2 -1
  172. data/spec/models/concerns/geoblacklight/suppressed_records_search_behavior_spec.rb +31 -0
  173. data/spec/presenters/geoblacklight/bbox_item_presenter_spec.rb +36 -0
  174. data/spec/spec_helper.rb +6 -1
  175. data/spec/test_app_templates/Gemfile.extra +1 -0
  176. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -4
  177. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +5 -5
  178. data/template.rb +2 -4
  179. data/vendor/assets/images/fullscreen.png +0 -0
  180. data/vendor/assets/images/fullscreen@2x.png +0 -0
  181. data/vendor/assets/javascripts/Leaflet.fullscreen.js +152 -0
  182. data/vendor/assets/javascripts/esri-leaflet.js +10 -3
  183. data/vendor/assets/javascripts/esri-leaflet.js.map +1 -1
  184. data/vendor/assets/javascripts/leaflet-iiif.js +39 -18
  185. data/vendor/assets/javascripts/leaflet-src.js.erb +14062 -0
  186. data/vendor/assets/javascripts/leaflet-src.js.map +1 -1
  187. data/vendor/assets/stylesheets/leaflet.css +640 -634
  188. data/vendor/assets/stylesheets/leaflet.fullscreen.css +40 -0
  189. metadata +91 -46
  190. data/app/models/concerns/geoblacklight/spatial_search_behavior.rb +0 -71
  191. data/app/views/catalog/_download_generated_link.html.erb +0 -4
  192. data/app/views/catalog/_download_link.html.erb +0 -3
  193. data/app/views/catalog/_downloads_generated.html.erb +0 -6
  194. data/app/views/catalog/_downloads_primary.html.erb +0 -21
  195. data/app/views/catalog/_downloads_secondary.html.erb +0 -39
  196. data/app/views/catalog/_icon_facet.html.erb +0 -16
  197. data/bin/coverage.rb +0 -36
  198. data/lib/generators/geoblacklight/templates/Procfile +0 -3
  199. data/lib/generators/geoblacklight/templates/package.json +0 -14
  200. data/lib/generators/geoblacklight/templates/webpacker.yml +0 -67
  201. data/lib/generators/geoblacklight/webpacker_generator.rb +0 -36
  202. data/lib/geoblacklight/catalog_helper_override.rb +0 -14
  203. data/spec/models/concerns/geoblacklight/spatial_search_behavior_spec.rb +0 -97
  204. data/vendor/assets/javascripts/leaflet.js.erb +0 -13922
  205. data/vendor/assets/stylesheets/leaflet-label.css +0 -54
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'geoblacklight/faraday_middleware/follow_redirects'
2
3
  module Geoblacklight
3
4
  module Metadata
4
5
  ##
@@ -47,7 +48,7 @@ module Geoblacklight
47
48
  # connection error
48
49
  def retrieve_metadata
49
50
  connection = Faraday.new(url: @reference.endpoint) do |conn|
50
- conn.use FaradayMiddleware::FollowRedirects
51
+ conn.use Geoblacklight::FaradayMiddleware::FollowRedirects
51
52
  conn.adapter Faraday.default_adapter
52
53
  end
53
54
  begin
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Geoblacklight
3
- VERSION = '4.0.0-alpha.1'
3
+ VERSION = '4.0.0-rc1'
4
4
  end
@@ -1,41 +1,15 @@
1
1
  # frozen_string_literal: true
2
2
  module Geoblacklight
3
+ # Override Blacklight helpers to inject behavior
3
4
  module ViewHelperOverride
4
- include CatalogHelperOverride
5
-
6
- def spatial_parameters?
7
- params[:bbox]
8
- end
9
-
10
- # Overrides BL method to enable results for spatial only params
11
- def has_search_parameters?
12
- spatial_parameters? || super
13
- end
14
-
15
- def query_has_constraints?(localized_params = params)
16
- has_search_parameters? || super(localized_params)
17
- end
18
-
19
5
  def render_search_to_s(params)
20
6
  super + render_search_to_s_bbox(params)
21
7
  end
22
8
 
23
9
  def render_search_to_s_bbox(params)
24
10
  return ''.html_safe if params['bbox'].blank?
25
- render_search_to_s_element(t('geoblacklight.bbox_label'), render_filter_value(params['bbox']))
26
- end
27
11
 
28
- def render_constraints_filters(localized_params = params)
29
- content = super(localized_params)
30
- localized_params = localized_params.to_h if localized_params.respond_to?(:to_h)
31
-
32
- if localized_params[:bbox]
33
- path = search_action_path(remove_spatial_filter_group(:bbox, localized_params))
34
- content << render_constraint_element(t('geoblacklight.bbox_label'),
35
- localized_params[:bbox], remove: path)
36
- end
37
-
38
- content
12
+ render_search_to_s_element(t('geoblacklight.bbox_label'), render_filter_value(params['bbox']))
39
13
  end
40
14
  end
41
15
  end
data/lib/geoblacklight.rb CHANGED
@@ -4,7 +4,6 @@ require 'geoblacklight/engine'
4
4
 
5
5
  module Geoblacklight
6
6
  require 'geoblacklight/bounding_box'
7
- require 'geoblacklight/catalog_helper_override'
8
7
  require 'geoblacklight/constants'
9
8
  require 'geoblacklight/exceptions'
10
9
  require 'geoblacklight/geometry'
@@ -34,15 +33,6 @@ module Geoblacklight
34
33
  require 'geoblacklight/relation/ancestors'
35
34
  require 'geoblacklight/relation/relation_response'
36
35
 
37
- def self.inject!
38
- CatalogController.send(:include, Geoblacklight::CatalogHelperOverride)
39
- CatalogController.send(:include, Geoblacklight::ViewHelperOverride)
40
- CatalogController.send(:helper, Geoblacklight::ViewHelperOverride) unless
41
- CatalogController.helpers.is_a?(Geoblacklight::ViewHelperOverride)
42
- SearchHistoryController.send(:helper, Geoblacklight::ViewHelperOverride) unless
43
- SearchHistoryController.helpers.is_a?(Geoblacklight::ViewHelperOverride)
44
- end
45
-
46
36
  def self.logger
47
37
  ::Rails.logger
48
38
  end
@@ -87,7 +87,7 @@ namespace :geoblacklight do
87
87
  fail 'Please supply required arguments [document_id, download_type and timeout]'
88
88
  end
89
89
  document = Geoblacklight::SolrDocument.find(args[:doc_id])
90
- fail Blacklight::Exceptions::RecordNotFound if document[:layer_slug_s] != args[:doc_id]
90
+ fail Blacklight::Exceptions::RecordNotFound if document[:id] != args[:doc_id]
91
91
  download = "Geoblacklight::#{args[:download_type].capitalize}Download"
92
92
  .constantize.new(document, timeout: args[:timeout].to_i)
93
93
  download.get
@@ -67,28 +67,7 @@
67
67
  "dcat_theme_sm": {
68
68
  "type": "array",
69
69
  "items": {
70
- "type": "string",
71
- "enum": [
72
- "Farming",
73
- "Biota",
74
- "Boundaries",
75
- "Climatology, Meteorology and Atmosphere",
76
- "Economy",
77
- "Elevation",
78
- "Environment",
79
- "Geoscientific Information",
80
- "Health",
81
- "Imagery and Base Maps",
82
- "Intelligence and Military",
83
- "Inland Waters",
84
- "Location",
85
- "Oceans",
86
- "Planning and Cadastral",
87
- "Society",
88
- "Structure",
89
- "Transportation",
90
- "Utilities and Communications"
91
- ]
70
+ "type": "string"
92
71
  }
93
72
  },
94
73
  "dcat_keyword_sm": {
@@ -123,7 +102,8 @@
123
102
  }
124
103
  },
125
104
  "locn_geometry": { "type": "string" },
126
- "dcat_centroid_ss": { "type": "string" },
105
+ "dcat_bbox": { "type": "string" },
106
+ "dcat_centroid": { "type": "string" },
127
107
  "dct_relation_sm": {
128
108
  "type": "array",
129
109
  "items": {
data/solr/conf/schema.xml CHANGED
@@ -4,20 +4,36 @@
4
4
  <fields>
5
5
  <field name="_version_" type="long" stored="true" indexed="true"/>
6
6
  <field name="timestamp" type="date" stored="true" indexed="true" default="NOW"/>
7
- <field name="geoblacklight_version" type="string" stored="true" indexed="true"/>
8
- <field name="id" type="string" stored="true" indexed="true" required="true"/>
7
+ <field name="id" type="string" stored="true" indexed="true" required="true"/>
9
8
 
10
9
  <!-- core generated fields -->
11
10
  <field name="text" type="text_en" stored="false" indexed="true" multiValued="true"
12
11
  termVectors="true" termPositions="true" termOffsets="true" />
13
12
 
13
+ <!-- Spatial Field Type: Represents the exent of the resource and powers map search functionality.
14
+ Value can be any valid WKT or ENVELOPE String:
15
+ <field name="locn_geometry">POLYGON((1 8, 1 9, 2 9, 2 8, 1 8))</field>
16
+ <field name="locn_geometry">ENVELOPE(-117.312, -115.39, 84.31, 83.1)</field> -->
17
+ <field name="locn_geometry" type="location_geo3d" stored="true" indexed="true"/>
18
+
19
+ <!-- Spatial Field Type: The bounding box of the resource. Used in overlap ratio boosting.
20
+ Value must be an ENVELOPE String:
21
+ <field name="dcat_bbox">ENVELOPE(-117.312, -115.39, 84.31, 83.1)</field> -->
22
+ <field name="dcat_bbox" type="location_rpt" stored="true" indexed="true"/>
23
+
24
+ <!-- Spatial Field Type: Used to display the center point of a resource. -->
25
+ <field name="dcat_centroid" type="location" stored="true" indexed="true"/>
26
+
27
+ <!-- Spatial Field Type: Internal field used for overlap ratio boosting. -->
28
+ <field name="solr_bboxtype" type="bbox" stored="true" indexed="true"/>
29
+
14
30
  <!-- dynamic field with simple types by suffix -->
15
31
  <dynamicField name="*_b" type="boolean" stored="true" indexed="true"/>
16
32
  <dynamicField name="*_d" type="double" stored="true" indexed="true"/>
17
33
  <dynamicField name="*_dt" type="date" stored="true" indexed="true"/>
18
34
  <dynamicField name="*_f" type="float" stored="true" indexed="true"/>
19
35
  <dynamicField name="*_i" type="int" stored="true" indexed="true"/>
20
- <dynamicField name="*_im" type="int" stored="true" indexed="true" multiValued="true" />
36
+ <dynamicField name="*_im" type="int" stored="true" indexed="true" multiValued="true" sortMissingLast="true" />
21
37
  <dynamicField name="*_l" type="long" stored="true" indexed="true"/>
22
38
  <dynamicField name="*_s" type="string" stored="true" indexed="true"/>
23
39
  <dynamicField name="*_ss" type="string" stored="true" indexed="false"/>
@@ -44,31 +60,6 @@
44
60
 
45
61
  <!-- date range (_drsim) -->
46
62
  <dynamicField name="*_drsim" type="dateRange" stored="true" indexed="true" multiValued="true"/>
47
-
48
- <!-- Spatial field types:
49
-
50
- Solr3:
51
- <field name="my_pt">83.1,-117.312</field>
52
- as (y,x)
53
-
54
- Solr4:
55
-
56
- <field name="my_bbox">-117.312 83.1 -115.39 84.31</field>
57
- as (W S E N)
58
-
59
- <field name="my_geom">ENVELOPE(-117.312, -115.39, 84.31, 83.1)</field>
60
- as (W E N S)
61
-
62
- <field name="my_jts">POLYGON((1 8, 1 9, 2 9, 2 8, 1 8))</field>
63
- as WKT for point, linestring, polygon
64
-
65
- -->
66
- <dynamicField name="*_pt" type="location" stored="true" indexed="true"/>
67
- <dynamicField name="*_bbox" type="location_rpt" stored="true" indexed="true"/><!-- deprecated -->
68
- <dynamicField name="*_geom" type="location_rpt" stored="true" indexed="true"/>
69
- <dynamicField name="*_geometry" type="location_rpt" stored="true" indexed="true"/>
70
- <dynamicField name="*_bboxtype" type="bbox" stored="true" indexed="true"/>
71
-
72
63
  </fields>
73
64
 
74
65
  <types>
@@ -146,32 +137,36 @@
146
137
  </fieldType>
147
138
 
148
139
  <!-- Spatial field types -->
149
- <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_d"/>
150
-
140
+ <fieldType name="location" class="solr.LatLonPointSpatialField" docValues="true"/>
151
141
  <fieldType name="location_rpt" class="solr.SpatialRecursivePrefixTreeFieldType"
152
142
  geo="true" distErrPct="0.025" maxDistErr="0.001" distanceUnits="kilometers"/>
143
+ <fieldType name="location_geo3d"
144
+ class="solr.SpatialRecursivePrefixTreeFieldType"
145
+ spatialContextFactory="Geo3D"
146
+ prefixTree="s2"
147
+ geo="true"
148
+ maxDistErr="0.001"
149
+ planetModel="WGS84"/>
150
+
153
151
  <!-- Adding field type for bboxField that enables, among other things, overlap ratio calculations -->
154
152
  <fieldType name="bbox" class="solr.BBoxField"
155
153
  geo="true" distanceUnits="kilometers" numberType="pdouble" />
156
154
  <fieldType name="pdouble" class="solr.DoublePointField" docValues="true"/>
157
-
158
-
159
155
  </types>
160
156
 
161
157
  <!-- for scoring formula -->
162
158
  <copyField source="dct_spatial_sm" dest="dct_spatial_tmi" maxChars="10000"/>
163
159
  <copyField source="dct_temporal_sm" dest="dct_temporal_tmi" maxChars="10000"/>
164
- <copyField source="dct_creator_sm" dest="dc_creator_tmi" maxChars="1000"/>
165
- <copyField source="dct_description_sm" dest="dc_description_tmi" maxChars="10000"/>
166
- <copyField source="dct_format_s" dest="dc_format_ti" maxChars="100"/>
167
- <copyField source="dct_identifier_sm" dest="dc_identifier_tmi" maxChars="100"/>
168
- <copyField source="dct_publisher_sm" dest="dc_publisher_tmi" maxChars="1000"/>
169
- <copyField source="dct_accessRights_s" dest="dc_rights_ti" maxChars="100"/>
160
+ <copyField source="dct_creator_sm" dest="dct_creator_tmi" maxChars="1000"/>
161
+ <copyField source="dct_description_sm" dest="dct_description_tmi" maxChars="10000"/>
162
+ <copyField source="dct_format_s" dest="dct_format_ti" maxChars="100"/>
163
+ <copyField source="dct_identifier_sm" dest="dct_identifier_tmi" maxChars="100"/>
164
+ <copyField source="dct_publisher_sm" dest="dct_publisher_tmi" maxChars="1000"/>
165
+ <copyField source="dct_accessRights_s" dest="dct_accessRights_ti" maxChars="100"/>
170
166
  <copyField source="schema_provider_s" dest="dct_provider_ti" maxChars="1000"/>
171
- <copyField source="dct_subject_sm" dest="dc_subject_tmi" maxChars="10000"/>
172
- <copyField source="dct_title_s" dest="dc_title_ti" maxChars="1000"/>
167
+ <copyField source="dct_subject_sm" dest="dct_subject_tmi" maxChars="10000"/>
168
+ <copyField source="dct_title_s" dest="dct_title_ti" maxChars="1000"/>
173
169
  <copyField source="dct_isPartOf_sm" dest="dct_isPartOf_tmi" maxChars="1000"/>
174
- <copyField source="locn_geometry_s" dest="layer_geom_type_ti" maxChars="100"/>
175
170
  <copyField source="id" dest="layer_slug_ti" maxChars="100"/>
176
171
 
177
172
  <!-- core text search -->
@@ -180,7 +175,6 @@
180
175
 
181
176
  <!-- for sorting text fields -->
182
177
  <copyField source="schema_provider_s" dest="schema_provider_sort"/>
183
- <copyField source="dct_publisher_sm" dest="dc_publisher_sort"/>
184
178
  <copyField source="dct_title_s" dest="dct_title_sort"/>
185
179
 
186
180
  <!-- for spell checking -->
@@ -200,5 +194,5 @@
200
194
  <copyField source="dct_spatial_sm" dest="suggest"/>
201
195
 
202
196
  <!-- for bbox value -->
203
- <copyField source="locn_geometry" dest="solr_bboxtype"/>
197
+ <copyField source="dcat_bbox" dest="solr_bboxtype"/>
204
198
  </schema>
@@ -70,9 +70,9 @@
70
70
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -->
71
71
  <query>
72
72
  <maxBooleanClauses>1024</maxBooleanClauses>
73
- <filterCache class="solr.FastLRUCache" size="512" initialSize="512" autowarmCount="0"/>
74
- <queryResultCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/>
75
- <documentCache class="solr.LRUCache" size="512" initialSize="512" autowarmCount="0"/>
73
+ <filterCache class="solr.CaffeineCache" size="512" initialSize="512" autowarmCount="0" async="true"/>
74
+ <queryResultCache class="solr.CaffeineCache" size="512" initialSize="512" autowarmCount="0" async="true"/>
75
+ <documentCache class="solr.CaffeineCache" size="512" initialSize="512" autowarmCount="0" async="true"/>
76
76
  <enableLazyFieldLoading>true</enableLazyFieldLoading>
77
77
  <queryResultWindowSize>20</queryResultWindowSize>
78
78
  <queryResultMaxDocsCached>200</queryResultMaxDocsCached>
@@ -117,35 +117,35 @@
117
117
  <str name="q.alt">*:*</str>
118
118
  <str name="qf">
119
119
  text^1
120
- dc_description_ti^2
121
- dc_creator_tmi^3
122
- dc_publisher_ti^3
120
+ dct_description_ti^2
121
+ dct_creator_tmi^3
122
+ dct_publisher_ti^3
123
123
  dct_isPartOf_tmi^4
124
- dc_subject_tmi^5
124
+ dct_subject_tmi^5
125
125
  dct_spatial_tmi^5
126
126
  dct_temporal_tmi^5
127
- dc_title_ti^6
128
- dc_rights_ti^7
127
+ dct_title_ti^6
128
+ dct_accessRights_ti^7
129
129
  dct_provider_ti^8
130
130
  layer_geom_type_ti^9
131
131
  layer_slug_ti^10
132
- dc_identifier_ti^10
132
+ dct_identifier_ti^10
133
133
  </str>
134
134
  <str name="pf"><!-- phrase boost within result set -->
135
135
  text^1
136
- dc_description_ti^2
137
- dc_creator_tmi^3
138
- dc_publisher_ti^3
136
+ dct_description_ti^2
137
+ dct_creator_tmi^3
138
+ dct_publisher_ti^3
139
139
  dct_isPartOf_tmi^4
140
- dc_subject_tmi^5
140
+ dct_subject_tmi^5
141
141
  dct_spatial_tmi^5
142
142
  dct_temporal_tmi^5
143
- dc_title_ti^6
144
- dc_rights_ti^7
143
+ dct_title_ti^6
144
+ dct_accessRights_ti^7
145
145
  dct_provider_ti^8
146
146
  layer_geom_type_ti^9
147
147
  layer_slug_ti^10
148
- dc_identifier_ti^10
148
+ dct_identifier_ti^10
149
149
  </str>
150
150
  <bool name="facet">true</bool>
151
151
  <int name="facet.mincount">1</int>
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ RSpec.describe Geoblacklight::IconFacetItemComponent, type: :component do
5
+ subject(:rendered) do
6
+ render_inline_to_capybara_node(described_class.new(suppress_link: true, **kwargs))
7
+ end
8
+
9
+ let(:kwargs) { { facet_item: facet_item } }
10
+ let(:facet_item) { instance_double(Blacklight::FacetItemPresenter, label: 'Stanford', value: 'stanford', hits: 5, href: nil, selected?: false, facet_config: facet_config) }
11
+ let(:facet_config) { Blacklight::Configuration::FacetField.new(field: 'provider_facet', label: 'Provider') }
12
+
13
+ it 'prepends the icon to the facet item label' do
14
+ expect(rendered).to have_selector('span.facet-label', text: 'Stanford')
15
+ expect(rendered).to have_selector('span.facet-label svg title', text: 'Stanford University')
16
+ end
17
+ end
@@ -77,7 +77,7 @@ describe CatalogController, type: :controller do
77
77
  expect(response_values).to include Settings.FIELDS.ACCESS_RIGHTS => 'Public'
78
78
  expect(response_values).to include Settings.FIELDS.PROVIDER => 'Tufts'
79
79
  expect(response_values).to include Settings.FIELDS.ID => 'tufts-cambridgegrid100-04'
80
- expect(response_values).to include Settings.FIELDS.SPATIAL_EXTENT => 'ENVELOPE(-71.163984,-71.052581,42.408316,42.34757)'
80
+ expect(response_values).to include Settings.FIELDS.GEOMETRY => 'ENVELOPE(-71.163984,-71.052581,42.408316,42.34757)'
81
81
  end
82
82
  end
83
83
  end
@@ -13,71 +13,88 @@ feature 'Download layer' do
13
13
  scenario 'clicking initial shapefile download button should trigger download', js: true do
14
14
  expect(shapefile_download).to receive(:get).and_return('mit-f6rqs4ucovjk2-shapefile.zip')
15
15
  visit solr_document_path('mit-f6rqs4ucovjk2')
16
- find('a[data-download-type="shapefile"]', text: 'Export').click
16
+ find('#downloads-button').click
17
+ find('a[data-download-type="shapefile"]', text: 'Export Shapefile').click
17
18
  expect(page).to have_css(
18
19
  'a[href="/download/file/mit-f6rqs4ucovjk2-shapefile.zip"]',
19
20
  text: 'Your file mit-f6rqs4ucovjk2-shapefile.zip is ready for download'
20
21
  )
21
22
  end
23
+
22
24
  scenario 'failed download should return message with link to layer', js: true do
23
25
  expect(shapefile_download).to receive(:get).and_raise(Geoblacklight::Exceptions::ExternalDownloadFailed.new(message: 'Failed', url: 'http://www.example.com/failed'))
24
26
  visit solr_document_path('mit-f6rqs4ucovjk2')
25
- find('a[data-download-type="shapefile"]', text: 'Export').click
27
+ find('#downloads-button').click
28
+ find('#downloads-collapse a[data-download-type="shapefile"]', text: 'Export Shapefile').click
26
29
  expect(page).to have_css 'div.alert.alert-danger', text: 'Sorry, the requested file could not be downloaded. Try downloading it directly from:'
27
30
  expect(page).to have_css 'a', text: 'http://www.example.com/failed'
28
31
  end
32
+
29
33
  scenario 'clicking kmz download button should trigger download', js: true do
30
34
  expect(kmz_download).to receive(:get).and_return('mit-f6rqs4ucovjk2-kmz.kmz')
31
35
  visit solr_document_path('mit-f6rqs4ucovjk2')
32
- find('a[data-download-type="kmz"]', text: 'Export').click
36
+ find('#downloads-button').click
37
+ find('#downloads-collapse a[data-download-type="kmz"]', text: 'Export KMZ').click
33
38
  expect(page).to have_css(
34
39
  'a[href="/download/file/mit-f6rqs4ucovjk2-kmz.kmz"]',
35
40
  text: 'Your file mit-f6rqs4ucovjk2-kmz.kmz is ready for download'
36
41
  )
37
42
  end
43
+
38
44
  scenario 'jpg download option should be present under toggle' do
39
45
  visit solr_document_path('princeton-02870w62c')
40
- expect(page).to have_css('li a', text: 'Original JPG')
46
+ find('#downloads-button').click
47
+ expect(page).to have_css('#downloads-collapse a', text: 'Original JPG')
41
48
  end
49
+
42
50
  scenario 'clicking jpg download button should redirect to external image' do
43
51
  visit solr_document_path('princeton-02870w62c')
44
- expect(page).to have_css("a.btn.btn-default[href='https://libimages.princeton.edu/loris/pudl0076/map_pownall/00000001.jp2/full/full/0/default.jpg']", text: 'Original JPG')
52
+ find('#downloads-button').click
53
+ expect(page).to have_css("#downloads-collapse a[href='https://iiif-cloud.princeton.edu/iiif/2/6c%2F52%2F12%2F6c5212e81bc845f59bb1cdc740a88bad%2Fintermediate_file/full/full/0/default.jpg']", text: 'Original JPG')
45
54
  end
55
+
46
56
  scenario 'options should be available under toggle' do
47
57
  visit solr_document_path('mit-f6rqs4ucovjk2')
48
- expect(page).to have_css('li a[data-download-type="shapefile"]', text: 'Export')
49
- expect(page).to have_css('li a[data-download-type="kmz"]', text: 'Export')
58
+ find('#downloads-button').click
59
+ expect(page).to have_css('#downloads-collapse a[data-download-type="shapefile"]', text: 'Export Shapefile')
60
+ expect(page).to have_css('#downloads-collapse a[data-download-type="kmz"]', text: 'Export KMZ')
50
61
  end
62
+
51
63
  scenario 'restricted layer should not have download available to non logged in user' do
52
64
  visit solr_document_path('stanford-cg357zz0321')
53
65
  expect(page).to have_css 'a', text: 'Login to View and Download'
54
- expect(page).not_to have_css 'button', text: 'Download Shapefile'
66
+ expect(page).not_to have_css 'button', text: 'Download'
55
67
  end
68
+
56
69
  scenario 'restricted layer should have download available to logged in user' do
57
70
  sign_in
58
71
  visit solr_document_path('stanford-cg357zz0321')
59
72
  expect(page).not_to have_css 'a', text: 'Login to view and download'
60
- expect(page).to have_css 'a[data-download-type="shapefile"]', text: 'Export'
73
+ expect(page).to have_css 'button', text: 'Download'
61
74
  end
75
+
62
76
  scenario 'layer with direct download and wms/wfs should include all download types' do
63
77
  sign_in
64
78
  visit solr_document_path('stanford-cg357zz0321')
65
- expect(page).to have_css 'h2', text: 'Downloads'
66
- expect(page).to have_css 'a', text: 'Original Shapefile'
67
- expect(page).to have_css 'h2', text: 'Export Formats'
68
- expect(page).to have_css 'a', text: 'Export'
79
+ find('#downloads-button').click
80
+ expect(page).to have_css('#downloads-collapse a', text: 'Original')
81
+ expect(page).to have_css('#downloads-collapse a', text: 'Export')
69
82
  end
70
- scenario 'clicking GeoTIFF button for Harvard layer should show email form', js: true do
83
+
84
+ scenario 'clicking download GeoTIFF for Harvard layer should show email form', js: true do
71
85
  visit solr_document_path('harvard-g7064-s2-1834-k3')
86
+ find('#downloads-button').click
72
87
  find('a[data-download-type="harvard-hgl"]', text: 'GeoTIFF').click
73
88
  expect(page).to have_css('#hglRequest')
74
89
  end
90
+
75
91
  context 'with a successful request to the server' do
76
92
  let(:hgl_download) { instance_double(Geoblacklight::HglDownload) }
77
93
 
78
94
  xscenario 'submitting email form should trigger HGL request', js: true do
79
95
  # There are currently difficulties with testing the HGL downloader
80
96
  visit solr_document_path('harvard-g7064-s2-1834-k3')
97
+ find('#downloads-button').click
81
98
  find('a[data-download-type="harvard-hgl"]', text: 'Original GeoTIFF').click
82
99
 
83
100
  allow_any_instance_of(Geoblacklight::HglDownload).to receive(:new).and_return(hgl_download)
@@ -3,17 +3,19 @@ require 'spec_helper'
3
3
 
4
4
  feature 'feature_layer reference', js: true do
5
5
  scenario 'displays image map layer' do
6
- skip 'CORS error - Purdue web services are down'
6
+ skip 'spec depend on potentially flaky external services'
7
7
  visit solr_document_path '32653ed6-8d83-4692-8a06-bf13ffe2c018'
8
8
  expect(page).to have_css '.leaflet-control-zoom', visible: true
9
9
  expect(page).to have_css 'img.leaflet-image-layer', visible: true
10
10
  end
11
11
  scenario 'displays dynamic layer (all layers)' do
12
+ skip 'spec depend on potentially flaky external services'
12
13
  visit solr_document_path '90f14ff4-1359-4beb-b931-5cb41d20ab90'
13
14
  expect(page).to have_css '.leaflet-control-zoom', visible: true
14
15
  expect(page).to have_css 'img.leaflet-image-layer', visible: true
15
16
  end
16
17
  scenario 'displays dynamic layer (single layer)' do
18
+ skip 'spec depend on potentially flaky external services'
17
19
  visit solr_document_path '4669301e-b4b2-4c8b-bf40-01b968a2865b'
18
20
  expect(page).to have_css '.leaflet-control-zoom', visible: true
19
21
  expect(page).to have_css 'img.leaflet-image-layer', visible: true
@@ -26,11 +28,13 @@ feature 'feature_layer reference', js: true do
26
28
  fail
27
29
  end
28
30
  scenario 'displays tiled map layer' do
31
+ skip 'spec depend on potentially flaky external services'
29
32
  visit solr_document_path 'nyu-test-soil-survey-map'
30
33
  expect(page).to have_css '.leaflet-control-zoom', visible: true
31
34
  expect(page).to have_css 'img.leaflet-tile.leaflet-tile-loaded', visible: true
32
35
  end
33
36
  scenario 'displays Esri WMS layer' do
37
+ skip 'spec depend on potentially flaky external services'
34
38
  visit solr_document_path 'purdue-urn-f082acb1-b01e-4a08-9126-fd62a23fd9aa'
35
39
  expect(page).to have_css '.leaflet-control-zoom', visible: true
36
40
  expect(page).to have_css 'img.leaflet-tile.leaflet-tile-loaded', visible: true
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ feature 'Leaflet fullscreen control', js: true do
6
+ scenario 'IIIF layer should have full screen control' do
7
+ visit solr_document_path('princeton-sx61dn82p')
8
+ expect(page).to have_css('.leaflet-control-fullscreen-button')
9
+ end
10
+
11
+ scenario 'WMS layer should have full screen control' do
12
+ visit solr_document_path('stanford-cz128vq0535')
13
+ expect(page).to have_css('.leaflet-control-fullscreen-button')
14
+ end
15
+ end
@@ -21,9 +21,9 @@ feature 'Home page', js: true do # use js: true for tests which require js, but
21
21
  expect(page).to have_css '.category-block', count: 4
22
22
  expect(page).to have_css '.home-facet-link', count: 36
23
23
  expect(page).to have_css 'a.more_facets_link', count: 4
24
- click_link 'Topography'
24
+ click_link 'Counties'
25
25
  expect(page).to have_css '.filter-name', text: 'Subject'
26
- expect(page).to have_css '.filter-value', text: 'Topography'
26
+ expect(page).to have_css '.filter-value', text: 'Counties'
27
27
  end
28
28
  scenario 'map should be visible' do
29
29
  within '#main-container' do
@@ -3,8 +3,8 @@ require 'spec_helper'
3
3
 
4
4
  feature 'Index map' do
5
5
  # Colors
6
- default_color = '#1eb300'
7
- selected_color = '#006bde'
6
+ default_color = '#7FCDBB'
7
+ selected_color = '#2C7FB8'
8
8
  scenario 'displays index map viewer (polygon)', js: true do
9
9
  visit solr_document_path('stanford-fb897vt9938')
10
10
  # Wait until SVG elements are added
@@ -18,7 +18,7 @@ feature 'Missing metadata', js: true do
18
18
  visit solr_document_path('99-0001-noprovider')
19
19
  expect(page).to have_css('#map')
20
20
  end
21
- scenario 'Yields error free show page for no solr_geom' do
21
+ scenario 'Yields error free show page for no locn_geometry' do
22
22
  visit solr_document_path('05d-p16022coll246-noGeo')
23
23
  expect(page).to have_css('#map')
24
24
  end
@@ -5,7 +5,8 @@ feature 'Multiple downloads' do
5
5
  feature 'when item has multiple downloads in dct_references_s' do
6
6
  scenario 'downloads are listed in download card' do
7
7
  visit solr_document_path 'cugir-007950'
8
- within '.card.downloads' do
8
+ find('#downloads-button').click
9
+ within '#downloads-collapse' do
9
10
  expect(page).to have_link 'Shapefile', href: 'https://cugir-data.s3.amazonaws.com/00/79/50/cugir-007950.zip'
10
11
  expect(page).to have_link 'PDF', href: 'https://cugir-data.s3.amazonaws.com/00/79/50/agBROO.pdf'
11
12
  expect(page).to have_link 'KMZ', href: 'https://cugir-data.s3.amazonaws.com/00/79/50/agBROO2011.kmz'
@@ -2,7 +2,7 @@
2
2
  require 'spec_helper'
3
3
 
4
4
  feature 'Display related documents' do
5
- scenario 'Record with dc_source_sm value(s) should have parent(s)' do
5
+ scenario 'Record with dct_source_sm value(s) should have parent(s)' do
6
6
  visit relations_solr_document_path('nyu_2451_34502')
7
7
  expect(page).to have_css('.relations .card-header h2', text: 'Source Datasets')
8
8
  end
@@ -9,6 +9,6 @@ feature 'saved searches' do
9
9
  expect(page.current_url).to match(/bbox=/)
10
10
  end
11
11
  visit blacklight.search_history_path
12
- expect(page).to have_css 'td.query a', text: /#{I18n.t('geoblacklight.bbox_label')}:/
12
+ expect(page).to have_css 'td.query a', text: /#{I18n.t('geoblacklight.bbox_label')}/
13
13
  end
14
14
  end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ feature 'spatial search results with an WKT bounding box that crosses the anti-meridian' do
5
+ scenario 'when searching within the covered area' do
6
+ # BBox param is in China
7
+ visit search_catalog_path(
8
+ q: 'A new & accurate map of Asia',
9
+ bbox: '98.4375 31.765537 117.202148 45.429299'
10
+ )
11
+ result_id = page.all('div.documentHeader.row').first['data-layer-id']
12
+ expect(result_id).to eq '57f0f116-b64e-4773-8684-96ba09afb549'
13
+ end
14
+
15
+ scenario 'when searching outside the covered area' do
16
+ # BBox param is in Oklahoma
17
+ visit search_catalog_path(
18
+ q: 'A new & accurate map of Asia',
19
+ bbox: '-98.717651 34.40691 -96.37207 36.199958'
20
+ )
21
+ results = page.all('div.documentHeader.row')
22
+ expect(results.count).to eq 0
23
+ end
24
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ require 'spec_helper'
3
+
4
+ feature 'search results display document iconography' do
5
+ scenario 'when viewing result row' do
6
+ # Search returns fixture stanford-cg357zz0321
7
+ visit search_catalog_path(
8
+ search_field: 'all_fields',
9
+ q: 'stanford-cg357zz0321'
10
+ )
11
+ first_result = page.all('span.status-icons > span')
12
+ expect(first_result[0][:class]).to include 'blacklight-icon-dataset'
13
+ expect(first_result[1][:class]).to include 'blacklight-icon-stanford'
14
+ expect(first_result[2][:class]).to include 'blacklight-icon-restricted'
15
+ end
16
+ end