geoblacklight 4.7.0 → 5.0.0.pre.alpha.11

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 (586) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/build-demo-app.yml +153 -0
  3. data/.github/workflows/prune-containers.yml +19 -0
  4. data/.github/workflows/ruby.yml +54 -55
  5. data/.gitignore +2 -2
  6. data/CONTRIBUTING.md +62 -44
  7. data/Gemfile +3 -27
  8. data/Rakefile +42 -67
  9. data/app/assets/images/blacklight/logo.svg +31 -1
  10. data/app/assets/stylesheets/geoblacklight/geoblacklight.scss +1 -2
  11. data/app/assets/stylesheets/geoblacklight/modules/_base.scss +1 -1
  12. data/app/assets/stylesheets/geoblacklight/modules/_blacklight_overrides.scss +24 -26
  13. data/app/assets/stylesheets/geoblacklight/modules/downloads.scss +13 -0
  14. data/app/assets/stylesheets/geoblacklight/modules/home.scss +2 -17
  15. data/app/assets/stylesheets/geoblacklight/modules/icon-customization.scss +48 -23
  16. data/app/assets/stylesheets/geoblacklight/modules/index_maps.scss +1 -15
  17. data/app/assets/stylesheets/geoblacklight/modules/item.scss +13 -11
  18. data/app/assets/stylesheets/geoblacklight/modules/layer_opacity.scss +3 -3
  19. data/app/assets/stylesheets/geoblacklight/modules/leaflet.scss +4 -0
  20. data/app/assets/stylesheets/geoblacklight/modules/modal.scss +0 -15
  21. data/app/assets/stylesheets/geoblacklight/modules/results.scss +10 -19
  22. data/app/assets/stylesheets/geoblacklight/modules/sidebar.scss +2 -2
  23. data/app/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component.rb +46 -0
  24. data/app/components/blacklight/icons/arizona_component.rb +24 -0
  25. data/app/components/blacklight/icons/arrow_circle_down_component.rb +23 -0
  26. data/app/components/blacklight/icons/baruch_cuny_component.rb +23 -0
  27. data/app/components/blacklight/icons/book_component.rb +23 -0
  28. data/app/components/blacklight/icons/bookmark_component.rb +23 -0
  29. data/app/components/blacklight/icons/cd_rom_component.rb +23 -0
  30. data/app/components/blacklight/icons/child_item_component.rb +23 -0
  31. data/app/components/blacklight/icons/circle_info_solid_component.rb +23 -0
  32. data/app/components/blacklight/icons/citation_component.rb +23 -0
  33. data/app/components/blacklight/icons/collection_component.rb +23 -0
  34. data/app/components/blacklight/icons/collections_component.rb +24 -0
  35. data/app/components/blacklight/icons/columbia_component.rb +23 -0
  36. data/app/components/blacklight/icons/cornell_component.rb +25 -0
  37. data/app/components/blacklight/icons/datasets_component.rb +27 -0
  38. data/app/components/blacklight/icons/dvd_rom_component.rb +23 -0
  39. data/app/components/blacklight/icons/email_component.rb +23 -0
  40. data/app/components/blacklight/icons/esri_globe_component.rb +51 -0
  41. data/app/components/blacklight/icons/fire_solid_component.rb +23 -0
  42. data/app/components/blacklight/icons/george_mason_component.rb +24 -0
  43. data/app/components/blacklight/icons/globe_component.rb +23 -0
  44. data/app/components/blacklight/icons/harvard_component.rb +23 -0
  45. data/app/components/blacklight/icons/home_component.rb +23 -0
  46. data/app/components/blacklight/icons/iiif_drag_drop_component.rb +31 -0
  47. data/app/components/blacklight/icons/image_component.rb +23 -0
  48. data/app/components/blacklight/icons/imagery_component.rb +24 -0
  49. data/app/components/blacklight/icons/indiana_component.rb +23 -0
  50. data/app/components/blacklight/icons/leaf_component.rb +23 -0
  51. data/app/components/blacklight/icons/lewis_clark_component.rb +25 -0
  52. data/app/components/blacklight/icons/lightbulb_solid_component.rb +23 -0
  53. data/app/components/blacklight/icons/line_component.rb +24 -0
  54. data/app/components/blacklight/icons/map_component.rb +23 -0
  55. data/app/components/blacklight/icons/map_marker_component.rb +23 -0
  56. data/app/components/blacklight/icons/maps_component.rb +24 -0
  57. data/app/components/blacklight/icons/massgis_component.rb +23 -0
  58. data/app/components/blacklight/icons/metadata_component.rb +23 -0
  59. data/app/components/blacklight/icons/michigan_state_university_component.rb +25 -0
  60. data/app/components/blacklight/icons/mit_component.rb +23 -0
  61. data/app/components/blacklight/icons/mixed_component.rb +25 -0
  62. data/app/components/blacklight/icons/multilinestring_component.rb +26 -0
  63. data/app/components/blacklight/icons/multipoint_component.rb +23 -0
  64. data/app/components/blacklight/icons/multipolygon_component.rb +26 -0
  65. data/app/components/blacklight/icons/northwestern_university_component.rb +24 -0
  66. data/app/components/blacklight/icons/nyu_component.rb +26 -0
  67. data/app/components/blacklight/icons/pagelines_brands_component.rb +23 -0
  68. data/app/components/blacklight/icons/paper_map_component.rb +23 -0
  69. data/app/components/blacklight/icons/parent_item_component.rb +23 -0
  70. data/app/components/blacklight/icons/pennsylvania_state_university_component.rb +25 -0
  71. data/app/components/blacklight/icons/point_component.rb +23 -0
  72. data/app/components/blacklight/icons/polygon_component.rb +24 -0
  73. data/app/components/blacklight/icons/polyline_component.rb +26 -0
  74. data/app/components/blacklight/icons/princeton_component.rb +23 -0
  75. data/app/components/blacklight/icons/public_component.rb +23 -0
  76. data/app/components/blacklight/icons/purdue_university_component.rb +25 -0
  77. data/app/components/blacklight/icons/raster_component.rb +23 -0
  78. data/app/components/blacklight/icons/restricted_component.rb +23 -0
  79. data/app/components/blacklight/icons/rutgers_component.rb +25 -0
  80. data/app/components/blacklight/icons/sms_component.rb +23 -0
  81. data/app/components/blacklight/icons/stanford_component.rb +23 -0
  82. data/app/components/blacklight/icons/table_component.rb +23 -0
  83. data/app/components/blacklight/icons/tags_component.rb +23 -0
  84. data/app/components/blacklight/icons/texas_component.rb +23 -0
  85. data/app/components/blacklight/icons/the_ohio_state_university_component.rb +26 -0
  86. data/app/components/blacklight/icons/triangle_exclamation_solid_component.rb +23 -0
  87. data/app/components/blacklight/icons/tufts_component.rb +23 -0
  88. data/app/components/blacklight/icons/ucla_component.rb +23 -0
  89. data/app/components/blacklight/icons/university_of_california_berkeley_component.rb +24 -0
  90. data/app/components/blacklight/icons/university_of_chicago_component.rb +25 -0
  91. data/app/components/blacklight/icons/university_of_colorado_boulder_component.rb +26 -0
  92. data/app/components/blacklight/icons/university_of_illinois_urbana_champaign_component.rb +25 -0
  93. data/app/components/blacklight/icons/university_of_iowa_component.rb +24 -0
  94. data/app/components/blacklight/icons/university_of_maryland_component.rb +24 -0
  95. data/app/components/blacklight/icons/university_of_michigan_component.rb +24 -0
  96. data/app/components/blacklight/icons/university_of_minnesota_component.rb +24 -0
  97. data/app/components/blacklight/icons/university_of_nebraska_lincoln_component.rb +27 -0
  98. data/app/components/blacklight/icons/university_of_wisconsin_madison_component.rb +24 -0
  99. data/app/components/blacklight/icons/uva_component.rb +23 -0
  100. data/app/components/blacklight/icons/web_services_component.rb +23 -0
  101. data/app/components/blacklight/icons/websites_component.rb +24 -0
  102. data/app/components/geoblacklight/arcgis_component.html.erb +3 -0
  103. data/app/components/geoblacklight/arcgis_component.rb +25 -0
  104. data/app/components/geoblacklight/attribute_table_component.html.erb +17 -0
  105. data/app/components/geoblacklight/attribute_table_component.rb +17 -0
  106. data/app/components/geoblacklight/data_dictionary_download_component.html.erb +3 -0
  107. data/app/components/geoblacklight/data_dictionary_download_component.rb +16 -0
  108. data/app/components/geoblacklight/display_note_component.rb +1 -1
  109. data/app/components/geoblacklight/document/citation_component.html.erb +1 -0
  110. data/app/components/geoblacklight/document/citation_component.rb +19 -0
  111. data/app/components/geoblacklight/document/sidebar_component.html.erb +12 -0
  112. data/app/components/geoblacklight/document/sidebar_component.rb +8 -0
  113. data/app/components/geoblacklight/document_component.html.erb +43 -0
  114. data/app/components/geoblacklight/document_component.rb +6 -0
  115. data/app/components/geoblacklight/download_links_component.html.erb +31 -0
  116. data/app/components/geoblacklight/download_links_component.rb +80 -0
  117. data/app/components/geoblacklight/header_component.html.erb +14 -0
  118. data/app/components/geoblacklight/header_component.rb +9 -0
  119. data/app/components/geoblacklight/header_icons_component.html.erb +3 -0
  120. data/app/components/geoblacklight/header_icons_component.rb +29 -0
  121. data/app/components/geoblacklight/iiif_drag_drop_component.html.erb +3 -0
  122. data/app/components/geoblacklight/iiif_drag_drop_component.rb +16 -0
  123. data/app/components/geoblacklight/index_map_inspect_component.rb +15 -0
  124. data/app/components/geoblacklight/index_map_legend_component.html.erb +14 -0
  125. data/app/components/geoblacklight/index_map_legend_component.rb +17 -0
  126. data/app/components/geoblacklight/item_map_viewer_component.html.erb +1 -0
  127. data/app/components/geoblacklight/item_map_viewer_component.rb +87 -0
  128. data/app/components/geoblacklight/location_leaflet_map_component.html.erb +1 -0
  129. data/app/components/geoblacklight/location_leaflet_map_component.rb +49 -0
  130. data/app/components/geoblacklight/login_link_component.html.erb +5 -0
  131. data/app/components/geoblacklight/login_link_component.rb +17 -0
  132. data/app/components/geoblacklight/relations_component.html.erb +23 -0
  133. data/app/components/geoblacklight/relations_component.rb +25 -0
  134. data/app/components/geoblacklight/search_result_component.html.erb +44 -0
  135. data/app/components/geoblacklight/search_result_component.rb +28 -0
  136. data/app/components/geoblacklight/static_map_component.html.erb +9 -0
  137. data/app/components/geoblacklight/static_map_component.rb +36 -0
  138. data/app/components/geoblacklight/viewer_help_text_component.html.erb +1 -0
  139. data/app/components/geoblacklight/viewer_help_text_component.rb +46 -0
  140. data/app/components/geoblacklight/web_services_component.html.erb +1 -0
  141. data/app/components/geoblacklight/web_services_component.rb +26 -0
  142. data/app/{views/catalog/_web_services_default.html.erb → components/geoblacklight/web_services_default_component.html.erb} +3 -5
  143. data/app/components/geoblacklight/web_services_default_component.rb +11 -0
  144. data/app/components/geoblacklight/web_services_link_component.html.erb +3 -0
  145. data/app/components/geoblacklight/web_services_link_component.rb +22 -0
  146. data/app/{views/catalog/_web_services_wfs.html.erb → components/geoblacklight/web_services_wfs_component.html.erb} +4 -7
  147. data/app/components/geoblacklight/web_services_wfs_component.rb +12 -0
  148. data/app/components/geoblacklight/web_services_wms_component.html.erb +10 -0
  149. data/app/components/geoblacklight/web_services_wms_component.rb +12 -0
  150. data/app/controllers/download_controller.rb +8 -29
  151. data/app/controllers/relation_controller.rb +0 -1
  152. data/app/helpers/geoblacklight_helper.rb +10 -247
  153. data/app/javascript/geoblacklight/controllers/clipboard_controller.js +11 -0
  154. data/app/javascript/geoblacklight/controllers/clover_viewer_controller.js +47 -0
  155. data/app/javascript/geoblacklight/controllers/downloads_controller.js +56 -0
  156. data/app/javascript/geoblacklight/controllers/leaflet_viewer_controller.js +217 -0
  157. data/app/javascript/geoblacklight/controllers/oembed_viewer_controller.js +18 -0
  158. data/app/javascript/geoblacklight/controllers/openlayers_viewer_controller.js +63 -0
  159. data/app/javascript/geoblacklight/controllers/search_results_controller.js +50 -0
  160. data/app/javascript/geoblacklight/core.js +69 -0
  161. data/app/javascript/geoblacklight/index.js +29 -0
  162. data/app/javascript/geoblacklight/initializers/metadata_download.js +54 -0
  163. data/app/javascript/geoblacklight/initializers/popovers.js +11 -0
  164. data/app/javascript/geoblacklight/initializers/relations.js +40 -0
  165. data/app/javascript/geoblacklight/initializers/tooltips.js +55 -0
  166. data/app/javascript/geoblacklight/initializers/truncation.js +45 -0
  167. data/app/javascript/geoblacklight/leaflet/basemaps.js +74 -0
  168. data/app/javascript/geoblacklight/leaflet/constants.js +18 -0
  169. data/app/javascript/geoblacklight/leaflet/controls/geosearch.js +160 -0
  170. data/app/javascript/geoblacklight/leaflet/controls/layer_opacity.js +120 -0
  171. data/app/javascript/geoblacklight/leaflet/inspection.js +195 -0
  172. data/app/javascript/geoblacklight/leaflet/layer_index_map.js +120 -0
  173. data/app/javascript/geoblacklight/leaflet/layer_wmts.js +59 -0
  174. data/app/javascript/geoblacklight/leaflet/layers.js +153 -0
  175. data/app/javascript/geoblacklight/leaflet/utils.js +83 -0
  176. data/app/javascript/geoblacklight/openlayers/basemaps.js +47 -0
  177. data/app/javascript/geoblacklight/openlayers/layers.js +44 -0
  178. data/app/models/concerns/geoblacklight/solr_document/citation.rb +20 -15
  179. data/app/models/concerns/geoblacklight/solr_document/inspection.rb +1 -1
  180. data/app/models/concerns/geoblacklight/solr_document.rb +23 -59
  181. data/app/presenters/geoblacklight/bbox_item_presenter.rb +1 -1
  182. data/app/views/catalog/_citation.html.erb +16 -33
  183. data/app/views/catalog/_document_split.html.erb +18 -3
  184. data/app/views/catalog/_home_text.html.erb +2 -2
  185. data/app/views/catalog/_metadata.html.erb +1 -1
  186. data/app/views/catalog/index.html.erb +8 -4
  187. data/app/views/catalog/metadata/_markup.html.erb +1 -1
  188. data/app/views/catalog/metadata.html.erb +14 -13
  189. data/app/views/catalog/web_services.html.erb +19 -28
  190. data/app/views/relation/index.html.erb +2 -12
  191. data/app/views/relation/index.json.jbuilder +1 -1
  192. data/compose.yml +14 -0
  193. data/config/importmap.rb +20 -0
  194. data/config/locales/geoblacklight.en.yml +15 -24
  195. data/geoblacklight.gemspec +8 -8
  196. data/lib/generators/geoblacklight/assets/importmap_generator.rb +87 -0
  197. data/lib/generators/geoblacklight/assets/vite_generator.rb +90 -0
  198. data/lib/generators/geoblacklight/assets_generator.rb +12 -37
  199. data/lib/generators/geoblacklight/install_generator.rb +11 -63
  200. data/lib/generators/geoblacklight/templates/assets/_customizations.scss +13 -19
  201. data/lib/generators/geoblacklight/templates/assets/application.js +17 -0
  202. data/lib/generators/geoblacklight/templates/assets/application.scss +9 -4
  203. data/lib/generators/geoblacklight/templates/assets/geoblacklight.scss +11 -0
  204. data/lib/generators/geoblacklight/templates/base.html.erb +9 -12
  205. data/lib/generators/geoblacklight/templates/catalog_controller.rb +11 -18
  206. data/lib/generators/geoblacklight/templates/demo-app/Dockerfile +31 -0
  207. data/lib/generators/geoblacklight/templates/demo-app/compose.yml +26 -0
  208. data/lib/generators/geoblacklight/templates/demo-app/start-server.sh +21 -0
  209. data/lib/generators/geoblacklight/templates/package.json +7 -1
  210. data/lib/generators/geoblacklight/templates/settings.yml +45 -59
  211. data/lib/generators/geoblacklight/templates/vite.config.ts +22 -7
  212. data/lib/geoblacklight/bounding_box.rb +16 -0
  213. data/lib/geoblacklight/constants.rb +0 -1
  214. data/lib/geoblacklight/download/csv_download.rb +22 -0
  215. data/lib/geoblacklight/download/geojson_download.rb +1 -1
  216. data/lib/geoblacklight/download/geotiff_download.rb +1 -1
  217. data/lib/geoblacklight/download/kmz_download.rb +1 -1
  218. data/lib/geoblacklight/download/shapefile_download.rb +1 -1
  219. data/lib/geoblacklight/download.rb +1 -1
  220. data/lib/geoblacklight/engine.rb +15 -20
  221. data/lib/geoblacklight/geometry.rb +0 -7
  222. data/lib/geoblacklight/item_viewer.rb +1 -8
  223. data/lib/geoblacklight/metadata/base.rb +2 -1
  224. data/lib/geoblacklight/references.rb +27 -23
  225. data/lib/geoblacklight/routes/downloadable.rb +0 -1
  226. data/lib/geoblacklight/routes.rb +0 -3
  227. data/lib/geoblacklight/version.rb +1 -1
  228. data/lib/geoblacklight/wms_layer/feature_info_response.rb +9 -6
  229. data/lib/geoblacklight.rb +6 -47
  230. data/lib/tasks/geoblacklight.rake +24 -77
  231. data/package.json +22 -16
  232. data/solr/conf/schema.xml +15 -13
  233. data/solr/conf/solrconfig.xml +6 -4
  234. data/spec/components/blacklight/icons/american_geographical_society_library_uwm_libraries_component_spec.rb +15 -0
  235. data/spec/components/blacklight/icons/arizona_component_spec.rb +15 -0
  236. data/spec/components/blacklight/icons/arrow_circle_down_component_spec.rb +15 -0
  237. data/spec/components/blacklight/icons/baruch_cuny_component_spec.rb +15 -0
  238. data/spec/components/blacklight/icons/book_component_spec.rb +15 -0
  239. data/spec/components/blacklight/icons/bookmark_component_spec.rb +15 -0
  240. data/spec/components/blacklight/icons/cd_rom_component_spec.rb +15 -0
  241. data/spec/components/blacklight/icons/child_item_component_spec.rb +15 -0
  242. data/spec/components/blacklight/icons/circle_info_solid_component_spec.rb +15 -0
  243. data/spec/components/blacklight/icons/citation_component_spec.rb +15 -0
  244. data/spec/components/blacklight/icons/collection_component_spec.rb +15 -0
  245. data/spec/components/blacklight/icons/collections_component_spec.rb +15 -0
  246. data/spec/components/blacklight/icons/columbia_component_spec.rb +15 -0
  247. data/spec/components/blacklight/icons/cornell_component_spec.rb +15 -0
  248. data/spec/components/blacklight/icons/datasets_component_spec.rb +15 -0
  249. data/spec/components/blacklight/icons/dvd_rom_component_spec.rb +15 -0
  250. data/spec/components/blacklight/icons/email_component_spec.rb +15 -0
  251. data/spec/components/blacklight/icons/esri_globe_component_spec.rb +15 -0
  252. data/spec/components/blacklight/icons/fire_solid_component_spec.rb +15 -0
  253. data/spec/components/blacklight/icons/george_mason_component_spec.rb +15 -0
  254. data/spec/components/blacklight/icons/globe_component_spec.rb +15 -0
  255. data/spec/components/blacklight/icons/harvard_component_spec.rb +15 -0
  256. data/spec/components/blacklight/icons/home_component_spec.rb +15 -0
  257. data/spec/components/blacklight/icons/iiif_drag_drop_component_spec.rb +15 -0
  258. data/spec/components/blacklight/icons/image_component_spec.rb +15 -0
  259. data/spec/components/blacklight/icons/imagery_component_spec.rb +15 -0
  260. data/spec/components/blacklight/icons/indiana_component_spec.rb +15 -0
  261. data/spec/components/blacklight/icons/leaf_component_spec.rb +15 -0
  262. data/spec/components/blacklight/icons/lewis_clark_component_spec.rb +15 -0
  263. data/spec/components/blacklight/icons/lightbulb_solid_component_spec.rb +15 -0
  264. data/spec/components/blacklight/icons/line_component_spec.rb +15 -0
  265. data/spec/components/blacklight/icons/map_component_spec.rb +15 -0
  266. data/spec/components/blacklight/icons/map_marker_component_spec.rb +15 -0
  267. data/spec/components/blacklight/icons/maps_component_spec.rb +15 -0
  268. data/spec/components/blacklight/icons/massgis_component_spec.rb +15 -0
  269. data/spec/components/blacklight/icons/metadata_component_spec.rb +15 -0
  270. data/spec/components/blacklight/icons/michigan_state_university_component_spec.rb +15 -0
  271. data/spec/components/blacklight/icons/mit_component_spec.rb +15 -0
  272. data/spec/components/blacklight/icons/mixed_component_spec.rb +15 -0
  273. data/spec/components/blacklight/icons/multilinestring_component_spec.rb +15 -0
  274. data/spec/components/blacklight/icons/multipoint_component_spec.rb +15 -0
  275. data/spec/components/blacklight/icons/multipolygon_component_spec.rb +15 -0
  276. data/spec/components/blacklight/icons/northwestern_university_component_spec.rb +15 -0
  277. data/spec/components/blacklight/icons/nyu_component_spec.rb +15 -0
  278. data/spec/components/blacklight/icons/pagelines_brands_component_spec.rb +15 -0
  279. data/spec/components/blacklight/icons/paper_map_component_spec.rb +15 -0
  280. data/spec/components/blacklight/icons/parent_item_component_spec.rb +15 -0
  281. data/spec/components/blacklight/icons/pennsylvania_state_university_component_spec.rb +15 -0
  282. data/spec/components/blacklight/icons/point_component_spec.rb +15 -0
  283. data/spec/components/blacklight/icons/polygon_component_spec.rb +15 -0
  284. data/spec/components/blacklight/icons/polyline_component_spec.rb +15 -0
  285. data/spec/components/blacklight/icons/princeton_component_spec.rb +15 -0
  286. data/spec/components/blacklight/icons/public_component_spec.rb +15 -0
  287. data/spec/components/blacklight/icons/purdue_university_component_spec.rb +15 -0
  288. data/spec/components/blacklight/icons/raster_component_spec.rb +15 -0
  289. data/spec/components/blacklight/icons/restricted_component_spec.rb +15 -0
  290. data/spec/components/blacklight/icons/rutgers_component_spec.rb +15 -0
  291. data/spec/components/blacklight/icons/sms_component_spec.rb +15 -0
  292. data/spec/components/blacklight/icons/stanford_component_spec.rb +15 -0
  293. data/spec/components/blacklight/icons/table_component_spec.rb +15 -0
  294. data/spec/components/blacklight/icons/tags_component_spec.rb +15 -0
  295. data/spec/components/blacklight/icons/texas_component_spec.rb +15 -0
  296. data/spec/components/blacklight/icons/the_ohio_state_university_component_spec.rb +15 -0
  297. data/spec/components/blacklight/icons/triangle_exclamation_solid_component_spec.rb +15 -0
  298. data/spec/components/blacklight/icons/tufts_component_spec.rb +15 -0
  299. data/spec/components/blacklight/icons/ucla_component_spec.rb +15 -0
  300. data/spec/components/blacklight/icons/university_of_california_berkeley_component_spec.rb +15 -0
  301. data/spec/components/blacklight/icons/university_of_chicago_component_spec.rb +15 -0
  302. data/spec/components/blacklight/icons/university_of_colorado_boulder_component_spec.rb +15 -0
  303. data/spec/components/blacklight/icons/university_of_illinois_urbana_champaign_component_spec.rb +15 -0
  304. data/spec/components/blacklight/icons/university_of_iowa_component_spec.rb +15 -0
  305. data/spec/components/blacklight/icons/university_of_maryland_component_spec.rb +15 -0
  306. data/spec/components/blacklight/icons/university_of_michigan_component_spec.rb +15 -0
  307. data/spec/components/blacklight/icons/university_of_minnesota_component_spec.rb +15 -0
  308. data/spec/components/blacklight/icons/university_of_nebraska_lincoln_component_spec.rb +15 -0
  309. data/spec/components/blacklight/icons/university_of_wisconsin_madison_component_spec.rb +15 -0
  310. data/spec/components/blacklight/icons/uva_component_spec.rb +15 -0
  311. data/spec/components/blacklight/icons/web_services_component_spec.rb +15 -0
  312. data/spec/components/blacklight/icons/websites_component_spec.rb +15 -0
  313. data/spec/components/geoblacklight/arcgis_component_spec.rb +31 -0
  314. data/spec/components/geoblacklight/attribute_table_component_spec.rb +37 -0
  315. data/spec/components/geoblacklight/citation_component_spec.rb +37 -0
  316. data/spec/components/geoblacklight/document_component_spec.rb +92 -0
  317. data/spec/components/geoblacklight/download_links_component_spec.rb +102 -0
  318. data/spec/components/geoblacklight/header_icons_component_spec.rb +56 -0
  319. data/spec/components/geoblacklight/iiif_drag_drop_component_spec.rb +30 -0
  320. data/spec/components/geoblacklight/index_map_legend_component_spec.rb +42 -0
  321. data/spec/components/geoblacklight/item_map_viewer_component_spec.rb +36 -0
  322. data/spec/components/geoblacklight/login_link_component_spec.rb +33 -0
  323. data/spec/{lib/geoblacklight/document_presenter_spec.rb → components/geoblacklight/search_result_component_spec.rb} +19 -11
  324. data/spec/components/geoblacklight/static_map_component_spec.rb +22 -0
  325. data/spec/components/geoblacklight/viewer_help_text_component_spec.rb +28 -0
  326. data/spec/components/geoblacklight/web_services_component_spec.rb +45 -0
  327. data/spec/controllers/download_controller_spec.rb +12 -35
  328. data/spec/features/axe_spec.rb +66 -0
  329. data/spec/features/bookmarks_spec.rb +1 -1
  330. data/spec/features/citations_spec.rb +7 -3
  331. data/spec/features/configurable_basemap_spec.rb +0 -56
  332. data/spec/features/download_layer_spec.rb +24 -39
  333. data/spec/features/esri_viewer_spec.rb +1 -1
  334. data/spec/features/exports_spec.rb +0 -15
  335. data/spec/features/{full_screen_controll_spec.rb → full_screen_control_spec.rb} +6 -6
  336. data/spec/features/home_page_spec.rb +12 -7
  337. data/spec/features/iiif_viewer_spec.rb +1 -1
  338. data/spec/features/index_map_spec.rb +16 -9
  339. data/spec/features/{split_view.html.erb_spec.rb → index_view_spec.rb} +15 -13
  340. data/spec/features/layer_inspection_spec.rb +2 -2
  341. data/spec/features/layer_preview_spec.rb +1 -1
  342. data/spec/features/missing_metadata_spec.rb +5 -5
  343. data/spec/features/oembed_spec.rb +2 -2
  344. data/spec/features/saved_searches_spec.rb +4 -1
  345. data/spec/features/search_results_complex_geometry_spec.rb +2 -2
  346. data/spec/features/search_results_icons_spec.rb +3 -3
  347. data/spec/features/search_results_map_spec.rb +4 -36
  348. data/spec/features/search_results_overlap_ratio_spec.rb +1 -1
  349. data/spec/features/show_page_download_spec.rb +0 -8
  350. data/spec/features/tilejson_spec.rb +2 -2
  351. data/spec/features/web_services_modal_spec.rb +57 -39
  352. data/spec/features/wmts_spec.rb +4 -4
  353. data/spec/fixtures/solr_documents/README.md +2 -1
  354. data/spec/fixtures/solr_documents/complex-geom.json +61 -0
  355. data/spec/fixtures/solr_documents/esri-tiled_map_layer.json +45 -24
  356. data/spec/fixtures/solr_documents/harvard_raster.json +1 -1
  357. data/spec/fixtures/solr_documents/multiple-downloads.json +1 -0
  358. data/spec/helpers/geoblacklight_helper_spec.rb +8 -173
  359. data/spec/lib/geoblacklight/download/csv_download_spec.rb +21 -0
  360. data/spec/lib/geoblacklight/geometry_spec.rb +0 -15
  361. data/spec/lib/geoblacklight/reference_spec.rb +17 -19
  362. data/spec/lib/geoblacklight/references_spec.rb +30 -40
  363. data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +8 -6
  364. data/spec/lib/geoblacklight/wms_layer_spec.rb +14 -0
  365. data/spec/models/concerns/geoblacklight/solr_document/citation_spec.rb +1 -17
  366. data/spec/models/concerns/geoblacklight/solr_document_spec.rb +1 -69
  367. data/spec/spec_helper.rb +2 -31
  368. data/spec/test_app_templates/lib/generators/test_app_generator.rb +4 -4
  369. data/template.rb +13 -11
  370. data/test/leaflet/layers.test.js +17 -0
  371. data/vite.config.ts +34 -23
  372. metadata +315 -273
  373. data/.hound.yml +0 -8
  374. data/.jshintignore +0 -2
  375. data/.jshintrc +0 -67
  376. data/.solr_wrapper +0 -7
  377. data/app/assets/images/blacklight/american-geographical-society-library-uwm-libraries.svg +0 -26
  378. data/app/assets/images/blacklight/arrow-circle-down.svg +0 -3
  379. data/app/assets/images/blacklight/baruch-cuny.svg +0 -3
  380. data/app/assets/images/blacklight/book.svg +0 -3
  381. data/app/assets/images/blacklight/bookmark.svg +0 -3
  382. data/app/assets/images/blacklight/cd-rom.svg +0 -3
  383. data/app/assets/images/blacklight/chicago.svg +0 -4
  384. data/app/assets/images/blacklight/child-item.svg +0 -3
  385. data/app/assets/images/blacklight/circle-info-solid.svg +0 -1
  386. data/app/assets/images/blacklight/citation.svg +0 -3
  387. data/app/assets/images/blacklight/collection.svg +0 -3
  388. data/app/assets/images/blacklight/collections.svg +0 -4
  389. data/app/assets/images/blacklight/columbia.svg +0 -3
  390. data/app/assets/images/blacklight/cornell.svg +0 -5
  391. data/app/assets/images/blacklight/datasets.svg +0 -7
  392. data/app/assets/images/blacklight/dvd-rom.svg +0 -3
  393. data/app/assets/images/blacklight/email.svg +0 -3
  394. data/app/assets/images/blacklight/esri-globe.svg +0 -31
  395. data/app/assets/images/blacklight/fire-solid.svg +0 -1
  396. data/app/assets/images/blacklight/geoblacklight-icons.json +0 -3312
  397. data/app/assets/images/blacklight/george-mason.svg +0 -4
  398. data/app/assets/images/blacklight/globe.svg +0 -3
  399. data/app/assets/images/blacklight/harvard.svg +0 -3
  400. data/app/assets/images/blacklight/home.svg +0 -3
  401. data/app/assets/images/blacklight/illinois.svg +0 -4
  402. data/app/assets/images/blacklight/image.svg +0 -3
  403. data/app/assets/images/blacklight/imagery.svg +0 -4
  404. data/app/assets/images/blacklight/indiana.svg +0 -3
  405. data/app/assets/images/blacklight/iowa.svg +0 -3
  406. data/app/assets/images/blacklight/leaf.svg +0 -3
  407. data/app/assets/images/blacklight/lewis-clark.svg +0 -5
  408. data/app/assets/images/blacklight/lightbulb-solid.svg +0 -1
  409. data/app/assets/images/blacklight/line.svg +0 -4
  410. data/app/assets/images/blacklight/map-marker.svg +0 -3
  411. data/app/assets/images/blacklight/map.svg +0 -3
  412. data/app/assets/images/blacklight/maps.svg +0 -4
  413. data/app/assets/images/blacklight/maryland.svg +0 -3
  414. data/app/assets/images/blacklight/massgis.svg +0 -3
  415. data/app/assets/images/blacklight/metadata.svg +0 -3
  416. data/app/assets/images/blacklight/michigan-state-university.svg +0 -5
  417. data/app/assets/images/blacklight/michigan-state.svg +0 -4
  418. data/app/assets/images/blacklight/michigan.svg +0 -3
  419. data/app/assets/images/blacklight/minnesota.svg +0 -3
  420. data/app/assets/images/blacklight/mit.svg +0 -3
  421. data/app/assets/images/blacklight/mixed.svg +0 -5
  422. data/app/assets/images/blacklight/multilinestring.svg +0 -6
  423. data/app/assets/images/blacklight/multipoint.svg +0 -3
  424. data/app/assets/images/blacklight/multipolygon.svg +0 -6
  425. data/app/assets/images/blacklight/nebraska.svg +0 -4
  426. data/app/assets/images/blacklight/northwestern-university.svg +0 -5
  427. data/app/assets/images/blacklight/nyu.svg +0 -6
  428. data/app/assets/images/blacklight/ohio-state.svg +0 -5
  429. data/app/assets/images/blacklight/pagelines-brands.svg +0 -3
  430. data/app/assets/images/blacklight/paper-map.svg +0 -3
  431. data/app/assets/images/blacklight/parent-item.svg +0 -3
  432. data/app/assets/images/blacklight/penn-state.svg +0 -4
  433. data/app/assets/images/blacklight/pennsylvania-state-university.svg +0 -5
  434. data/app/assets/images/blacklight/point.svg +0 -3
  435. data/app/assets/images/blacklight/polygon.svg +0 -4
  436. data/app/assets/images/blacklight/polyline.svg +0 -6
  437. data/app/assets/images/blacklight/princeton.svg +0 -3
  438. data/app/assets/images/blacklight/public.svg +0 -3
  439. data/app/assets/images/blacklight/purdue-university.svg +0 -5
  440. data/app/assets/images/blacklight/purdue.svg +0 -4
  441. data/app/assets/images/blacklight/raster.svg +0 -3
  442. data/app/assets/images/blacklight/restricted.svg +0 -3
  443. data/app/assets/images/blacklight/rutgers.svg +0 -5
  444. data/app/assets/images/blacklight/search.svg +0 -5
  445. data/app/assets/images/blacklight/sms.svg +0 -3
  446. data/app/assets/images/blacklight/stanford.svg +0 -3
  447. data/app/assets/images/blacklight/table.svg +0 -3
  448. data/app/assets/images/blacklight/tags.svg +0 -3
  449. data/app/assets/images/blacklight/texas.svg +0 -3
  450. data/app/assets/images/blacklight/the-ohio-state-university.svg +0 -6
  451. data/app/assets/images/blacklight/triangle-exclamation-solid.svg +0 -1
  452. data/app/assets/images/blacklight/tufts.svg +0 -3
  453. data/app/assets/images/blacklight/ucla.svg +0 -3
  454. data/app/assets/images/blacklight/university-of-arizona.svg +0 -4
  455. data/app/assets/images/blacklight/university-of-california-berkeley.svg +0 -4
  456. data/app/assets/images/blacklight/university-of-chicago.svg +0 -5
  457. data/app/assets/images/blacklight/university-of-colorado-boulder.svg +0 -6
  458. data/app/assets/images/blacklight/university-of-illinois-urbana-champaign.svg +0 -5
  459. data/app/assets/images/blacklight/university-of-iowa.svg +0 -4
  460. data/app/assets/images/blacklight/university-of-maryland.svg +0 -4
  461. data/app/assets/images/blacklight/university-of-michigan.svg +0 -4
  462. data/app/assets/images/blacklight/university-of-minnesota.svg +0 -4
  463. data/app/assets/images/blacklight/university-of-nebraska-lincoln.svg +0 -7
  464. data/app/assets/images/blacklight/university-of-wisconsin-madison.svg +0 -4
  465. data/app/assets/images/blacklight/uva.svg +0 -3
  466. data/app/assets/images/blacklight/web_services.svg +0 -3
  467. data/app/assets/images/blacklight/websites.svg +0 -4
  468. data/app/assets/images/blacklight/wisconsin.svg +0 -3
  469. data/app/assets/javascripts/geoblacklight/basemaps.js +0 -63
  470. data/app/assets/javascripts/geoblacklight/controls/fullscreen.js +0 -8
  471. data/app/assets/javascripts/geoblacklight/controls/opacity.js +0 -6
  472. data/app/assets/javascripts/geoblacklight/controls.js +0 -1
  473. data/app/assets/javascripts/geoblacklight/downloaders/downloader.js +0 -61
  474. data/app/assets/javascripts/geoblacklight/downloaders/hgl_downloader.js +0 -32
  475. data/app/assets/javascripts/geoblacklight/downloaders.js +0 -1
  476. data/app/assets/javascripts/geoblacklight/geoblacklight.js +0 -60
  477. data/app/assets/javascripts/geoblacklight/modules/bookmarks.js +0 -43
  478. data/app/assets/javascripts/geoblacklight/modules/download.js +0 -11
  479. data/app/assets/javascripts/geoblacklight/modules/geosearch.js +0 -133
  480. data/app/assets/javascripts/geoblacklight/modules/help_text.js +0 -7
  481. data/app/assets/javascripts/geoblacklight/modules/home.js +0 -16
  482. data/app/assets/javascripts/geoblacklight/modules/item.js +0 -32
  483. data/app/assets/javascripts/geoblacklight/modules/layer_opacity.js +0 -68
  484. data/app/assets/javascripts/geoblacklight/modules/metadata.js +0 -15
  485. data/app/assets/javascripts/geoblacklight/modules/metadata_download_button.js +0 -58
  486. data/app/assets/javascripts/geoblacklight/modules/relations.js +0 -14
  487. data/app/assets/javascripts/geoblacklight/modules/results.js +0 -81
  488. data/app/assets/javascripts/geoblacklight/modules/svg_tooltips.js +0 -31
  489. data/app/assets/javascripts/geoblacklight/modules/util.js +0 -48
  490. data/app/assets/javascripts/geoblacklight/modules.js +0 -1
  491. data/app/assets/javascripts/geoblacklight/templates/index_map_download.hbs +0 -19
  492. data/app/assets/javascripts/geoblacklight/templates/index_map_info.hbs +0 -61
  493. data/app/assets/javascripts/geoblacklight/viewers/cog.js +0 -5
  494. data/app/assets/javascripts/geoblacklight/viewers/esri/dynamic_map_layer.js +0 -85
  495. data/app/assets/javascripts/geoblacklight/viewers/esri/feature_layer.js +0 -76
  496. data/app/assets/javascripts/geoblacklight/viewers/esri/image_map_layer.js +0 -14
  497. data/app/assets/javascripts/geoblacklight/viewers/esri/tiled_map_layer.js +0 -50
  498. data/app/assets/javascripts/geoblacklight/viewers/esri.js +0 -78
  499. data/app/assets/javascripts/geoblacklight/viewers/iiif.js +0 -25
  500. data/app/assets/javascripts/geoblacklight/viewers/index_map.js +0 -71
  501. data/app/assets/javascripts/geoblacklight/viewers/map.js +0 -94
  502. data/app/assets/javascripts/geoblacklight/viewers/oembed.js +0 -13
  503. data/app/assets/javascripts/geoblacklight/viewers/pmtiles.js +0 -5
  504. data/app/assets/javascripts/geoblacklight/viewers/tilejson.js +0 -33
  505. data/app/assets/javascripts/geoblacklight/viewers/tms.js +0 -10
  506. data/app/assets/javascripts/geoblacklight/viewers/viewer.js +0 -68
  507. data/app/assets/javascripts/geoblacklight/viewers/wms.js +0 -74
  508. data/app/assets/javascripts/geoblacklight/viewers/wmts.js +0 -85
  509. data/app/assets/javascripts/geoblacklight/viewers/xyz.js +0 -10
  510. data/app/assets/javascripts/geoblacklight/viewers.js +0 -1
  511. data/app/assets/stylesheets/geoblacklight/modules/mixins.scss +0 -5
  512. data/app/helpers/arcgis_helper.rb +0 -17
  513. data/app/helpers/blacklight_helper.rb +0 -15
  514. data/app/helpers/carto_helper.rb +0 -36
  515. data/app/helpers/geoblacklight/geoblacklight_helper_behavior.rb +0 -24
  516. data/app/javascript/clover/clover_initializer.js +0 -29
  517. data/app/javascript/index.js +0 -7
  518. data/app/javascript/openlayers/basemaps.js +0 -27
  519. data/app/javascript/openlayers/ol_initializer.js +0 -131
  520. data/app/javascript/stylesheets/openlayers.css +0 -1
  521. data/app/models/concerns/geoblacklight/solr_document/carto.rb +0 -24
  522. data/app/presenters/geoblacklight/document_presenter.rb +0 -34
  523. data/app/views/catalog/_arcgis.html.erb +0 -4
  524. data/app/views/catalog/_carto.html.erb +0 -4
  525. data/app/views/catalog/_data_dictionary.html.erb +0 -5
  526. data/app/views/catalog/_downloads_collapse.html.erb +0 -30
  527. data/app/views/catalog/_header_icons.html.erb +0 -3
  528. data/app/views/catalog/_index_split_default.html.erb +0 -30
  529. data/app/views/catalog/_results_pagination.html.erb +0 -12
  530. data/app/views/catalog/_show_default_attribute_table.html.erb +0 -19
  531. data/app/views/catalog/_show_default_display_note.html.erb +0 -7
  532. data/app/views/catalog/_show_default_viewer_container.html.erb +0 -28
  533. data/app/views/catalog/_show_downloads.html.erb +0 -26
  534. data/app/views/catalog/_show_header_default.html.erb +0 -4
  535. data/app/views/catalog/_show_sidebar.html.erb +0 -16
  536. data/app/views/catalog/_show_sidebar_static_map.html.erb +0 -13
  537. data/app/views/catalog/_show_web_services.html.erb +0 -11
  538. data/app/views/catalog/_web_services.html.erb +0 -9
  539. data/app/views/catalog/_web_services_wms.html.erb +0 -13
  540. data/app/views/download/hgl.html.erb +0 -27
  541. data/app/views/relation/_relations.html.erb +0 -15
  542. data/app/views/shared/_header_navbar.html.erb +0 -46
  543. data/babel.config.json +0 -4
  544. data/jest.config.js +0 -25
  545. data/lib/generators/geoblacklight/templates/assets/_blacklight.scss +0 -1
  546. data/lib/generators/geoblacklight/templates/assets/_geoblacklight.scss +0 -1
  547. data/lib/generators/geoblacklight/templates/assets/geoblacklight.js +0 -9
  548. data/lib/generators/geoblacklight/templates/clover.js +0 -5
  549. data/lib/generators/geoblacklight/templates/ol.js +0 -6
  550. data/lib/generators/geoblacklight/templates/package-test.json +0 -10
  551. data/lib/generators/geoblacklight/templates/settings.gbl_v1.yml +0 -195
  552. data/lib/geoblacklight/deprecated_configuration.rb +0 -519
  553. data/lib/geoblacklight/download/hgl_download.rb +0 -25
  554. data/lib/geoblacklight/view_helper_override.rb +0 -27
  555. data/setupJest.js +0 -14
  556. data/spec/helpers/arcgis_helper_spec.rb +0 -16
  557. data/spec/helpers/carto_helper_spec.rb +0 -13
  558. data/spec/helpers/geoblacklight/geoblacklight_helper_behavior_spec.rb +0 -27
  559. data/spec/javascripts/util_spec.js +0 -10
  560. data/spec/lib/geoblacklight/deprecated_configuration_spec.rb +0 -597
  561. data/spec/lib/geoblacklight/download/hgl_download_spec.rb +0 -62
  562. data/spec/lib/geoblacklight/view_helper_override_spec.rb +0 -30
  563. data/spec/models/concerns/geoblacklight/solr_document/carto_spec.rb +0 -43
  564. data/spec/test_app_templates/Gemfile.extra +0 -2
  565. data/spec/views/catalog/_document_split.html.erb_spec.rb +0 -7
  566. data/spec/views/catalog/_index_split.html.erb_spec.rb +0 -7
  567. data/spec/views/catalog/_results_pagination.html.erb_spec.rb +0 -11
  568. data/spec/views/catalog/_show_downloads.html.erb_spec.rb +0 -43
  569. data/spec/views/catalog/_show_tools.html.erb_spec.rb +0 -38
  570. data/vendor/assets/images/fullscreen.png +0 -0
  571. data/vendor/assets/images/fullscreen@2x.png +0 -0
  572. data/vendor/assets/images/layers-2x.png +0 -0
  573. data/vendor/assets/images/layers.png +0 -0
  574. data/vendor/assets/images/marker-icon-2x.png +0 -0
  575. data/vendor/assets/images/marker-icon.png +0 -0
  576. data/vendor/assets/images/marker-shadow.png +0 -0
  577. data/vendor/assets/javascripts/Leaflet.fullscreen.js +0 -152
  578. data/vendor/assets/javascripts/esri-leaflet.js +0 -12
  579. data/vendor/assets/javascripts/esri-leaflet.js.map +0 -1
  580. data/vendor/assets/javascripts/leaflet-iiif.js +0 -323
  581. data/vendor/assets/javascripts/leaflet-src.js.erb +0 -14126
  582. data/vendor/assets/javascripts/leaflet-src.js.map +0 -1
  583. data/vendor/assets/javascripts/native.history.js +0 -1
  584. data/vendor/assets/stylesheets/leaflet.css +0 -640
  585. data/vendor/assets/stylesheets/leaflet.fullscreen.css +0 -40
  586. /data/app/{views/catalog/_show_default_viewer_information.html.erb → components/geoblacklight/index_map_inspect_component.html.erb} +0 -0
@@ -0,0 +1,102 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::DownloadLinksComponent, type: :component do
6
+ subject(:rendered) do
7
+ render_inline_to_capybara_node(component)
8
+ end
9
+ let(:downloadable) { true }
10
+ let(:document) { instance_double(SolrDocument, id: 123, downloadable?: downloadable) }
11
+ let(:component) { described_class.new(document: document) }
12
+
13
+ before do
14
+ allow_any_instance_of(GeoblacklightHelper).to receive(:document_available?).and_return(true)
15
+ end
16
+
17
+ context "when rendering is required" do
18
+ before do
19
+ allow(document).to receive(:direct_download).and_return(test: :test)
20
+ allow(document).to receive(:iiif_download).and_return({})
21
+ allow(document).to receive(:download_types).and_return(shapefile: {})
22
+ end
23
+
24
+ it "shows download link" do
25
+ expect(rendered).to have_text("Download")
26
+ expect(rendered).to have_text("Export Shapefile")
27
+ end
28
+ end
29
+
30
+ context "when rendering is not required" do
31
+ context "because there are no download links" do
32
+ before do
33
+ allow(document).to receive(:direct_download).and_return({})
34
+ allow(document).to receive(:iiif_download).and_return({})
35
+ allow(document).to receive(:download_types).and_return({})
36
+ end
37
+
38
+ it "does not render anything" do
39
+ expect(rendered).not_to have_text("Download")
40
+ expect(rendered).not_to have_text("Export Shapefile")
41
+ end
42
+ end
43
+
44
+ context "because you aren't allowed" do
45
+ let(:downloadable) { false }
46
+
47
+ it "does not render anything" do
48
+ expect(rendered).not_to have_text("Download")
49
+ expect(rendered).not_to have_text("Export Shapefile")
50
+ end
51
+ end
52
+ end
53
+
54
+ describe "#download_link_file" do
55
+ let(:label) { "Test Link Text" }
56
+ let(:id) { "test-id" }
57
+ let(:url) { "http://example.com/urn:hul.harvard.edu:HARVARD.SDE2.TG10USAIANNH/data.zip" }
58
+
59
+ it "generates a link to download the original file" do
60
+ expect(component.download_link_file(label, id, url)).to eq '<a contentUrl="http://example.com/urn:hul.harvard.edu:HARVARD.SDE2.TG10USAIANNH/data.zip" data-download="trigger" data-download-type="direct" data-download-id="test-id" href="http://example.com/urn:hul.harvard.edu:HARVARD.SDE2.TG10USAIANNH/data.zip">Test Link Text</a>'
61
+ end
62
+ end
63
+
64
+ describe "#download_link_iiif" do
65
+ let(:references_field) { Settings.FIELDS.REFERENCES }
66
+ let(:document_attributes) do
67
+ {
68
+ references_field => {
69
+ "http://iiif.io/api/image" => "https://example.edu/image/info.json"
70
+ }.to_json
71
+ }
72
+ end
73
+ let(:document) { SolrDocument.new(document_attributes, downloadable?: downloadable) }
74
+
75
+ before do
76
+ allow(component).to receive(:download_text).and_return("Original JPG")
77
+ allow_any_instance_of(Geoblacklight::Reference).to receive(:to_hash).and_return(iiif: "https://example.edu/image/info.json")
78
+ end
79
+
80
+ it "generates a link to download the JPG file from the IIIF server" do
81
+ expect(component.download_link_iiif).to eq '<a contentUrl="https://example.edu/image/full/full/0/default.jpg" data-download="trigger" href="https://example.edu/image/full/full/0/default.jpg">Original JPG</a>'
82
+ end
83
+ end
84
+
85
+ describe "#download_link_generated" do
86
+ let(:download_type) { "SHAPEFILE" }
87
+
88
+ before do
89
+ allow(component).to receive(:download_path).and_return("/download/test-id?type=SHAPEFILE")
90
+ allow(component).to receive(:export_format_label).and_return("Shapefile Export Customization")
91
+ allow(document).to receive(:id).and_return("test-id")
92
+ allow(document).to receive(:to_s).and_return("test-id")
93
+ end
94
+
95
+ it "generates a link to download the JPG file from the IIIF server" do
96
+ # Stub I18n to ensure the link can be customized via `export_` labels.
97
+ allow(component).to receive(:t).with("geoblacklight.download.export_shapefile_link").and_return("Shapefile Export Customization")
98
+ allow(component).to receive(:t).with("geoblacklight.download.export_link", {download_format: "Shapefile Export Customization"}).and_return("Export Shapefile Export Customization")
99
+ expect(component.download_link_generated(download_type, document)).to eq '<a data-download-path="/download/test-id?type=SHAPEFILE" data-download="trigger" data-action="downloads#download:once" data-download-type="SHAPEFILE" data-download-id="test-id" href="">Export Shapefile Export Customization</a>'
100
+ end
101
+ end
102
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::HeaderIconsComponent, type: :component do
6
+ subject(:rendered) do
7
+ render_inline_to_capybara_node(described_class.new(document: document))
8
+ end
9
+
10
+ let(:document) { SolrDocument.new(document_attributes) }
11
+ let(:resource_class) { [] }
12
+ let(:resource_type) { [] }
13
+ let(:document_attributes) do
14
+ {
15
+ "gbl_resourceClass_sm" => resource_class,
16
+ "gbl_resourceType_sm" => resource_type,
17
+ "schema_provider_s" => "Stanford",
18
+ "dct_accessRights_s" => "Public"
19
+ }
20
+ end
21
+
22
+ it "renders the provider icon" do
23
+ expect(rendered).to have_css(".blacklight-icons-stanford")
24
+ end
25
+
26
+ it "renders the access rights icon" do
27
+ expect(rendered).to have_css(".blacklight-icons-public")
28
+ end
29
+
30
+ context "when there are no resource types with icons" do
31
+ let(:resource_class) { ["Datasets"] }
32
+ let(:resource_type) { ["Census data", "Statistical maps"] }
33
+
34
+ it "renders the resource class icon" do
35
+ expect(rendered).to have_css(".blacklight-icons-datasets")
36
+ end
37
+ end
38
+
39
+ context "when there is a 'data' resource type with an icon" do
40
+ let(:resource_class) { ["Datasets"] }
41
+ let(:resource_type) { ["Raster data"] }
42
+
43
+ it "renders the resource type icon" do
44
+ expect(rendered).to have_css(".blacklight-icons-raster")
45
+ end
46
+ end
47
+
48
+ context "when there are multiple resource types and one has an icon" do
49
+ let(:resource_class) { ["Datasets"] }
50
+ let(:resource_type) { ["Nautical charts", "Raster data"] }
51
+
52
+ it "renders the resource type that has an icon" do
53
+ expect(rendered).to have_css(".blacklight-icons-raster")
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::IiifDragDropComponent, type: :component do
6
+ describe "#iiifdragdropcomponet" do
7
+ let(:reference) { instance_double(Geoblacklight::Reference, endpoint: endpoint) }
8
+ let(:item_viewer) { instance_double(Geoblacklight::ItemViewer, iiif_manifest: reference) }
9
+ let(:document) { instance_double(SolrDocument, id: 123, item_viewer: item_viewer) }
10
+ let(:component) { described_class.new(document: document) }
11
+ let(:rendered) { render_inline_to_capybara_node(component) }
12
+
13
+ context "does not have viewer_endpoint url" do
14
+ let(:endpoint) { nil }
15
+
16
+ it "does not render" do
17
+ expect(component.render?).to be false
18
+ end
19
+ end
20
+
21
+ context "has viewer_endpoint url" do
22
+ let(:endpoint) { "https://url.com/manifest.json" }
23
+ it "renders iiif drag and drop icon" do
24
+ expect(component.render?).to be true
25
+ expect(rendered).to have_selector(:css, ".blacklight-icons-iiif-drag-drop")
26
+ expect(rendered).to have_selector(:css, "a[href='https://url.com/manifest.json?manifest=https://url.com/manifest.json']")
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::IndexMapLegendComponent, type: :component do
6
+ let(:document) { instance_double(SolrDocument) }
7
+
8
+ subject(:rendered) do
9
+ render_inline_to_capybara_node(described_class.new(document:))
10
+ end
11
+
12
+ context "when the document has an index map" do
13
+ before do
14
+ allow(document).to receive_message_chain(:item_viewer, :index_map).and_return(true)
15
+ end
16
+
17
+ it "shows available map text" do
18
+ expect(rendered).to have_text("Green tile indicates")
19
+ expect(rendered).to have_selector(:css, ".index-map-legend-default")
20
+ end
21
+
22
+ it "shows unavailable map text" do
23
+ expect(rendered).to have_text("Yellow tile indicates")
24
+ expect(rendered).to have_selector(:css, ".index-map-legend-unavailable")
25
+ end
26
+
27
+ it "shows selected map text" do
28
+ expect(rendered).to have_text("Blue tile indicates")
29
+ expect(rendered).to have_selector(:css, ".index-map-legend-selected")
30
+ end
31
+ end
32
+
33
+ context "when the document does not have an index map" do
34
+ before do
35
+ allow(document).to receive_message_chain(:item_viewer, :index_map).and_return(false)
36
+ end
37
+
38
+ it "does not render" do
39
+ expect(rendered.text.strip).to be_empty
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::ItemMapViewerComponent, type: :component do
6
+ subject(:rendered) do
7
+ render_inline_to_capybara_node(described_class.new(document:))
8
+ end
9
+
10
+ context "IIIF viewer" do
11
+ let(:fixture) { JSON.parse(read_fixture("solr_documents/iiif-eastern-hemisphere.json")) }
12
+ let(:document) { SolrDocument.new(fixture) }
13
+
14
+ it "uses the IIIF tag" do
15
+ expect(rendered).to have_css("div#clover-viewer")
16
+ end
17
+ end
18
+
19
+ context "Open layers viewer" do
20
+ let(:fixture) { JSON.parse(read_fixture("solr_documents/public_pmtiles_princeton.json")) }
21
+ let(:document) { SolrDocument.new(fixture) }
22
+
23
+ it "uses the open layers tag" do
24
+ expect(rendered).to have_css("div#openlayers-viewer")
25
+ end
26
+ end
27
+
28
+ context "Base or leaflet viewer" do
29
+ let(:fixture) { JSON.parse(read_fixture("solr_documents/actual-polygon1.json")) }
30
+ let(:document) { SolrDocument.new(fixture) }
31
+
32
+ it "uses the IIIF tag" do
33
+ expect(rendered).to have_css("div#leaflet-viewer")
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::LoginLinkComponent, type: :component do
6
+ subject(:rendered) do
7
+ render_inline_to_capybara_node(described_class.new(document: document))
8
+ end
9
+ let(:document) { instance_double(SolrDocument, id: 123) }
10
+
11
+ context "when rendering is required" do
12
+ before do
13
+ allow_any_instance_of(GeoblacklightHelper).to receive(:document_available?).and_return(false)
14
+ allow(document).to receive(:restricted?).and_return(true)
15
+ allow(document).to receive(:same_institution?).and_return(true)
16
+ end
17
+
18
+ it "shows download link" do
19
+ expect(rendered).to have_text(I18n.t("geoblacklight.tools.login_to_view"))
20
+ end
21
+ end
22
+
23
+ context "when rendering is not required" do
24
+ before do
25
+ allow(document).to receive(:restricted?).and_return(false)
26
+ allow(document).to receive(:same_institution?).and_return(false)
27
+ end
28
+
29
+ it "does not render anything" do
30
+ expect(rendered).not_to have_text(I18n.t("geoblacklight.tools.login_to_view"))
31
+ end
32
+ end
33
+ end
@@ -2,10 +2,8 @@
2
2
 
3
3
  require "spec_helper"
4
4
 
5
- describe Geoblacklight::DocumentPresenter do
6
- # Please see https://github.com/projectblacklight/blacklight/blob/v6.15.0/spec/presenters/index_presenter_spec.rb#L4
7
- subject { presenter }
8
- let(:request_context) { double(document_index_view_type: "list") }
5
+ RSpec.describe Geoblacklight::SearchResultComponent, type: :component do
6
+ let(:request_context) { double(document_index_view_type: "list", action_name: :index) }
9
7
  let(:blacklight_config) do
10
8
  Blacklight::Configuration.new.configure do |config|
11
9
  config.add_index_field "gbl_wxsIdentifier_s"
@@ -16,7 +14,7 @@ describe Geoblacklight::DocumentPresenter do
16
14
  end
17
15
  let(:solr_fields) { Settings.FIELDS }
18
16
  let(:presenter) do
19
- described_class.new(document, request_context, blacklight_config)
17
+ Blacklight::DocumentPresenter.new(document, request_context, blacklight_config)
20
18
  end
21
19
 
22
20
  let(:document) do
@@ -28,35 +26,45 @@ describe Geoblacklight::DocumentPresenter do
28
26
  multi_display: %w[blue blah]
29
27
  )
30
28
  end
29
+ subject(:rendered) do
30
+ render_inline_to_capybara_node(described_class.new(document: presenter))
31
+ end
32
+
33
+ before do
34
+ allow(request_context).to receive(:snippit)
35
+ allow_any_instance_of(BlacklightHelper).to receive(:link_to_document)
36
+ allow_any_instance_of(GeoblacklightHelper).to receive(:blacklight_config).and_return(blacklight_config)
37
+ end
31
38
 
32
39
  describe "#index_fields_display" do
33
- let(:rendered_index_text) { subject.index_fields_display }
34
40
  let(:multi_valued_text) { document["multi_display"].join(" and ") }
35
41
  let(:combined_fields) { document["gbl_wxsIdentifier_s"] + ". " + document["period"] }
36
42
 
43
+ subject(:index_fields_display) { rendered.find("[itemprop=description]").text }
44
+
37
45
  context "with multi-valued field" do
38
46
  it "each value is separated by comma" do
39
- expect(rendered_index_text).to include(multi_valued_text)
47
+ expect(index_fields_display).to include(multi_valued_text)
40
48
  end
41
49
  end
42
50
  context "with document fields not configured as index field" do
43
51
  it "does not render" do
44
- expect(rendered_index_text).not_to include(document["non_index_field"])
52
+ expect(index_fields_display).not_to include(document["non_index_field"])
45
53
  end
46
54
  end
47
55
  context "with multiple document index fields present" do
48
56
  it "separates fields by period followed by a space" do
49
- expect(rendered_index_text).to include(combined_fields)
57
+ expect(index_fields_display).to include(combined_fields)
50
58
  end
51
59
  context "with index field ending in period" do
52
60
  it "renders only 1 period" do
53
- expect(rendered_index_text).to include(document["period"] + " ")
61
+ expect(index_fields_display).to include(document["period"] + " ")
54
62
  end
55
63
  end
56
64
  end
57
65
  context "with document empty configured index field" do
58
66
  it "does not render a period followed by a space" do
59
- expect(rendered_index_text).not_to include(". .")
67
+ expect(index_fields_display).not_to include(". .")
60
68
  end
61
69
  end
62
70
  end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::StaticMapComponent, type: :component do
6
+ let(:document) { SolrDocument.new(id: 1) }
7
+
8
+ subject(:rendered) do
9
+ render_inline(described_class.new(document: document))
10
+ end
11
+
12
+ before do
13
+ allow(document).to receive(:viewer_protocol).and_return("map")
14
+ allow(Settings).to receive(:SIDEBAR_STATIC_MAP).and_return(["map"])
15
+ end
16
+
17
+ context "when the protocol matches the SIDEBAR_STATIC_MAP setting" do
18
+ it "renders the static map" do
19
+ expect(rendered.css("#static-map")).to be_present
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::ViewerHelpTextComponent, type: :component do
6
+ let(:feature) { "viewer_protocol" }
7
+ let(:key) { "wms" }
8
+
9
+ subject(:rendered) do
10
+ render_inline_to_capybara_node(described_class.new(feature, key))
11
+ end
12
+
13
+ context "when the help text exists for an existing viewer protocol" do
14
+ it "shows correct help text title for wms" do
15
+ expect(rendered).to have_text(I18n.t("geoblacklight.help_text.viewer_protocol.wms.title"))
16
+ end
17
+ end
18
+
19
+ context "when the help text is missing for a viewer protocol that exists" do
20
+ before do
21
+ allow(I18n).to receive(:exists?).and_return(false)
22
+ end
23
+
24
+ it "shows missing help text class" do
25
+ expect(render_inline_to_capybara_node(described_class.new(feature, key))).to have_css(".translation-missing")
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ RSpec.describe Geoblacklight::WebServicesComponent, type: :component do
6
+ let(:document) { instance_double(SolrDocument, id: 123, wxs_identifier: "wxs_identifier") }
7
+ let(:ref) { instance_double(Geoblacklight::Reference, type: type, endpoint: "endpoint") }
8
+ let(:component) { described_class.new(document: document, ref: ref) }
9
+ subject(:rendered) do
10
+ render_inline_to_capybara_node(component)
11
+ end
12
+
13
+ context "when wms is rendered" do
14
+ let(:type) { "wms" }
15
+ it "shows the web mapping service and layers" do
16
+ expect(rendered).to have_text("Web Mapping Service (WMS)")
17
+ expect(rendered).to have_text("WMS layers")
18
+ expect(rendered).to have_css(".web-services-form")
19
+ end
20
+ end
21
+
22
+ context "when wfs is rendered" do
23
+ let(:type) { "wfs" }
24
+ it "shows the web mapping service and typeNames" do
25
+ expect(rendered).to have_text("Web Feature Service (WFS)")
26
+ expect(rendered).to have_text("WFS typeNames")
27
+ expect(rendered).to have_css(".web-services-form")
28
+ end
29
+ end
30
+
31
+ context "when iiif is rendered" do
32
+ let(:type) { "iiif" }
33
+ it "shows the service" do
34
+ expect(rendered).to have_text("International Image Interoperability Framework (IIIF)")
35
+ expect(rendered).to have_css(".web-services-form")
36
+ end
37
+ end
38
+
39
+ context "when non service is passed" do
40
+ let(:type) { "iiif2" }
41
+ it "shows nothing" do
42
+ expect(component.render?).to be false
43
+ end
44
+ end
45
+ end
@@ -76,46 +76,23 @@ describe DownloadController, type: :controller do
76
76
  expect(response.body).to include "Your file file.tiff is ready for download"
77
77
  end
78
78
  end
79
- end
80
-
81
- describe "#hgl" do
82
- let(:hgl_download) { instance_double(Geoblacklight::HglDownload) }
83
-
84
- it "requests file" do
85
- allow(hgl_download).to receive(:get).and_return("success")
86
- allow(Geoblacklight::HglDownload).to receive(:new).and_return(hgl_download)
87
-
88
- get :hgl, params: {id: "harvard-g7064-s2-1834-k3", email: "foo@example.com"}
89
- expect(response).to have_http_status :ok
90
- end
91
-
92
- it "renders form" do
93
- allow(Geoblacklight::HglDownload).to receive(:new).and_return(hgl_download)
94
-
95
- get :hgl, params: {id: "harvard-g7064-s2-1834-k3"}
96
- expect(response).to render_template("hgl")
97
- end
98
79
 
99
- context "when an error occurs while downloading a file" do
100
- let(:exception) { Geoblacklight::Exceptions::ExternalDownloadFailed.new(url: nil) }
101
-
102
- it "uses the default error message when the exception does not have a URL" do
103
- allow(Geoblacklight::HglDownload).to receive(:new).and_raise(exception)
80
+ context "when requesting CSV files" do
81
+ let(:id) { "tufts-cambridgegrid100-04" }
82
+ let(:type) { "csv" }
83
+ let(:csv_download) { instance_double(Geoblacklight::CsvDownload) }
104
84
 
105
- get :hgl, params: {id: "harvard-g7064-s2-1834-k3", email: "foo@example.com"}
106
- expect(response.body).to include("danger")
107
- expect(response.body).to include("Sorry, the requested file could not be downloaded")
85
+ before do
86
+ allow(csv_download).to receive(:get).and_return("file.csv")
87
+ allow(Geoblacklight::CsvDownload).to receive(:new).and_return(csv_download)
108
88
  end
109
- end
110
89
 
111
- context "when downloading the requested file fails" do
112
- it "flashes the error message" do
113
- allow(hgl_download).to receive(:get).and_return(nil)
114
- allow(Geoblacklight::HglDownload).to receive(:new).and_return(hgl_download)
90
+ it "downloads the files and notifies the user" do
91
+ expect(Geoblacklight::CsvDownload).to receive(:new)
92
+ get :show, params: {id: id, type: type}
115
93
 
116
- get :hgl, params: {id: "harvard-g7064-s2-1834-k3", email: "foo@example.com"}
117
- expect(response.body).to include("danger")
118
- expect(response.body).to include("Sorry, the requested file could not be downloaded")
94
+ expect(response.body).to include "success"
95
+ expect(response.body).to include "Your file file.csv is ready for download"
119
96
  end
120
97
  end
121
98
  end
@@ -0,0 +1,66 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "axe-rspec"
4
+ require "spec_helper"
5
+
6
+ feature "Accessibility testing", js: true do
7
+ context "logged out tests" do
8
+ it "validates the home page" do
9
+ visit root_path
10
+ expect(page).to be_accessible
11
+ end
12
+
13
+ it "validates an item page" do
14
+ visit solr_document_path("tufts-cambridgegrid100-04")
15
+ expect(page).to be_accessible
16
+ end
17
+
18
+ it "validates an item page with relationships" do
19
+ visit solr_document_path("nyu_2451_34502")
20
+ sleep 5 # wait for relationships to be fully visible / faded in
21
+ expect(page).to be_accessible
22
+ end
23
+
24
+ it "validates an bookmarks page" do
25
+ visit solr_document_path("tufts-cambridgegrid100-04")
26
+ find(".checkbox.toggle-bookmark").click
27
+ visit bookmarks_path
28
+ expect(page).to be_accessible
29
+ end
30
+
31
+ it "validates the history page" do
32
+ visit "/search_history"
33
+ expect(page).to be_accessible
34
+ visit search_catalog_path({q: "index"})
35
+ visit "/search_history"
36
+ expect(page).to be_accessible
37
+ end
38
+ end
39
+
40
+ context "logged in tests" do
41
+ before do
42
+ sign_in
43
+ end
44
+
45
+ it "validates the home page" do
46
+ visit root_path
47
+ expect(page).to be_accessible
48
+ end
49
+
50
+ it "validates an item page" do
51
+ visit solr_document_path("princeton-02870w62c")
52
+ expect(page).to be_accessible
53
+ end
54
+
55
+ it "validates an bookmarks page" do
56
+ visit solr_document_path("nyu_2451_34502")
57
+ find(".checkbox.toggle-bookmark").click
58
+ visit "/bookmarks"
59
+ expect(page).to be_accessible
60
+ end
61
+ end
62
+
63
+ def be_accessible
64
+ be_axe_clean.excluding("#clover-viewer")
65
+ end
66
+ end
@@ -4,7 +4,7 @@ require "spec_helper"
4
4
 
5
5
  feature "Blacklight Bookmarks" do
6
6
  scenario "index has created bookmarks" do
7
- visit solr_document_path "nyu-2451-34564"
7
+ visit solr_document_path "harvard-g7064-s2-1834-k3"
8
8
  click_button "Bookmark"
9
9
  visit bookmarks_path
10
10
  expect(page).to have_css ".document", count: 1
@@ -3,10 +3,14 @@
3
3
  require "spec_helper"
4
4
 
5
5
  feature "Blacklight Citation" do
6
- scenario "index has created citations" do
7
- sign_in
6
+ scenario "citations can be copied", js: true do
7
+ sign_in # NOTE: this seems to be required for clipboard permissions to be granted succesfully
8
+ page.driver.browser.add_permission("clipboard-read", "granted")
9
+ page.driver.browser.add_permission("clipboard-write", "granted")
8
10
  visit "/catalog/princeton-1r66j405w"
9
11
  click_link "Cite"
10
- expect(page).to have_text "Copy Citation"
12
+ click_button "Copy Citation"
13
+ clip_text = page.evaluate_async_script("navigator.clipboard.readText().then(arguments[0])")
14
+ expect(clip_text).to include("Sanborn Map Company. Princeton, Mercer County, New Jersey.")
11
15
  end
12
16
  end